diff --git a/1541 ROM b/1541 ROM deleted file mode 100644 index c3c6a31..0000000 Binary files a/1541 ROM and /dev/null differ diff --git a/Basic ROM b/Basic ROM deleted file mode 100644 index 9e06923..0000000 Binary files a/Basic ROM and /dev/null differ diff --git a/CHANGES b/CHANGES index 8dd8dd7..02380b9 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,16 @@ +Changes from V4.1b to V4.2: + - Changed license to GPL + - "plain" Frodo removed, "Frodo PC" renamed to "Frodo" + - ROMs are built into the Frodo executable + - implemented write access to disk image files (D64/X64) + - Voice 3 mute works + - Unix: removed obsolete Linux joystick code, added SDL joystick support + - Unix: added fullscreen display with SDL + - Linux: added support for Catweasel SID + - Linux: more accurate timing + - BeOS: added support for digital joysticks connected to the GeekPort + - BeOS: updated to new Media Kit API + Changes from V4.1a to V4.1b: - Unix: Updated Tcl/Tk preferences editor [Gerard Decatrel] - Unix: Added SDL display driver which is the default if SDL >= 1.2 is diff --git a/CHANGES.WII b/CHANGES.WII deleted file mode 100644 index 69a0ba0..0000000 --- a/CHANGES.WII +++ /dev/null @@ -1,64 +0,0 @@ -version 4: - - -- Simon Kagstrom , Sun Jan 11 19:46:01 CET 2009 - -version 3: - * Various cleanup of the code - - * Fixed a bug in the menu code which was triggered when there - is more than one submenu - - * Make speed configurable (basically fast/normal/slow) and - change the menus a bit - - * Skip SDL_Delay and SDL_GetTicks() which seem to give strange - results. Use gettime and usleep instead. - - * Improve performance a bit more by doing a custom - blit-to-double-size implementation - - * Fixed changelog format - - * Bought a Classic controller and fixed so that it actually works... - - * Allow controlling the joystick via the keyboard for the host (basically - to ease debugging) - - -- Simon Kagstrom , Sun Jan 11 19:46:01 CET 2009 - -version 2: - * Also support the .prg and p00, s00 formats. Only .prg has been tested. - - * Added support for classic controllers. NOTE: This is untested since I don't - have a classic controller! - - * Fixed some corner-cases in the prefs setting to avoid loosing key bindings etc - - * Improve keyboard bindings to handle press and release correctly and also - both controllers at the same time (key is released when the last controller releases - it) - - * Handle keycode 0 and therefore make del work - - * Remove the 1-1 graphics option and make stretched the default. Should avoid - "helpful and constructive" messages such as - http://wiinewz.com/forums/nintendo-news/91829-frodo-v1-0-a.html#post580580 - - * Improved speed just a bit (by enabling compiler optimization!) - - * Only save prefs on exit - - * Pause sound in the menu - - * Handle very long filenames better (thanks Corey89 for pointing this out) - - * Corrected file sorting - - * Better Makefile - - * More keycodes added (C= etc) - - -- Simon Kagstrom , Sat Jan 10 17:26:32 CET 2009 - -version 1: - * Initial release diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..60549be --- /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/Char ROM b/Char ROM deleted file mode 100644 index 191ac46..0000000 Binary files a/Char ROM and /dev/null differ diff --git a/Docs/author.html b/Docs/author.html deleted file mode 100644 index bec4cd3..0000000 --- a/Docs/author.html +++ /dev/null @@ -1,37 +0,0 @@ - - -The author - - - -

How to reach me:

-

Snail mail:

-
-Christian Bauer
-Max-Planck-Str.60
-55124 Mainz
-Germany

-

EMail:

-
-cbauer@iphcip1.physik.uni-mainz.de
-

- -Questions, criticism, suggestions and bug -reports are always welcome. EMail is preferred. In fact, the probability -that physical mail to me will be answered is virtually zero (call me lazy -:-).

- -Questions about the Unix version should go to Bernd Schmidt -(esp. Linux) and Lutz Vieweg (esp. HP-UX).

- -Questions about the Mac version should go to Richard Bannister.

- -Questions about the Win32 version should go to J. Richard Sladkey.

- -Questions about the Acorn version should go to Andreas Dehmel.

- -Frodo is not a shareware program, but I won't reject any gifts. -:-)

- - - diff --git a/Docs/bugreports.html b/Docs/bugreports.html deleted file mode 100644 index 428bdbf..0000000 --- a/Docs/bugreports.html +++ /dev/null @@ -1,52 +0,0 @@ - - -Bug reports - - - -

Bug reports

- -
- -If you find a bug or a misfeature in Frodo, or have an idea how to make -some things better, then please drop me a note so I'll be able to improve -Frodo in the future. However, I'm not interested in reports about programs -that "don't work" unless you have tested them with both Frodo SC and a -real C64. My address can be found here. -Questions about the Unix version should go to -Bernd Schmidt (esp. Linux) and -Lutz Vieweg (esp. HP-UX). -Questions about the Mac version should go to -Richard Bannister. -Questions about the Win32 version should go to -J. Richard Sladkey. -Questions about the Acorn version should go to -Andreas Dehmel.

- -I don't think the emulation can be made much faster without changing the -concept but I'd be happy to find someone showing me how to do it.

- -Known bugs of the BeOS version:

- -

    -
  • Ctrl-C in SAM doesn't work (probably a bug in the signal handling of BeOS) -
  • The "SAM" menu option should be disabled if Frodo was started from the Tracker, but there is no way I know of to determine whether the program was launched from the Shell or the Tracker -
  • Frodo SC doesn't work very well in full-screen mode -
  • Double scan in full-screen mode doesn't work -
- -Known bugs of the Unix version:

- -

    -
  • Only supports german and US keyboards -
  • Can only use 256 color visuals -
- -Known bugs of the AmigaOS version:

- -

    -
  • Many :-) -
- - - diff --git a/Docs/contact.html b/Docs/contact.html new file mode 100644 index 0000000..0bfdcfe --- /dev/null +++ b/Docs/contact.html @@ -0,0 +1,123 @@ + + +Contact info + + + +

Contact info

+ + +"The Silmaril as lantern light
+And banner bright with living flame
+To gleam thereon by Elbereth
+Herself was set, who thither came." +
+ +
+ +

Authors

+ +Frodo is the combined effort of many people: + +

Main program and project administration

+ +
+Christian Bauer
+Christian.Bauer@uni-mainz.de +
+ +

Initial Unix port

+ +
+Bernd Schmidt
+bernds@btinternet.com

+Lutz Vieweg
+lkv@isg.de +
+ +

Tcl/Tk interface

+ +
+Lutz Vieweg
+lkv@isg.de

+Gerard Decatrel
+deca39720@hotmail.com +
+ +

Mac OS port

+ +
+Richard Bannister
+titan@indigo.ie

+Ernesto Corvi
+macsupport@overnet.com.ar

+Andreas Varga
+e9426444@student.tuwien.ac.at +
+ +

Windows port

+ +
+J. Richard Sladkey
+jrs@foliage.com +
+ +

Risc OS port

+ +
+Andreas Dehmel
+zarquon@t-online.de +
+ +

Frodo logo design

+ +
+Tinic Urou
+tinic@users.sourceforge.net +
+ +

Additional contributions by

+ +
+Marc Chabanas
+Marc.Chabanas@france.sun.com

+Jake Hamby
+jehamby@anobject.com

+Erik Lindberg
+d96shade@dtek.chalmers.se

+Wolfgang Lorenz

+Tinic Urou
+tinic@users.sourceforge.net

+
+ +
+ +

Acknowledgements

+ +Special thanks go to + + + +
+ +

Bug reports

+ +Bug reports and general suggestions are welcome. But be warned that I'm +too lazy to handle most support requests. Questions that are specific to +running Frodo on platforms other than BeOS and Unix should be directed to +one of the maintainers of the respective port, see the list above. Send all +other stuff to: + +
+Christian.Bauer@uni-mainz.de +
+ +But please don't attach binaries of C64 programs that don't work unless I +ask you to. Thanks. + + + diff --git a/Docs/emulwindow.html b/Docs/emulwindow.html index 021aa6c..af03f62 100644 --- a/Docs/emulwindow.html +++ b/Docs/emulwindow.html @@ -27,7 +27,7 @@ the speed of a real C64 the emulation achieves.

The four items labeled "Drive 8" to "Drive 11" are the disk activity indicators of the 1541 emulation.

-Under RISC OS Frodo can be controlled via Menus and the emulator pane. Some notes on +Under RISC OS Frodo can be controlled via Menus and the emulator pane. Some notes on the pane entries:

    diff --git a/Docs/flavours.html b/Docs/flavours.html index 177aa96..3fc43b4 100644 --- a/Docs/flavours.html +++ b/Docs/flavours.html @@ -1,14 +1,14 @@ -Frodo, Frodo PC and Frodo SC +Frodo and Frodo SC -

    Frodo, Frodo PC and Frodo SC

    +

    Frodo and Frodo SC


    -Frodo comes in three 'flavours' that allow you to decide between speed +Frodo comes in two 'flavours' that allow you to decide between speed and accuracy of the emulation.

    The line-based emulation 'Frodo'

    @@ -18,28 +18,11 @@ in parallel during one video line in the real C64 are emulated one after the other for the different chips. This offers a reasonable degree of precision of the emulation at a decent speed. There are some things that cannot be emulated with this technique, but it works fine with about -80% of all C64 programs and it is also the fastest of the three Frodo +80% of all C64 programs and it is also the faster of the two Frodo versions.
    -

    The improved line-based emulation 'Frodo PC'

    - -Frodo PC is also a line-based emulation but it has some improvements -over the standard Frodo: - -
      -
    • Code in chip registers can be executed -
    • Correct calculation of 6510 instruction cycles -
    • More precise CIA emulation -
    - -Programs that don't work on the standard Frodo or that produce an -"Illegal jump to I/O space" message might work with Frodo PC. However, -Frodo PC is a bit slower. - -
    -

    The single-cycle emulation 'Frodo SC'

    Frodo SC is a special version of Frodo that doesn't work with a @@ -48,8 +31,7 @@ the emulator switches between 6510 and VIC in every emulated phase. By doing this, Frodo SC achieves an extreme precision (nearly all $d011 and $d016 effects can be emulated), but at the expense of speed. -In the settings options, Frodo SC differs from Frodo/Frodo PC in only -a few points: +In the settings options, Frodo SC differs from Frodo in only a few points:
    • The "Cycles per line" settings are not available as the timing of Frodo SC is hardcoded diff --git a/Docs/future.html b/Docs/future.html index 8e0b21b..7bb385d 100644 --- a/Docs/future.html +++ b/Docs/future.html @@ -12,14 +12,12 @@
      -These are some of the things planned for future versions:

      - -

        -
      • Usage of printers and modems (rather unlikely, as Frodo has not been written to run PrintShop on it :-) -
      • A C128 and a GEOS mode -
      • A fast, frame-based emulation mode -
      • Port to more systems (NeXTStep/Rhapsody, Atari ST/TT/Falcon, Amiga PPC, PSX, N64) -
      +Frodo has not been updated for quite a while because I've been working on +other projects (GiNaC, Basilisk II, ...). However, I'm currently doing a +complete rewrite of the code for Frodo V5. It will use an event-based +emulation like UAE or VICE because the current line-based model has already +been stretched beyond its feasibility. Also, the fantastic SDL will be used +as the low-level graphics/sound/input library. diff --git a/Docs/history.html b/Docs/history.html index 0b98185..78c0a35 100644 --- a/Docs/history.html +++ b/Docs/history.html @@ -220,5 +220,23 @@ emulation and built-in SID emulation
    • BeOS: Prefs saved in /system/settings/Frodo_settings by default
    +

    V4.1a

    +
      +
    • Fixed bug in IEC::NewPrefs() +
    • Optimized VIC emulation for speed +
    • BeOS: Prefs saved in /boot/home/config/settings/Frodo_settings +
    • BeOS: Directory panel works again +
    • BeOS: Correct C64/1541 clock frequency ratio (Frodo SC) +
    • BeOS: Correct audio mixing/clipping +
    + +

    V4.1b

    +
      +
    • Unix: Updated Tcl/Tk preferences editor [Gerard Decatrel] +
    • Unix: Added SDL display driver which is the default if SDL >= 1.2 is detected by the configure script +
    • Unix: Increased number of sound buffers from 4 to 16 (emu10k driver doesn't work with the smaller value) +
    • Unix: Fixed some small compilation problems +
    + diff --git a/Docs/Main.html b/Docs/index.html similarity index 62% rename from Docs/Main.html rename to Docs/index.html index 6898cb7..21b681d 100644 --- a/Docs/Main.html +++ b/Docs/index.html @@ -4,10 +4,20 @@ -

    Frodo V4.1

    -What's new in V4.1? -

    The free, portable Commodore 64 emulator for BeOS/Unix/MacOS/AmigaOS/RiscOS/Win32

    -© Copyright 1994-1997,2002 Christian Bauer et al. Freely distributable. +

    Frodo V4.2

    +What's new in V4.2? +

    The free, portable Commodore 64 emulator

    + +Copyright © 1994-2005 Christian Bauer +

    +Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. +

    +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one.


    @@ -36,12 +46,10 @@
diff --git a/Docs/legalmush.html b/Docs/legalmush.html index f22be81..384b770 100644 --- a/Docs/legalmush.html +++ b/Docs/legalmush.html @@ -1,37 +1,29 @@ -Copyright and distribution +Copyright and license -

Copyright and distribution

+

Copyright and license


-The program "Frodo", this manual and the source code may be freely -distributed as long as they remain unchanged (archiving and packing is -allowed) and all files are included. You must not make any profit by -selling Frodo, especially the price of a disk containing Frodo may not -exceed US$ 5,- (or equivalent amounts in other currencies). Please feel -free to distribute Frodo via bulletin board systems and networks and as -part of shareware/freeware CD-ROMs.

- -Anyone using this program agrees to incur the risk of using it for himself. -In no way can the author be held responsible for any damage directly or -indirectly caused by the use or misuse of this manual and/or the program.

- -The rights on the source code remain at the author. It may not - not even -in parts - used for commercial purposes without explicit written permission -by the author. Permission to use it for non-commercial purposes is hereby -granted als long as my copyright notice remains in the program. You are not -allowed to use the source to create and distribute a modified version of -Frodo.

- -Frodo is not designed, intended, or authorized for use as a component in -systems intended for surgical implant within the body, or other -applications intended to support or sustain life, or for any other -application in which the failure of Frodo could create a situation where -personal injury or death may occur.

+The "Frodo" Commodore 64 emulator is Copyright © 1994-1997,2002-2004 +Christian Bauer +

+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; see the file COPYING. If not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. diff --git a/Docs/overview.html b/Docs/overview.html index a785ac4..f572f68 100644 --- a/Docs/overview.html +++ b/Docs/overview.html @@ -25,10 +25,9 @@ PowerPC/Pentium/68060. But on the other hand, Frodo can display raster effects correctly that only result in a flickering mess with other emulators.

-Frodo comes in three flavours: The "normal" Frodo -with a line-based emulation, the improved line-based emulation "Frodo PC", -and the single-cycle emulation Frodo SC that is slower but far more -compatible.

+Frodo comes in two flavours: The "normal" Frodo +with a line-based emulation and the single-cycle emulation Frodo SC that is slower +but far more compatible.

In addition to a precise 6510/VIC emulation, Frodo features a processor-level 1541 emulation that is even able to handle about 95% of all fast loaders. @@ -38,7 +37,7 @@ images, .t64/LYNX archives, or directories of the host system.

Frodo runs on these systems:

    -
  • BeBox or PowerMac with BeOS Preview Release +
  • BeOS-ready system (PPC or x86) with BeOS R3
  • Unix systems with X11R6 or Linux/SVGAlib (sound only under Linux, HP-UX and Solaris 2.x)
  • 68k or PPC Macintosh with System 7.5
  • Amiga/DraCo with 68040/68060, AmigaOS 3.0 and a graphics card (AHI V3 required for sound) diff --git a/Docs/thanks.html b/Docs/thanks.html deleted file mode 100644 index 1ad2d77..0000000 --- a/Docs/thanks.html +++ /dev/null @@ -1,36 +0,0 @@ - - -Credits - - - -

    Credits

    - - -"The Silmaril as lantern light
    -And banner bright with living flame
    -To gleam thereon by Elbereth
    -Herself was set, who thither came." -
    - -
    - -The following persons deserve special thanks from me as they made a -significant contribution to the development of Frodo:

    - -

    - - - diff --git a/Docs/whatsnew.html b/Docs/whatsnew.html index b560f32..c6dea67 100644 --- a/Docs/whatsnew.html +++ b/Docs/whatsnew.html @@ -4,18 +4,16 @@ -

    What's new in V4.1?

    +

    What's new in V4.2?


    -The most important changes from V4.0 are: +The most important changes from V4.1 are:
      -
    • Ability to save/load the emulator state to/from snapshot files -
    • Ported to Win32 and Acorn RiscOS -
    • Added Frodo PC, an improved line-based emulation -
    • Sound support for Solaris 2.x -
    • Fixed several bugs in the 6510/6526 emulation +
    • Changed license to GPL +
    • Updated Tcl/Tk preferences editor +
    • Added SDL display driver for Unix
    For the tons of other small changes and bug fixes, please look here.

    diff --git a/FreeMono.ttf b/FreeMono.ttf deleted file mode 100644 index 517ea95..0000000 Binary files a/FreeMono.ttf and /dev/null differ diff --git a/Frodo.proj b/Frodo.proj deleted file mode 100644 index bfec55e..0000000 Binary files a/Frodo.proj and /dev/null differ diff --git a/Frodo.spec b/Frodo.spec new file mode 100644 index 0000000..fb44bfe --- /dev/null +++ b/Frodo.spec @@ -0,0 +1,49 @@ +%define name Frodo +%define version 4.2 +%define release 1 + +Summary: Commodore 64 emulator +Name: %{name} +Version: %{version} +Release: %{release} +Copyright: GPL +Group: Applications/Emulators +Source: %{name}-%{version}.tar.gz +URL: http://www.uni-mainz.de/~bauec002/FRMain.html +BuildRoot: %{_tmppath}/%{name}-root +Prefix: %{_prefix} + +%description +Frodo is a free, portable Commodore 64 emulator that runs on a variety +of platforms, with a focus on the exact reproduction of special graphical +effects possible on the C64. + +Frodo comes in two flavours: The "normal" Frodo with a line-based +emulation, and the single-cycle emulation "Frodo SC" that is slower +but far more compatible. + +%prep +%setup -q + +%build +cd Src +CFLAGS=${RPM_OPT_FLAGS} CXXFLAGS=${RPM_OPT_FLAGS} ./configure --prefix=%{_prefix} +make + +%install +rm -rf ${RPM_BUILD_ROOT} +cd Src +make DESTDIR=${RPM_BUILD_ROOT} install + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%doc COPYING CHANGES +%doc Docs/*.html +%{_bindir}/Frodo +%{_bindir}/FrodoSC +%{_bindir}/Frodo_GUI.tcl +"%{_datadir}/frodo/Kernal ROM" +%{_datadir}/frodo/Frodo.glade diff --git a/FrodoPC.proj b/FrodoPC.proj deleted file mode 100644 index 9a099bb..0000000 Binary files a/FrodoPC.proj and /dev/null differ diff --git a/FrodoSC.proj b/FrodoSC.proj deleted file mode 100644 index 465e301..0000000 Binary files a/FrodoSC.proj and /dev/null differ diff --git a/Makefile b/Makefile deleted file mode 100644 index 513a9b0..0000000 --- a/Makefile +++ /dev/null @@ -1,160 +0,0 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/wii_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := frodo -BUILD := build -SOURCES := Src -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -PCFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 -CFLAGS = -O3 -g -Wall $(MACHDEP) $(INCLUDE) -I$(DEVKITPRO)/SDL/include -U__unix -DHAVE_SDL -CXXFLAGS = $(CFLAGS) - -LDFLAGS = -L$(DEVKITPRO)/SDL/lib -g $(MACHDEP) -Wl,-Map,$(notdir $@).map - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lSDL_image -lSDL_ttf -ljpeg -lpng -lz -lSDL -lfreetype -lfat -lwiiuse -lbte -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := char_to_kc.c gcaudio.c -CPPFILES := Display.cpp main.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ - 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp C64.cpp CPUC64.cpp VIC.cpp \ - CIA.cpp CPU1541.cpp menu.cpp -sFILES := -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol Src/sysconfig.h Src/*.o \ - FrodoSC FrodoPC dist - -dist: $(BUILD) - install -d $@/apps/frodo - install -d $@/apps/frodo/images - install -d $@/apps/frodo/saves - install -d $@/apps/frodo/tmp - cp $(TARGET).dol $@/apps/frodo/boot.dol - cp meta.xml $@/apps/frodo/ - cp icon.png $@/apps/frodo/ - cp FreeMono.ttf $@/apps/frodo/ - cp "Kernal ROM" $@/apps/frodo/Kernal_ROM - cp "Char ROM" $@/apps/frodo/Char_ROM - cp "1541 ROM" $@/apps/frodo/1541_ROM - cp "Basic ROM" $@/apps/frodo/Basic_ROM - cp frodorc $@/apps/frodo/ - cd $@ && tar -czf ../frodo-wii-bin.tar.gz * - -#--------------------------------------------------------------------------------- -run: - wiiload $(TARGET).dol - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: sysconfig.h $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - $(bin2o) - -sysconfig.h: sysconfig.h.Wii - cp $< $@ - -Display.cpp: Display_SDL.i - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/Src/1541_ROM.h b/Src/1541_ROM.h new file mode 100644 index 0000000..d55af33 --- /dev/null +++ b/Src/1541_ROM.h @@ -0,0 +1,2057 @@ +/* + * 1541_ROM.h - 1541 ROM + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * C64/1541 ROMs (C) Commodore Business Machines + */ + +static const uint8 builtin_drive_rom[DRIVE_ROM_SIZE] = { + 0x97, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0x78, 0xa9, 0xf7, 0x2d, 0x00, 0x1c, 0x48, 0xa5, + 0x7f, 0xf0, 0x05, 0x68, 0x09, 0x00, 0xd0, 0x03, + 0x68, 0x09, 0x08, 0x8d, 0x00, 0x1c, 0x58, 0x60, + 0x78, 0xa9, 0x08, 0x0d, 0x00, 0x1c, 0x8d, 0x00, + 0x1c, 0x58, 0x60, 0xa9, 0x00, 0x8d, 0x6c, 0x02, + 0x8d, 0x6d, 0x02, 0x60, 0x78, 0x8a, 0x48, 0xa9, + 0x50, 0x8d, 0x6c, 0x02, 0xa2, 0x00, 0xbd, 0xca, + 0xfe, 0x8d, 0x6d, 0x02, 0x0d, 0x00, 0x1c, 0x8d, + 0x00, 0x1c, 0x68, 0xaa, 0x58, 0x60, 0xa9, 0x00, + 0x8d, 0xf9, 0x02, 0xad, 0x8e, 0x02, 0x85, 0x7f, + 0x20, 0xbc, 0xe6, 0xa5, 0x84, 0x10, 0x09, 0x29, + 0x0f, 0xc9, 0x0f, 0xf0, 0x03, 0x4c, 0xb4, 0xd7, + 0x20, 0xb3, 0xc2, 0xb1, 0xa3, 0x8d, 0x75, 0x02, + 0xa2, 0x0b, 0xbd, 0x89, 0xfe, 0xcd, 0x75, 0x02, + 0xf0, 0x08, 0xca, 0x10, 0xf5, 0xa9, 0x31, 0x4c, + 0xc8, 0xc1, 0x8e, 0x2a, 0x02, 0xe0, 0x09, 0x90, + 0x03, 0x20, 0xee, 0xc1, 0xae, 0x2a, 0x02, 0xbd, + 0x95, 0xfe, 0x85, 0x6f, 0xbd, 0xa1, 0xfe, 0x85, + 0x70, 0x6c, 0x6f, 0x00, 0xa9, 0x00, 0x8d, 0xf9, + 0x02, 0xad, 0x6c, 0x02, 0xd0, 0x2a, 0xa0, 0x00, + 0x98, 0x84, 0x80, 0x84, 0x81, 0x84, 0xa3, 0x20, + 0xc7, 0xe6, 0x20, 0x23, 0xc1, 0xa5, 0x7f, 0x8d, + 0x8e, 0x02, 0xaa, 0xa9, 0x00, 0x95, 0xff, 0x20, + 0xbd, 0xc1, 0x4c, 0xda, 0xd4, 0xa0, 0x28, 0xa9, + 0x00, 0x99, 0x00, 0x02, 0x88, 0x10, 0xfa, 0x60, + 0xa0, 0x00, 0x84, 0x80, 0x84, 0x81, 0x4c, 0x45, + 0xe6, 0xa2, 0x00, 0x8e, 0x7a, 0x02, 0xa9, 0x3a, + 0x20, 0x68, 0xc2, 0xf0, 0x05, 0x88, 0x88, 0x8c, + 0x7a, 0x02, 0x4c, 0x68, 0xc3, 0xa0, 0x00, 0xa2, + 0x00, 0xa9, 0x3a, 0x4c, 0x68, 0xc2, 0x20, 0xe5, + 0xc1, 0xd0, 0x05, 0xa9, 0x34, 0x4c, 0xc8, 0xc1, + 0x88, 0x88, 0x8c, 0x7a, 0x02, 0x8a, 0xd0, 0xf3, + 0xa9, 0x3d, 0x20, 0x68, 0xc2, 0x8a, 0xf0, 0x02, + 0xa9, 0x40, 0x09, 0x21, 0x8d, 0x8b, 0x02, 0xe8, + 0x8e, 0x77, 0x02, 0x8e, 0x78, 0x02, 0xad, 0x8a, + 0x02, 0xf0, 0x0d, 0xa9, 0x80, 0x0d, 0x8b, 0x02, + 0x8d, 0x8b, 0x02, 0xa9, 0x00, 0x8d, 0x8a, 0x02, + 0x98, 0xf0, 0x29, 0x9d, 0x7a, 0x02, 0xad, 0x77, + 0x02, 0x8d, 0x79, 0x02, 0xa9, 0x8d, 0x20, 0x68, + 0xc2, 0xe8, 0x8e, 0x78, 0x02, 0xca, 0xad, 0x8a, + 0x02, 0xf0, 0x02, 0xa9, 0x08, 0xec, 0x77, 0x02, + 0xf0, 0x02, 0x09, 0x04, 0x09, 0x03, 0x4d, 0x8b, + 0x02, 0x8d, 0x8b, 0x02, 0xad, 0x8b, 0x02, 0xae, + 0x2a, 0x02, 0x3d, 0xa5, 0xfe, 0xd0, 0x01, 0x60, + 0x8d, 0x6c, 0x02, 0xa9, 0x30, 0x4c, 0xc8, 0xc1, + 0x8d, 0x75, 0x02, 0xcc, 0x74, 0x02, 0xb0, 0x2e, + 0xb1, 0xa3, 0xc8, 0xcd, 0x75, 0x02, 0xf0, 0x28, + 0xc9, 0x2a, 0xf0, 0x04, 0xc9, 0x3f, 0xd0, 0x03, + 0xee, 0x8a, 0x02, 0xc9, 0x2c, 0xd0, 0xe4, 0x98, + 0x9d, 0x7b, 0x02, 0xad, 0x8a, 0x02, 0x29, 0x7f, + 0xf0, 0x07, 0xa9, 0x80, 0x95, 0xe7, 0x8d, 0x8a, + 0x02, 0xe8, 0xe0, 0x04, 0x90, 0xcd, 0xa0, 0x00, + 0xad, 0x74, 0x02, 0x9d, 0x7b, 0x02, 0xad, 0x8a, + 0x02, 0x29, 0x7f, 0xf0, 0x04, 0xa9, 0x80, 0x95, + 0xe7, 0x98, 0x60, 0xa4, 0xa3, 0xf0, 0x14, 0x88, + 0xf0, 0x10, 0xb9, 0x00, 0x02, 0xc9, 0x0d, 0xf0, + 0x0a, 0x88, 0xb9, 0x00, 0x02, 0xc9, 0x0d, 0xf0, + 0x02, 0xc8, 0xc8, 0x8c, 0x74, 0x02, 0xc0, 0x2a, + 0xa0, 0xff, 0x90, 0x08, 0x8c, 0x2a, 0x02, 0xa9, + 0x32, 0x4c, 0xc8, 0xc1, 0xa0, 0x00, 0x98, 0x85, + 0xa3, 0x8d, 0x58, 0x02, 0x8d, 0x4a, 0x02, 0x8d, + 0x96, 0x02, 0x85, 0xd3, 0x8d, 0x79, 0x02, 0x8d, + 0x77, 0x02, 0x8d, 0x78, 0x02, 0x8d, 0x8a, 0x02, + 0x8d, 0x6c, 0x02, 0xa2, 0x05, 0x9d, 0x79, 0x02, + 0x95, 0xd7, 0x95, 0xdc, 0x95, 0xe1, 0x95, 0xe6, + 0x9d, 0x7f, 0x02, 0x9d, 0x84, 0x02, 0xca, 0xd0, + 0xec, 0x60, 0xad, 0x78, 0x02, 0x8d, 0x77, 0x02, + 0xa9, 0x01, 0x8d, 0x78, 0x02, 0x8d, 0x79, 0x02, + 0xac, 0x8e, 0x02, 0xa2, 0x00, 0x86, 0xd3, 0xbd, + 0x7a, 0x02, 0x20, 0x3c, 0xc3, 0xa6, 0xd3, 0x9d, + 0x7a, 0x02, 0x98, 0x95, 0xe2, 0xe8, 0xec, 0x78, + 0x02, 0x90, 0xea, 0x60, 0xaa, 0xa0, 0x00, 0xa9, + 0x3a, 0xdd, 0x01, 0x02, 0xf0, 0x0c, 0xdd, 0x00, + 0x02, 0xd0, 0x16, 0xe8, 0x98, 0x29, 0x01, 0xa8, + 0x8a, 0x60, 0xbd, 0x00, 0x02, 0xe8, 0xe8, 0xc9, + 0x30, 0xf0, 0xf2, 0xc9, 0x31, 0xf0, 0xee, 0xd0, + 0xeb, 0x98, 0x09, 0x80, 0x29, 0x81, 0xd0, 0xe7, + 0xa9, 0x00, 0x8d, 0x8b, 0x02, 0xac, 0x7a, 0x02, + 0xb1, 0xa3, 0x20, 0xbd, 0xc3, 0x10, 0x11, 0xc8, + 0xcc, 0x74, 0x02, 0xb0, 0x06, 0xac, 0x74, 0x02, + 0x88, 0xd0, 0xed, 0xce, 0x8b, 0x02, 0xa9, 0x00, + 0x29, 0x01, 0x85, 0x7f, 0x4c, 0x00, 0xc1, 0xa5, + 0x7f, 0x49, 0x01, 0x29, 0x01, 0x85, 0x7f, 0x60, + 0xa0, 0x00, 0xad, 0x77, 0x02, 0xcd, 0x78, 0x02, + 0xf0, 0x16, 0xce, 0x78, 0x02, 0xac, 0x78, 0x02, + 0xb9, 0x7a, 0x02, 0xa8, 0xb1, 0xa3, 0xa0, 0x04, + 0xd9, 0xbb, 0xfe, 0xf0, 0x03, 0x88, 0xd0, 0xf8, + 0x98, 0x8d, 0x96, 0x02, 0x60, 0xc9, 0x30, 0xf0, + 0x06, 0xc9, 0x31, 0xf0, 0x02, 0x09, 0x80, 0x29, + 0x81, 0x60, 0xa9, 0x00, 0x85, 0x6f, 0x8d, 0x8d, + 0x02, 0x48, 0xae, 0x78, 0x02, 0x68, 0x05, 0x6f, + 0x48, 0xa9, 0x01, 0x85, 0x6f, 0xca, 0x30, 0x0f, + 0xb5, 0xe2, 0x10, 0x04, 0x06, 0x6f, 0x06, 0x6f, + 0x4a, 0x90, 0xea, 0x06, 0x6f, 0xd0, 0xe6, 0x68, + 0xaa, 0xbd, 0x3f, 0xc4, 0x48, 0x29, 0x03, 0x8d, + 0x8c, 0x02, 0x68, 0x0a, 0x10, 0x3e, 0xa5, 0xe2, + 0x29, 0x01, 0x85, 0x7f, 0xad, 0x8c, 0x02, 0xf0, + 0x2b, 0x20, 0x3d, 0xc6, 0xf0, 0x12, 0x20, 0x8f, + 0xc3, 0xa9, 0x00, 0x8d, 0x8c, 0x02, 0x20, 0x3d, + 0xc6, 0xf0, 0x1e, 0xa9, 0x74, 0x20, 0xc8, 0xc1, + 0x20, 0x8f, 0xc3, 0x20, 0x3d, 0xc6, 0x08, 0x20, + 0x8f, 0xc3, 0x28, 0xf0, 0x0c, 0xa9, 0x00, 0x8d, + 0x8c, 0x02, 0xf0, 0x05, 0x20, 0x3d, 0xc6, 0xd0, + 0xe2, 0x4c, 0x00, 0xc1, 0x2a, 0x4c, 0x00, 0xc4, + 0x00, 0x80, 0x41, 0x01, 0x01, 0x01, 0x01, 0x81, + 0x81, 0x81, 0x81, 0x42, 0x42, 0x42, 0x42, 0x20, + 0xca, 0xc3, 0xa9, 0x00, 0x8d, 0x92, 0x02, 0x20, + 0xac, 0xc5, 0xd0, 0x19, 0xce, 0x8c, 0x02, 0x10, + 0x01, 0x60, 0xa9, 0x01, 0x8d, 0x8d, 0x02, 0x20, + 0x8f, 0xc3, 0x20, 0x00, 0xc1, 0x4c, 0x52, 0xc4, + 0x20, 0x17, 0xc6, 0xf0, 0x10, 0x20, 0xd8, 0xc4, + 0xad, 0x8f, 0x02, 0xf0, 0x01, 0x60, 0xad, 0x53, + 0x02, 0x30, 0xed, 0x10, 0xf0, 0xad, 0x8f, 0x02, + 0xf0, 0xd2, 0x60, 0x20, 0x04, 0xc6, 0xf0, 0x1a, + 0xd0, 0x28, 0xa9, 0x01, 0x8d, 0x8d, 0x02, 0x20, + 0x8f, 0xc3, 0x20, 0x00, 0xc1, 0xa9, 0x00, 0x8d, + 0x92, 0x02, 0x20, 0xac, 0xc5, 0xd0, 0x13, 0x8d, + 0x8f, 0x02, 0xad, 0x8f, 0x02, 0xd0, 0x28, 0xce, + 0x8c, 0x02, 0x10, 0xde, 0x60, 0x20, 0x17, 0xc6, + 0xf0, 0xf0, 0x20, 0xd8, 0xc4, 0xae, 0x53, 0x02, + 0x10, 0x07, 0xad, 0x8f, 0x02, 0xf0, 0xee, 0xd0, + 0x0e, 0xad, 0x96, 0x02, 0xf0, 0x09, 0xb5, 0xe7, + 0x29, 0x07, 0xcd, 0x96, 0x02, 0xd0, 0xde, 0x60, + 0xa2, 0xff, 0x8e, 0x53, 0x02, 0xe8, 0x8e, 0x8a, + 0x02, 0x20, 0x89, 0xc5, 0xf0, 0x06, 0x60, 0x20, + 0x94, 0xc5, 0xd0, 0xfa, 0xa5, 0x7f, 0x55, 0xe2, + 0x4a, 0x90, 0x0b, 0x29, 0x40, 0xf0, 0xf0, 0xa9, + 0x02, 0xcd, 0x8c, 0x02, 0xf0, 0xe9, 0xbd, 0x7a, + 0x02, 0xaa, 0x20, 0xa6, 0xc6, 0xa0, 0x03, 0x4c, + 0x1d, 0xc5, 0xbd, 0x00, 0x02, 0xd1, 0x94, 0xf0, + 0x0a, 0xc9, 0x3f, 0xd0, 0xd2, 0xb1, 0x94, 0xc9, + 0xa0, 0xf0, 0xcc, 0xe8, 0xc8, 0xec, 0x76, 0x02, + 0xb0, 0x09, 0xbd, 0x00, 0x02, 0xc9, 0x2a, 0xf0, + 0x0c, 0xd0, 0xdf, 0xc0, 0x13, 0xb0, 0x06, 0xb1, + 0x94, 0xc9, 0xa0, 0xd0, 0xb2, 0xae, 0x79, 0x02, + 0x8e, 0x53, 0x02, 0xb5, 0xe7, 0x29, 0x80, 0x8d, + 0x8a, 0x02, 0xad, 0x94, 0x02, 0x95, 0xdd, 0xa5, + 0x81, 0x95, 0xd8, 0xa0, 0x00, 0xb1, 0x94, 0xc8, + 0x48, 0x29, 0x40, 0x85, 0x6f, 0x68, 0x29, 0xdf, + 0x30, 0x02, 0x09, 0x20, 0x29, 0x27, 0x05, 0x6f, + 0x85, 0x6f, 0xa9, 0x80, 0x35, 0xe7, 0x05, 0x6f, + 0x95, 0xe7, 0xb5, 0xe2, 0x29, 0x80, 0x05, 0x7f, + 0x95, 0xe2, 0xb1, 0x94, 0x9d, 0x80, 0x02, 0xc8, + 0xb1, 0x94, 0x9d, 0x85, 0x02, 0xad, 0x58, 0x02, + 0xd0, 0x07, 0xa0, 0x15, 0xb1, 0x94, 0x8d, 0x58, + 0x02, 0xa9, 0xff, 0x8d, 0x8f, 0x02, 0xad, 0x78, + 0x02, 0x8d, 0x79, 0x02, 0xce, 0x79, 0x02, 0x10, + 0x01, 0x60, 0xae, 0x79, 0x02, 0xb5, 0xe7, 0x30, + 0x05, 0xbd, 0x80, 0x02, 0xd0, 0xee, 0xa9, 0x00, + 0x8d, 0x8f, 0x02, 0x60, 0xa0, 0x00, 0x8c, 0x91, + 0x02, 0x88, 0x8c, 0x53, 0x02, 0xad, 0x85, 0xfe, + 0x85, 0x80, 0xa9, 0x01, 0x85, 0x81, 0x8d, 0x93, + 0x02, 0x20, 0x75, 0xd4, 0xad, 0x93, 0x02, 0xd0, + 0x01, 0x60, 0xa9, 0x07, 0x8d, 0x95, 0x02, 0xa9, + 0x00, 0x20, 0xf6, 0xd4, 0x8d, 0x93, 0x02, 0x20, + 0xe8, 0xd4, 0xce, 0x95, 0x02, 0xa0, 0x00, 0xb1, + 0x94, 0xd0, 0x18, 0xad, 0x91, 0x02, 0xd0, 0x2f, + 0x20, 0x3b, 0xde, 0xa5, 0x81, 0x8d, 0x91, 0x02, + 0xa5, 0x94, 0xae, 0x92, 0x02, 0x8d, 0x92, 0x02, + 0xf0, 0x1d, 0x60, 0xa2, 0x01, 0xec, 0x92, 0x02, + 0xd0, 0x2d, 0xf0, 0x13, 0xad, 0x85, 0xfe, 0x85, + 0x80, 0xad, 0x90, 0x02, 0x85, 0x81, 0x20, 0x75, + 0xd4, 0xad, 0x94, 0x02, 0x20, 0xc8, 0xd4, 0xa9, + 0xff, 0x8d, 0x53, 0x02, 0xad, 0x95, 0x02, 0x30, + 0x08, 0xa9, 0x20, 0x20, 0xc6, 0xd1, 0x4c, 0xd7, + 0xc5, 0x20, 0x4d, 0xd4, 0x4c, 0xc4, 0xc5, 0xa5, + 0x94, 0x8d, 0x94, 0x02, 0x20, 0x3b, 0xde, 0xa5, + 0x81, 0x8d, 0x90, 0x02, 0x60, 0xa5, 0x68, 0xd0, + 0x28, 0xa6, 0x7f, 0x56, 0x1c, 0x90, 0x22, 0xa9, + 0xff, 0x8d, 0x98, 0x02, 0x20, 0x0e, 0xd0, 0xa0, + 0xff, 0xc9, 0x02, 0xf0, 0x0a, 0xc9, 0x03, 0xf0, + 0x06, 0xc9, 0x0f, 0xf0, 0x02, 0xa0, 0x00, 0xa6, + 0x7f, 0x98, 0x95, 0xff, 0xd0, 0x03, 0x20, 0x42, + 0xd0, 0xa6, 0x7f, 0xb5, 0xff, 0x60, 0x48, 0x20, + 0xa6, 0xc6, 0x20, 0x88, 0xc6, 0x68, 0x38, 0xed, + 0x4b, 0x02, 0xaa, 0xf0, 0x0a, 0x90, 0x08, 0xa9, + 0xa0, 0x91, 0x94, 0xc8, 0xca, 0xd0, 0xfa, 0x60, + 0x98, 0x0a, 0xa8, 0xb9, 0x99, 0x00, 0x85, 0x94, + 0xb9, 0x9a, 0x00, 0x85, 0x95, 0xa0, 0x00, 0xbd, + 0x00, 0x02, 0x91, 0x94, 0xc8, 0xf0, 0x06, 0xe8, + 0xec, 0x76, 0x02, 0x90, 0xf2, 0x60, 0xa9, 0x00, + 0x8d, 0x4b, 0x02, 0x8a, 0x48, 0xbd, 0x00, 0x02, + 0xc9, 0x2c, 0xf0, 0x14, 0xc9, 0x3d, 0xf0, 0x10, + 0xee, 0x4b, 0x02, 0xe8, 0xa9, 0x0f, 0xcd, 0x4b, + 0x02, 0x90, 0x05, 0xec, 0x74, 0x02, 0x90, 0xe5, + 0x8e, 0x76, 0x02, 0x68, 0xaa, 0x60, 0xa5, 0x83, + 0x48, 0xa5, 0x82, 0x48, 0x20, 0xde, 0xc6, 0x68, + 0x85, 0x82, 0x68, 0x85, 0x83, 0x60, 0xa9, 0x11, + 0x85, 0x83, 0x20, 0xeb, 0xd0, 0x20, 0xe8, 0xd4, + 0xad, 0x53, 0x02, 0x10, 0x0a, 0xad, 0x8d, 0x02, + 0xd0, 0x0a, 0x20, 0x06, 0xc8, 0x18, 0x60, 0xad, + 0x8d, 0x02, 0xf0, 0x1f, 0xce, 0x8d, 0x02, 0xd0, + 0x0d, 0xce, 0x8d, 0x02, 0x20, 0x8f, 0xc3, 0x20, + 0x06, 0xc8, 0x38, 0x4c, 0x8f, 0xc3, 0xa9, 0x00, + 0x8d, 0x73, 0x02, 0x8d, 0x8d, 0x02, 0x20, 0xb7, + 0xc7, 0x38, 0x60, 0xa2, 0x18, 0xa0, 0x1d, 0xb1, + 0x94, 0x8d, 0x73, 0x02, 0xf0, 0x02, 0xa2, 0x16, + 0x88, 0xb1, 0x94, 0x8d, 0x72, 0x02, 0xe0, 0x16, + 0xf0, 0x0a, 0xc9, 0x0a, 0x90, 0x06, 0xca, 0xc9, + 0x64, 0x90, 0x01, 0xca, 0x20, 0xac, 0xc7, 0xb1, + 0x94, 0x48, 0x0a, 0x10, 0x05, 0xa9, 0x3c, 0x9d, + 0xb2, 0x02, 0x68, 0x29, 0x0f, 0xa8, 0xb9, 0xc5, + 0xfe, 0x9d, 0xb1, 0x02, 0xca, 0xb9, 0xc0, 0xfe, + 0x9d, 0xb1, 0x02, 0xca, 0xb9, 0xbb, 0xfe, 0x9d, + 0xb1, 0x02, 0xca, 0xca, 0xb0, 0x05, 0xa9, 0x2a, + 0x9d, 0xb2, 0x02, 0xa9, 0xa0, 0x9d, 0xb1, 0x02, + 0xca, 0xa0, 0x12, 0xb1, 0x94, 0x9d, 0xb1, 0x02, + 0xca, 0x88, 0xc0, 0x03, 0xb0, 0xf5, 0xa9, 0x22, + 0x9d, 0xb1, 0x02, 0xe8, 0xe0, 0x20, 0xb0, 0x0b, + 0xbd, 0xb1, 0x02, 0xc9, 0x22, 0xf0, 0x04, 0xc9, + 0xa0, 0xd0, 0xf0, 0xa9, 0x22, 0x9d, 0xb1, 0x02, + 0xe8, 0xe0, 0x20, 0xb0, 0x0a, 0xa9, 0x7f, 0x3d, + 0xb1, 0x02, 0x9d, 0xb1, 0x02, 0x10, 0xf1, 0x20, + 0xb5, 0xc4, 0x38, 0x60, 0xa0, 0x1b, 0xa9, 0x20, + 0x99, 0xb0, 0x02, 0x88, 0xd0, 0xfa, 0x60, 0x20, + 0x19, 0xf1, 0x20, 0xdf, 0xf0, 0x20, 0xac, 0xc7, + 0xa9, 0xff, 0x85, 0x6f, 0xa6, 0x7f, 0x8e, 0x72, + 0x02, 0xa9, 0x00, 0x8d, 0x73, 0x02, 0xa6, 0xf9, + 0xbd, 0xe0, 0xfe, 0x85, 0x95, 0xad, 0x88, 0xfe, + 0x85, 0x94, 0xa0, 0x16, 0xb1, 0x94, 0xc9, 0xa0, + 0xd0, 0x0b, 0xa9, 0x31, 0x2c, 0xb1, 0x94, 0xc9, + 0xa0, 0xd0, 0x02, 0xa9, 0x20, 0x99, 0xb3, 0x02, + 0x88, 0x10, 0xf2, 0xa9, 0x12, 0x8d, 0xb1, 0x02, + 0xa9, 0x22, 0x8d, 0xb2, 0x02, 0x8d, 0xc3, 0x02, + 0xa9, 0x20, 0x8d, 0xc4, 0x02, 0x60, 0x20, 0xac, + 0xc7, 0xa0, 0x0b, 0xb9, 0x17, 0xc8, 0x99, 0xb1, + 0x02, 0x88, 0x10, 0xf7, 0x4c, 0x4d, 0xef, 0x42, + 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x20, 0x46, 0x52, + 0x45, 0x45, 0x2e, 0x20, 0x98, 0xc3, 0x20, 0x20, + 0xc3, 0x20, 0xca, 0xc3, 0xa9, 0x00, 0x85, 0x86, + 0x20, 0x9d, 0xc4, 0x30, 0x3d, 0x20, 0xb7, 0xdd, + 0x90, 0x33, 0xa0, 0x00, 0xb1, 0x94, 0x29, 0x40, + 0xd0, 0x2b, 0x20, 0xb6, 0xc8, 0xa0, 0x13, 0xb1, + 0x94, 0xf0, 0x0a, 0x85, 0x80, 0xc8, 0xb1, 0x94, + 0x85, 0x81, 0x20, 0x7d, 0xc8, 0xae, 0x53, 0x02, + 0xa9, 0x20, 0x35, 0xe7, 0xd0, 0x0d, 0xbd, 0x80, + 0x02, 0x85, 0x80, 0xbd, 0x85, 0x02, 0x85, 0x81, + 0x20, 0x7d, 0xc8, 0xe6, 0x86, 0x20, 0x8b, 0xc4, + 0x10, 0xc3, 0xa5, 0x86, 0x85, 0x80, 0xa9, 0x01, + 0xa0, 0x00, 0x4c, 0xa3, 0xc1, 0x20, 0x5f, 0xef, + 0x20, 0x75, 0xd4, 0x20, 0x19, 0xf1, 0xb5, 0xa7, + 0xc9, 0xff, 0xf0, 0x08, 0xad, 0xf9, 0x02, 0x09, + 0x40, 0x8d, 0xf9, 0x02, 0xa9, 0x00, 0x20, 0xc8, + 0xd4, 0x20, 0x56, 0xd1, 0x85, 0x80, 0x20, 0x56, + 0xd1, 0x85, 0x81, 0xa5, 0x80, 0xd0, 0x06, 0x20, + 0xf4, 0xee, 0x4c, 0x27, 0xd2, 0x20, 0x5f, 0xef, + 0x20, 0x4d, 0xd4, 0x4c, 0x94, 0xc8, 0xa0, 0x00, + 0x98, 0x91, 0x94, 0x20, 0x5e, 0xde, 0x4c, 0x99, + 0xd5, 0xa9, 0x31, 0x4c, 0xc8, 0xc1, 0xa9, 0x4c, + 0x8d, 0x00, 0x06, 0xa9, 0xc7, 0x8d, 0x01, 0x06, + 0xa9, 0xfa, 0x8d, 0x02, 0x06, 0xa9, 0x03, 0x20, + 0xd3, 0xd6, 0xa5, 0x7f, 0x09, 0xe0, 0x85, 0x03, + 0xa5, 0x03, 0x30, 0xfc, 0xc9, 0x02, 0x90, 0x07, + 0xa9, 0x03, 0xa2, 0x00, 0x4c, 0x0a, 0xe6, 0x60, + 0xa9, 0xe0, 0x8d, 0x4f, 0x02, 0x20, 0xd1, 0xf0, + 0x20, 0x19, 0xf1, 0xa9, 0xff, 0x95, 0xa7, 0xa9, + 0x0f, 0x8d, 0x56, 0x02, 0x20, 0xe5, 0xc1, 0xd0, + 0x03, 0x4c, 0xc1, 0xc8, 0x20, 0xf8, 0xc1, 0x20, + 0x20, 0xc3, 0xad, 0x8b, 0x02, 0x29, 0x55, 0xd0, + 0x0f, 0xae, 0x7a, 0x02, 0xbd, 0x00, 0x02, 0xc9, + 0x2a, 0xd0, 0x05, 0xa9, 0x30, 0x4c, 0xc8, 0xc1, + 0xad, 0x8b, 0x02, 0x29, 0xd9, 0xd0, 0xf4, 0x4c, + 0x52, 0xc9, 0xa9, 0x00, 0x8d, 0x58, 0x02, 0x8d, + 0x8c, 0x02, 0x8d, 0x80, 0x02, 0x8d, 0x81, 0x02, + 0xa5, 0xe3, 0x29, 0x01, 0x85, 0x7f, 0x09, 0x01, + 0x8d, 0x91, 0x02, 0xad, 0x7b, 0x02, 0x8d, 0x7a, + 0x02, 0x60, 0x20, 0x4f, 0xc4, 0xad, 0x78, 0x02, + 0xc9, 0x03, 0x90, 0x45, 0xa5, 0xe2, 0xc5, 0xe3, + 0xd0, 0x3f, 0xa5, 0xdd, 0xc5, 0xde, 0xd0, 0x39, + 0xa5, 0xd8, 0xc5, 0xd9, 0xd0, 0x33, 0x20, 0xcc, + 0xca, 0xa9, 0x01, 0x8d, 0x79, 0x02, 0x20, 0xfa, + 0xc9, 0x20, 0x25, 0xd1, 0xf0, 0x04, 0xc9, 0x02, + 0xd0, 0x05, 0xa9, 0x64, 0x20, 0xc8, 0xc1, 0xa9, + 0x12, 0x85, 0x83, 0xad, 0x3c, 0x02, 0x8d, 0x3d, + 0x02, 0xa9, 0xff, 0x8d, 0x3c, 0x02, 0x20, 0x2a, + 0xda, 0xa2, 0x02, 0x20, 0xb9, 0xc9, 0x4c, 0x94, + 0xc1, 0x20, 0xa7, 0xc9, 0x4c, 0x94, 0xc1, 0x20, + 0xe7, 0xca, 0xa5, 0xe2, 0x29, 0x01, 0x85, 0x7f, + 0x20, 0x86, 0xd4, 0x20, 0xe4, 0xd6, 0xae, 0x77, + 0x02, 0x8e, 0x79, 0x02, 0x20, 0xfa, 0xc9, 0xa9, + 0x11, 0x85, 0x83, 0x20, 0xeb, 0xd0, 0x20, 0x25, + 0xd1, 0xd0, 0x03, 0x20, 0x53, 0xca, 0xa9, 0x08, + 0x85, 0xf8, 0x4c, 0xd8, 0xc9, 0x20, 0x9b, 0xcf, + 0x20, 0x35, 0xca, 0xa9, 0x80, 0x20, 0xa6, 0xdd, + 0xf0, 0xf3, 0x20, 0x25, 0xd1, 0xf0, 0x03, 0x20, + 0x9b, 0xcf, 0xae, 0x79, 0x02, 0xe8, 0xec, 0x78, + 0x02, 0x90, 0xc6, 0xa9, 0x12, 0x85, 0x83, 0x4c, + 0x02, 0xdb, 0xae, 0x79, 0x02, 0xb5, 0xe2, 0x29, + 0x01, 0x85, 0x7f, 0xad, 0x85, 0xfe, 0x85, 0x80, + 0xb5, 0xd8, 0x85, 0x81, 0x20, 0x75, 0xd4, 0xae, + 0x79, 0x02, 0xb5, 0xdd, 0x20, 0xc8, 0xd4, 0xae, + 0x79, 0x02, 0xb5, 0xe7, 0x29, 0x07, 0x8d, 0x4a, + 0x02, 0xa9, 0x00, 0x8d, 0x58, 0x02, 0x20, 0xa0, + 0xd9, 0xa0, 0x01, 0x20, 0x25, 0xd1, 0xf0, 0x01, + 0xc8, 0x98, 0x4c, 0xc8, 0xd4, 0xa9, 0x11, 0x85, + 0x83, 0x20, 0x9b, 0xd3, 0x85, 0x85, 0xa6, 0x82, + 0xb5, 0xf2, 0x29, 0x08, 0x85, 0xf8, 0xd0, 0x0a, + 0x20, 0x25, 0xd1, 0xf0, 0x05, 0xa9, 0x80, 0x20, + 0x97, 0xdd, 0x60, 0x20, 0xd3, 0xd1, 0x20, 0xcb, + 0xe1, 0xa5, 0xd6, 0x48, 0xa5, 0xd5, 0x48, 0xa9, + 0x12, 0x85, 0x83, 0x20, 0x07, 0xd1, 0x20, 0xd3, + 0xd1, 0x20, 0xcb, 0xe1, 0x20, 0x9c, 0xe2, 0xa5, + 0xd6, 0x85, 0x87, 0xa5, 0xd5, 0x85, 0x86, 0xa9, + 0x00, 0x85, 0x88, 0x85, 0xd4, 0x85, 0xd7, 0x68, + 0x85, 0xd5, 0x68, 0x85, 0xd6, 0x4c, 0x3b, 0xe3, + 0x20, 0x20, 0xc3, 0xa5, 0xe3, 0x29, 0x01, 0x85, + 0xe3, 0xc5, 0xe2, 0xf0, 0x02, 0x09, 0x80, 0x85, + 0xe2, 0x20, 0x4f, 0xc4, 0x20, 0xe7, 0xca, 0xa5, + 0xe3, 0x29, 0x01, 0x85, 0x7f, 0xa5, 0xd9, 0x85, + 0x81, 0x20, 0x57, 0xde, 0x20, 0x99, 0xd5, 0xa5, + 0xde, 0x18, 0x69, 0x03, 0x20, 0xc8, 0xd4, 0x20, + 0x93, 0xdf, 0xa8, 0xae, 0x7a, 0x02, 0xa9, 0x10, + 0x20, 0x6e, 0xc6, 0x20, 0x5e, 0xde, 0x20, 0x99, + 0xd5, 0x4c, 0x94, 0xc1, 0xa5, 0xe8, 0x29, 0x07, + 0x8d, 0x4a, 0x02, 0xae, 0x78, 0x02, 0xca, 0xec, + 0x77, 0x02, 0x90, 0x0a, 0xbd, 0x80, 0x02, 0xd0, + 0xf5, 0xa9, 0x62, 0x4c, 0xc8, 0xc1, 0x60, 0x20, + 0xcc, 0xca, 0xbd, 0x80, 0x02, 0xf0, 0x05, 0xa9, + 0x63, 0x4c, 0xc8, 0xc1, 0xca, 0x10, 0xf3, 0x60, + 0xad, 0x01, 0x02, 0xc9, 0x2d, 0xd0, 0x4c, 0xad, + 0x03, 0x02, 0x85, 0x6f, 0xad, 0x04, 0x02, 0x85, + 0x70, 0xa0, 0x00, 0xad, 0x02, 0x02, 0xc9, 0x52, + 0xf0, 0x0e, 0x20, 0x58, 0xf2, 0xc9, 0x57, 0xf0, + 0x37, 0xc9, 0x45, 0xd0, 0x2e, 0x6c, 0x6f, 0x00, + 0xb1, 0x6f, 0x85, 0x85, 0xad, 0x74, 0x02, 0xc9, + 0x06, 0x90, 0x1a, 0xae, 0x05, 0x02, 0xca, 0xf0, + 0x14, 0x8a, 0x18, 0x65, 0x6f, 0xe6, 0x6f, 0x8d, + 0x49, 0x02, 0xa5, 0x6f, 0x85, 0xa5, 0xa5, 0x70, + 0x85, 0xa6, 0x4c, 0x43, 0xd4, 0x20, 0xeb, 0xd0, + 0x4c, 0x3a, 0xd4, 0xa9, 0x31, 0x4c, 0xc8, 0xc1, + 0xb9, 0x06, 0x02, 0x91, 0x6f, 0xc8, 0xcc, 0x05, + 0x02, 0x90, 0xf5, 0x60, 0xac, 0x01, 0x02, 0xc0, + 0x30, 0xd0, 0x09, 0xa9, 0xea, 0x85, 0x6b, 0xa9, + 0xff, 0x85, 0x6c, 0x60, 0x20, 0x72, 0xcb, 0x4c, + 0x94, 0xc1, 0x88, 0x98, 0x29, 0x0f, 0x0a, 0xa8, + 0xb1, 0x6b, 0x85, 0x75, 0xc8, 0xb1, 0x6b, 0x85, + 0x76, 0x6c, 0x75, 0x00, 0xad, 0x8e, 0x02, 0x85, + 0x7f, 0xa5, 0x83, 0x48, 0x20, 0x3d, 0xc6, 0x68, + 0x85, 0x83, 0xae, 0x74, 0x02, 0xca, 0xd0, 0x0d, + 0xa9, 0x01, 0x20, 0xe2, 0xd1, 0x4c, 0xf1, 0xcb, + 0xa9, 0x70, 0x4c, 0xc8, 0xc1, 0xa0, 0x01, 0x20, + 0x7c, 0xcc, 0xae, 0x85, 0x02, 0xe0, 0x05, 0xb0, + 0xef, 0xa9, 0x00, 0x85, 0x6f, 0x85, 0x70, 0x38, + 0x26, 0x6f, 0x26, 0x70, 0xca, 0x10, 0xf9, 0xa5, + 0x6f, 0x2d, 0x4f, 0x02, 0xd0, 0xda, 0xa5, 0x70, + 0x2d, 0x50, 0x02, 0xd0, 0xd3, 0xa5, 0x6f, 0x0d, + 0x4f, 0x02, 0x8d, 0x4f, 0x02, 0xa5, 0x70, 0x0d, + 0x50, 0x02, 0x8d, 0x50, 0x02, 0xa9, 0x00, 0x20, + 0xe2, 0xd1, 0xa6, 0x82, 0xad, 0x85, 0x02, 0x95, + 0xa7, 0xaa, 0xa5, 0x7f, 0x95, 0x00, 0x9d, 0x5b, + 0x02, 0xa6, 0x83, 0xbd, 0x2b, 0x02, 0x09, 0x40, + 0x9d, 0x2b, 0x02, 0xa4, 0x82, 0xa9, 0xff, 0x99, + 0x44, 0x02, 0xa9, 0x89, 0x99, 0xf2, 0x00, 0xb9, + 0xa7, 0x00, 0x99, 0x3e, 0x02, 0x0a, 0xaa, 0xa9, + 0x01, 0x95, 0x99, 0xa9, 0x0e, 0x99, 0xec, 0x00, + 0x4c, 0x94, 0xc1, 0xa0, 0x00, 0xa2, 0x00, 0xa9, + 0x2d, 0x20, 0x68, 0xc2, 0xd0, 0x0a, 0xa9, 0x31, + 0x4c, 0xc8, 0xc1, 0xa9, 0x30, 0x4c, 0xc8, 0xc1, + 0x8a, 0xd0, 0xf8, 0xa2, 0x05, 0xb9, 0x00, 0x02, + 0xdd, 0x5d, 0xcc, 0xf0, 0x05, 0xca, 0x10, 0xf8, + 0x30, 0xe4, 0x8a, 0x09, 0x80, 0x8d, 0x2a, 0x02, + 0x20, 0x6f, 0xcc, 0xad, 0x2a, 0x02, 0x0a, 0xaa, + 0xbd, 0x64, 0xcc, 0x85, 0x70, 0xbd, 0x63, 0xcc, + 0x85, 0x6f, 0x6c, 0x6f, 0x00, 0x41, 0x46, 0x52, + 0x57, 0x45, 0x50, 0x03, 0xcd, 0xf5, 0xcc, 0x56, + 0xcd, 0x73, 0xcd, 0xa3, 0xcd, 0xbd, 0xcd, 0xa0, + 0x00, 0xa2, 0x00, 0xa9, 0x3a, 0x20, 0x68, 0xc2, + 0xd0, 0x02, 0xa0, 0x03, 0xb9, 0x00, 0x02, 0xc9, + 0x20, 0xf0, 0x08, 0xc9, 0x1d, 0xf0, 0x04, 0xc9, + 0x2c, 0xd0, 0x07, 0xc8, 0xcc, 0x74, 0x02, 0x90, + 0xeb, 0x60, 0x20, 0xa1, 0xcc, 0xee, 0x77, 0x02, + 0xac, 0x79, 0x02, 0xe0, 0x04, 0x90, 0xec, 0xb0, + 0x8a, 0xa9, 0x00, 0x85, 0x6f, 0x85, 0x70, 0x85, + 0x72, 0xa2, 0xff, 0xb9, 0x00, 0x02, 0xc9, 0x40, + 0xb0, 0x18, 0xc9, 0x30, 0x90, 0x14, 0x29, 0x0f, + 0x48, 0xa5, 0x70, 0x85, 0x71, 0xa5, 0x6f, 0x85, + 0x70, 0x68, 0x85, 0x6f, 0xc8, 0xcc, 0x74, 0x02, + 0x90, 0xe1, 0x8c, 0x79, 0x02, 0x18, 0xa9, 0x00, + 0xe8, 0xe0, 0x03, 0xb0, 0x0f, 0xb4, 0x6f, 0x88, + 0x30, 0xf6, 0x7d, 0xf2, 0xcc, 0x90, 0xf8, 0x18, + 0xe6, 0x72, 0xd0, 0xf3, 0x48, 0xae, 0x77, 0x02, + 0xa5, 0x72, 0x9d, 0x80, 0x02, 0x68, 0x9d, 0x85, + 0x02, 0x60, 0x01, 0x0a, 0x64, 0x20, 0xf5, 0xcd, + 0x20, 0x5f, 0xef, 0x4c, 0x94, 0xc1, 0xa9, 0x01, + 0x8d, 0xf9, 0x02, 0x20, 0xf5, 0xcd, 0xa5, 0x81, + 0x48, 0x20, 0xfa, 0xf1, 0xf0, 0x0b, 0x68, 0xc5, + 0x81, 0xd0, 0x19, 0x20, 0x90, 0xef, 0x4c, 0x94, + 0xc1, 0x68, 0xa9, 0x00, 0x85, 0x81, 0xe6, 0x80, + 0xa5, 0x80, 0xcd, 0xd7, 0xfe, 0xb0, 0x0a, 0x20, + 0xfa, 0xf1, 0xf0, 0xee, 0xa9, 0x65, 0x20, 0x45, + 0xe6, 0xa9, 0x65, 0x20, 0xc8, 0xc1, 0x20, 0xf2, + 0xcd, 0x4c, 0x60, 0xd4, 0x20, 0x2f, 0xd1, 0xa1, + 0x99, 0x60, 0x20, 0x36, 0xcd, 0xa9, 0x00, 0x20, + 0xc8, 0xd4, 0x20, 0x3c, 0xcd, 0x99, 0x44, 0x02, + 0xa9, 0x89, 0x99, 0xf2, 0x00, 0x60, 0x20, 0x42, + 0xcd, 0x20, 0xec, 0xd3, 0x4c, 0x94, 0xc1, 0x20, + 0x6f, 0xcc, 0x20, 0x42, 0xcd, 0xb9, 0x44, 0x02, + 0x99, 0x3e, 0x02, 0xa9, 0xff, 0x99, 0x44, 0x02, + 0x4c, 0x94, 0xc1, 0x20, 0xf2, 0xcd, 0x20, 0xe8, + 0xd4, 0xa8, 0x88, 0xc9, 0x02, 0xb0, 0x02, 0xa0, + 0x01, 0xa9, 0x00, 0x20, 0xc8, 0xd4, 0x98, 0x20, + 0xf1, 0xcf, 0x8a, 0x48, 0x20, 0x64, 0xd4, 0x68, + 0xaa, 0x20, 0xee, 0xd3, 0x4c, 0x94, 0xc1, 0x20, + 0x6f, 0xcc, 0x20, 0xf2, 0xcd, 0x20, 0x64, 0xd4, + 0x4c, 0x94, 0xc1, 0x20, 0x58, 0xf2, 0x20, 0x36, + 0xcd, 0xa9, 0x00, 0x85, 0x6f, 0xa6, 0xf9, 0xbd, + 0xe0, 0xfe, 0x85, 0x70, 0x20, 0xba, 0xcd, 0x4c, + 0x94, 0xc1, 0x6c, 0x6f, 0x00, 0x20, 0xd2, 0xcd, + 0xa5, 0xf9, 0x0a, 0xaa, 0xad, 0x86, 0x02, 0x95, + 0x99, 0x20, 0x2f, 0xd1, 0x20, 0xee, 0xd3, 0x4c, + 0x94, 0xc1, 0xa6, 0xd3, 0xe6, 0xd3, 0xbd, 0x85, + 0x02, 0xa8, 0x88, 0x88, 0xc0, 0x0c, 0x90, 0x05, + 0xa9, 0x70, 0x4c, 0xc8, 0xc1, 0x85, 0x83, 0x20, + 0xeb, 0xd0, 0xb0, 0xf4, 0x20, 0x93, 0xdf, 0x85, + 0xf9, 0x60, 0x20, 0xd2, 0xcd, 0xa6, 0xd3, 0xbd, + 0x85, 0x02, 0x29, 0x01, 0x85, 0x7f, 0xbd, 0x87, + 0x02, 0x85, 0x81, 0xbd, 0x86, 0x02, 0x85, 0x80, + 0x20, 0x5f, 0xd5, 0x4c, 0x00, 0xc1, 0x20, 0x2c, + 0xce, 0x20, 0x6e, 0xce, 0xa5, 0x90, 0x85, 0xd7, + 0x20, 0x71, 0xce, 0xe6, 0xd7, 0xe6, 0xd7, 0xa5, + 0x8b, 0x85, 0xd5, 0xa5, 0x90, 0x0a, 0x18, 0x69, + 0x10, 0x85, 0xd6, 0x60, 0x20, 0xd9, 0xce, 0x85, + 0x92, 0xa6, 0x82, 0xb5, 0xb5, 0x85, 0x90, 0xb5, + 0xbb, 0x85, 0x91, 0xd0, 0x04, 0xa5, 0x90, 0xf0, + 0x0b, 0xa5, 0x90, 0x38, 0xe9, 0x01, 0x85, 0x90, + 0xb0, 0x02, 0xc6, 0x91, 0xb5, 0xc7, 0x85, 0x6f, + 0x46, 0x6f, 0x90, 0x03, 0x20, 0xed, 0xce, 0x20, + 0xe5, 0xce, 0xa5, 0x6f, 0xd0, 0xf2, 0xa5, 0xd4, + 0x18, 0x65, 0x8b, 0x85, 0x8b, 0x90, 0x06, 0xe6, + 0x8c, 0xd0, 0x02, 0xe6, 0x8d, 0x60, 0xa9, 0xfe, + 0x2c, 0xa9, 0x78, 0x85, 0x6f, 0xa2, 0x03, 0xb5, + 0x8f, 0x48, 0xb5, 0x8a, 0x95, 0x8f, 0x68, 0x95, + 0x8a, 0xca, 0xd0, 0xf3, 0x20, 0xd9, 0xce, 0xa2, + 0x00, 0xb5, 0x90, 0x95, 0x8f, 0xe8, 0xe0, 0x04, + 0x90, 0xf7, 0xa9, 0x00, 0x85, 0x92, 0x24, 0x6f, + 0x30, 0x09, 0x06, 0x8f, 0x08, 0x46, 0x8f, 0x28, + 0x20, 0xe6, 0xce, 0x20, 0xed, 0xce, 0x20, 0xe5, + 0xce, 0x24, 0x6f, 0x30, 0x03, 0x20, 0xe2, 0xce, + 0xa5, 0x8f, 0x18, 0x65, 0x90, 0x85, 0x90, 0x90, + 0x06, 0xe6, 0x91, 0xd0, 0x02, 0xe6, 0x92, 0xa5, + 0x92, 0x05, 0x91, 0xd0, 0xc2, 0xa5, 0x90, 0x38, + 0xe5, 0x6f, 0x90, 0x0c, 0xe6, 0x8b, 0xd0, 0x06, + 0xe6, 0x8c, 0xd0, 0x02, 0xe6, 0x8d, 0x85, 0x90, + 0x60, 0xa9, 0x00, 0x85, 0x8b, 0x85, 0x8c, 0x85, + 0x8d, 0x60, 0x20, 0xe5, 0xce, 0x18, 0x26, 0x90, + 0x26, 0x91, 0x26, 0x92, 0x60, 0x18, 0xa2, 0xfd, + 0xb5, 0x8e, 0x75, 0x93, 0x95, 0x8e, 0xe8, 0xd0, + 0xf7, 0x60, 0xa2, 0x00, 0x8a, 0x95, 0xfa, 0xe8, + 0xe0, 0x04, 0xd0, 0xf8, 0xa9, 0x06, 0x95, 0xfa, + 0x60, 0xa0, 0x04, 0xa6, 0x82, 0xb9, 0xfa, 0x00, + 0x96, 0xfa, 0xc5, 0x82, 0xf0, 0x07, 0x88, 0x30, + 0xe1, 0xaa, 0x4c, 0x0d, 0xcf, 0x60, 0x20, 0x09, + 0xcf, 0x20, 0xb7, 0xdf, 0xd0, 0x46, 0x20, 0xd3, + 0xd1, 0x20, 0x8e, 0xd2, 0x30, 0x48, 0x20, 0xc2, + 0xdf, 0xa5, 0x80, 0x48, 0xa5, 0x81, 0x48, 0xa9, + 0x01, 0x20, 0xf6, 0xd4, 0x85, 0x81, 0xa9, 0x00, + 0x20, 0xf6, 0xd4, 0x85, 0x80, 0xf0, 0x1f, 0x20, + 0x25, 0xd1, 0xf0, 0x0b, 0x20, 0xab, 0xdd, 0xd0, + 0x06, 0x20, 0x8c, 0xcf, 0x4c, 0x5d, 0xcf, 0x20, + 0x8c, 0xcf, 0x20, 0x57, 0xde, 0x68, 0x85, 0x81, + 0x68, 0x85, 0x80, 0x4c, 0x6f, 0xcf, 0x68, 0x85, + 0x81, 0x68, 0x85, 0x80, 0x20, 0x8c, 0xcf, 0x20, + 0x93, 0xdf, 0xaa, 0x4c, 0x99, 0xd5, 0xa9, 0x70, + 0x4c, 0xc8, 0xc1, 0x20, 0x09, 0xcf, 0x20, 0xb7, + 0xdf, 0xd0, 0x08, 0x20, 0x8e, 0xd2, 0x30, 0xee, + 0x20, 0xc2, 0xdf, 0x60, 0xa6, 0x82, 0xb5, 0xa7, + 0x49, 0x80, 0x95, 0xa7, 0xb5, 0xae, 0x49, 0x80, + 0x95, 0xae, 0x60, 0xa2, 0x12, 0x86, 0x83, 0x20, + 0x07, 0xd1, 0x20, 0x00, 0xc1, 0x20, 0x25, 0xd1, + 0x90, 0x05, 0xa9, 0x20, 0x20, 0x9d, 0xdd, 0xa5, + 0x83, 0xc9, 0x0f, 0xf0, 0x23, 0xd0, 0x08, 0xa5, + 0x84, 0x29, 0x8f, 0xc9, 0x0f, 0xb0, 0x19, 0x20, + 0x25, 0xd1, 0xb0, 0x05, 0xa5, 0x85, 0x4c, 0x9d, + 0xd1, 0xd0, 0x03, 0x4c, 0xab, 0xe0, 0xa5, 0x85, + 0x20, 0xf1, 0xcf, 0xa4, 0x82, 0x4c, 0xee, 0xd3, + 0xa9, 0x04, 0x85, 0x82, 0x20, 0xe8, 0xd4, 0xc9, + 0x2a, 0xf0, 0x05, 0xa5, 0x85, 0x20, 0xf1, 0xcf, + 0xa5, 0xf8, 0xf0, 0x01, 0x60, 0xee, 0x55, 0x02, + 0x60, 0x48, 0x20, 0x93, 0xdf, 0x10, 0x06, 0x68, + 0xa9, 0x61, 0x4c, 0xc8, 0xc1, 0x0a, 0xaa, 0x68, + 0x81, 0x99, 0xf6, 0x99, 0x60, 0x20, 0xd1, 0xc1, + 0x20, 0x42, 0xd0, 0x4c, 0x94, 0xc1, 0x20, 0x0f, + 0xf1, 0xa8, 0xb6, 0xa7, 0xe0, 0xff, 0xd0, 0x14, + 0x48, 0x20, 0x8e, 0xd2, 0xaa, 0x10, 0x05, 0xa9, + 0x70, 0x20, 0x48, 0xe6, 0x68, 0xa8, 0x8a, 0x09, + 0x80, 0x99, 0xa7, 0x00, 0x8a, 0x29, 0x0f, 0x85, + 0xf9, 0xa2, 0x00, 0x86, 0x81, 0xae, 0x85, 0xfe, + 0x86, 0x80, 0x20, 0xd3, 0xd6, 0xa9, 0xb0, 0x4c, + 0x8c, 0xd5, 0x20, 0xd1, 0xf0, 0x20, 0x13, 0xd3, + 0x20, 0x0e, 0xd0, 0xa6, 0x7f, 0xa9, 0x00, 0x9d, + 0x51, 0x02, 0x8a, 0x0a, 0xaa, 0xa5, 0x16, 0x95, + 0x12, 0xa5, 0x17, 0x95, 0x13, 0x20, 0x86, 0xd5, + 0xa5, 0xf9, 0x0a, 0xaa, 0xa9, 0x02, 0x95, 0x99, + 0xa1, 0x99, 0xa6, 0x7f, 0x9d, 0x01, 0x01, 0xa9, + 0x00, 0x95, 0x1c, 0x95, 0xff, 0x20, 0x3a, 0xef, + 0xa0, 0x04, 0xa9, 0x00, 0xaa, 0x18, 0x71, 0x6d, + 0x90, 0x01, 0xe8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc0, + 0x48, 0xf0, 0xf8, 0xc0, 0x90, 0xd0, 0xee, 0x48, + 0x8a, 0xa6, 0x7f, 0x9d, 0xfc, 0x02, 0x68, 0x9d, + 0xfa, 0x02, 0x60, 0x20, 0xd0, 0xd6, 0x20, 0xc3, + 0xd0, 0x20, 0x99, 0xd5, 0x20, 0x37, 0xd1, 0x85, + 0x80, 0x20, 0x37, 0xd1, 0x85, 0x81, 0x60, 0x20, + 0x9b, 0xd0, 0xa5, 0x80, 0xd0, 0x01, 0x60, 0x20, + 0x1e, 0xcf, 0x20, 0xd0, 0xd6, 0x20, 0xc3, 0xd0, + 0x4c, 0x1e, 0xcf, 0xa9, 0x80, 0xd0, 0x02, 0xa9, + 0x90, 0x8d, 0x4d, 0x02, 0x20, 0x93, 0xdf, 0xaa, + 0x20, 0x06, 0xd5, 0x8a, 0x48, 0x0a, 0xaa, 0xa9, + 0x00, 0x95, 0x99, 0x20, 0x25, 0xd1, 0xc9, 0x04, + 0xb0, 0x06, 0xf6, 0xb5, 0xd0, 0x02, 0xf6, 0xbb, + 0x68, 0xaa, 0x60, 0xa5, 0x83, 0xc9, 0x13, 0x90, + 0x02, 0x29, 0x0f, 0xc9, 0x0f, 0xd0, 0x02, 0xa9, + 0x10, 0xaa, 0x38, 0xbd, 0x2b, 0x02, 0x30, 0x06, + 0x29, 0x0f, 0x85, 0x82, 0xaa, 0x18, 0x60, 0xa5, + 0x83, 0xc9, 0x13, 0x90, 0x02, 0x29, 0x0f, 0xaa, + 0xbd, 0x2b, 0x02, 0xa8, 0x0a, 0x90, 0x0a, 0x30, + 0x0a, 0x98, 0x29, 0x0f, 0x85, 0x82, 0xaa, 0x18, + 0x60, 0x30, 0xf6, 0x38, 0x60, 0xa6, 0x82, 0xb5, + 0xec, 0x4a, 0x29, 0x07, 0xc9, 0x04, 0x60, 0x20, + 0x93, 0xdf, 0x0a, 0xaa, 0xa4, 0x82, 0x60, 0x20, + 0x2f, 0xd1, 0xb9, 0x44, 0x02, 0xf0, 0x12, 0xa1, + 0x99, 0x48, 0xb5, 0x99, 0xd9, 0x44, 0x02, 0xd0, + 0x04, 0xa9, 0xff, 0x95, 0x99, 0x68, 0xf6, 0x99, + 0x60, 0xa1, 0x99, 0xf6, 0x99, 0x60, 0x20, 0x37, + 0xd1, 0xd0, 0x36, 0x85, 0x85, 0xb9, 0x44, 0x02, + 0xf0, 0x08, 0xa9, 0x80, 0x99, 0xf2, 0x00, 0xa5, + 0x85, 0x60, 0x20, 0x1e, 0xcf, 0xa9, 0x00, 0x20, + 0xc8, 0xd4, 0x20, 0x37, 0xd1, 0xc9, 0x00, 0xf0, + 0x19, 0x85, 0x80, 0x20, 0x37, 0xd1, 0x85, 0x81, + 0x20, 0x1e, 0xcf, 0x20, 0xd3, 0xd1, 0x20, 0xd0, + 0xd6, 0x20, 0xc3, 0xd0, 0x20, 0x1e, 0xcf, 0xa5, + 0x85, 0x60, 0x20, 0x37, 0xd1, 0xa4, 0x82, 0x99, + 0x44, 0x02, 0xa5, 0x85, 0x60, 0x20, 0xf1, 0xcf, + 0xf0, 0x01, 0x60, 0x20, 0xd3, 0xd1, 0x20, 0x1e, + 0xf1, 0xa9, 0x00, 0x20, 0xc8, 0xd4, 0xa5, 0x80, + 0x20, 0xf1, 0xcf, 0xa5, 0x81, 0x20, 0xf1, 0xcf, + 0x20, 0xc7, 0xd0, 0x20, 0x1e, 0xcf, 0x20, 0xd0, + 0xd6, 0xa9, 0x02, 0x4c, 0xc8, 0xd4, 0x85, 0x6f, + 0x20, 0xe8, 0xd4, 0x18, 0x65, 0x6f, 0x95, 0x99, + 0x85, 0x94, 0x60, 0x20, 0x93, 0xdf, 0xaa, 0xbd, + 0x5b, 0x02, 0x29, 0x01, 0x85, 0x7f, 0x60, 0x38, + 0xb0, 0x01, 0x18, 0x08, 0x85, 0x6f, 0x20, 0x27, + 0xd2, 0x20, 0x7f, 0xd3, 0x85, 0x82, 0xa6, 0x83, + 0x28, 0x90, 0x02, 0x09, 0x80, 0x9d, 0x2b, 0x02, + 0x29, 0x3f, 0xa8, 0xa9, 0xff, 0x99, 0xa7, 0x00, + 0x99, 0xae, 0x00, 0x99, 0xcd, 0x00, 0xc6, 0x6f, + 0x30, 0x1c, 0x20, 0x8e, 0xd2, 0x10, 0x08, 0x20, + 0x5a, 0xd2, 0xa9, 0x70, 0x4c, 0xc8, 0xc1, 0x99, + 0xa7, 0x00, 0xc6, 0x6f, 0x30, 0x08, 0x20, 0x8e, + 0xd2, 0x30, 0xec, 0x99, 0xae, 0x00, 0x60, 0xa5, + 0x83, 0xc9, 0x0f, 0xd0, 0x01, 0x60, 0xa6, 0x83, + 0xbd, 0x2b, 0x02, 0xc9, 0xff, 0xf0, 0x22, 0x29, + 0x3f, 0x85, 0x82, 0xa9, 0xff, 0x9d, 0x2b, 0x02, + 0xa6, 0x82, 0xa9, 0x00, 0x95, 0xf2, 0x20, 0x5a, + 0xd2, 0xa6, 0x82, 0xa9, 0x01, 0xca, 0x30, 0x03, + 0x0a, 0xd0, 0xfa, 0x0d, 0x56, 0x02, 0x8d, 0x56, + 0x02, 0x60, 0xa6, 0x82, 0xb5, 0xa7, 0xc9, 0xff, + 0xf0, 0x09, 0x48, 0xa9, 0xff, 0x95, 0xa7, 0x68, + 0x20, 0xf3, 0xd2, 0xa6, 0x82, 0xb5, 0xae, 0xc9, + 0xff, 0xf0, 0x09, 0x48, 0xa9, 0xff, 0x95, 0xae, + 0x68, 0x20, 0xf3, 0xd2, 0xa6, 0x82, 0xb5, 0xcd, + 0xc9, 0xff, 0xf0, 0x09, 0x48, 0xa9, 0xff, 0x95, + 0xcd, 0x68, 0x20, 0xf3, 0xd2, 0x60, 0x98, 0x48, + 0xa0, 0x01, 0x20, 0xba, 0xd2, 0x10, 0x0c, 0x88, + 0x20, 0xba, 0xd2, 0x10, 0x06, 0x20, 0x39, 0xd3, + 0xaa, 0x30, 0x13, 0xb5, 0x00, 0x30, 0xfc, 0xa5, + 0x7f, 0x95, 0x00, 0x9d, 0x5b, 0x02, 0x8a, 0x0a, + 0xa8, 0xa9, 0x02, 0x99, 0x99, 0x00, 0x68, 0xa8, + 0x8a, 0x60, 0xa2, 0x07, 0xb9, 0x4f, 0x02, 0x3d, + 0xe9, 0xef, 0xf0, 0x04, 0xca, 0x10, 0xf5, 0x60, + 0xb9, 0x4f, 0x02, 0x5d, 0xe9, 0xef, 0x99, 0x4f, + 0x02, 0x8a, 0x88, 0x30, 0x03, 0x18, 0x69, 0x08, + 0xaa, 0x60, 0xa6, 0x82, 0xb5, 0xa7, 0x30, 0x09, + 0x8a, 0x18, 0x69, 0x07, 0xaa, 0xb5, 0xa7, 0x10, + 0xf0, 0xc9, 0xff, 0xf0, 0xec, 0x48, 0xa9, 0xff, + 0x95, 0xa7, 0x68, 0x29, 0x0f, 0xa8, 0xc8, 0xa2, + 0x10, 0x6e, 0x50, 0x02, 0x6e, 0x4f, 0x02, 0x88, + 0xd0, 0x01, 0x18, 0xca, 0x10, 0xf3, 0x60, 0xa9, + 0x0e, 0x85, 0x83, 0x20, 0x27, 0xd2, 0xc6, 0x83, + 0xd0, 0xf9, 0x60, 0xa9, 0x0e, 0x85, 0x83, 0xa6, + 0x83, 0xbd, 0x2b, 0x02, 0xc9, 0xff, 0xf0, 0x14, + 0x29, 0x3f, 0x85, 0x82, 0x20, 0x93, 0xdf, 0xaa, + 0xbd, 0x5b, 0x02, 0x29, 0x01, 0xc5, 0x7f, 0xd0, + 0x03, 0x20, 0x27, 0xd2, 0xc6, 0x83, 0x10, 0xdf, + 0x60, 0xa5, 0x6f, 0x48, 0xa0, 0x00, 0xb6, 0xfa, + 0xb5, 0xa7, 0x10, 0x04, 0xc9, 0xff, 0xd0, 0x16, + 0x8a, 0x18, 0x69, 0x07, 0xaa, 0xb5, 0xa7, 0x10, + 0x04, 0xc9, 0xff, 0xd0, 0x09, 0xc8, 0xc0, 0x05, + 0x90, 0xe4, 0xa2, 0xff, 0xd0, 0x1c, 0x86, 0x6f, + 0x29, 0x3f, 0xaa, 0xb5, 0x00, 0x30, 0xfc, 0xc9, + 0x02, 0x90, 0x08, 0xa6, 0x6f, 0xe0, 0x07, 0x90, + 0xd7, 0xb0, 0xe2, 0xa4, 0x6f, 0xa9, 0xff, 0x99, + 0xa7, 0x00, 0x68, 0x85, 0x6f, 0x8a, 0x60, 0xa0, + 0x00, 0xa9, 0x01, 0x2c, 0x56, 0x02, 0xd0, 0x09, + 0xc8, 0x0a, 0xd0, 0xf7, 0xa9, 0x70, 0x4c, 0xc8, + 0xc1, 0x49, 0xff, 0x2d, 0x56, 0x02, 0x8d, 0x56, + 0x02, 0x98, 0x60, 0x20, 0xeb, 0xd0, 0x20, 0x00, + 0xc1, 0x20, 0xaa, 0xd3, 0xa6, 0x82, 0xbd, 0x3e, + 0x02, 0x60, 0xa6, 0x82, 0x20, 0x25, 0xd1, 0xd0, + 0x03, 0x4c, 0x20, 0xe1, 0xa5, 0x83, 0xc9, 0x0f, + 0xf0, 0x5a, 0xb5, 0xf2, 0x29, 0x08, 0xd0, 0x13, + 0x20, 0x25, 0xd1, 0xc9, 0x07, 0xd0, 0x07, 0xa9, + 0x89, 0x95, 0xf2, 0x4c, 0xde, 0xd3, 0xa9, 0x00, + 0x95, 0xf2, 0x60, 0xa5, 0x83, 0xf0, 0x32, 0x20, + 0x25, 0xd1, 0xc9, 0x04, 0x90, 0x22, 0x20, 0x2f, + 0xd1, 0xb5, 0x99, 0xd9, 0x44, 0x02, 0xd0, 0x04, + 0xa9, 0x00, 0x95, 0x99, 0xf6, 0x99, 0xa1, 0x99, + 0x99, 0x3e, 0x02, 0xb5, 0x99, 0xd9, 0x44, 0x02, + 0xd0, 0x05, 0xa9, 0x81, 0x99, 0xf2, 0x00, 0x60, + 0x20, 0x56, 0xd1, 0xa6, 0x82, 0x9d, 0x3e, 0x02, + 0x60, 0xad, 0x54, 0x02, 0xf0, 0xf2, 0x20, 0x67, + 0xed, 0x4c, 0x03, 0xd4, 0x20, 0xe8, 0xd4, 0xc9, + 0xd4, 0xd0, 0x18, 0xa5, 0x95, 0xc9, 0x02, 0xd0, + 0x12, 0xa9, 0x0d, 0x85, 0x85, 0x20, 0x23, 0xc1, + 0xa9, 0x00, 0x20, 0xc1, 0xe6, 0xc6, 0xa5, 0xa9, + 0x80, 0xd0, 0x12, 0x20, 0x37, 0xd1, 0x85, 0x85, + 0xd0, 0x09, 0xa9, 0xd4, 0x20, 0xc8, 0xd4, 0xa9, + 0x02, 0x95, 0x9a, 0xa9, 0x88, 0x85, 0xf7, 0xa5, + 0x85, 0x8d, 0x43, 0x02, 0x60, 0x20, 0x93, 0xdf, + 0x0a, 0xaa, 0xa9, 0x00, 0x95, 0x99, 0xa1, 0x99, + 0xf0, 0x05, 0xd6, 0x99, 0x4c, 0x56, 0xd1, 0x60, + 0xa9, 0x80, 0xd0, 0x02, 0xa9, 0x90, 0x05, 0x7f, + 0x8d, 0x4d, 0x02, 0xa5, 0xf9, 0x20, 0xd3, 0xd6, + 0xa6, 0xf9, 0x4c, 0x93, 0xd5, 0xa9, 0x01, 0x8d, + 0x4a, 0x02, 0xa9, 0x11, 0x85, 0x83, 0x20, 0x46, + 0xdc, 0xa9, 0x02, 0x4c, 0xc8, 0xd4, 0xa9, 0x12, + 0x85, 0x83, 0x4c, 0xda, 0xdc, 0x20, 0x3b, 0xde, + 0xa9, 0x01, 0x85, 0x6f, 0xa5, 0x69, 0x48, 0xa9, + 0x03, 0x85, 0x69, 0x20, 0x2d, 0xf1, 0x68, 0x85, + 0x69, 0xa9, 0x00, 0x20, 0xc8, 0xd4, 0xa5, 0x80, + 0x20, 0xf1, 0xcf, 0xa5, 0x81, 0x20, 0xf1, 0xcf, + 0x20, 0xc7, 0xd0, 0x20, 0x99, 0xd5, 0xa9, 0x00, + 0x20, 0xc8, 0xd4, 0x20, 0xf1, 0xcf, 0xd0, 0xfb, + 0x20, 0xf1, 0xcf, 0xa9, 0xff, 0x4c, 0xf1, 0xcf, + 0x85, 0x6f, 0x20, 0x93, 0xdf, 0x0a, 0xaa, 0xb5, + 0x9a, 0x85, 0x95, 0xa5, 0x6f, 0x95, 0x99, 0x85, + 0x94, 0x60, 0xa9, 0x11, 0x85, 0x83, 0x20, 0x27, + 0xd2, 0xa9, 0x12, 0x85, 0x83, 0x4c, 0x27, 0xd2, + 0x20, 0x93, 0xdf, 0x0a, 0xaa, 0xb5, 0x9a, 0x85, + 0x95, 0xb5, 0x99, 0x85, 0x94, 0x60, 0x85, 0x71, + 0x20, 0x93, 0xdf, 0xaa, 0xbd, 0xe0, 0xfe, 0x85, + 0x72, 0xa0, 0x00, 0xb1, 0x71, 0x60, 0xbd, 0x5b, + 0x02, 0x29, 0x01, 0x0d, 0x4d, 0x02, 0x48, 0x86, + 0xf9, 0x8a, 0x0a, 0xaa, 0xb5, 0x07, 0x8d, 0x4d, + 0x02, 0xb5, 0x06, 0xf0, 0x2d, 0xcd, 0xd7, 0xfe, + 0xb0, 0x28, 0xaa, 0x68, 0x48, 0x29, 0xf0, 0xc9, + 0x90, 0xd0, 0x4f, 0x68, 0x48, 0x4a, 0xb0, 0x05, + 0xad, 0x01, 0x01, 0x90, 0x03, 0xad, 0x02, 0x01, + 0xf0, 0x05, 0xcd, 0xd5, 0xfe, 0xd0, 0x33, 0x8a, + 0x20, 0x4b, 0xf2, 0xcd, 0x4d, 0x02, 0xf0, 0x02, + 0xb0, 0x30, 0x20, 0x52, 0xd5, 0xa9, 0x66, 0x4c, + 0x45, 0xe6, 0xa5, 0xf9, 0x0a, 0xaa, 0xb5, 0x06, + 0x85, 0x80, 0xb5, 0x07, 0x85, 0x81, 0x60, 0xa5, + 0x80, 0xf0, 0xea, 0xcd, 0xd7, 0xfe, 0xb0, 0xe5, + 0x20, 0x4b, 0xf2, 0xc5, 0x81, 0xf0, 0xde, 0x90, + 0xdc, 0x60, 0x20, 0x52, 0xd5, 0xa9, 0x73, 0x4c, + 0x45, 0xe6, 0xa6, 0xf9, 0x68, 0x8d, 0x4d, 0x02, + 0x95, 0x00, 0x9d, 0x5b, 0x02, 0x60, 0xa9, 0x80, + 0xd0, 0x02, 0xa9, 0x90, 0x05, 0x7f, 0xa6, 0xf9, + 0x8d, 0x4d, 0x02, 0xad, 0x4d, 0x02, 0x20, 0x0e, + 0xd5, 0x20, 0xa6, 0xd5, 0xb0, 0xfb, 0x48, 0xa9, + 0x00, 0x8d, 0x98, 0x02, 0x68, 0x60, 0xb5, 0x00, + 0x30, 0x1a, 0xc9, 0x02, 0x90, 0x14, 0xc9, 0x08, + 0xf0, 0x08, 0xc9, 0x0b, 0xf0, 0x04, 0xc9, 0x0f, + 0xd0, 0x0c, 0x2c, 0x98, 0x02, 0x30, 0x03, 0x4c, + 0x3f, 0xd6, 0x18, 0x60, 0x38, 0x60, 0x98, 0x48, + 0xa5, 0x7f, 0x48, 0xbd, 0x5b, 0x02, 0x29, 0x01, + 0x85, 0x7f, 0xa8, 0xb9, 0xca, 0xfe, 0x8d, 0x6d, + 0x02, 0x20, 0xa6, 0xd6, 0xc9, 0x02, 0xb0, 0x03, + 0x4c, 0x6d, 0xd6, 0xbd, 0x5b, 0x02, 0x29, 0xf0, + 0x48, 0xc9, 0x90, 0xd0, 0x07, 0xa5, 0x7f, 0x09, + 0xb8, 0x9d, 0x5b, 0x02, 0x24, 0x6a, 0x70, 0x39, + 0xa9, 0x00, 0x8d, 0x99, 0x02, 0x8d, 0x9a, 0x02, + 0xac, 0x99, 0x02, 0xad, 0x9a, 0x02, 0x38, 0xf9, + 0xdb, 0xfe, 0x8d, 0x9a, 0x02, 0xb9, 0xdb, 0xfe, + 0x20, 0x76, 0xd6, 0xee, 0x99, 0x02, 0x20, 0xa6, + 0xd6, 0xc9, 0x02, 0x90, 0x08, 0xac, 0x99, 0x02, + 0xb9, 0xdb, 0xfe, 0xd0, 0xdb, 0xad, 0x9a, 0x02, + 0x20, 0x76, 0xd6, 0xb5, 0x00, 0xc9, 0x02, 0x90, + 0x2b, 0x24, 0x6a, 0x10, 0x0f, 0x68, 0xc9, 0x90, + 0xd0, 0x05, 0x05, 0x7f, 0x9d, 0x5b, 0x02, 0xb5, + 0x00, 0x20, 0x0a, 0xe6, 0x68, 0x2c, 0x98, 0x02, + 0x30, 0x23, 0x48, 0xa9, 0xc0, 0x05, 0x7f, 0x95, + 0x00, 0xb5, 0x00, 0x30, 0xfc, 0x20, 0xa6, 0xd6, + 0xc9, 0x02, 0xb0, 0xd9, 0x68, 0xc9, 0x90, 0xd0, + 0x0c, 0x05, 0x7f, 0x9d, 0x5b, 0x02, 0x20, 0xa6, + 0xd6, 0xc9, 0x02, 0xb0, 0xd2, 0x68, 0x85, 0x7f, + 0x68, 0xa8, 0xb5, 0x00, 0x18, 0x60, 0xc9, 0x00, + 0xf0, 0x18, 0x30, 0x0c, 0xa0, 0x01, 0x20, 0x93, + 0xd6, 0x38, 0xe9, 0x01, 0xd0, 0xf6, 0xf0, 0x0a, + 0xa0, 0xff, 0x20, 0x93, 0xd6, 0x18, 0x69, 0x01, + 0xd0, 0xf6, 0x60, 0x48, 0x98, 0xa4, 0x7f, 0x99, + 0xfe, 0x02, 0xd9, 0xfe, 0x02, 0xf0, 0xfb, 0xa9, + 0x00, 0x99, 0xfe, 0x02, 0x68, 0x60, 0xa5, 0x6a, + 0x29, 0x3f, 0xa8, 0xad, 0x6d, 0x02, 0x4d, 0x00, + 0x1c, 0x8d, 0x00, 0x1c, 0xbd, 0x5b, 0x02, 0x95, + 0x00, 0xb5, 0x00, 0x30, 0xfc, 0xc9, 0x02, 0x90, + 0x03, 0x88, 0xd0, 0xe7, 0x48, 0xad, 0x6d, 0x02, + 0x0d, 0x00, 0x1c, 0x8d, 0x00, 0x1c, 0x68, 0x60, + 0x20, 0x93, 0xdf, 0x0a, 0xa8, 0xa5, 0x80, 0x99, + 0x06, 0x00, 0xa5, 0x81, 0x99, 0x07, 0x00, 0xa5, + 0x7f, 0x0a, 0xaa, 0x60, 0xa5, 0x83, 0x48, 0xa5, + 0x82, 0x48, 0xa5, 0x81, 0x48, 0xa5, 0x80, 0x48, + 0xa9, 0x11, 0x85, 0x83, 0x20, 0x3b, 0xde, 0xad, + 0x4a, 0x02, 0x48, 0xa5, 0xe2, 0x29, 0x01, 0x85, + 0x7f, 0xa6, 0xf9, 0x5d, 0x5b, 0x02, 0x4a, 0x90, + 0x0c, 0xa2, 0x01, 0x8e, 0x92, 0x02, 0x20, 0xac, + 0xc5, 0xf0, 0x1d, 0xd0, 0x28, 0xad, 0x91, 0x02, + 0xf0, 0x0c, 0xc5, 0x81, 0xf0, 0x1f, 0x85, 0x81, + 0x20, 0x60, 0xd4, 0x4c, 0x3d, 0xd7, 0xa9, 0x01, + 0x8d, 0x92, 0x02, 0x20, 0x17, 0xc6, 0xd0, 0x0d, + 0x20, 0x8d, 0xd4, 0xa5, 0x81, 0x8d, 0x91, 0x02, + 0xa9, 0x02, 0x8d, 0x92, 0x02, 0xad, 0x92, 0x02, + 0x20, 0xc8, 0xd4, 0x68, 0x8d, 0x4a, 0x02, 0xc9, + 0x04, 0xd0, 0x02, 0x09, 0x80, 0x20, 0xf1, 0xcf, + 0x68, 0x8d, 0x80, 0x02, 0x20, 0xf1, 0xcf, 0x68, + 0x8d, 0x85, 0x02, 0x20, 0xf1, 0xcf, 0x20, 0x93, + 0xdf, 0xa8, 0xad, 0x7a, 0x02, 0xaa, 0xa9, 0x10, + 0x20, 0x6e, 0xc6, 0xa0, 0x10, 0xa9, 0x00, 0x91, + 0x94, 0xc8, 0xc0, 0x1b, 0x90, 0xf9, 0xad, 0x4a, + 0x02, 0xc9, 0x04, 0xd0, 0x13, 0xa0, 0x10, 0xad, + 0x59, 0x02, 0x91, 0x94, 0xc8, 0xad, 0x5a, 0x02, + 0x91, 0x94, 0xc8, 0xad, 0x58, 0x02, 0x91, 0x94, + 0x20, 0x64, 0xd4, 0x68, 0x85, 0x82, 0xaa, 0x68, + 0x85, 0x83, 0xad, 0x91, 0x02, 0x85, 0xd8, 0x9d, + 0x60, 0x02, 0xad, 0x92, 0x02, 0x85, 0xdd, 0x9d, + 0x66, 0x02, 0xad, 0x4a, 0x02, 0x85, 0xe7, 0xa5, + 0x7f, 0x85, 0xe2, 0x60, 0xa5, 0x83, 0x8d, 0x4c, + 0x02, 0x20, 0xb3, 0xc2, 0x8e, 0x2a, 0x02, 0xae, + 0x00, 0x02, 0xad, 0x4c, 0x02, 0xd0, 0x2c, 0xe0, + 0x2a, 0xd0, 0x28, 0xa5, 0x7e, 0xf0, 0x4d, 0x85, + 0x80, 0xad, 0x6e, 0x02, 0x85, 0x7f, 0x85, 0xe2, + 0xa9, 0x02, 0x85, 0xe7, 0xad, 0x6f, 0x02, 0x85, + 0x81, 0x20, 0x00, 0xc1, 0x20, 0x46, 0xdc, 0xa9, + 0x04, 0x05, 0x7f, 0xa6, 0x82, 0x99, 0xec, 0x00, + 0x4c, 0x94, 0xc1, 0xe0, 0x24, 0xd0, 0x1e, 0xad, + 0x4c, 0x02, 0xd0, 0x03, 0x4c, 0x55, 0xda, 0x20, + 0xd1, 0xc1, 0xad, 0x85, 0xfe, 0x85, 0x80, 0xa9, + 0x00, 0x85, 0x81, 0x20, 0x46, 0xdc, 0xa5, 0x7f, + 0x09, 0x02, 0x4c, 0xeb, 0xd7, 0xe0, 0x23, 0xd0, + 0x12, 0x4c, 0x84, 0xcb, 0xa9, 0x02, 0x8d, 0x96, + 0x02, 0xa9, 0x00, 0x85, 0x7f, 0x8d, 0x8e, 0x02, + 0x20, 0x42, 0xd0, 0x20, 0xe5, 0xc1, 0xd0, 0x04, + 0xa2, 0x00, 0xf0, 0x0c, 0x8a, 0xf0, 0x05, 0xa9, + 0x30, 0x4c, 0xc8, 0xc1, 0x88, 0xf0, 0x01, 0x88, + 0x8c, 0x7a, 0x02, 0xa9, 0x8d, 0x20, 0x68, 0xc2, + 0xe8, 0x8e, 0x78, 0x02, 0x20, 0x12, 0xc3, 0x20, + 0xca, 0xc3, 0x20, 0x9d, 0xc4, 0xa2, 0x00, 0x8e, + 0x58, 0x02, 0x8e, 0x97, 0x02, 0x8e, 0x4a, 0x02, + 0xe8, 0xec, 0x77, 0x02, 0xb0, 0x10, 0x20, 0x09, + 0xda, 0xe8, 0xec, 0x77, 0x02, 0xb0, 0x07, 0xc0, + 0x04, 0xf0, 0x3e, 0x20, 0x09, 0xda, 0xae, 0x4c, + 0x02, 0x86, 0x83, 0xe0, 0x02, 0xb0, 0x12, 0x8e, + 0x97, 0x02, 0xa9, 0x40, 0x8d, 0xf9, 0x02, 0xad, + 0x4a, 0x02, 0xd0, 0x1b, 0xa9, 0x02, 0x8d, 0x4a, + 0x02, 0xad, 0x4a, 0x02, 0xd0, 0x11, 0xa5, 0xe7, + 0x29, 0x07, 0x8d, 0x4a, 0x02, 0xad, 0x80, 0x02, + 0xd0, 0x05, 0xa9, 0x01, 0x8d, 0x4a, 0x02, 0xad, + 0x97, 0x02, 0xc9, 0x01, 0xf0, 0x18, 0x4c, 0x40, + 0xd9, 0xbc, 0x7a, 0x02, 0xb9, 0x00, 0x02, 0x8d, + 0x58, 0x02, 0xad, 0x80, 0x02, 0xd0, 0xb7, 0xa9, + 0x01, 0x8d, 0x97, 0x02, 0xd0, 0xb0, 0xa5, 0xe7, + 0x29, 0x80, 0xaa, 0xd0, 0x14, 0xa9, 0x20, 0x24, + 0xe7, 0xf0, 0x06, 0x20, 0xb6, 0xc8, 0x4c, 0xe3, + 0xd9, 0xad, 0x80, 0x02, 0xd0, 0x03, 0x4c, 0xe3, + 0xd9, 0xad, 0x00, 0x02, 0xc9, 0x40, 0xf0, 0x0d, + 0x8a, 0xd0, 0x05, 0xa9, 0x63, 0x4c, 0xc8, 0xc1, + 0xa9, 0x33, 0x4c, 0xc8, 0xc1, 0xa5, 0xe7, 0x29, + 0x07, 0xcd, 0x4a, 0x02, 0xd0, 0x67, 0xc9, 0x04, + 0xf0, 0x63, 0x20, 0xda, 0xdc, 0xa5, 0x82, 0x8d, + 0x70, 0x02, 0xa9, 0x11, 0x85, 0x83, 0x20, 0xeb, + 0xd0, 0xad, 0x94, 0x02, 0x20, 0xc8, 0xd4, 0xa0, + 0x00, 0xb1, 0x94, 0x09, 0x20, 0x91, 0x94, 0xa0, + 0x1a, 0xa5, 0x80, 0x91, 0x94, 0xc8, 0xa5, 0x81, + 0x91, 0x94, 0xae, 0x70, 0x02, 0xa5, 0xd8, 0x9d, + 0x60, 0x02, 0xa5, 0xdd, 0x9d, 0x66, 0x02, 0x20, + 0x3b, 0xde, 0x20, 0x64, 0xd4, 0x4c, 0xef, 0xd9, + 0xad, 0x80, 0x02, 0xd0, 0x05, 0xa9, 0x62, 0x4c, + 0xc8, 0xc1, 0xad, 0x97, 0x02, 0xc9, 0x03, 0xf0, + 0x0b, 0xa9, 0x20, 0x24, 0xe7, 0xf0, 0x05, 0xa9, + 0x60, 0x4c, 0xc8, 0xc1, 0xa5, 0xe7, 0x29, 0x07, + 0xcd, 0x4a, 0x02, 0xf0, 0x05, 0xa9, 0x64, 0x4c, + 0xc8, 0xc1, 0xa0, 0x00, 0x8c, 0x79, 0x02, 0xae, + 0x97, 0x02, 0xe0, 0x02, 0xd0, 0x1a, 0xc9, 0x04, + 0xf0, 0xeb, 0xb1, 0x94, 0x29, 0x4f, 0x91, 0x94, + 0xa5, 0x83, 0x48, 0xa9, 0x11, 0x85, 0x83, 0x20, + 0x3b, 0xde, 0x20, 0x64, 0xd4, 0x68, 0x85, 0x83, + 0x20, 0xa0, 0xd9, 0xad, 0x97, 0x02, 0xc9, 0x02, + 0xd0, 0x55, 0x20, 0x2a, 0xda, 0x4c, 0x94, 0xc1, + 0xa0, 0x13, 0xb1, 0x94, 0x8d, 0x59, 0x02, 0xc8, + 0xb1, 0x94, 0x8d, 0x5a, 0x02, 0xc8, 0xb1, 0x94, + 0xae, 0x58, 0x02, 0x8d, 0x58, 0x02, 0x8a, 0xf0, + 0x0a, 0xcd, 0x58, 0x02, 0xf0, 0x05, 0xa9, 0x50, + 0x20, 0xc8, 0xc1, 0xae, 0x79, 0x02, 0xbd, 0x80, + 0x02, 0x85, 0x80, 0xbd, 0x85, 0x02, 0x85, 0x81, + 0x20, 0x46, 0xdc, 0xa4, 0x82, 0xae, 0x79, 0x02, + 0xb5, 0xd8, 0x99, 0x60, 0x02, 0xb5, 0xdd, 0x99, + 0x66, 0x02, 0x60, 0xa5, 0xe2, 0x29, 0x01, 0x85, + 0x7f, 0x20, 0xda, 0xdc, 0x20, 0xe4, 0xd6, 0xa5, + 0x83, 0xc9, 0x02, 0xb0, 0x11, 0x20, 0x3e, 0xde, + 0xa5, 0x80, 0x85, 0x7e, 0xa5, 0x7f, 0x8d, 0x6e, + 0x02, 0xa5, 0x81, 0x8d, 0x6f, 0x02, 0x4c, 0x99, + 0xc1, 0xbc, 0x7a, 0x02, 0xb9, 0x00, 0x02, 0xa0, + 0x04, 0x88, 0x30, 0x08, 0xd9, 0xb2, 0xfe, 0xd0, + 0xf8, 0x8c, 0x97, 0x02, 0xa0, 0x05, 0x88, 0x30, + 0x08, 0xd9, 0xb6, 0xfe, 0xd0, 0xf8, 0x8c, 0x4a, + 0x02, 0x60, 0x20, 0x39, 0xca, 0xa9, 0x80, 0x20, + 0xa6, 0xdd, 0xf0, 0xf6, 0x20, 0x95, 0xde, 0xa6, + 0x81, 0xe8, 0x8a, 0xd0, 0x05, 0x20, 0xa3, 0xd1, + 0xa9, 0x02, 0x20, 0xc8, 0xd4, 0xa6, 0x82, 0xa9, + 0x01, 0x95, 0xf2, 0xa9, 0x80, 0x05, 0x82, 0xa6, + 0x83, 0x9d, 0x2b, 0x02, 0x60, 0xa9, 0x0c, 0x8d, + 0x2a, 0x02, 0xa9, 0x00, 0xae, 0x74, 0x02, 0xca, + 0xf0, 0x0b, 0xca, 0xd0, 0x21, 0xad, 0x01, 0x02, + 0x20, 0xbd, 0xc3, 0x30, 0x19, 0x85, 0xe2, 0xee, + 0x77, 0x02, 0xee, 0x78, 0x02, 0xee, 0x7a, 0x02, + 0xa9, 0x80, 0x85, 0xe7, 0xa9, 0x2a, 0x8d, 0x00, + 0x02, 0x8d, 0x01, 0x02, 0xd0, 0x18, 0x20, 0xe5, + 0xc1, 0xd0, 0x05, 0x20, 0xdc, 0xc2, 0xa0, 0x03, + 0x88, 0x88, 0x8c, 0x7a, 0x02, 0x20, 0x00, 0xc2, + 0x20, 0x98, 0xc3, 0x20, 0x20, 0xc3, 0x20, 0xca, + 0xc3, 0x20, 0xb7, 0xc7, 0x20, 0x9d, 0xc4, 0x20, + 0x9e, 0xec, 0x20, 0x37, 0xd1, 0xa6, 0x82, 0x9d, + 0x3e, 0x02, 0xa5, 0x7f, 0x8d, 0x8e, 0x02, 0x09, + 0x04, 0x95, 0xec, 0xa9, 0x00, 0x85, 0xa3, 0x60, + 0xa9, 0x00, 0x8d, 0xf9, 0x02, 0xa5, 0x83, 0xd0, + 0x0b, 0xa9, 0x00, 0x8d, 0x54, 0x02, 0x20, 0x27, + 0xd2, 0x4c, 0xda, 0xd4, 0xc9, 0x0f, 0xf0, 0x14, + 0x20, 0x02, 0xdb, 0xa5, 0x83, 0xc9, 0x02, 0x90, + 0xf0, 0xad, 0x6c, 0x02, 0xd0, 0x03, 0x4c, 0x94, + 0xc1, 0x4c, 0xad, 0xc1, 0xa9, 0x0e, 0x85, 0x83, + 0x20, 0x02, 0xdb, 0xc6, 0x83, 0x10, 0xf9, 0xad, + 0x6c, 0x02, 0xd0, 0x03, 0x4c, 0x94, 0xc1, 0x4c, + 0xad, 0xc1, 0xa6, 0x83, 0xbd, 0x2b, 0x02, 0xc9, + 0xff, 0xd0, 0x01, 0x60, 0x29, 0x0f, 0x85, 0x82, + 0x20, 0x25, 0xd1, 0xc9, 0x07, 0xf0, 0x0f, 0xc9, + 0x04, 0xf0, 0x11, 0x20, 0x07, 0xd1, 0xb0, 0x09, + 0x20, 0x62, 0xdb, 0x20, 0xa5, 0xdb, 0x20, 0xf4, + 0xee, 0x4c, 0x27, 0xd2, 0x20, 0xf1, 0xdd, 0x20, + 0x1e, 0xcf, 0x20, 0xcb, 0xe1, 0xa6, 0xd5, 0x86, + 0x73, 0xe6, 0x73, 0xa9, 0x00, 0x85, 0x70, 0x85, + 0x71, 0xa5, 0xd6, 0x38, 0xe9, 0x0e, 0x85, 0x72, + 0x20, 0x51, 0xdf, 0xa6, 0x82, 0xa5, 0x70, 0x95, + 0xb5, 0xa5, 0x71, 0x95, 0xbb, 0xa9, 0x40, 0x20, + 0xa6, 0xdd, 0xf0, 0x03, 0x20, 0xa5, 0xdb, 0x4c, + 0x27, 0xd2, 0xa6, 0x82, 0xb5, 0xb5, 0x15, 0xbb, + 0xd0, 0x0c, 0x20, 0xe8, 0xd4, 0xc9, 0x02, 0xd0, + 0x05, 0xa9, 0x0d, 0x20, 0xf1, 0xcf, 0x20, 0xe8, + 0xd4, 0xc9, 0x02, 0xd0, 0x0f, 0x20, 0x1e, 0xcf, + 0xa6, 0x82, 0xb5, 0xb5, 0xd0, 0x02, 0xd6, 0xbb, + 0xd6, 0xb5, 0xa9, 0x00, 0x38, 0xe9, 0x01, 0x48, + 0xa9, 0x00, 0x20, 0xc8, 0xd4, 0x20, 0xf1, 0xcf, + 0x68, 0x20, 0xf1, 0xcf, 0x20, 0xc7, 0xd0, 0x20, + 0x99, 0xd5, 0x4c, 0x1e, 0xcf, 0xa6, 0x82, 0x8e, + 0x70, 0x02, 0xa5, 0x83, 0x48, 0xbd, 0x60, 0x02, + 0x85, 0x81, 0xbd, 0x66, 0x02, 0x8d, 0x94, 0x02, + 0xb5, 0xec, 0x29, 0x01, 0x85, 0x7f, 0xad, 0x85, + 0xfe, 0x85, 0x80, 0x20, 0x93, 0xdf, 0x48, 0x85, + 0xf9, 0x20, 0x60, 0xd4, 0xa0, 0x00, 0xbd, 0xe0, + 0xfe, 0x85, 0x87, 0xad, 0x94, 0x02, 0x85, 0x86, + 0xb1, 0x86, 0x29, 0x20, 0xf0, 0x43, 0x20, 0x25, + 0xd1, 0xc9, 0x04, 0xf0, 0x44, 0xb1, 0x86, 0x29, + 0x8f, 0x91, 0x86, 0xc8, 0xb1, 0x86, 0x85, 0x80, + 0x84, 0x71, 0xa0, 0x1b, 0xb1, 0x86, 0x48, 0x88, + 0xb1, 0x86, 0xd0, 0x0a, 0x85, 0x80, 0x68, 0x85, + 0x81, 0xa9, 0x67, 0x20, 0x45, 0xe6, 0x48, 0xa9, + 0x00, 0x91, 0x86, 0xc8, 0x91, 0x86, 0x68, 0xa4, + 0x71, 0x91, 0x86, 0xc8, 0xb1, 0x86, 0x85, 0x81, + 0x68, 0x91, 0x86, 0x20, 0x7d, 0xc8, 0x4c, 0x29, + 0xdc, 0xb1, 0x86, 0x29, 0x0f, 0x09, 0x80, 0x91, + 0x86, 0xae, 0x70, 0x02, 0xa0, 0x1c, 0xb5, 0xb5, + 0x91, 0x86, 0xc8, 0xb5, 0xbb, 0x91, 0x86, 0x68, + 0xaa, 0xa9, 0x90, 0x05, 0x7f, 0x20, 0x90, 0xd5, + 0x68, 0x85, 0x83, 0x4c, 0x07, 0xd1, 0xa9, 0x01, + 0x20, 0xe2, 0xd1, 0x20, 0xb6, 0xdc, 0xad, 0x4a, + 0x02, 0x48, 0x0a, 0x05, 0x7f, 0x95, 0xec, 0x20, + 0x9b, 0xd0, 0xa6, 0x82, 0xa5, 0x80, 0xd0, 0x05, + 0xa5, 0x81, 0x9d, 0x44, 0x02, 0x68, 0xc9, 0x04, + 0xd0, 0x3f, 0xa4, 0x83, 0xb9, 0x2b, 0x02, 0x09, + 0x40, 0x99, 0x2b, 0x02, 0xad, 0x58, 0x02, 0x95, + 0xc7, 0x20, 0x8e, 0xd2, 0x10, 0x03, 0x4c, 0x0f, + 0xd2, 0xa6, 0x82, 0x95, 0xcd, 0xac, 0x59, 0x02, + 0x84, 0x80, 0xac, 0x5a, 0x02, 0x84, 0x81, 0x20, + 0xd3, 0xd6, 0x20, 0x73, 0xde, 0x20, 0x99, 0xd5, + 0xa6, 0x82, 0xa9, 0x02, 0x95, 0xc1, 0xa9, 0x00, + 0x20, 0xc8, 0xd4, 0x20, 0x53, 0xe1, 0x4c, 0x3e, + 0xde, 0x20, 0x56, 0xd1, 0xa6, 0x82, 0x9d, 0x3e, + 0x02, 0xa9, 0x88, 0x95, 0xf2, 0x60, 0xa6, 0x82, + 0xb5, 0xa7, 0x0a, 0xa8, 0xa9, 0x02, 0x99, 0x99, + 0x00, 0xb5, 0xae, 0x09, 0x80, 0x95, 0xae, 0x0a, + 0xa8, 0xa9, 0x02, 0x99, 0x99, 0x00, 0xa9, 0x00, + 0x95, 0xb5, 0x95, 0xbb, 0xa9, 0x00, 0x9d, 0x44, + 0x02, 0x60, 0x20, 0xa9, 0xf1, 0xa9, 0x01, 0x20, + 0xdf, 0xd1, 0x20, 0xd0, 0xd6, 0x20, 0xb6, 0xdc, + 0xa6, 0x82, 0xad, 0x4a, 0x02, 0x48, 0x0a, 0x05, + 0x7f, 0x95, 0xec, 0x68, 0xc9, 0x04, 0xf0, 0x05, + 0xa9, 0x01, 0x95, 0xf2, 0x60, 0xa4, 0x83, 0xb9, + 0x2b, 0x02, 0x29, 0x3f, 0x09, 0x40, 0x99, 0x2b, + 0x02, 0xad, 0x58, 0x02, 0x95, 0xc7, 0x20, 0x8e, + 0xd2, 0x10, 0x03, 0x4c, 0x0f, 0xd2, 0xa6, 0x82, + 0x95, 0xcd, 0x20, 0xc1, 0xde, 0x20, 0x1e, 0xf1, + 0xa5, 0x80, 0x8d, 0x59, 0x02, 0xa5, 0x81, 0x8d, + 0x5a, 0x02, 0xa6, 0x82, 0xb5, 0xcd, 0x20, 0xd3, + 0xd6, 0xa9, 0x00, 0x20, 0xe9, 0xde, 0xa9, 0x00, + 0x20, 0x8d, 0xdd, 0xa9, 0x11, 0x20, 0x8d, 0xdd, + 0xa9, 0x00, 0x20, 0x8d, 0xdd, 0xad, 0x58, 0x02, + 0x20, 0x8d, 0xdd, 0xa5, 0x80, 0x20, 0x8d, 0xdd, + 0xa5, 0x81, 0x20, 0x8d, 0xdd, 0xa9, 0x10, 0x20, + 0xe9, 0xde, 0x20, 0x3e, 0xde, 0xa5, 0x80, 0x20, + 0x8d, 0xdd, 0xa5, 0x81, 0x20, 0x8d, 0xdd, 0x20, + 0x6c, 0xde, 0x20, 0x99, 0xd5, 0xa9, 0x02, 0x20, + 0xc8, 0xd4, 0xa6, 0x82, 0x38, 0xa9, 0x00, 0xf5, + 0xc7, 0x95, 0xc1, 0x20, 0xe2, 0xe2, 0x20, 0x19, + 0xde, 0x20, 0x5e, 0xde, 0x20, 0x99, 0xd5, 0x20, + 0xf4, 0xee, 0x4c, 0x98, 0xdc, 0x48, 0xa6, 0x82, + 0xb5, 0xcd, 0x4c, 0xfd, 0xcf, 0x90, 0x06, 0xa6, + 0x82, 0x15, 0xec, 0xd0, 0x06, 0xa6, 0x82, 0x49, + 0xff, 0x35, 0xec, 0x95, 0xec, 0x60, 0xa6, 0x82, + 0x35, 0xec, 0x60, 0x20, 0x93, 0xdf, 0xaa, 0xbd, + 0x5b, 0x02, 0x29, 0xf0, 0xc9, 0x90, 0x60, 0xa2, + 0x00, 0x86, 0x71, 0xbd, 0x2b, 0x02, 0xc9, 0xff, + 0xd0, 0x08, 0xa6, 0x71, 0xe8, 0xe0, 0x10, 0x90, + 0xf0, 0x60, 0x86, 0x71, 0x29, 0x3f, 0xa8, 0xb9, + 0xec, 0x00, 0x29, 0x01, 0x85, 0x70, 0xae, 0x53, + 0x02, 0xb5, 0xe2, 0x29, 0x01, 0xc5, 0x70, 0xd0, + 0xe1, 0xb9, 0x60, 0x02, 0xd5, 0xd8, 0xd0, 0xda, + 0xb9, 0x66, 0x02, 0xd5, 0xdd, 0xd0, 0xd3, 0x18, + 0x60, 0x20, 0x9e, 0xdf, 0x50, 0x06, 0x20, 0x5e, + 0xde, 0x20, 0x99, 0xd5, 0x60, 0x20, 0x2b, 0xde, + 0xa5, 0x80, 0x91, 0x94, 0xc8, 0xa5, 0x81, 0x91, + 0x94, 0x4c, 0x05, 0xe1, 0x20, 0x2b, 0xde, 0xb1, + 0x94, 0x85, 0x80, 0xc8, 0xb1, 0x94, 0x85, 0x81, + 0x60, 0x20, 0x2b, 0xde, 0xa9, 0x00, 0x91, 0x94, + 0xc8, 0xa6, 0x82, 0xb5, 0xc1, 0xaa, 0xca, 0x8a, + 0x91, 0x94, 0x60, 0x20, 0x93, 0xdf, 0x0a, 0xaa, + 0xb5, 0x9a, 0x85, 0x95, 0xa9, 0x00, 0x85, 0x94, + 0xa0, 0x00, 0x60, 0x20, 0xeb, 0xd0, 0x20, 0x93, + 0xdf, 0x85, 0xf9, 0x0a, 0xa8, 0xb9, 0x06, 0x00, + 0x85, 0x80, 0xb9, 0x07, 0x00, 0x85, 0x81, 0x60, + 0xa9, 0x90, 0x8d, 0x4d, 0x02, 0xd0, 0x28, 0xa9, + 0x80, 0x8d, 0x4d, 0x02, 0xd0, 0x21, 0xa9, 0x90, + 0x8d, 0x4d, 0x02, 0xd0, 0x26, 0xa9, 0x80, 0x8d, + 0x4d, 0x02, 0xd0, 0x1f, 0xa9, 0x90, 0x8d, 0x4d, + 0x02, 0xd0, 0x02, 0xa9, 0x80, 0x8d, 0x4d, 0x02, + 0xa6, 0x82, 0xb5, 0xcd, 0xaa, 0x10, 0x13, 0x20, + 0xd0, 0xd6, 0x20, 0x93, 0xdf, 0xaa, 0xa5, 0x7f, + 0x9d, 0x5b, 0x02, 0x20, 0x15, 0xe1, 0x20, 0x93, + 0xdf, 0xaa, 0x4c, 0x06, 0xd5, 0xa9, 0x00, 0x20, + 0xc8, 0xd4, 0x20, 0x37, 0xd1, 0x85, 0x80, 0x20, + 0x37, 0xd1, 0x85, 0x81, 0x60, 0x48, 0xa9, 0x00, + 0x85, 0x6f, 0x85, 0x71, 0xb9, 0xe0, 0xfe, 0x85, + 0x70, 0xbd, 0xe0, 0xfe, 0x85, 0x72, 0x68, 0xa8, + 0x88, 0xb1, 0x6f, 0x91, 0x71, 0x88, 0x10, 0xf9, + 0x60, 0xa8, 0xb9, 0xe0, 0xfe, 0x85, 0x70, 0xa9, + 0x00, 0x85, 0x6f, 0xa8, 0x91, 0x6f, 0xc8, 0xd0, + 0xfb, 0x60, 0xa9, 0x00, 0x20, 0xdc, 0xde, 0xa0, + 0x02, 0xb1, 0x94, 0x60, 0x85, 0x94, 0xa6, 0x82, + 0xb5, 0xcd, 0xaa, 0xbd, 0xe0, 0xfe, 0x85, 0x95, + 0x60, 0x48, 0x20, 0xdc, 0xde, 0x48, 0x8a, 0x0a, + 0xaa, 0x68, 0x95, 0x9a, 0x68, 0x95, 0x99, 0x60, + 0x20, 0x66, 0xdf, 0x30, 0x0e, 0x50, 0x13, 0xa6, + 0x82, 0xb5, 0xcd, 0x20, 0x1b, 0xdf, 0x20, 0x66, + 0xdf, 0x10, 0x07, 0x20, 0xcb, 0xe1, 0x2c, 0xce, + 0xfe, 0x60, 0xa5, 0xd6, 0x20, 0xe9, 0xde, 0x2c, + 0xcd, 0xfe, 0x60, 0x85, 0xf9, 0xa9, 0x80, 0xd0, + 0x04, 0x85, 0xf9, 0xa9, 0x90, 0x48, 0xb5, 0xec, + 0x29, 0x01, 0x85, 0x7f, 0x68, 0x05, 0x7f, 0x8d, + 0x4d, 0x02, 0xb1, 0x94, 0x85, 0x80, 0xc8, 0xb1, + 0x94, 0x85, 0x81, 0xa5, 0xf9, 0x20, 0xd3, 0xd6, + 0xa6, 0xf9, 0x4c, 0x93, 0xd5, 0xa6, 0x82, 0xb5, + 0xcd, 0x4c, 0xeb, 0xd4, 0xa9, 0x78, 0x20, 0x5c, + 0xdf, 0xca, 0x10, 0xf8, 0xa5, 0x72, 0x4a, 0x20, + 0x5c, 0xdf, 0xa5, 0x73, 0x18, 0x65, 0x70, 0x85, + 0x70, 0x90, 0x02, 0xe6, 0x71, 0x60, 0x20, 0xd2, + 0xde, 0xc5, 0xd5, 0xd0, 0x0e, 0xa4, 0xd6, 0xb1, + 0x94, 0xf0, 0x04, 0x2c, 0xcd, 0xfe, 0x60, 0x2c, + 0xcf, 0xfe, 0x60, 0xa5, 0xd5, 0xc9, 0x06, 0xb0, + 0x0a, 0x0a, 0xa8, 0xa9, 0x04, 0x85, 0x94, 0xb1, + 0x94, 0xd0, 0x04, 0x2c, 0xd0, 0xfe, 0x60, 0x2c, + 0xce, 0xfe, 0x60, 0xa6, 0x82, 0xb5, 0xa7, 0x10, + 0x02, 0xb5, 0xae, 0x29, 0xbf, 0x60, 0xa6, 0x82, + 0x8e, 0x57, 0x02, 0xb5, 0xa7, 0x10, 0x09, 0x8a, + 0x18, 0x69, 0x07, 0x8d, 0x57, 0x02, 0xb5, 0xae, + 0x85, 0x70, 0x29, 0x1f, 0x24, 0x70, 0x60, 0xa6, + 0x82, 0xb5, 0xa7, 0x30, 0x02, 0xb5, 0xae, 0xc9, + 0xff, 0x60, 0xa6, 0x82, 0x09, 0x80, 0xb4, 0xa7, + 0x10, 0x03, 0x95, 0xa7, 0x60, 0x95, 0xae, 0x60, + 0xa9, 0x20, 0x20, 0x9d, 0xdd, 0xa9, 0x80, 0x20, + 0xa6, 0xdd, 0xd0, 0x41, 0xa6, 0x82, 0xf6, 0xb5, + 0xd0, 0x02, 0xf6, 0xbb, 0xa6, 0x82, 0xb5, 0xc1, + 0xf0, 0x2e, 0x20, 0xe8, 0xd4, 0xa6, 0x82, 0xd5, + 0xc1, 0x90, 0x03, 0x20, 0x3c, 0xe0, 0xa6, 0x82, + 0xb5, 0xc1, 0x20, 0xc8, 0xd4, 0xa1, 0x99, 0x85, + 0x85, 0xa9, 0x20, 0x20, 0x9d, 0xdd, 0x20, 0x04, + 0xe3, 0x48, 0x90, 0x28, 0xa9, 0x00, 0x20, 0xf6, + 0xd4, 0xd0, 0x21, 0x68, 0xc9, 0x02, 0xf0, 0x12, + 0xa9, 0x80, 0x20, 0x97, 0xdd, 0x20, 0x2f, 0xd1, + 0xb5, 0x99, 0x99, 0x44, 0x02, 0xa9, 0x0d, 0x85, + 0x85, 0x60, 0x20, 0x35, 0xe0, 0xa6, 0x82, 0xa9, + 0x00, 0x95, 0xc1, 0x60, 0x68, 0xa6, 0x82, 0x95, + 0xc1, 0x4c, 0x6e, 0xe1, 0x20, 0xd3, 0xd1, 0x20, + 0x95, 0xde, 0x20, 0x9e, 0xdf, 0x50, 0x16, 0x20, + 0x5e, 0xde, 0x20, 0x1e, 0xcf, 0xa9, 0x02, 0x20, + 0xc8, 0xd4, 0x20, 0xab, 0xdd, 0xd0, 0x24, 0x20, + 0x57, 0xde, 0x4c, 0x99, 0xd5, 0x20, 0x1e, 0xcf, + 0x20, 0xab, 0xdd, 0xd0, 0x06, 0x20, 0x57, 0xde, + 0x20, 0x99, 0xd5, 0x20, 0x95, 0xde, 0xa5, 0x80, + 0xf0, 0x09, 0x20, 0x1e, 0xcf, 0x20, 0x57, 0xde, + 0x20, 0x1e, 0xcf, 0x60, 0x20, 0x05, 0xe1, 0x20, + 0x93, 0xdf, 0x0a, 0xaa, 0xa5, 0x85, 0x81, 0x99, + 0xb4, 0x99, 0xc8, 0xd0, 0x09, 0xa4, 0x82, 0xb9, + 0xc1, 0x00, 0xf0, 0x0a, 0xa0, 0x02, 0x98, 0xa4, + 0x82, 0xd9, 0xc1, 0x00, 0xd0, 0x05, 0xa9, 0x20, + 0x4c, 0x97, 0xdd, 0xf6, 0x99, 0xd0, 0x03, 0x20, + 0x3c, 0xe0, 0x60, 0xa9, 0xa0, 0x20, 0xa6, 0xdd, + 0xd0, 0x27, 0xa5, 0x85, 0x20, 0x7c, 0xe0, 0xa5, + 0xf8, 0xf0, 0x0d, 0x60, 0xa9, 0x20, 0x20, 0xa6, + 0xdd, 0xf0, 0x05, 0xa9, 0x51, 0x8d, 0x6c, 0x02, + 0x20, 0xf3, 0xe0, 0x20, 0x53, 0xe1, 0xad, 0x6c, + 0x02, 0xf0, 0x03, 0x4c, 0xc8, 0xc1, 0x4c, 0xbc, + 0xe6, 0x29, 0x80, 0xd0, 0x05, 0xa5, 0xf8, 0xf0, + 0xdb, 0x60, 0xa5, 0x85, 0x48, 0x20, 0x1c, 0xe3, + 0x68, 0x85, 0x85, 0xa9, 0x80, 0x20, 0x9d, 0xdd, + 0x4c, 0xb2, 0xe0, 0xa9, 0x20, 0x20, 0xa6, 0xdd, + 0xd0, 0x0a, 0xa9, 0x00, 0x85, 0x85, 0x20, 0x7c, + 0xe0, 0x4c, 0xf3, 0xe0, 0x60, 0xa9, 0x40, 0x20, + 0x97, 0xdd, 0x20, 0x9e, 0xdf, 0x09, 0x40, 0xae, + 0x57, 0x02, 0x95, 0xa7, 0x60, 0x20, 0x9e, 0xdf, + 0x29, 0xbf, 0xae, 0x57, 0x02, 0x95, 0xa7, 0x60, + 0xa9, 0x80, 0x20, 0xa6, 0xdd, 0xd0, 0x37, 0x20, + 0x2f, 0xd1, 0xb5, 0x99, 0xd9, 0x44, 0x02, 0xf0, + 0x22, 0xf6, 0x99, 0xd0, 0x06, 0x20, 0x3c, 0xe0, + 0x20, 0x2f, 0xd1, 0xa1, 0x99, 0x99, 0x3e, 0x02, + 0xa9, 0x89, 0x99, 0xf2, 0x00, 0xb5, 0x99, 0xd9, + 0x44, 0x02, 0xf0, 0x01, 0x60, 0xa9, 0x81, 0x99, + 0xf2, 0x00, 0x60, 0x20, 0xd0, 0xdf, 0x20, 0x2f, + 0xd1, 0xa5, 0x85, 0x4c, 0x3d, 0xe1, 0xa6, 0x82, + 0xa9, 0x0d, 0x9d, 0x3e, 0x02, 0xa9, 0x81, 0x95, + 0xf2, 0xa9, 0x50, 0x20, 0xc8, 0xc1, 0xa6, 0x82, + 0xb5, 0xc1, 0x85, 0x87, 0xc6, 0x87, 0xc9, 0x02, + 0xd0, 0x04, 0xa9, 0xff, 0x85, 0x87, 0xb5, 0xc7, + 0x85, 0x88, 0x20, 0xe8, 0xd4, 0xa6, 0x82, 0xc5, + 0x87, 0x90, 0x19, 0xf0, 0x17, 0x20, 0x1e, 0xcf, + 0x20, 0xb2, 0xe1, 0x90, 0x08, 0xa6, 0x82, 0x9d, + 0x44, 0x02, 0x4c, 0x1e, 0xcf, 0x20, 0x1e, 0xcf, + 0xa9, 0xff, 0x85, 0x87, 0x20, 0xb2, 0xe1, 0xb0, + 0x03, 0x20, 0xe8, 0xd4, 0xa6, 0x82, 0x9d, 0x44, + 0x02, 0x60, 0x20, 0x2b, 0xde, 0xa4, 0x87, 0xb1, + 0x94, 0xd0, 0x0d, 0x88, 0xc0, 0x02, 0x90, 0x04, + 0xc6, 0x88, 0xd0, 0xf3, 0xc6, 0x88, 0x18, 0x60, + 0x98, 0x38, 0x60, 0x20, 0xd2, 0xde, 0x85, 0xd5, + 0xa9, 0x04, 0x85, 0x94, 0xa0, 0x0a, 0xd0, 0x04, + 0x88, 0x88, 0x30, 0x26, 0xb1, 0x94, 0xf0, 0xf8, + 0x98, 0x4a, 0xc5, 0xd5, 0xf0, 0x09, 0x85, 0xd5, + 0xa6, 0x82, 0xb5, 0xcd, 0x20, 0x1b, 0xdf, 0xa0, + 0x00, 0x84, 0x94, 0xb1, 0x94, 0xd0, 0x0b, 0xc8, + 0xb1, 0x94, 0xa8, 0x88, 0x84, 0xd6, 0x98, 0x4c, + 0xe9, 0xde, 0xa9, 0x67, 0x20, 0x45, 0xe6, 0x20, + 0xb3, 0xc2, 0xad, 0x01, 0x02, 0x85, 0x83, 0x20, + 0xeb, 0xd0, 0x90, 0x05, 0xa9, 0x70, 0x20, 0xc8, + 0xc1, 0xa9, 0xa0, 0x20, 0x9d, 0xdd, 0x20, 0x25, + 0xd1, 0xf0, 0x05, 0xa9, 0x64, 0x20, 0xc8, 0xc1, + 0xb5, 0xec, 0x29, 0x01, 0x85, 0x7f, 0xad, 0x02, + 0x02, 0x95, 0xb5, 0xad, 0x03, 0x02, 0x95, 0xbb, + 0xa6, 0x82, 0xa9, 0x89, 0x95, 0xf2, 0xad, 0x04, + 0x02, 0xf0, 0x10, 0x38, 0xe9, 0x01, 0xf0, 0x0b, + 0xd5, 0xc7, 0x90, 0x07, 0xa9, 0x51, 0x8d, 0x6c, + 0x02, 0xa9, 0x00, 0x85, 0xd4, 0x20, 0x0e, 0xce, + 0x20, 0xf8, 0xde, 0x50, 0x08, 0xa9, 0x80, 0x20, + 0x97, 0xdd, 0x4c, 0x5e, 0xe1, 0x20, 0x75, 0xe2, + 0xa9, 0x80, 0x20, 0xa6, 0xdd, 0xf0, 0x03, 0x4c, + 0x5e, 0xe1, 0x4c, 0x94, 0xc1, 0x20, 0x9c, 0xe2, + 0xa5, 0xd7, 0x20, 0xc8, 0xd4, 0xa6, 0x82, 0xb5, + 0xc7, 0x38, 0xe5, 0xd4, 0xb0, 0x03, 0x4c, 0x02, + 0xe2, 0x18, 0x65, 0xd7, 0x90, 0x03, 0x69, 0x01, + 0x38, 0x20, 0x09, 0xe0, 0x4c, 0x38, 0xe1, 0xa9, + 0x51, 0x20, 0xc8, 0xc1, 0xa5, 0x94, 0x85, 0x89, + 0xa5, 0x95, 0x85, 0x8a, 0x20, 0xd0, 0xe2, 0xd0, + 0x01, 0x60, 0x20, 0xf1, 0xdd, 0x20, 0x0c, 0xde, + 0xa5, 0x80, 0xf0, 0x0e, 0x20, 0xd3, 0xe2, 0xd0, + 0x06, 0x20, 0x1e, 0xcf, 0x4c, 0xda, 0xd2, 0x20, + 0xda, 0xd2, 0xa0, 0x00, 0xb1, 0x89, 0x85, 0x80, + 0xc8, 0xb1, 0x89, 0x85, 0x81, 0x4c, 0xaf, 0xd0, + 0x20, 0x3e, 0xde, 0xa0, 0x00, 0xb1, 0x89, 0xc5, + 0x80, 0xf0, 0x01, 0x60, 0xc8, 0xb1, 0x89, 0xc5, + 0x81, 0x60, 0x20, 0x2b, 0xde, 0xa0, 0x02, 0xa9, + 0x00, 0x91, 0x94, 0xc8, 0xd0, 0xfb, 0x20, 0x04, + 0xe3, 0x95, 0xc1, 0xa8, 0xa9, 0xff, 0x91, 0x94, + 0x20, 0x04, 0xe3, 0x90, 0xf4, 0xd0, 0x04, 0xa9, + 0x00, 0x95, 0xc1, 0x60, 0xa6, 0x82, 0xb5, 0xc1, + 0x38, 0xf0, 0x0d, 0x18, 0x75, 0xc7, 0x90, 0x0b, + 0xd0, 0x06, 0xa9, 0x02, 0x2c, 0xcc, 0xfe, 0x60, + 0x69, 0x01, 0x38, 0x60, 0x20, 0xd3, 0xd1, 0x20, + 0xcb, 0xe1, 0x20, 0x9c, 0xe2, 0x20, 0x7b, 0xcf, + 0xa5, 0xd6, 0x85, 0x87, 0xa5, 0xd5, 0x85, 0x86, + 0xa9, 0x00, 0x85, 0x88, 0xa9, 0x00, 0x85, 0xd4, + 0x20, 0x0e, 0xce, 0x20, 0x4d, 0xef, 0xa4, 0x82, + 0xb6, 0xc7, 0xca, 0x8a, 0x18, 0x65, 0xd7, 0x90, + 0x0c, 0xe6, 0xd6, 0xe6, 0xd6, 0xd0, 0x06, 0xe6, + 0xd5, 0xa9, 0x10, 0x85, 0xd6, 0xa5, 0x87, 0x18, + 0x69, 0x02, 0x20, 0xe9, 0xde, 0xa5, 0xd5, 0xc9, + 0x06, 0x90, 0x05, 0xa9, 0x52, 0x20, 0xc8, 0xc1, + 0xa5, 0xd6, 0x38, 0xe5, 0x87, 0xb0, 0x03, 0xe9, + 0x0f, 0x18, 0x85, 0x72, 0xa5, 0xd5, 0xe5, 0x86, + 0x85, 0x73, 0xa2, 0x00, 0x86, 0x70, 0x86, 0x71, + 0xaa, 0x20, 0x51, 0xdf, 0xa5, 0x71, 0xd0, 0x07, + 0xa6, 0x70, 0xca, 0xd0, 0x02, 0xe6, 0x88, 0xcd, + 0x73, 0x02, 0x90, 0x09, 0xd0, 0xcd, 0xad, 0x72, + 0x02, 0xc5, 0x70, 0x90, 0xc6, 0xa9, 0x01, 0x20, + 0xf6, 0xd4, 0x18, 0x69, 0x01, 0xa6, 0x82, 0x95, + 0xc1, 0x20, 0x1e, 0xf1, 0x20, 0xfd, 0xdd, 0xa5, + 0x88, 0xd0, 0x15, 0x20, 0x5e, 0xde, 0x20, 0x1e, + 0xcf, 0x20, 0xd0, 0xd6, 0x20, 0x1e, 0xf1, 0x20, + 0xfd, 0xdd, 0x20, 0xe2, 0xe2, 0x4c, 0xd4, 0xe3, + 0x20, 0x1e, 0xcf, 0x20, 0xd0, 0xd6, 0x20, 0xe2, + 0xe2, 0x20, 0x19, 0xde, 0x20, 0x5e, 0xde, 0x20, + 0x0c, 0xde, 0xa5, 0x80, 0x48, 0xa5, 0x81, 0x48, + 0x20, 0x3e, 0xde, 0xa5, 0x81, 0x48, 0xa5, 0x80, + 0x48, 0x20, 0x45, 0xdf, 0xaa, 0xd0, 0x0a, 0x20, + 0x4e, 0xe4, 0xa9, 0x10, 0x20, 0xe9, 0xde, 0xe6, + 0x86, 0x68, 0x20, 0x8d, 0xdd, 0x68, 0x20, 0x8d, + 0xdd, 0x68, 0x85, 0x81, 0x68, 0x85, 0x80, 0xf0, + 0x0f, 0xa5, 0x86, 0xc5, 0xd5, 0xd0, 0xa7, 0x20, + 0x45, 0xdf, 0xc5, 0xd6, 0x90, 0xa0, 0xf0, 0xb0, + 0x20, 0x45, 0xdf, 0x48, 0xa9, 0x00, 0x20, 0xdc, + 0xde, 0xa9, 0x00, 0xa8, 0x91, 0x94, 0xc8, 0x68, + 0x38, 0xe9, 0x01, 0x91, 0x94, 0x20, 0x6c, 0xde, + 0x20, 0x99, 0xd5, 0x20, 0xf4, 0xee, 0x20, 0x0e, + 0xce, 0x20, 0x1e, 0xcf, 0x20, 0xf8, 0xde, 0x70, + 0x03, 0x4c, 0x75, 0xe2, 0xa9, 0x80, 0x20, 0x97, + 0xdd, 0xa9, 0x50, 0x20, 0xc8, 0xc1, 0x20, 0x1e, + 0xf1, 0x20, 0x1e, 0xcf, 0x20, 0xf1, 0xdd, 0x20, + 0x93, 0xdf, 0x48, 0x20, 0xc1, 0xde, 0xa6, 0x82, + 0xb5, 0xcd, 0xa8, 0x68, 0xaa, 0xa9, 0x10, 0x20, + 0xa5, 0xde, 0xa9, 0x00, 0x20, 0xdc, 0xde, 0xa0, + 0x02, 0xb1, 0x94, 0x48, 0xa9, 0x00, 0x20, 0xc8, + 0xd4, 0x68, 0x18, 0x69, 0x01, 0x91, 0x94, 0x0a, + 0x69, 0x04, 0x85, 0x89, 0xa8, 0x38, 0xe9, 0x02, + 0x85, 0x8a, 0xa5, 0x80, 0x85, 0x87, 0x91, 0x94, + 0xc8, 0xa5, 0x81, 0x85, 0x88, 0x91, 0x94, 0xa0, + 0x00, 0x98, 0x91, 0x94, 0xc8, 0xa9, 0x11, 0x91, + 0x94, 0xa9, 0x10, 0x20, 0xc8, 0xd4, 0x20, 0x50, + 0xde, 0x20, 0x99, 0xd5, 0xa6, 0x82, 0xb5, 0xcd, + 0x48, 0x20, 0x9e, 0xdf, 0xa6, 0x82, 0x95, 0xcd, + 0x68, 0xae, 0x57, 0x02, 0x95, 0xa7, 0xa9, 0x00, + 0x20, 0xc8, 0xd4, 0xa0, 0x00, 0xa5, 0x80, 0x91, + 0x94, 0xc8, 0xa5, 0x81, 0x91, 0x94, 0x4c, 0xde, + 0xe4, 0x20, 0x93, 0xdf, 0xa6, 0x82, 0x20, 0x1b, + 0xdf, 0xa9, 0x00, 0x20, 0xc8, 0xd4, 0xc6, 0x8a, + 0xc6, 0x8a, 0xa4, 0x89, 0xa5, 0x87, 0x91, 0x94, + 0xc8, 0xa5, 0x88, 0x91, 0x94, 0x20, 0x5e, 0xde, + 0x20, 0x99, 0xd5, 0xa4, 0x8a, 0xc0, 0x03, 0xb0, + 0xd8, 0x4c, 0x1e, 0xcf, 0x00, 0xa0, 0x4f, 0xcb, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x27, 0xd2, 0x45, + 0x41, 0x44, 0x89, 0x52, 0x83, 0x20, 0x54, 0x4f, + 0x4f, 0x20, 0x4c, 0x41, 0x52, 0x47, 0xc5, 0x50, + 0x8b, 0x06, 0x20, 0x50, 0x52, 0x45, 0x53, 0x45, + 0x4e, 0xd4, 0x51, 0xcf, 0x56, 0x45, 0x52, 0x46, + 0x4c, 0x4f, 0x57, 0x20, 0x49, 0x4e, 0x8b, 0x25, + 0x28, 0x8a, 0x89, 0x26, 0x8a, 0x20, 0x50, 0x52, + 0x4f, 0x54, 0x45, 0x43, 0x54, 0x20, 0x4f, 0xce, + 0x29, 0x88, 0x20, 0x49, 0x44, 0x85, 0x30, 0x31, + 0x32, 0x33, 0x34, 0xd3, 0x59, 0x4e, 0x54, 0x41, + 0x58, 0x89, 0x60, 0x8a, 0x03, 0x84, 0x63, 0x83, + 0x20, 0x45, 0x58, 0x49, 0x53, 0x54, 0xd3, 0x64, + 0x83, 0x20, 0x54, 0x59, 0x50, 0x45, 0x85, 0x65, + 0xce, 0x4f, 0x20, 0x42, 0x4c, 0x4f, 0x43, 0xcb, + 0x66, 0x67, 0xc9, 0x4c, 0x4c, 0x45, 0x47, 0x41, + 0x4c, 0x20, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x20, + 0x4f, 0x52, 0x20, 0x53, 0x45, 0x43, 0x54, 0x4f, + 0xd2, 0x61, 0x83, 0x06, 0x84, 0x39, 0x62, 0x83, + 0x06, 0x87, 0x01, 0x83, 0x53, 0x20, 0x53, 0x43, + 0x52, 0x41, 0x54, 0x43, 0x48, 0x45, 0xc4, 0x70, + 0xce, 0x4f, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x4e, + 0x45, 0xcc, 0x71, 0xc4, 0x49, 0x52, 0x89, 0x72, + 0x88, 0x20, 0x46, 0x55, 0x4c, 0xcc, 0x73, 0xc3, + 0x42, 0x4d, 0x20, 0x44, 0x4f, 0x53, 0x20, 0x56, + 0x32, 0x2e, 0x36, 0x20, 0x31, 0x35, 0x34, 0xb1, + 0x74, 0xc4, 0x52, 0x49, 0x56, 0x45, 0x06, 0x20, + 0x52, 0x45, 0x41, 0x44, 0xd9, 0x09, 0xc5, 0x52, + 0x52, 0x4f, 0xd2, 0x0a, 0xd7, 0x52, 0x49, 0x54, + 0xc5, 0x03, 0xc6, 0x49, 0x4c, 0xc5, 0x04, 0xcf, + 0x50, 0x45, 0xce, 0x05, 0xcd, 0x49, 0x53, 0x4d, + 0x41, 0x54, 0x43, 0xc8, 0x06, 0xce, 0x4f, 0xd4, + 0x07, 0xc6, 0x4f, 0x55, 0x4e, 0xc4, 0x08, 0xc4, + 0x49, 0x53, 0xcb, 0x0b, 0xd2, 0x45, 0x43, 0x4f, + 0x52, 0xc4, 0x48, 0x86, 0xf9, 0x8a, 0x0a, 0xaa, + 0xb5, 0x06, 0x85, 0x80, 0xb5, 0x07, 0x85, 0x81, + 0x68, 0x29, 0x0f, 0xf0, 0x08, 0xc9, 0x0f, 0xd0, + 0x06, 0xa9, 0x74, 0xd0, 0x08, 0xa9, 0x06, 0x09, + 0x20, 0xaa, 0xca, 0xca, 0x8a, 0x48, 0xad, 0x2a, + 0x02, 0xc9, 0x00, 0xd0, 0x0f, 0xa9, 0xff, 0x8d, + 0x2a, 0x02, 0x68, 0x20, 0xc7, 0xe6, 0x20, 0x42, + 0xd0, 0x4c, 0x48, 0xe6, 0x68, 0x20, 0xc7, 0xe6, + 0x20, 0xbd, 0xc1, 0xa9, 0x00, 0x8d, 0xf9, 0x02, + 0x20, 0x2c, 0xc1, 0x20, 0xda, 0xd4, 0xa9, 0x00, + 0x85, 0xa3, 0xa2, 0x45, 0x9a, 0xa5, 0x84, 0x29, + 0x0f, 0x85, 0x83, 0xc9, 0x0f, 0xf0, 0x31, 0x78, + 0xa5, 0x79, 0xd0, 0x1c, 0xa5, 0x7a, 0xd0, 0x10, + 0xa6, 0x83, 0xbd, 0x2b, 0x02, 0xc9, 0xff, 0xf0, + 0x1f, 0x29, 0x0f, 0x85, 0x82, 0x4c, 0x8e, 0xe6, + 0x20, 0xeb, 0xd0, 0xea, 0xea, 0xea, 0xd0, 0x06, + 0x20, 0x07, 0xd1, 0xea, 0xea, 0xea, 0x20, 0x25, + 0xd1, 0xc9, 0x04, 0xb0, 0x03, 0x20, 0x27, 0xd2, + 0x4c, 0xe7, 0xeb, 0xaa, 0xa9, 0x00, 0xf8, 0xe0, + 0x00, 0xf0, 0x07, 0x18, 0x69, 0x01, 0xca, 0x4c, + 0x9f, 0xe6, 0xd8, 0xaa, 0x4a, 0x4a, 0x4a, 0x4a, + 0x20, 0xb4, 0xe6, 0x8a, 0x29, 0x0f, 0x09, 0x30, + 0x91, 0xa5, 0xc8, 0x60, 0x20, 0x23, 0xc1, 0xa9, + 0x00, 0xa0, 0x00, 0x84, 0x80, 0x84, 0x81, 0xa0, + 0x00, 0xa2, 0xd5, 0x86, 0xa5, 0xa2, 0x02, 0x86, + 0xa6, 0x20, 0xab, 0xe6, 0xa9, 0x2c, 0x91, 0xa5, + 0xc8, 0xad, 0xd5, 0x02, 0x8d, 0x43, 0x02, 0x8a, + 0x20, 0x06, 0xe7, 0xa9, 0x2c, 0x91, 0xa5, 0xc8, + 0xa5, 0x80, 0x20, 0x9b, 0xe6, 0xa9, 0x2c, 0x91, + 0xa5, 0xc8, 0xa5, 0x81, 0x20, 0x9b, 0xe6, 0x88, + 0x98, 0x18, 0x69, 0xd5, 0x8d, 0x49, 0x02, 0xe6, + 0xa5, 0xa9, 0x88, 0x85, 0xf7, 0x60, 0xaa, 0xa5, + 0x86, 0x48, 0xa5, 0x87, 0x48, 0xa9, 0xfc, 0x85, + 0x86, 0xa9, 0xe4, 0x85, 0x87, 0x8a, 0xa2, 0x00, + 0xc1, 0x86, 0xf0, 0x21, 0x48, 0x20, 0x75, 0xe7, + 0x90, 0x05, 0x20, 0x75, 0xe7, 0x90, 0xfb, 0xa5, + 0x87, 0xc9, 0xe6, 0x90, 0x08, 0xd0, 0x0a, 0xa9, + 0x0a, 0xc5, 0x86, 0x90, 0x04, 0x68, 0x4c, 0x18, + 0xe7, 0x68, 0x4c, 0x4d, 0xe7, 0x20, 0x67, 0xe7, + 0x90, 0xfb, 0x20, 0x54, 0xe7, 0x20, 0x67, 0xe7, + 0x90, 0xf8, 0x20, 0x54, 0xe7, 0x68, 0x85, 0x87, + 0x68, 0x85, 0x86, 0x60, 0xc9, 0x20, 0xb0, 0x0b, + 0xaa, 0xa9, 0x20, 0x91, 0xa5, 0xc8, 0x8a, 0x20, + 0x06, 0xe7, 0x60, 0x91, 0xa5, 0xc8, 0x60, 0xe6, + 0x86, 0xd0, 0x02, 0xe6, 0x87, 0xa1, 0x86, 0x0a, + 0xa1, 0x86, 0x29, 0x7f, 0x60, 0x20, 0x6d, 0xe7, + 0xe6, 0x86, 0xd0, 0x02, 0xe6, 0x87, 0x60, 0x60, + 0x60, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, + 0xea, 0xea, 0x60, 0xa9, 0x8d, 0x20, 0x68, 0xc2, + 0x20, 0x58, 0xf2, 0xad, 0x78, 0x02, 0x48, 0xa9, + 0x01, 0x8d, 0x78, 0x02, 0xa9, 0xff, 0x85, 0x86, + 0x20, 0x4f, 0xc4, 0xad, 0x80, 0x02, 0xd0, 0x05, + 0xa9, 0x39, 0x20, 0xc8, 0xc1, 0x68, 0x8d, 0x78, + 0x02, 0xad, 0x80, 0x02, 0x85, 0x80, 0xad, 0x85, + 0x02, 0x85, 0x81, 0xa9, 0x03, 0x20, 0x77, 0xd4, + 0xa9, 0x00, 0x85, 0x87, 0x20, 0x39, 0xe8, 0x85, + 0x88, 0x20, 0x4b, 0xe8, 0x20, 0x39, 0xe8, 0x85, + 0x89, 0x20, 0x4b, 0xe8, 0xa5, 0x86, 0xf0, 0x0a, + 0xa5, 0x88, 0x48, 0xa5, 0x89, 0x48, 0xa9, 0x00, + 0x85, 0x86, 0x20, 0x39, 0xe8, 0x85, 0x8a, 0x20, + 0x4b, 0xe8, 0x20, 0x39, 0xe8, 0xa0, 0x00, 0x91, + 0x88, 0x20, 0x4b, 0xe8, 0xa5, 0x88, 0x18, 0x69, + 0x01, 0x85, 0x88, 0x90, 0x02, 0xe6, 0x89, 0xc6, + 0x8a, 0xd0, 0xe7, 0x20, 0x35, 0xca, 0xa5, 0x85, + 0xc5, 0x87, 0xf0, 0x08, 0x20, 0x3e, 0xde, 0xa9, + 0x50, 0x20, 0x45, 0xe6, 0xa5, 0xf8, 0xd0, 0xa8, + 0x68, 0x85, 0x89, 0x68, 0x85, 0x88, 0x6c, 0x88, + 0x00, 0x20, 0x35, 0xca, 0xa5, 0xf8, 0xd0, 0x08, + 0x20, 0x3e, 0xde, 0xa9, 0x51, 0x20, 0x45, 0xe6, + 0xa5, 0x85, 0x60, 0x18, 0x65, 0x87, 0x69, 0x00, + 0x85, 0x87, 0x60, 0xad, 0x01, 0x18, 0xa9, 0x01, + 0x85, 0x7c, 0x60, 0x78, 0xa9, 0x00, 0x85, 0x7c, + 0x85, 0x79, 0x85, 0x7a, 0xa2, 0x45, 0x9a, 0xa9, + 0x80, 0x85, 0xf8, 0x85, 0x7d, 0x20, 0xb7, 0xe9, + 0x20, 0xa5, 0xe9, 0xad, 0x00, 0x18, 0x09, 0x10, + 0x8d, 0x00, 0x18, 0xad, 0x00, 0x18, 0x10, 0x57, + 0x29, 0x04, 0xd0, 0xf7, 0x20, 0xc9, 0xe9, 0xc9, + 0x3f, 0xd0, 0x06, 0xa9, 0x00, 0x85, 0x79, 0xf0, + 0x71, 0xc9, 0x5f, 0xd0, 0x06, 0xa9, 0x00, 0x85, + 0x7a, 0xf0, 0x67, 0xc5, 0x78, 0xd0, 0x0a, 0xa9, + 0x01, 0x85, 0x7a, 0xa9, 0x00, 0x85, 0x79, 0xf0, + 0x29, 0xc5, 0x77, 0xd0, 0x0a, 0xa9, 0x01, 0x85, + 0x79, 0xa9, 0x00, 0x85, 0x7a, 0xf0, 0x1b, 0xaa, + 0x29, 0x60, 0xc9, 0x60, 0xd0, 0x3f, 0x8a, 0x85, + 0x84, 0x29, 0x0f, 0x85, 0x83, 0xa5, 0x84, 0x29, + 0xf0, 0xc9, 0xe0, 0xd0, 0x35, 0x58, 0x20, 0xc0, + 0xda, 0x78, 0x2c, 0x00, 0x18, 0x30, 0xad, 0xa9, + 0x00, 0x85, 0x7d, 0xad, 0x00, 0x18, 0x29, 0xef, + 0x8d, 0x00, 0x18, 0xa5, 0x79, 0xf0, 0x06, 0x20, + 0x2e, 0xea, 0x4c, 0xe7, 0xeb, 0xa5, 0x7a, 0xf0, + 0x09, 0x20, 0x9c, 0xe9, 0x20, 0xae, 0xe9, 0x20, + 0x09, 0xe9, 0x4c, 0x4e, 0xea, 0xa9, 0x10, 0x8d, + 0x00, 0x18, 0x2c, 0x00, 0x18, 0x10, 0xd0, 0x30, + 0xf9, 0x78, 0x20, 0xeb, 0xd0, 0xb0, 0x06, 0xa6, + 0x82, 0xb5, 0xf2, 0x30, 0x01, 0x60, 0x20, 0x59, + 0xea, 0x20, 0xc0, 0xe9, 0x29, 0x01, 0x08, 0x20, + 0xb7, 0xe9, 0x28, 0xf0, 0x12, 0x20, 0x59, 0xea, + 0x20, 0xc0, 0xe9, 0x29, 0x01, 0xd0, 0xf6, 0xa6, + 0x82, 0xb5, 0xf2, 0x29, 0x08, 0xd0, 0x14, 0x20, + 0x59, 0xea, 0x20, 0xc0, 0xe9, 0x29, 0x01, 0xd0, + 0xf6, 0x20, 0x59, 0xea, 0x20, 0xc0, 0xe9, 0x29, + 0x01, 0xf0, 0xf6, 0x20, 0xae, 0xe9, 0x20, 0x59, + 0xea, 0x20, 0xc0, 0xe9, 0x29, 0x01, 0xd0, 0xf3, + 0xa9, 0x08, 0x85, 0x98, 0x20, 0xc0, 0xe9, 0x29, + 0x01, 0xd0, 0x36, 0xa6, 0x82, 0xbd, 0x3e, 0x02, + 0x6a, 0x9d, 0x3e, 0x02, 0xb0, 0x05, 0x20, 0xa5, + 0xe9, 0xd0, 0x03, 0x20, 0x9c, 0xe9, 0x20, 0xb7, + 0xe9, 0xa5, 0x23, 0xd0, 0x03, 0x20, 0xf3, 0xfe, + 0x20, 0xfb, 0xfe, 0xc6, 0x98, 0xd0, 0xd5, 0x20, + 0x59, 0xea, 0x20, 0xc0, 0xe9, 0x29, 0x01, 0xf0, + 0xf6, 0x58, 0x20, 0xaa, 0xd3, 0x78, 0x4c, 0x0f, + 0xe9, 0x4c, 0x4e, 0xea, 0xad, 0x00, 0x18, 0x29, + 0xfd, 0x8d, 0x00, 0x18, 0x60, 0xad, 0x00, 0x18, + 0x09, 0x02, 0x8d, 0x00, 0x18, 0x60, 0xad, 0x00, + 0x18, 0x09, 0x08, 0x8d, 0x00, 0x18, 0x60, 0xad, + 0x00, 0x18, 0x29, 0xf7, 0x8d, 0x00, 0x18, 0x60, + 0xad, 0x00, 0x18, 0xcd, 0x00, 0x18, 0xd0, 0xf8, + 0x60, 0xa9, 0x08, 0x85, 0x98, 0x20, 0x59, 0xea, + 0x20, 0xc0, 0xe9, 0x29, 0x04, 0xd0, 0xf6, 0x20, + 0x9c, 0xe9, 0xa9, 0x01, 0x4c, 0x20, 0xff, 0x20, + 0x59, 0xea, 0xad, 0x0d, 0x18, 0x29, 0x40, 0xd0, + 0x09, 0x20, 0xc0, 0xe9, 0x29, 0x04, 0xf0, 0xef, + 0xd0, 0x19, 0x20, 0xa5, 0xe9, 0xa2, 0x0a, 0xca, + 0xd0, 0xfd, 0x20, 0x9c, 0xe9, 0x20, 0x59, 0xea, + 0x20, 0xc0, 0xe9, 0x29, 0x04, 0xf0, 0xf6, 0xa9, + 0x00, 0x85, 0xf8, 0xad, 0x00, 0x18, 0x49, 0x01, + 0x4a, 0x29, 0x02, 0xd0, 0xf6, 0xea, 0xea, 0xea, + 0x66, 0x85, 0x20, 0x59, 0xea, 0x20, 0xc0, 0xe9, + 0x29, 0x04, 0xf0, 0xf6, 0xc6, 0x98, 0xd0, 0xe3, + 0x20, 0xa5, 0xe9, 0xa5, 0x85, 0x60, 0x78, 0x20, + 0x07, 0xd1, 0xb0, 0x05, 0xb5, 0xf2, 0x6a, 0xb0, + 0x0b, 0xa5, 0x84, 0x29, 0xf0, 0xc9, 0xf0, 0xf0, + 0x03, 0x4c, 0x4e, 0xea, 0x20, 0xc9, 0xe9, 0x58, + 0x20, 0xb7, 0xcf, 0x4c, 0x2e, 0xea, 0xa9, 0x00, + 0x8d, 0x00, 0x18, 0x4c, 0xe7, 0xeb, 0x4c, 0x5b, + 0xe8, 0xa5, 0x7d, 0xf0, 0x06, 0xad, 0x00, 0x18, + 0x10, 0x09, 0x60, 0xad, 0x00, 0x18, 0x10, 0xfa, + 0x4c, 0x5b, 0xe8, 0x4c, 0xd7, 0xe8, 0xa2, 0x00, + 0x2c, 0xa6, 0x6f, 0x9a, 0xba, 0xa9, 0x08, 0x0d, + 0x00, 0x1c, 0x4c, 0xea, 0xfe, 0x98, 0x18, 0x69, + 0x01, 0xd0, 0xfc, 0x88, 0xd0, 0xf8, 0xad, 0x00, + 0x1c, 0x29, 0xf7, 0x8d, 0x00, 0x1c, 0x98, 0x18, + 0x69, 0x01, 0xd0, 0xfc, 0x88, 0xd0, 0xf8, 0xca, + 0x10, 0xdb, 0xe0, 0xfc, 0xd0, 0xf0, 0xf0, 0xd4, + 0x78, 0xd8, 0xa2, 0xff, 0x4c, 0x10, 0xff, 0xe8, + 0xa0, 0x00, 0xa2, 0x00, 0x8a, 0x95, 0x00, 0xe8, + 0xd0, 0xfa, 0x8a, 0xd5, 0x00, 0xd0, 0xb7, 0xf6, + 0x00, 0xc8, 0xd0, 0xfb, 0xd5, 0x00, 0xd0, 0xae, + 0x94, 0x00, 0xb5, 0x00, 0xd0, 0xa8, 0xe8, 0xd0, + 0xe9, 0xe6, 0x6f, 0x86, 0x76, 0xa9, 0x00, 0x85, + 0x75, 0xa8, 0xa2, 0x20, 0x18, 0xc6, 0x76, 0x71, + 0x75, 0xc8, 0xd0, 0xfb, 0xca, 0xd0, 0xf6, 0x69, + 0x00, 0xaa, 0xc5, 0x76, 0xd0, 0x39, 0xe0, 0xc0, + 0xd0, 0xdf, 0xa9, 0x01, 0x85, 0x76, 0xe6, 0x6f, + 0xa2, 0x07, 0x98, 0x18, 0x65, 0x76, 0x91, 0x75, + 0xc8, 0xd0, 0xf7, 0xe6, 0x76, 0xca, 0xd0, 0xf2, + 0xa2, 0x07, 0xc6, 0x76, 0x88, 0x98, 0x18, 0x65, + 0x76, 0xd1, 0x75, 0xd0, 0x12, 0x49, 0xff, 0x91, + 0x75, 0x51, 0x75, 0x91, 0x75, 0xd0, 0x08, 0x98, + 0xd0, 0xea, 0xca, 0xd0, 0xe5, 0xf0, 0x03, 0x4c, + 0x71, 0xea, 0xa2, 0x45, 0x9a, 0xad, 0x00, 0x1c, + 0x29, 0xf7, 0x8d, 0x00, 0x1c, 0xa9, 0x01, 0x8d, + 0x0c, 0x18, 0xa9, 0x82, 0x8d, 0x0d, 0x18, 0x8d, + 0x0e, 0x18, 0xad, 0x00, 0x18, 0x29, 0x60, 0x0a, + 0x2a, 0x2a, 0x2a, 0x09, 0x48, 0x85, 0x78, 0x49, + 0x60, 0x85, 0x77, 0xa2, 0x00, 0xa0, 0x00, 0xa9, + 0x00, 0x95, 0x99, 0xe8, 0xb9, 0xe0, 0xfe, 0x95, + 0x99, 0xe8, 0xc8, 0xc0, 0x05, 0xd0, 0xf0, 0xa9, + 0x00, 0x95, 0x99, 0xe8, 0xa9, 0x02, 0x95, 0x99, + 0xe8, 0xa9, 0xd5, 0x95, 0x99, 0xe8, 0xa9, 0x02, + 0x95, 0x99, 0xa9, 0xff, 0xa2, 0x12, 0x9d, 0x2b, + 0x02, 0xca, 0x10, 0xfa, 0xa2, 0x05, 0x95, 0xa7, + 0x95, 0xae, 0x95, 0xcd, 0xca, 0x10, 0xf7, 0xa9, + 0x05, 0x85, 0xab, 0xa9, 0x06, 0x85, 0xac, 0xa9, + 0xff, 0x85, 0xad, 0x85, 0xb4, 0xa9, 0x05, 0x8d, + 0x3b, 0x02, 0xa9, 0x84, 0x8d, 0x3a, 0x02, 0xa9, + 0x0f, 0x8d, 0x56, 0x02, 0xa9, 0x01, 0x85, 0xf6, + 0xa9, 0x88, 0x85, 0xf7, 0xa9, 0xe0, 0x8d, 0x4f, + 0x02, 0xa9, 0xff, 0x8d, 0x50, 0x02, 0xa9, 0x01, + 0x85, 0x1c, 0x85, 0x1d, 0x20, 0x63, 0xcb, 0x20, + 0xfa, 0xce, 0x20, 0x59, 0xf2, 0xa9, 0x22, 0x85, + 0x65, 0xa9, 0xeb, 0x85, 0x66, 0xa9, 0x0a, 0x85, + 0x69, 0xa9, 0x05, 0x85, 0x6a, 0xa9, 0x73, 0x20, + 0xc1, 0xe6, 0xa9, 0x00, 0x8d, 0x00, 0x18, 0xa9, + 0x1a, 0x8d, 0x02, 0x18, 0x20, 0x80, 0xe7, 0x58, + 0xad, 0x00, 0x18, 0x29, 0xe5, 0x8d, 0x00, 0x18, + 0xad, 0x55, 0x02, 0xf0, 0x0a, 0xa9, 0x00, 0x8d, + 0x55, 0x02, 0x85, 0x67, 0x20, 0x46, 0xc1, 0x58, + 0xa5, 0x7c, 0xf0, 0x03, 0x4c, 0x5b, 0xe8, 0x58, + 0xa9, 0x0e, 0x85, 0x72, 0xa9, 0x00, 0x85, 0x6f, + 0x85, 0x70, 0xa6, 0x72, 0xbd, 0x2b, 0x02, 0xc9, + 0xff, 0xf0, 0x10, 0x29, 0x3f, 0x85, 0x82, 0x20, + 0x93, 0xdf, 0xaa, 0xbd, 0x5b, 0x02, 0x29, 0x01, + 0xaa, 0xf6, 0x6f, 0xc6, 0x72, 0x10, 0xe3, 0xa0, + 0x04, 0xb9, 0x00, 0x00, 0x10, 0x05, 0x29, 0x01, + 0xaa, 0xf6, 0x6f, 0x88, 0x10, 0xf3, 0x78, 0xad, + 0x00, 0x1c, 0x29, 0xf7, 0x48, 0xa5, 0x7f, 0x85, + 0x86, 0xa9, 0x00, 0x85, 0x7f, 0xa5, 0x6f, 0xf0, + 0x0b, 0xa5, 0x1c, 0xf0, 0x03, 0x20, 0x13, 0xd3, + 0x68, 0x09, 0x08, 0x48, 0xe6, 0x7f, 0xa5, 0x70, + 0xf0, 0x0b, 0xa5, 0x1d, 0xf0, 0x03, 0x20, 0x13, + 0xd3, 0x68, 0x09, 0x00, 0x48, 0xa5, 0x86, 0x85, + 0x7f, 0x68, 0xae, 0x6c, 0x02, 0xf0, 0x21, 0xad, + 0x00, 0x1c, 0xe0, 0x80, 0xd0, 0x03, 0x4c, 0x8b, + 0xec, 0xae, 0x05, 0x18, 0x30, 0x12, 0xa2, 0xa0, + 0x8e, 0x05, 0x18, 0xce, 0x6c, 0x02, 0xd0, 0x08, + 0x4d, 0x6d, 0x02, 0xa2, 0x10, 0x8e, 0x6c, 0x02, + 0x8d, 0x00, 0x1c, 0x4c, 0xff, 0xeb, 0xa9, 0x00, + 0x85, 0x83, 0xa9, 0x01, 0x20, 0xe2, 0xd1, 0xa9, + 0x00, 0x20, 0xc8, 0xd4, 0xa6, 0x82, 0xa9, 0x00, + 0x9d, 0x44, 0x02, 0x20, 0x93, 0xdf, 0xaa, 0xa5, + 0x7f, 0x9d, 0x5b, 0x02, 0xa9, 0x01, 0x20, 0xf1, + 0xcf, 0xa9, 0x04, 0x20, 0xf1, 0xcf, 0xa9, 0x01, + 0x20, 0xf1, 0xcf, 0x20, 0xf1, 0xcf, 0xad, 0x72, + 0x02, 0x20, 0xf1, 0xcf, 0xa9, 0x00, 0x20, 0xf1, + 0xcf, 0x20, 0x59, 0xed, 0x20, 0x93, 0xdf, 0x0a, + 0xaa, 0xd6, 0x99, 0xd6, 0x99, 0xa9, 0x00, 0x20, + 0xf1, 0xcf, 0xa9, 0x01, 0x20, 0xf1, 0xcf, 0x20, + 0xf1, 0xcf, 0x20, 0xce, 0xc6, 0x90, 0x2c, 0xad, + 0x72, 0x02, 0x20, 0xf1, 0xcf, 0xad, 0x73, 0x02, + 0x20, 0xf1, 0xcf, 0x20, 0x59, 0xed, 0xa9, 0x00, + 0x20, 0xf1, 0xcf, 0xd0, 0xdd, 0x20, 0x93, 0xdf, + 0x0a, 0xaa, 0xa9, 0x00, 0x95, 0x99, 0xa9, 0x88, + 0xa4, 0x82, 0x8d, 0x54, 0x02, 0x99, 0xf2, 0x00, + 0xa5, 0x85, 0x60, 0xad, 0x72, 0x02, 0x20, 0xf1, + 0xcf, 0xad, 0x73, 0x02, 0x20, 0xf1, 0xcf, 0x20, + 0x59, 0xed, 0x20, 0x93, 0xdf, 0x0a, 0xaa, 0xd6, + 0x99, 0xd6, 0x99, 0xa9, 0x00, 0x20, 0xf1, 0xcf, + 0x20, 0xf1, 0xcf, 0x20, 0xf1, 0xcf, 0x20, 0x93, + 0xdf, 0x0a, 0xa8, 0xb9, 0x99, 0x00, 0xa6, 0x82, + 0x9d, 0x44, 0x02, 0xde, 0x44, 0x02, 0x4c, 0x0d, + 0xed, 0xa0, 0x00, 0xb9, 0xb1, 0x02, 0x20, 0xf1, + 0xcf, 0xc8, 0xc0, 0x1b, 0xd0, 0xf5, 0x60, 0x20, + 0x37, 0xd1, 0xf0, 0x01, 0x60, 0x85, 0x85, 0xa4, + 0x82, 0xb9, 0x44, 0x02, 0xf0, 0x08, 0xa9, 0x80, + 0x99, 0xf2, 0x00, 0xa5, 0x85, 0x60, 0x48, 0x20, + 0xea, 0xec, 0x68, 0x60, 0x20, 0xd1, 0xc1, 0x20, + 0x42, 0xd0, 0xa9, 0x40, 0x8d, 0xf9, 0x02, 0x20, + 0xb7, 0xee, 0xa9, 0x00, 0x8d, 0x92, 0x02, 0x20, + 0xac, 0xc5, 0xd0, 0x3d, 0xa9, 0x00, 0x85, 0x81, + 0xad, 0x85, 0xfe, 0x85, 0x80, 0x20, 0xe5, 0xed, + 0xa9, 0x00, 0x8d, 0xf9, 0x02, 0x20, 0xff, 0xee, + 0x4c, 0x94, 0xc1, 0xc8, 0xb1, 0x94, 0x48, 0xc8, + 0xb1, 0x94, 0x48, 0xa0, 0x13, 0xb1, 0x94, 0xf0, + 0x0a, 0x85, 0x80, 0xc8, 0xb1, 0x94, 0x85, 0x81, + 0x20, 0xe5, 0xed, 0x68, 0x85, 0x81, 0x68, 0x85, + 0x80, 0x20, 0xe5, 0xed, 0x20, 0x04, 0xc6, 0xf0, + 0xc3, 0xa0, 0x00, 0xb1, 0x94, 0x30, 0xd4, 0x20, + 0xb6, 0xc8, 0x4c, 0xd4, 0xed, 0x20, 0x5f, 0xd5, + 0x20, 0x90, 0xef, 0x20, 0x75, 0xd4, 0xa9, 0x00, + 0x20, 0xc8, 0xd4, 0x20, 0x37, 0xd1, 0x85, 0x80, + 0x20, 0x37, 0xd1, 0x85, 0x81, 0xa5, 0x80, 0xd0, + 0x03, 0x4c, 0x27, 0xd2, 0x20, 0x90, 0xef, 0x20, + 0x4d, 0xd4, 0x4c, 0xee, 0xed, 0x20, 0x12, 0xc3, + 0xa5, 0xe2, 0x10, 0x05, 0xa9, 0x33, 0x4c, 0xc8, + 0xc1, 0x29, 0x01, 0x85, 0x7f, 0x20, 0x00, 0xc1, + 0xa5, 0x7f, 0x0a, 0xaa, 0xac, 0x7b, 0x02, 0xcc, + 0x74, 0x02, 0xf0, 0x1a, 0xb9, 0x00, 0x02, 0x95, + 0x12, 0xb9, 0x01, 0x02, 0x95, 0x13, 0x20, 0x07, + 0xd3, 0xa9, 0x01, 0x85, 0x80, 0x20, 0xc6, 0xc8, + 0x20, 0x05, 0xf0, 0x4c, 0x56, 0xee, 0x20, 0x42, + 0xd0, 0xa6, 0x7f, 0xbd, 0x01, 0x01, 0xcd, 0xd5, + 0xfe, 0xf0, 0x03, 0x4c, 0x72, 0xd5, 0x20, 0xb7, + 0xee, 0xa5, 0xf9, 0xa8, 0x0a, 0xaa, 0xad, 0x88, + 0xfe, 0x95, 0x99, 0xae, 0x7a, 0x02, 0xa9, 0x1b, + 0x20, 0x6e, 0xc6, 0xa0, 0x12, 0xa6, 0x7f, 0xad, + 0xd5, 0xfe, 0x9d, 0x01, 0x01, 0x8a, 0x0a, 0xaa, + 0xb5, 0x12, 0x91, 0x94, 0xc8, 0xb5, 0x13, 0x91, + 0x94, 0xc8, 0xc8, 0xa9, 0x32, 0x91, 0x94, 0xc8, + 0xad, 0xd5, 0xfe, 0x91, 0x94, 0xa0, 0x02, 0x91, + 0x6d, 0xad, 0x85, 0xfe, 0x85, 0x80, 0x20, 0x93, + 0xef, 0xa9, 0x01, 0x85, 0x81, 0x20, 0x93, 0xef, + 0x20, 0xff, 0xee, 0x20, 0x05, 0xf0, 0xa0, 0x01, + 0xa9, 0xff, 0x91, 0x6d, 0x20, 0x64, 0xd4, 0xc6, + 0x81, 0x20, 0x60, 0xd4, 0x4c, 0x94, 0xc1, 0x20, + 0xd1, 0xf0, 0xa0, 0x00, 0xa9, 0x12, 0x91, 0x6d, + 0xc8, 0x98, 0x91, 0x6d, 0xc8, 0xc8, 0xc8, 0xa9, + 0x00, 0x85, 0x6f, 0x85, 0x70, 0x85, 0x71, 0x98, + 0x4a, 0x4a, 0x20, 0x4b, 0xf2, 0x91, 0x6d, 0xc8, + 0xaa, 0x38, 0x26, 0x6f, 0x26, 0x70, 0x26, 0x71, + 0xca, 0xd0, 0xf6, 0xb5, 0x6f, 0x91, 0x6d, 0xc8, + 0xe8, 0xe0, 0x03, 0x90, 0xf6, 0xc0, 0x90, 0x90, + 0xd6, 0x4c, 0x75, 0xd0, 0x20, 0x93, 0xdf, 0xaa, + 0xbd, 0x5b, 0x02, 0x29, 0x01, 0x85, 0x7f, 0xa4, + 0x7f, 0xb9, 0x51, 0x02, 0xd0, 0x01, 0x60, 0xa9, + 0x00, 0x99, 0x51, 0x02, 0x20, 0x3a, 0xef, 0xa5, + 0x7f, 0x0a, 0x48, 0x20, 0xa5, 0xf0, 0x68, 0x18, + 0x69, 0x01, 0x20, 0xa5, 0xf0, 0xa5, 0x80, 0x48, + 0xa9, 0x01, 0x85, 0x80, 0x0a, 0x0a, 0x85, 0x6d, + 0x20, 0x20, 0xf2, 0xe6, 0x80, 0xa5, 0x80, 0xcd, + 0xd7, 0xfe, 0x90, 0xf0, 0x68, 0x85, 0x80, 0x4c, + 0x8a, 0xd5, 0x20, 0x0f, 0xf1, 0xaa, 0x20, 0xdf, + 0xf0, 0xa6, 0xf9, 0xbd, 0xe0, 0xfe, 0x85, 0x6e, + 0xa9, 0x00, 0x85, 0x6d, 0x60, 0xa6, 0x7f, 0xbd, + 0xfa, 0x02, 0x8d, 0x72, 0x02, 0xbd, 0xfc, 0x02, + 0x8d, 0x73, 0x02, 0x60, 0x20, 0xf1, 0xef, 0x20, + 0xcf, 0xef, 0x38, 0xd0, 0x22, 0xb1, 0x6d, 0x1d, + 0xe9, 0xef, 0x91, 0x6d, 0x20, 0x88, 0xef, 0xa4, + 0x6f, 0x18, 0xb1, 0x6d, 0x69, 0x01, 0x91, 0x6d, + 0xa5, 0x80, 0xcd, 0x85, 0xfe, 0xf0, 0x3b, 0xfe, + 0xfa, 0x02, 0xd0, 0x03, 0xfe, 0xfc, 0x02, 0x60, + 0xa6, 0x7f, 0xa9, 0x01, 0x9d, 0x51, 0x02, 0x60, + 0x20, 0xf1, 0xef, 0x20, 0xcf, 0xef, 0xf0, 0x36, + 0xb1, 0x6d, 0x5d, 0xe9, 0xef, 0x91, 0x6d, 0x20, + 0x88, 0xef, 0xa4, 0x6f, 0xb1, 0x6d, 0x38, 0xe9, + 0x01, 0x91, 0x6d, 0xa5, 0x80, 0xcd, 0x85, 0xfe, + 0xf0, 0x0b, 0xbd, 0xfa, 0x02, 0xd0, 0x03, 0xde, + 0xfc, 0x02, 0xde, 0xfa, 0x02, 0xbd, 0xfc, 0x02, + 0xd0, 0x0c, 0xbd, 0xfa, 0x02, 0xc9, 0x03, 0xb0, + 0x05, 0xa9, 0x72, 0x20, 0xc7, 0xe6, 0x60, 0x20, + 0x11, 0xf0, 0x98, 0x85, 0x6f, 0xa5, 0x81, 0x4a, + 0x4a, 0x4a, 0x38, 0x65, 0x6f, 0xa8, 0xa5, 0x81, + 0x29, 0x07, 0xaa, 0xb1, 0x6d, 0x3d, 0xe9, 0xef, + 0x60, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, + 0x80, 0xa9, 0xff, 0x2c, 0xf9, 0x02, 0xf0, 0x0c, + 0x10, 0x0a, 0x70, 0x08, 0xa9, 0x00, 0x8d, 0xf9, + 0x02, 0x4c, 0x8a, 0xd5, 0x60, 0x20, 0x3a, 0xef, + 0xa0, 0x00, 0x98, 0x91, 0x6d, 0xc8, 0xd0, 0xfb, + 0x60, 0xa5, 0x6f, 0x48, 0xa5, 0x70, 0x48, 0xa6, + 0x7f, 0xb5, 0xff, 0xf0, 0x05, 0xa9, 0x74, 0x20, + 0x48, 0xe6, 0x20, 0x0f, 0xf1, 0x85, 0x6f, 0x8a, + 0x0a, 0x85, 0x70, 0xaa, 0xa5, 0x80, 0xdd, 0x9d, + 0x02, 0xf0, 0x0b, 0xe8, 0x86, 0x70, 0xdd, 0x9d, + 0x02, 0xf0, 0x03, 0x20, 0x5b, 0xf0, 0xa5, 0x70, + 0xa6, 0x7f, 0x9d, 0x9b, 0x02, 0x0a, 0x0a, 0x18, + 0x69, 0xa1, 0x85, 0x6d, 0xa9, 0x02, 0x69, 0x00, + 0x85, 0x6e, 0xa0, 0x00, 0x68, 0x85, 0x70, 0x68, + 0x85, 0x6f, 0x60, 0xa6, 0x6f, 0x20, 0xdf, 0xf0, + 0xa5, 0x7f, 0xaa, 0x0a, 0x1d, 0x9b, 0x02, 0x49, + 0x01, 0x29, 0x03, 0x85, 0x70, 0x20, 0xa5, 0xf0, + 0xa5, 0xf9, 0x0a, 0xaa, 0xa5, 0x80, 0x0a, 0x0a, + 0x95, 0x99, 0xa5, 0x70, 0x0a, 0x0a, 0xa8, 0xa1, + 0x99, 0x99, 0xa1, 0x02, 0xa9, 0x00, 0x81, 0x99, + 0xf6, 0x99, 0xc8, 0x98, 0x29, 0x03, 0xd0, 0xef, + 0xa6, 0x70, 0xa5, 0x80, 0x9d, 0x9d, 0x02, 0xad, + 0xf9, 0x02, 0xd0, 0x03, 0x4c, 0x8a, 0xd5, 0x09, + 0x80, 0x8d, 0xf9, 0x02, 0x60, 0xa8, 0xb9, 0x9d, + 0x02, 0xf0, 0x25, 0x48, 0xa9, 0x00, 0x99, 0x9d, + 0x02, 0xa5, 0xf9, 0x0a, 0xaa, 0x68, 0x0a, 0x0a, + 0x95, 0x99, 0x98, 0x0a, 0x0a, 0xa8, 0xb9, 0xa1, + 0x02, 0x81, 0x99, 0xa9, 0x00, 0x99, 0xa1, 0x02, + 0xf6, 0x99, 0xc8, 0x98, 0x29, 0x03, 0xd0, 0xee, + 0x60, 0xa5, 0x7f, 0x0a, 0xaa, 0xa9, 0x00, 0x9d, + 0x9d, 0x02, 0xe8, 0x9d, 0x9d, 0x02, 0x60, 0xb5, + 0xa7, 0xc9, 0xff, 0xd0, 0x25, 0x8a, 0x48, 0x20, + 0x8e, 0xd2, 0xaa, 0x10, 0x05, 0xa9, 0x70, 0x20, + 0xc8, 0xc1, 0x86, 0xf9, 0x68, 0xa8, 0x8a, 0x09, + 0x80, 0x99, 0xa7, 0x00, 0x0a, 0xaa, 0xad, 0x85, + 0xfe, 0x95, 0x06, 0xa9, 0x00, 0x95, 0x07, 0x4c, + 0x86, 0xd5, 0x29, 0x0f, 0x85, 0xf9, 0x60, 0xa9, + 0x06, 0xa6, 0x7f, 0xd0, 0x03, 0x18, 0x69, 0x07, + 0x60, 0x20, 0x0f, 0xf1, 0xaa, 0x60, 0x20, 0x3e, + 0xde, 0xa9, 0x03, 0x85, 0x6f, 0xa9, 0x01, 0x0d, + 0xf9, 0x02, 0x8d, 0xf9, 0x02, 0xa5, 0x6f, 0x48, + 0x20, 0x11, 0xf0, 0x68, 0x85, 0x6f, 0xb1, 0x6d, + 0xd0, 0x39, 0xa5, 0x80, 0xcd, 0x85, 0xfe, 0xf0, + 0x19, 0x90, 0x1c, 0xe6, 0x80, 0xa5, 0x80, 0xcd, + 0xd7, 0xfe, 0xd0, 0xe1, 0xae, 0x85, 0xfe, 0xca, + 0x86, 0x80, 0xa9, 0x00, 0x85, 0x81, 0xc6, 0x6f, + 0xd0, 0xd3, 0xa9, 0x72, 0x20, 0xc8, 0xc1, 0xc6, + 0x80, 0xd0, 0xca, 0xae, 0x85, 0xfe, 0xe8, 0x86, + 0x80, 0xa9, 0x00, 0x85, 0x81, 0xc6, 0x6f, 0xd0, + 0xbc, 0xf0, 0xe7, 0xa5, 0x81, 0x18, 0x65, 0x69, + 0x85, 0x81, 0xa5, 0x80, 0x20, 0x4b, 0xf2, 0x8d, + 0x4e, 0x02, 0x8d, 0x4d, 0x02, 0xc5, 0x81, 0xb0, + 0x0c, 0x38, 0xa5, 0x81, 0xed, 0x4e, 0x02, 0x85, + 0x81, 0xf0, 0x02, 0xc6, 0x81, 0x20, 0xfa, 0xf1, + 0xf0, 0x03, 0x4c, 0x90, 0xef, 0xa9, 0x00, 0x85, + 0x81, 0x20, 0xfa, 0xf1, 0xd0, 0xf4, 0x4c, 0xf5, + 0xf1, 0xa9, 0x01, 0x0d, 0xf9, 0x02, 0x8d, 0xf9, + 0x02, 0xa5, 0x86, 0x48, 0xa9, 0x01, 0x85, 0x86, + 0xad, 0x85, 0xfe, 0x38, 0xe5, 0x86, 0x85, 0x80, + 0x90, 0x09, 0xf0, 0x07, 0x20, 0x11, 0xf0, 0xb1, + 0x6d, 0xd0, 0x1b, 0xad, 0x85, 0xfe, 0x18, 0x65, + 0x86, 0x85, 0x80, 0xe6, 0x86, 0xcd, 0xd7, 0xfe, + 0x90, 0x05, 0xa9, 0x67, 0x20, 0x45, 0xe6, 0x20, + 0x11, 0xf0, 0xb1, 0x6d, 0xf0, 0xd2, 0x68, 0x85, + 0x86, 0xa9, 0x00, 0x85, 0x81, 0x20, 0xfa, 0xf1, + 0xf0, 0x03, 0x4c, 0x90, 0xef, 0xa9, 0x71, 0x20, + 0x45, 0xe6, 0x20, 0x11, 0xf0, 0x98, 0x48, 0x20, + 0x20, 0xf2, 0xa5, 0x80, 0x20, 0x4b, 0xf2, 0x8d, + 0x4e, 0x02, 0x68, 0x85, 0x6f, 0xa5, 0x81, 0xcd, + 0x4e, 0x02, 0xb0, 0x09, 0x20, 0xd5, 0xef, 0xd0, + 0x06, 0xe6, 0x81, 0xd0, 0xf0, 0xa9, 0x00, 0x60, + 0xa5, 0x6f, 0x48, 0xa9, 0x00, 0x85, 0x6f, 0xac, + 0x86, 0xfe, 0x88, 0xa2, 0x07, 0xb1, 0x6d, 0x3d, + 0xe9, 0xef, 0xf0, 0x02, 0xe6, 0x6f, 0xca, 0x10, + 0xf4, 0x88, 0xd0, 0xef, 0xb1, 0x6d, 0xc5, 0x6f, + 0xd0, 0x04, 0x68, 0x85, 0x6f, 0x60, 0xa9, 0x71, + 0x20, 0x45, 0xe6, 0xae, 0xd6, 0xfe, 0xdd, 0xd6, + 0xfe, 0xca, 0xb0, 0xfa, 0xbd, 0xd1, 0xfe, 0x60, + 0x60, 0xa9, 0x6f, 0x8d, 0x02, 0x1c, 0x29, 0xf0, + 0x8d, 0x00, 0x1c, 0xad, 0x0c, 0x1c, 0x29, 0xfe, + 0x09, 0x0e, 0x09, 0xe0, 0x8d, 0x0c, 0x1c, 0xa9, + 0x41, 0x8d, 0x0b, 0x1c, 0xa9, 0x00, 0x8d, 0x06, + 0x1c, 0xa9, 0x3a, 0x8d, 0x07, 0x1c, 0x8d, 0x05, + 0x1c, 0xa9, 0x7f, 0x8d, 0x0e, 0x1c, 0xa9, 0xc0, + 0x8d, 0x0d, 0x1c, 0x8d, 0x0e, 0x1c, 0xa9, 0xff, + 0x85, 0x3e, 0x85, 0x51, 0xa9, 0x08, 0x85, 0x39, + 0xa9, 0x07, 0x85, 0x47, 0xa9, 0x05, 0x85, 0x62, + 0xa9, 0xfa, 0x85, 0x63, 0xa9, 0xc8, 0x85, 0x64, + 0xa9, 0x04, 0x85, 0x5e, 0xa9, 0x04, 0x85, 0x5f, + 0xba, 0x86, 0x49, 0xad, 0x04, 0x1c, 0xad, 0x0c, + 0x1c, 0x09, 0x0e, 0x8d, 0x0c, 0x1c, 0xa0, 0x05, + 0xb9, 0x00, 0x00, 0x10, 0x2e, 0xc9, 0xd0, 0xd0, + 0x04, 0x98, 0x4c, 0x70, 0xf3, 0x29, 0x01, 0xf0, + 0x07, 0x84, 0x3f, 0xa9, 0x0f, 0x4c, 0x69, 0xf9, + 0xaa, 0x85, 0x3d, 0xc5, 0x3e, 0xf0, 0x0a, 0x20, + 0x7e, 0xf9, 0xa5, 0x3d, 0x85, 0x3e, 0x4c, 0x9c, + 0xf9, 0xa5, 0x20, 0x30, 0x03, 0x0a, 0x10, 0x09, + 0x4c, 0x9c, 0xf9, 0x88, 0x10, 0xca, 0x4c, 0x9c, + 0xf9, 0xa9, 0x20, 0x85, 0x20, 0xa0, 0x05, 0x84, + 0x3f, 0x20, 0x93, 0xf3, 0x30, 0x1a, 0xc6, 0x3f, + 0x10, 0xf7, 0xa4, 0x41, 0x20, 0x95, 0xf3, 0xa5, + 0x42, 0x85, 0x4a, 0x06, 0x4a, 0xa9, 0x60, 0x85, + 0x20, 0xb1, 0x32, 0x85, 0x22, 0x4c, 0x9c, 0xf9, + 0x29, 0x01, 0xc5, 0x3d, 0xd0, 0xe0, 0xa5, 0x22, + 0xf0, 0x12, 0x38, 0xf1, 0x32, 0xf0, 0x0d, 0x49, + 0xff, 0x85, 0x42, 0xe6, 0x42, 0xa5, 0x3f, 0x85, + 0x41, 0x4c, 0x06, 0xf3, 0xa2, 0x04, 0xb1, 0x32, + 0x85, 0x40, 0xdd, 0xd6, 0xfe, 0xca, 0xb0, 0xfa, + 0xbd, 0xd1, 0xfe, 0x85, 0x43, 0x8a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x85, 0x44, 0xad, 0x00, 0x1c, + 0x29, 0x9f, 0x05, 0x44, 0x8d, 0x00, 0x1c, 0xa6, + 0x3d, 0xa5, 0x45, 0xc9, 0x40, 0xf0, 0x15, 0xc9, + 0x60, 0xf0, 0x03, 0x4c, 0xb1, 0xf3, 0xa5, 0x3f, + 0x18, 0x69, 0x03, 0x85, 0x31, 0xa9, 0x00, 0x85, + 0x30, 0x6c, 0x30, 0x00, 0xa9, 0x60, 0x85, 0x20, + 0xad, 0x00, 0x1c, 0x29, 0xfc, 0x8d, 0x00, 0x1c, + 0xa9, 0xa4, 0x85, 0x4a, 0xa9, 0x01, 0x85, 0x22, + 0x4c, 0x69, 0xf9, 0xa4, 0x3f, 0xb9, 0x00, 0x00, + 0x48, 0x10, 0x10, 0x29, 0x78, 0x85, 0x45, 0x98, + 0x0a, 0x69, 0x06, 0x85, 0x32, 0x98, 0x18, 0x69, + 0x03, 0x85, 0x31, 0xa0, 0x00, 0x84, 0x30, 0x68, + 0x60, 0xa2, 0x5a, 0x86, 0x4b, 0xa2, 0x00, 0xa9, + 0x52, 0x85, 0x24, 0x20, 0x56, 0xf5, 0x50, 0xfe, + 0xb8, 0xad, 0x01, 0x1c, 0xc5, 0x24, 0xd0, 0x3f, + 0x50, 0xfe, 0xb8, 0xad, 0x01, 0x1c, 0x95, 0x25, + 0xe8, 0xe0, 0x07, 0xd0, 0xf3, 0x20, 0x97, 0xf4, + 0xa0, 0x04, 0xa9, 0x00, 0x59, 0x16, 0x00, 0x88, + 0x10, 0xfa, 0xc9, 0x00, 0xd0, 0x38, 0xa6, 0x3e, + 0xa5, 0x18, 0x95, 0x22, 0xa5, 0x45, 0xc9, 0x30, + 0xf0, 0x1e, 0xa5, 0x3e, 0x0a, 0xa8, 0xb9, 0x12, + 0x00, 0xc5, 0x16, 0xd0, 0x1e, 0xb9, 0x13, 0x00, + 0xc5, 0x17, 0xd0, 0x17, 0x4c, 0x23, 0xf4, 0xc6, + 0x4b, 0xd0, 0xb0, 0xa9, 0x02, 0x20, 0x69, 0xf9, + 0xa5, 0x16, 0x85, 0x12, 0xa5, 0x17, 0x85, 0x13, + 0xa9, 0x01, 0x2c, 0xa9, 0x0b, 0x2c, 0xa9, 0x09, + 0x4c, 0x69, 0xf9, 0xa9, 0x7f, 0x85, 0x4c, 0xa5, + 0x19, 0x18, 0x69, 0x02, 0xc5, 0x43, 0x90, 0x02, + 0xe5, 0x43, 0x85, 0x4d, 0xa2, 0x05, 0x86, 0x3f, + 0xa2, 0xff, 0x20, 0x93, 0xf3, 0x10, 0x44, 0x85, + 0x44, 0x29, 0x01, 0xc5, 0x3e, 0xd0, 0x3c, 0xa0, + 0x00, 0xb1, 0x32, 0xc5, 0x40, 0xd0, 0x34, 0xa5, + 0x45, 0xc9, 0x60, 0xf0, 0x0c, 0xa0, 0x01, 0x38, + 0xb1, 0x32, 0xe5, 0x4d, 0x10, 0x03, 0x18, 0x65, + 0x43, 0xc5, 0x4c, 0xb0, 0x1e, 0x48, 0xa5, 0x45, + 0xf0, 0x14, 0x68, 0xc9, 0x09, 0x90, 0x14, 0xc9, + 0x0c, 0xb0, 0x10, 0x85, 0x4c, 0xa5, 0x3f, 0xaa, + 0x69, 0x03, 0x85, 0x31, 0xd0, 0x05, 0x68, 0xc9, + 0x06, 0x90, 0xf0, 0xc6, 0x3f, 0x10, 0xb3, 0x8a, + 0x10, 0x03, 0x4c, 0x9c, 0xf9, 0x86, 0x3f, 0x20, + 0x93, 0xf3, 0xa5, 0x45, 0x4c, 0xca, 0xf4, 0xa5, + 0x30, 0x48, 0xa5, 0x31, 0x48, 0xa9, 0x24, 0x85, + 0x30, 0xa9, 0x00, 0x85, 0x31, 0xa9, 0x00, 0x85, + 0x34, 0x20, 0xe6, 0xf7, 0xa5, 0x55, 0x85, 0x18, + 0xa5, 0x54, 0x85, 0x19, 0xa5, 0x53, 0x85, 0x1a, + 0x20, 0xe6, 0xf7, 0xa5, 0x52, 0x85, 0x17, 0xa5, + 0x53, 0x85, 0x16, 0x68, 0x85, 0x31, 0x68, 0x85, + 0x30, 0x60, 0xc9, 0x00, 0xf0, 0x03, 0x4c, 0x6e, + 0xf5, 0x20, 0x0a, 0xf5, 0x50, 0xfe, 0xb8, 0xad, + 0x01, 0x1c, 0x91, 0x30, 0xc8, 0xd0, 0xf5, 0xa0, + 0xba, 0x50, 0xfe, 0xb8, 0xad, 0x01, 0x1c, 0x99, + 0x00, 0x01, 0xc8, 0xd0, 0xf4, 0x20, 0xe0, 0xf8, + 0xa5, 0x38, 0xc5, 0x47, 0xf0, 0x05, 0xa9, 0x04, + 0x4c, 0x69, 0xf9, 0x20, 0xe9, 0xf5, 0xc5, 0x3a, + 0xf0, 0x03, 0xa9, 0x05, 0x2c, 0xa9, 0x01, 0x4c, + 0x69, 0xf9, 0x20, 0x10, 0xf5, 0x4c, 0x56, 0xf5, + 0xa5, 0x3d, 0x0a, 0xaa, 0xb5, 0x12, 0x85, 0x16, + 0xb5, 0x13, 0x85, 0x17, 0xa0, 0x00, 0xb1, 0x32, + 0x85, 0x18, 0xc8, 0xb1, 0x32, 0x85, 0x19, 0xa9, + 0x00, 0x45, 0x16, 0x45, 0x17, 0x45, 0x18, 0x45, + 0x19, 0x85, 0x1a, 0x20, 0x34, 0xf9, 0xa2, 0x5a, + 0x20, 0x56, 0xf5, 0xa0, 0x00, 0x50, 0xfe, 0xb8, + 0xad, 0x01, 0x1c, 0xd9, 0x24, 0x00, 0xd0, 0x06, + 0xc8, 0xc0, 0x08, 0xd0, 0xf0, 0x60, 0xca, 0xd0, + 0xe7, 0xa9, 0x02, 0x4c, 0x69, 0xf9, 0xa9, 0xd0, + 0x8d, 0x05, 0x18, 0xa9, 0x03, 0x2c, 0x05, 0x18, + 0x10, 0xf1, 0x2c, 0x00, 0x1c, 0x30, 0xf6, 0xad, + 0x01, 0x1c, 0xb8, 0xa0, 0x00, 0x60, 0xc9, 0x10, + 0xf0, 0x03, 0x4c, 0x91, 0xf6, 0x20, 0xe9, 0xf5, + 0x85, 0x3a, 0xad, 0x00, 0x1c, 0x29, 0x10, 0xd0, + 0x05, 0xa9, 0x08, 0x4c, 0x69, 0xf9, 0x20, 0x8f, + 0xf7, 0x20, 0x10, 0xf5, 0xa2, 0x09, 0x50, 0xfe, + 0xb8, 0xca, 0xd0, 0xfa, 0xa9, 0xff, 0x8d, 0x03, + 0x1c, 0xad, 0x0c, 0x1c, 0x29, 0x1f, 0x09, 0xc0, + 0x8d, 0x0c, 0x1c, 0xa9, 0xff, 0xa2, 0x05, 0x8d, + 0x01, 0x1c, 0xb8, 0x50, 0xfe, 0xb8, 0xca, 0xd0, + 0xfa, 0xa0, 0xbb, 0xb9, 0x00, 0x01, 0x50, 0xfe, + 0xb8, 0x8d, 0x01, 0x1c, 0xc8, 0xd0, 0xf4, 0xb1, + 0x30, 0x50, 0xfe, 0xb8, 0x8d, 0x01, 0x1c, 0xc8, + 0xd0, 0xf5, 0x50, 0xfe, 0xad, 0x0c, 0x1c, 0x09, + 0xe0, 0x8d, 0x0c, 0x1c, 0xa9, 0x00, 0x8d, 0x03, + 0x1c, 0x20, 0xf2, 0xf5, 0xa4, 0x3f, 0xb9, 0x00, + 0x00, 0x49, 0x30, 0x99, 0x00, 0x00, 0x4c, 0xb1, + 0xf3, 0xa9, 0x00, 0xa8, 0x51, 0x30, 0xc8, 0xd0, + 0xfb, 0x60, 0xa9, 0x00, 0x85, 0x2e, 0x85, 0x30, + 0x85, 0x4f, 0xa5, 0x31, 0x85, 0x4e, 0xa9, 0x01, + 0x85, 0x31, 0x85, 0x2f, 0xa9, 0xbb, 0x85, 0x34, + 0x85, 0x36, 0x20, 0xe6, 0xf7, 0xa5, 0x52, 0x85, + 0x38, 0xa4, 0x36, 0xa5, 0x53, 0x91, 0x2e, 0xc8, + 0xa5, 0x54, 0x91, 0x2e, 0xc8, 0xa5, 0x55, 0x91, + 0x2e, 0xc8, 0x84, 0x36, 0x20, 0xe6, 0xf7, 0xa4, + 0x36, 0xa5, 0x52, 0x91, 0x2e, 0xc8, 0xa5, 0x53, + 0x91, 0x2e, 0xc8, 0xf0, 0x0e, 0xa5, 0x54, 0x91, + 0x2e, 0xc8, 0xa5, 0x55, 0x91, 0x2e, 0xc8, 0x84, + 0x36, 0xd0, 0xe1, 0xa5, 0x54, 0x91, 0x30, 0xc8, + 0xa5, 0x55, 0x91, 0x30, 0xc8, 0x84, 0x36, 0x20, + 0xe6, 0xf7, 0xa4, 0x36, 0xa5, 0x52, 0x91, 0x30, + 0xc8, 0xa5, 0x53, 0x91, 0x30, 0xc8, 0xa5, 0x54, + 0x91, 0x30, 0xc8, 0xa5, 0x55, 0x91, 0x30, 0xc8, + 0x84, 0x36, 0xc0, 0xbb, 0x90, 0xe1, 0xa9, 0x45, + 0x85, 0x2e, 0xa5, 0x31, 0x85, 0x2f, 0xa0, 0xba, + 0xb1, 0x30, 0x91, 0x2e, 0x88, 0xd0, 0xf9, 0xb1, + 0x30, 0x91, 0x2e, 0xa2, 0xbb, 0xbd, 0x00, 0x01, + 0x91, 0x30, 0xc8, 0xe8, 0xd0, 0xf7, 0x86, 0x50, + 0x60, 0xc9, 0x20, 0xf0, 0x03, 0x4c, 0xca, 0xf6, + 0x20, 0xe9, 0xf5, 0x85, 0x3a, 0x20, 0x8f, 0xf7, + 0x20, 0x0a, 0xf5, 0xa0, 0xbb, 0xb9, 0x00, 0x01, + 0x50, 0xfe, 0xb8, 0x4d, 0x01, 0x1c, 0xd0, 0x15, + 0xc8, 0xd0, 0xf2, 0xb1, 0x30, 0x50, 0xfe, 0xb8, + 0x4d, 0x01, 0x1c, 0xd0, 0x08, 0xc8, 0xc0, 0xfd, + 0xd0, 0xf1, 0x4c, 0x18, 0xf4, 0xa9, 0x07, 0x4c, + 0x69, 0xf9, 0x20, 0x10, 0xf5, 0x4c, 0x18, 0xf4, + 0xa9, 0x00, 0x85, 0x57, 0x85, 0x5a, 0xa4, 0x34, + 0xa5, 0x52, 0x29, 0xf0, 0x4a, 0x4a, 0x4a, 0x4a, + 0xaa, 0xbd, 0x7f, 0xf7, 0x0a, 0x0a, 0x0a, 0x85, + 0x56, 0xa5, 0x52, 0x29, 0x0f, 0xaa, 0xbd, 0x7f, + 0xf7, 0x6a, 0x66, 0x57, 0x6a, 0x66, 0x57, 0x29, + 0x07, 0x05, 0x56, 0x91, 0x30, 0xc8, 0xa5, 0x53, + 0x29, 0xf0, 0x4a, 0x4a, 0x4a, 0x4a, 0xaa, 0xbd, + 0x7f, 0xf7, 0x0a, 0x05, 0x57, 0x85, 0x57, 0xa5, + 0x53, 0x29, 0x0f, 0xaa, 0xbd, 0x7f, 0xf7, 0x2a, + 0x2a, 0x2a, 0x2a, 0x85, 0x58, 0x2a, 0x29, 0x01, + 0x05, 0x57, 0x91, 0x30, 0xc8, 0xa5, 0x54, 0x29, + 0xf0, 0x4a, 0x4a, 0x4a, 0x4a, 0xaa, 0xbd, 0x7f, + 0xf7, 0x18, 0x6a, 0x05, 0x58, 0x91, 0x30, 0xc8, + 0x6a, 0x29, 0x80, 0x85, 0x59, 0xa5, 0x54, 0x29, + 0x0f, 0xaa, 0xbd, 0x7f, 0xf7, 0x0a, 0x0a, 0x29, + 0x7c, 0x05, 0x59, 0x85, 0x59, 0xa5, 0x55, 0x29, + 0xf0, 0x4a, 0x4a, 0x4a, 0x4a, 0xaa, 0xbd, 0x7f, + 0xf7, 0x6a, 0x66, 0x5a, 0x6a, 0x66, 0x5a, 0x6a, + 0x66, 0x5a, 0x29, 0x03, 0x05, 0x59, 0x91, 0x30, + 0xc8, 0xd0, 0x04, 0xa5, 0x2f, 0x85, 0x31, 0xa5, + 0x55, 0x29, 0x0f, 0xaa, 0xbd, 0x7f, 0xf7, 0x05, + 0x5a, 0x91, 0x30, 0xc8, 0x84, 0x34, 0x60, 0x0a, + 0x0b, 0x12, 0x13, 0x0e, 0x0f, 0x16, 0x17, 0x09, + 0x19, 0x1a, 0x1b, 0x0d, 0x1d, 0x1e, 0x15, 0xa9, + 0x00, 0x85, 0x30, 0x85, 0x2e, 0x85, 0x36, 0xa9, + 0xbb, 0x85, 0x34, 0x85, 0x50, 0xa5, 0x31, 0x85, + 0x2f, 0xa9, 0x01, 0x85, 0x31, 0xa5, 0x47, 0x85, + 0x52, 0xa4, 0x36, 0xb1, 0x2e, 0x85, 0x53, 0xc8, + 0xb1, 0x2e, 0x85, 0x54, 0xc8, 0xb1, 0x2e, 0x85, + 0x55, 0xc8, 0x84, 0x36, 0x20, 0xd0, 0xf6, 0xa4, + 0x36, 0xb1, 0x2e, 0x85, 0x52, 0xc8, 0xf0, 0x11, + 0xb1, 0x2e, 0x85, 0x53, 0xc8, 0xb1, 0x2e, 0x85, + 0x54, 0xc8, 0xb1, 0x2e, 0x85, 0x55, 0xc8, 0xd0, + 0xe1, 0xa5, 0x3a, 0x85, 0x53, 0xa9, 0x00, 0x85, + 0x54, 0x85, 0x55, 0x4c, 0xd0, 0xf6, 0xa4, 0x34, + 0xb1, 0x30, 0x29, 0xf8, 0x4a, 0x4a, 0x4a, 0x85, + 0x56, 0xb1, 0x30, 0x29, 0x07, 0x0a, 0x0a, 0x85, + 0x57, 0xc8, 0xd0, 0x06, 0xa5, 0x4e, 0x85, 0x31, + 0xa4, 0x4f, 0xb1, 0x30, 0x29, 0xc0, 0x2a, 0x2a, + 0x2a, 0x05, 0x57, 0x85, 0x57, 0xb1, 0x30, 0x29, + 0x3e, 0x4a, 0x85, 0x58, 0xb1, 0x30, 0x29, 0x01, + 0x0a, 0x0a, 0x0a, 0x0a, 0x85, 0x59, 0xc8, 0xb1, + 0x30, 0x29, 0xf0, 0x4a, 0x4a, 0x4a, 0x4a, 0x05, + 0x59, 0x85, 0x59, 0xb1, 0x30, 0x29, 0x0f, 0x0a, + 0x85, 0x5a, 0xc8, 0xb1, 0x30, 0x29, 0x80, 0x18, + 0x2a, 0x2a, 0x29, 0x01, 0x05, 0x5a, 0x85, 0x5a, + 0xb1, 0x30, 0x29, 0x7c, 0x4a, 0x4a, 0x85, 0x5b, + 0xb1, 0x30, 0x29, 0x03, 0x0a, 0x0a, 0x0a, 0x85, + 0x5c, 0xc8, 0xd0, 0x06, 0xa5, 0x4e, 0x85, 0x31, + 0xa4, 0x4f, 0xb1, 0x30, 0x29, 0xe0, 0x2a, 0x2a, + 0x2a, 0x2a, 0x05, 0x5c, 0x85, 0x5c, 0xb1, 0x30, + 0x29, 0x1f, 0x85, 0x5d, 0xc8, 0x84, 0x34, 0xa6, + 0x56, 0xbd, 0xa0, 0xf8, 0xa6, 0x57, 0x1d, 0xc0, + 0xf8, 0x85, 0x52, 0xa6, 0x58, 0xbd, 0xa0, 0xf8, + 0xa6, 0x59, 0x1d, 0xc0, 0xf8, 0x85, 0x53, 0xa6, + 0x5a, 0xbd, 0xa0, 0xf8, 0xa6, 0x5b, 0x1d, 0xc0, + 0xf8, 0x85, 0x54, 0xa6, 0x5c, 0xbd, 0xa0, 0xf8, + 0xa6, 0x5d, 0x1d, 0xc0, 0xf8, 0x85, 0x55, 0x60, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x80, 0x00, 0x10, 0xff, 0xc0, 0x40, 0x50, + 0xff, 0xff, 0x20, 0x30, 0xff, 0xf0, 0x60, 0x70, + 0xff, 0x90, 0xa0, 0xb0, 0xff, 0xd0, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x08, 0x00, 0x01, 0xff, 0x0c, 0x04, 0x05, + 0xff, 0xff, 0x02, 0x03, 0xff, 0x0f, 0x06, 0x07, + 0xff, 0x09, 0x0a, 0x0b, 0xff, 0x0d, 0x0e, 0xff, + 0xa9, 0x00, 0x85, 0x34, 0x85, 0x2e, 0x85, 0x36, + 0xa9, 0x01, 0x85, 0x4e, 0xa9, 0xba, 0x85, 0x4f, + 0xa5, 0x31, 0x85, 0x2f, 0x20, 0xe6, 0xf7, 0xa5, + 0x52, 0x85, 0x38, 0xa4, 0x36, 0xa5, 0x53, 0x91, + 0x2e, 0xc8, 0xa5, 0x54, 0x91, 0x2e, 0xc8, 0xa5, + 0x55, 0x91, 0x2e, 0xc8, 0x84, 0x36, 0x20, 0xe6, + 0xf7, 0xa4, 0x36, 0xa5, 0x52, 0x91, 0x2e, 0xc8, + 0xf0, 0x11, 0xa5, 0x53, 0x91, 0x2e, 0xc8, 0xa5, + 0x54, 0x91, 0x2e, 0xc8, 0xa5, 0x55, 0x91, 0x2e, + 0xc8, 0xd0, 0xe1, 0xa5, 0x53, 0x85, 0x3a, 0xa5, + 0x2f, 0x85, 0x31, 0x60, 0xa5, 0x31, 0x85, 0x2f, + 0xa9, 0x00, 0x85, 0x31, 0xa9, 0x24, 0x85, 0x34, + 0xa5, 0x39, 0x85, 0x52, 0xa5, 0x1a, 0x85, 0x53, + 0xa5, 0x19, 0x85, 0x54, 0xa5, 0x18, 0x85, 0x55, + 0x20, 0xd0, 0xf6, 0xa5, 0x17, 0x85, 0x52, 0xa5, + 0x16, 0x85, 0x53, 0xa9, 0x00, 0x85, 0x54, 0x85, + 0x55, 0x20, 0xd0, 0xf6, 0xa5, 0x2f, 0x85, 0x31, + 0x60, 0xa4, 0x3f, 0x99, 0x00, 0x00, 0xa5, 0x50, + 0xf0, 0x03, 0x20, 0xf2, 0xf5, 0x20, 0x8f, 0xf9, + 0xa6, 0x49, 0x9a, 0x4c, 0xbe, 0xf2, 0xa9, 0xa0, + 0x85, 0x20, 0xad, 0x00, 0x1c, 0x09, 0x04, 0x8d, + 0x00, 0x1c, 0xa9, 0x3c, 0x85, 0x48, 0x60, 0xa6, + 0x3e, 0xa5, 0x20, 0x09, 0x10, 0x85, 0x20, 0xa9, + 0xff, 0x85, 0x48, 0x60, 0xad, 0x07, 0x1c, 0x8d, + 0x05, 0x1c, 0xad, 0x00, 0x1c, 0x29, 0x10, 0xc5, + 0x1e, 0x85, 0x1e, 0xf0, 0x04, 0xa9, 0x01, 0x85, + 0x1c, 0xad, 0xfe, 0x02, 0xf0, 0x15, 0xc9, 0x02, + 0xd0, 0x07, 0xa9, 0x00, 0x8d, 0xfe, 0x02, 0xf0, + 0x0a, 0x85, 0x4a, 0xa9, 0x02, 0x8d, 0xfe, 0x02, + 0x4c, 0x2e, 0xfa, 0xa6, 0x3e, 0x30, 0x07, 0xa5, + 0x20, 0xa8, 0xc9, 0x20, 0xd0, 0x03, 0x4c, 0xbe, + 0xfa, 0xc6, 0x48, 0xd0, 0x1d, 0x98, 0x10, 0x04, + 0x29, 0x7f, 0x85, 0x20, 0x29, 0x10, 0xf0, 0x12, + 0xad, 0x00, 0x1c, 0x29, 0xfb, 0x8d, 0x00, 0x1c, + 0xa9, 0xff, 0x85, 0x3e, 0xa9, 0x00, 0x85, 0x20, + 0xf0, 0xdc, 0x98, 0x29, 0x40, 0xd0, 0x03, 0x4c, + 0xbe, 0xfa, 0x6c, 0x62, 0x00, 0xa5, 0x4a, 0x10, + 0x05, 0x49, 0xff, 0x18, 0x69, 0x01, 0xc5, 0x64, + 0xb0, 0x0a, 0xa9, 0x3b, 0x85, 0x62, 0xa9, 0xfa, + 0x85, 0x63, 0xd0, 0x12, 0xe5, 0x5e, 0xe5, 0x5e, + 0x85, 0x61, 0xa5, 0x5e, 0x85, 0x60, 0xa9, 0x7b, + 0x85, 0x62, 0xa9, 0xfa, 0x85, 0x63, 0xa5, 0x4a, + 0x10, 0x31, 0xe6, 0x4a, 0xae, 0x00, 0x1c, 0xca, + 0x4c, 0x69, 0xfa, 0xa5, 0x4a, 0xd0, 0xef, 0xa9, + 0x4e, 0x85, 0x62, 0xa9, 0xfa, 0x85, 0x63, 0xa9, + 0x05, 0x85, 0x60, 0x4c, 0xbe, 0xfa, 0xc6, 0x60, + 0xd0, 0x6c, 0xa5, 0x20, 0x29, 0xbf, 0x85, 0x20, + 0xa9, 0x05, 0x85, 0x62, 0xa9, 0xfa, 0x85, 0x63, + 0x4c, 0xbe, 0xfa, 0xc6, 0x4a, 0xae, 0x00, 0x1c, + 0xe8, 0x8a, 0x29, 0x03, 0x85, 0x4b, 0xad, 0x00, + 0x1c, 0x29, 0xfc, 0x05, 0x4b, 0x8d, 0x00, 0x1c, + 0x4c, 0xbe, 0xfa, 0x38, 0xad, 0x07, 0x1c, 0xe5, + 0x5f, 0x8d, 0x05, 0x1c, 0xc6, 0x60, 0xd0, 0x0c, + 0xa5, 0x5e, 0x85, 0x60, 0xa9, 0x97, 0x85, 0x62, + 0xa9, 0xfa, 0x85, 0x63, 0x4c, 0x2e, 0xfa, 0xc6, + 0x61, 0xd0, 0xf9, 0xa9, 0xa5, 0x85, 0x62, 0xa9, + 0xfa, 0x85, 0x63, 0xd0, 0xef, 0xad, 0x07, 0x1c, + 0x18, 0x65, 0x5f, 0x8d, 0x05, 0x1c, 0xc6, 0x60, + 0xd0, 0xe2, 0xa9, 0x4e, 0x85, 0x62, 0xa9, 0xfa, + 0x85, 0x63, 0xa9, 0x05, 0x85, 0x60, 0xad, 0x0c, + 0x1c, 0x29, 0xfd, 0x8d, 0x0c, 0x1c, 0x60, 0xa5, + 0x51, 0x10, 0x2a, 0xa6, 0x3d, 0xa9, 0x60, 0x95, + 0x20, 0xa9, 0x01, 0x95, 0x22, 0x85, 0x51, 0xa9, + 0xa4, 0x85, 0x4a, 0xad, 0x00, 0x1c, 0x29, 0xfc, + 0x8d, 0x00, 0x1c, 0xa9, 0x0a, 0x8d, 0x20, 0x06, + 0xa9, 0xa0, 0x8d, 0x21, 0x06, 0xa9, 0x0f, 0x8d, + 0x22, 0x06, 0x4c, 0x9c, 0xf9, 0xa0, 0x00, 0xd1, + 0x32, 0xf0, 0x05, 0x91, 0x32, 0x4c, 0x9c, 0xf9, + 0xad, 0x00, 0x1c, 0x29, 0x10, 0xd0, 0x05, 0xa9, + 0x08, 0x4c, 0xd3, 0xfd, 0x20, 0xa3, 0xfd, 0x20, + 0xc3, 0xfd, 0xa9, 0x55, 0x8d, 0x01, 0x1c, 0x20, + 0xc3, 0xfd, 0x20, 0x00, 0xfe, 0x20, 0x56, 0xf5, + 0xa9, 0x40, 0x0d, 0x0b, 0x18, 0x8d, 0x0b, 0x18, + 0xa9, 0x62, 0x8d, 0x06, 0x18, 0xa9, 0x00, 0x8d, + 0x07, 0x18, 0x8d, 0x05, 0x18, 0xa0, 0x00, 0xa2, + 0x00, 0x2c, 0x00, 0x1c, 0x30, 0xfb, 0x2c, 0x00, + 0x1c, 0x10, 0xfb, 0xad, 0x04, 0x18, 0x2c, 0x00, + 0x1c, 0x10, 0x11, 0xad, 0x0d, 0x18, 0x0a, 0x10, + 0xf5, 0xe8, 0xd0, 0xef, 0xc8, 0xd0, 0xec, 0xa9, + 0x02, 0x4c, 0xd3, 0xfd, 0x86, 0x71, 0x84, 0x72, + 0xa2, 0x00, 0xa0, 0x00, 0xad, 0x04, 0x18, 0x2c, + 0x00, 0x1c, 0x30, 0x11, 0xad, 0x0d, 0x18, 0x0a, + 0x10, 0xf5, 0xe8, 0xd0, 0xef, 0xc8, 0xd0, 0xec, + 0xa9, 0x02, 0x4c, 0xd3, 0xfd, 0x38, 0x8a, 0xe5, + 0x71, 0xaa, 0x85, 0x70, 0x98, 0xe5, 0x72, 0xa8, + 0x85, 0x71, 0x10, 0x0b, 0x49, 0xff, 0xa8, 0x8a, + 0x49, 0xff, 0xaa, 0xe8, 0xd0, 0x01, 0xc8, 0x98, + 0xd0, 0x04, 0xe0, 0x04, 0x90, 0x18, 0x06, 0x70, + 0x26, 0x71, 0x18, 0xa5, 0x70, 0x6d, 0x21, 0x06, + 0x8d, 0x21, 0x06, 0xa5, 0x71, 0x6d, 0x22, 0x06, + 0x8d, 0x22, 0x06, 0x4c, 0x0c, 0xfb, 0xa2, 0x00, + 0xa0, 0x00, 0xb8, 0xad, 0x00, 0x1c, 0x10, 0x0e, + 0x50, 0xf9, 0xb8, 0xe8, 0xd0, 0xf5, 0xc8, 0xd0, + 0xf2, 0xa9, 0x03, 0x4c, 0xd3, 0xfd, 0x8a, 0x0a, + 0x8d, 0x25, 0x06, 0x98, 0x2a, 0x8d, 0x24, 0x06, + 0xa9, 0xbf, 0x2d, 0x0b, 0x18, 0x8d, 0x0b, 0x18, + 0xa9, 0x66, 0x8d, 0x26, 0x06, 0xa6, 0x43, 0xa0, + 0x00, 0x98, 0x18, 0x6d, 0x26, 0x06, 0x90, 0x01, + 0xc8, 0xc8, 0xca, 0xd0, 0xf5, 0x49, 0xff, 0x38, + 0x69, 0x00, 0x18, 0x6d, 0x25, 0x06, 0xb0, 0x03, + 0xce, 0x24, 0x06, 0xaa, 0x98, 0x49, 0xff, 0x38, + 0x69, 0x00, 0x18, 0x6d, 0x24, 0x06, 0x10, 0x05, + 0xa9, 0x04, 0x4c, 0xd3, 0xfd, 0xa8, 0x8a, 0xa2, + 0x00, 0x38, 0xe5, 0x43, 0xb0, 0x03, 0x88, 0x30, + 0x03, 0xe8, 0xd0, 0xf5, 0x8e, 0x26, 0x06, 0xe0, + 0x04, 0xb0, 0x05, 0xa9, 0x05, 0x4c, 0xd3, 0xfd, + 0x18, 0x65, 0x43, 0x8d, 0x27, 0x06, 0xa9, 0x00, + 0x8d, 0x28, 0x06, 0xa0, 0x00, 0xa6, 0x3d, 0xa5, + 0x39, 0x99, 0x00, 0x03, 0xc8, 0xc8, 0xad, 0x28, + 0x06, 0x99, 0x00, 0x03, 0xc8, 0xa5, 0x51, 0x99, + 0x00, 0x03, 0xc8, 0xb5, 0x13, 0x99, 0x00, 0x03, + 0xc8, 0xb5, 0x12, 0x99, 0x00, 0x03, 0xc8, 0xa9, + 0x0f, 0x99, 0x00, 0x03, 0xc8, 0x99, 0x00, 0x03, + 0xc8, 0xa9, 0x00, 0x59, 0xfa, 0x02, 0x59, 0xfb, + 0x02, 0x59, 0xfc, 0x02, 0x59, 0xfd, 0x02, 0x99, + 0xf9, 0x02, 0xee, 0x28, 0x06, 0xad, 0x28, 0x06, + 0xc5, 0x43, 0x90, 0xbb, 0x98, 0x48, 0xe8, 0x8a, + 0x9d, 0x00, 0x05, 0xe8, 0xd0, 0xfa, 0xa9, 0x03, + 0x85, 0x31, 0x20, 0x30, 0xfe, 0x68, 0xa8, 0x88, + 0x20, 0xe5, 0xfd, 0x20, 0xf5, 0xfd, 0xa9, 0x05, + 0x85, 0x31, 0x20, 0xe9, 0xf5, 0x85, 0x3a, 0x20, + 0x8f, 0xf7, 0xa9, 0x00, 0x85, 0x32, 0x20, 0x0e, + 0xfe, 0xa9, 0xff, 0x8d, 0x01, 0x1c, 0xa2, 0x05, + 0x50, 0xfe, 0xb8, 0xca, 0xd0, 0xfa, 0xa2, 0x0a, + 0xa4, 0x32, 0x50, 0xfe, 0xb8, 0xb9, 0x00, 0x03, + 0x8d, 0x01, 0x1c, 0xc8, 0xca, 0xd0, 0xf3, 0xa2, + 0x09, 0x50, 0xfe, 0xb8, 0xa9, 0x55, 0x8d, 0x01, + 0x1c, 0xca, 0xd0, 0xf5, 0xa9, 0xff, 0xa2, 0x05, + 0x50, 0xfe, 0xb8, 0x8d, 0x01, 0x1c, 0xca, 0xd0, + 0xf7, 0xa2, 0xbb, 0x50, 0xfe, 0xb8, 0xbd, 0x00, + 0x01, 0x8d, 0x01, 0x1c, 0xe8, 0xd0, 0xf4, 0xa0, + 0x00, 0x50, 0xfe, 0xb8, 0xb1, 0x30, 0x8d, 0x01, + 0x1c, 0xc8, 0xd0, 0xf5, 0xa9, 0x55, 0xae, 0x26, + 0x06, 0x50, 0xfe, 0xb8, 0x8d, 0x01, 0x1c, 0xca, + 0xd0, 0xf7, 0xa5, 0x32, 0x18, 0x69, 0x0a, 0x85, + 0x32, 0xce, 0x28, 0x06, 0xd0, 0x93, 0x50, 0xfe, + 0xb8, 0x50, 0xfe, 0xb8, 0x20, 0x00, 0xfe, 0xa9, + 0xc8, 0x8d, 0x23, 0x06, 0xa9, 0x00, 0x85, 0x30, + 0xa9, 0x03, 0x85, 0x31, 0xa5, 0x43, 0x8d, 0x28, + 0x06, 0x20, 0x56, 0xf5, 0xa2, 0x0a, 0xa0, 0x00, + 0x50, 0xfe, 0xb8, 0xad, 0x01, 0x1c, 0xd1, 0x30, + 0xd0, 0x0e, 0xc8, 0xca, 0xd0, 0xf2, 0x18, 0xa5, + 0x30, 0x69, 0x0a, 0x85, 0x30, 0x4c, 0x62, 0xfd, + 0xce, 0x23, 0x06, 0xd0, 0xcf, 0xa9, 0x06, 0x4c, + 0xd3, 0xfd, 0x20, 0x56, 0xf5, 0xa0, 0xbb, 0x50, + 0xfe, 0xb8, 0xad, 0x01, 0x1c, 0xd9, 0x00, 0x01, + 0xd0, 0xe6, 0xc8, 0xd0, 0xf2, 0xa2, 0xfc, 0x50, + 0xfe, 0xb8, 0xad, 0x01, 0x1c, 0xd9, 0x00, 0x05, + 0xd0, 0xd6, 0xc8, 0xca, 0xd0, 0xf1, 0xce, 0x28, + 0x06, 0xd0, 0xae, 0xe6, 0x51, 0xa5, 0x51, 0xc9, + 0x24, 0xb0, 0x03, 0x4c, 0x9c, 0xf9, 0xa9, 0xff, + 0x85, 0x51, 0xa9, 0x00, 0x85, 0x50, 0xa9, 0x01, + 0x4c, 0x69, 0xf9, 0xad, 0x0c, 0x1c, 0x29, 0x1f, + 0x09, 0xc0, 0x8d, 0x0c, 0x1c, 0xa9, 0xff, 0x8d, + 0x03, 0x1c, 0x8d, 0x01, 0x1c, 0xa2, 0x28, 0xa0, + 0x00, 0x50, 0xfe, 0xb8, 0x88, 0xd0, 0xfa, 0xca, + 0xd0, 0xf7, 0x60, 0xae, 0x21, 0x06, 0xac, 0x22, + 0x06, 0x50, 0xfe, 0xb8, 0xca, 0xd0, 0xfa, 0x88, + 0x10, 0xf7, 0x60, 0xce, 0x20, 0x06, 0xf0, 0x03, + 0x4c, 0x9c, 0xf9, 0xa0, 0xff, 0x84, 0x51, 0xc8, + 0x84, 0x50, 0x4c, 0x69, 0xf9, 0xb9, 0x00, 0x03, + 0x99, 0x45, 0x03, 0x88, 0xd0, 0xf7, 0xad, 0x00, + 0x03, 0x8d, 0x45, 0x03, 0x60, 0xa0, 0x44, 0xb9, + 0xbb, 0x01, 0x91, 0x30, 0x88, 0x10, 0xf8, 0x60, + 0xad, 0x0c, 0x1c, 0x09, 0xe0, 0x8d, 0x0c, 0x1c, + 0xa9, 0x00, 0x8d, 0x03, 0x1c, 0x60, 0xad, 0x0c, + 0x1c, 0x29, 0x1f, 0x09, 0xc0, 0x8d, 0x0c, 0x1c, + 0xa9, 0xff, 0x8d, 0x03, 0x1c, 0xa9, 0x55, 0x8d, + 0x01, 0x1c, 0xa2, 0x28, 0xa0, 0x00, 0x50, 0xfe, + 0xb8, 0x88, 0xd0, 0xfa, 0xca, 0xd0, 0xf7, 0x60, + 0xa9, 0x00, 0x85, 0x30, 0x85, 0x2e, 0x85, 0x36, + 0xa9, 0xbb, 0x85, 0x34, 0xa5, 0x31, 0x85, 0x2f, + 0xa9, 0x01, 0x85, 0x31, 0xa4, 0x36, 0xb1, 0x2e, + 0x85, 0x52, 0xc8, 0xb1, 0x2e, 0x85, 0x53, 0xc8, + 0xb1, 0x2e, 0x85, 0x54, 0xc8, 0xb1, 0x2e, 0x85, + 0x55, 0xc8, 0xf0, 0x08, 0x84, 0x36, 0x20, 0xd0, + 0xf6, 0x4c, 0x44, 0xfe, 0x4c, 0xd0, 0xf6, 0x48, + 0x8a, 0x48, 0x98, 0x48, 0xad, 0x0d, 0x18, 0x29, + 0x02, 0xf0, 0x03, 0x20, 0x53, 0xe8, 0xad, 0x0d, + 0x1c, 0x0a, 0x10, 0x03, 0x20, 0xb0, 0xf2, 0x68, + 0xa8, 0x68, 0xaa, 0x68, 0x40, 0x12, 0x04, 0x04, + 0x90, 0x56, 0x49, 0x44, 0x4d, 0x42, 0x55, 0x50, + 0x26, 0x43, 0x52, 0x53, 0x4e, 0x84, 0x05, 0xc1, + 0xf8, 0x1b, 0x5c, 0x07, 0xa3, 0xf0, 0x88, 0x23, + 0x0d, 0xed, 0xd0, 0xc8, 0xca, 0xcc, 0xcb, 0xe2, + 0xe7, 0xc8, 0xca, 0xc8, 0xee, 0x51, 0xdd, 0x1c, + 0x9e, 0x1c, 0x52, 0x57, 0x41, 0x4d, 0x44, 0x53, + 0x50, 0x55, 0x4c, 0x44, 0x53, 0x50, 0x55, 0x52, + 0x45, 0x45, 0x52, 0x53, 0x45, 0x4c, 0x51, 0x47, + 0x52, 0x4c, 0x08, 0x00, 0x00, 0x3f, 0x7f, 0xbf, + 0xff, 0x11, 0x12, 0x13, 0x15, 0x41, 0x04, 0x24, + 0x1f, 0x19, 0x12, 0x01, 0xff, 0xff, 0x01, 0x00, + 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x3e, 0x6c, + 0x65, 0x00, 0x8d, 0x00, 0x1c, 0x8d, 0x02, 0x1c, + 0x4c, 0x7d, 0xea, 0x8a, 0xa2, 0x05, 0xca, 0xd0, + 0xfd, 0xaa, 0x60, 0x20, 0xae, 0xe9, 0x4c, 0x9c, + 0xe9, 0xad, 0x02, 0x02, 0xc9, 0x2d, 0xf0, 0x05, + 0x38, 0xe9, 0x2b, 0xd0, 0xda, 0x85, 0x23, 0x60, + 0x8e, 0x03, 0x18, 0xa9, 0x02, 0x8d, 0x00, 0x18, + 0xa9, 0x1a, 0x8d, 0x02, 0x18, 0x4c, 0xa7, 0xea, + 0xad, 0x00, 0x18, 0x29, 0x01, 0xd0, 0xf9, 0xa9, + 0x01, 0x8d, 0x05, 0x18, 0x4c, 0xdf, 0xe9, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xc6, 0xc8, + 0x8f, 0xf9, 0x5f, 0xcd, 0x97, 0xcd, 0x00, 0x05, + 0x03, 0x05, 0x06, 0x05, 0x09, 0x05, 0x0c, 0x05, + 0x0f, 0x05, 0x01, 0xff, 0xa0, 0xea, 0x67, 0xfe +}; diff --git a/Src/1541d64.cpp b/Src/1541d64.cpp index fc48e51..bde8fef 100644 --- a/Src/1541d64.cpp +++ b/Src/1541d64.cpp @@ -1,16 +1,29 @@ /* - * 1541d64.cpp - 1541 emulation in .d64 file + * 1541d64.cpp - 1541 emulation in disk image files (.d64/.x64/zipcode) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * zipcode decoding routines (C) 1993-1997 Marko Mäkelä, Paul David Doherty * + * 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 + */ - * - * Incompatibilities: - * ------------------ - * - * - Only read accesses possible - * - Not all commands implemented - * - The .d64 error info is read, but unused +/* + * Incompatibilities: + * - No support for relative files + * - Unimplemented commands: P + * - Impossible to implement: B-E, M-E */ #include "sysdeps.h" @@ -18,63 +31,105 @@ #include "1541d64.h" #include "IEC.h" #include "Prefs.h" +#include "C64.h" +#include "main.h" + +#define DEBUG 0 +#include "fdebug.h" // Channel modes (IRC users listen up :-) enum { CHMOD_FREE, // Channel free CHMOD_COMMAND, // Command/error channel - CHMOD_DIRECTORY, // Reading directory - CHMOD_FILE, // Sequential file open - CHMOD_DIRECT // Direct buffer access ('#') + CHMOD_DIRECTORY, // Reading directory, using large allocated buffer + CHMOD_FILE, // Sequential file open, using buffer in 1541 RAM + CHMOD_REL, // Relative file open, using buffer in 1541 RAM + CHMOD_DIRECT // Direct buffer access ('#'), using buffer in 1541 RAM }; -// Access modes +// Directory track +const int DIR_TRACK = 18; + +// BAM structure enum { - FMODE_READ, FMODE_WRITE, FMODE_APPEND + BAM_DIR_TRACK = 0, // Track... + BAM_DIR_SECTOR = 1, // ...and sector of first directory block (unused) + BAM_FMT_TYPE = 2, // Format type + BAM_BITMAP = 4, // Sector allocation map + BAM_DISK_NAME = 144, // Disk name + BAM_DISK_ID = 162, // Disk ID + BAM_FMT_CHAR = 165 // Format characters }; -// File types +// Directory structure enum { - FTYPE_PRG, FTYPE_SEQ, FTYPE_USR, FTYPE_REL + DIR_NEXT_TRACK = 0, // Track... + DIR_NEXT_SECTOR = 1, // ... and sector of next directory block + DIR_ENTRIES = 2, // Start of directory entries (8) + + DE_TYPE = 0, // File type/flags + DE_TRACK = 1, // Track... + DE_SECTOR = 2, // ...and sector of first data block + DE_NAME = 3, // File name + DE_SIDE_TRACK = 19, // Track... + DE_SIDE_SECTOR = 20, // ...and sector of first side sector + DE_REC_LEN = 21, // Record length + DE_OVR_TRACK = 26, // Track... + DE_OVR_SECTOR = 27, // ...and sector on overwrite (@) + DE_NUM_BLOCKS_L = 28, // Number of blocks, LSB + DE_NUM_BLOCKS_H = 29, // Number of blocks, MSB + + SIZEOF_DE = 32 // Size of directory entry }; -// Number of tracks/sectors -const int NUM_TRACKS = 35; -const int NUM_SECTORS = 683; +// Interleave of directory and data blocks +const int DIR_INTERLEAVE = 3; +const int DATA_INTERLEAVE = 10; + +// Number of sectors per track, for all tracks +const int num_sectors[41] = { + 0, + 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, + 19,19,19,19,19,19,19, + 18,18,18,18,18,18, + 17,17,17,17,17, + 17,17,17,17,17 // Tracks 36..40 +}; + +// Accumulated number of sectors +const int accum_num_sectors[41] = { + 0, + 0,21,42,63,84,105,126,147,168,189,210,231,252,273,294,315,336, + 357,376,395,414,433,452,471, + 490,508,526,544,562,580, + 598,615,632,649,666, + 683,700,717,734,751 // Tracks 36..40 +}; // Prototypes -static bool match(uint8 *p, uint8 *n); +static bool match(const uint8 *p, int p_len, const uint8 *n); +static FILE *open_image_file(const char *path, bool write_mode); +static bool parse_image_file(FILE *f, image_file_desc &desc); /* - * Constructor: Prepare emulation, open .d64 file + * Constructor: Prepare emulation, open image file */ -D64Drive::D64Drive(IEC *iec, char *filepath) : Drive(iec) +ImageDrive::ImageDrive(IEC *iec, const char *filepath) : Drive(iec), the_file(NULL), bam(ram + 0x700), bam_dirty(false) { - the_file = NULL; - ram = NULL; - - Ready = false; - strcpy(orig_d64_name, filepath); - for (int i=0; i<=14; i++) { - chan_mode[i] = CHMOD_FREE; - chan_buf[i] = NULL; + for (int i=0; i<18; i++) { + ch[i].mode = CHMOD_FREE; + ch[i].buf = NULL; } - chan_mode[15] = CHMOD_COMMAND; + ch[15].mode = CHMOD_COMMAND; - // Open .d64 file - open_close_d64_file(filepath); - if (the_file != NULL) { + Reset(); - // Allocate 1541 RAM - ram = new uint8[0x800]; - bam = (BAM *)(ram + 0x700); - - Reset(); + // Open image file + if (change_image(filepath)) Ready = true; - } } @@ -82,62 +137,61 @@ D64Drive::D64Drive(IEC *iec, char *filepath) : Drive(iec) * Destructor */ -D64Drive::~D64Drive() +ImageDrive::~ImageDrive() { - // Close .d64 file - open_close_d64_file(""); - - delete[] ram; - Ready = false; + close_image(); } /* - * Open/close the .d64 file + * Close the image file */ -void D64Drive::open_close_d64_file(char *d64name) +void ImageDrive::close_image(void) { - long size; - uint8 magic[4]; - - // Close old .d64, if open - if (the_file != NULL) { + if (the_file) { close_all_channels(); + if (bam_dirty) { + write_sector(DIR_TRACK, 0, bam); + bam_dirty = false; + } fclose(the_file); the_file = NULL; } +} - // Open new .d64 file - if (d64name[0]) { - if ((the_file = fopen(d64name, "rb")) != NULL) { - // Check length - fseek(the_file, 0, SEEK_END); - if ((size = ftell(the_file)) < NUM_SECTORS * 256) { - fclose(the_file); - the_file = NULL; - return; - } +/* + * Open the image file + */ - // x64 image? - rewind(the_file); - fread(&magic, 4, 1, the_file); - if (magic[0] == 0x43 && magic[1] == 0x15 && magic[2] == 0x41 && magic[3] == 0x64) - image_header = 64; - else - image_header = 0; +bool ImageDrive::change_image(const char *path) +{ + // Close old image file + close_image(); - // Preset error info (all sectors no error) - memset(error_info, 1, NUM_SECTORS); - - // Load sector error info from .d64 file, if present - if (!image_header && size == NUM_SECTORS * 257) { - fseek(the_file, NUM_SECTORS * 256, SEEK_SET); - fread(&error_info, NUM_SECTORS, 1, the_file); - } - } + // Open new image file (try write access first, then read-only) + write_protected = false; + the_file = open_image_file(path, true); + if (the_file == NULL) { + write_protected = true; + the_file = open_image_file(path, false); } + if (the_file) { + + // Determine file type and fill in image_file_desc structure + if (!parse_image_file(the_file, desc)) { + fclose(the_file); + the_file = false; + return false; + } + + // Read BAM + read_sector(DIR_TRACK, 0, bam); + bam_dirty = false; + return true; + } else + return false; } @@ -145,31 +199,33 @@ void D64Drive::open_close_d64_file(char *d64name) * Open channel */ -uint8 D64Drive::Open(int channel, char *filename) +uint8 ImageDrive::Open(int channel, const uint8 *name, int name_len) { + D(bug("ImageDrive::Open channel %d, file %s\n", channel, name)); + set_error(ERR_OK); // Channel 15: execute file name as command if (channel == 15) { - execute_command(filename); + execute_cmd(name, name_len); return ST_OK; } - if (chan_mode[channel] != CHMOD_FREE) { + if (ch[channel].mode != CHMOD_FREE) { set_error(ERR_NOCHANNEL); return ST_OK; } - if (filename[0] == '$') + if (name[0] == '$') if (channel) - return open_file_ts(channel, 18, 0); + return open_file_ts(channel, DIR_TRACK, 0); else - return open_directory(filename+1); + return open_directory(name + 1, name_len - 1); - if (filename[0] == '#') - return open_direct(channel, filename); + if (name[0] == '#') + return open_direct(channel, name); - return open_file(channel, filename); + return open_file(channel, name, name_len); } @@ -177,158 +233,217 @@ uint8 D64Drive::Open(int channel, char *filename) * Open file */ -uint8 D64Drive::open_file(int channel, char *filename) +uint8 ImageDrive::open_file(int channel, const uint8 *name, int name_len) { - char plainname[256]; - int filemode = FMODE_READ; - int filetype = FTYPE_PRG; - int track, sector; + uint8 plain_name[NAMEBUF_LENGTH]; + int plain_name_len; + int mode = FMODE_READ; + int type = FTYPE_DEL; + int rec_len = 0; + parse_file_name(name, name_len, plain_name, plain_name_len, mode, type, rec_len); + if (plain_name_len > 16) + plain_name_len = 16; - convert_filename(filename, plainname, &filemode, &filetype); + D(bug(" plain name %s, type %d, mode %d\n", plain_name, type, mode)); - // Channel 0 is READ PRG, channel 1 is WRITE PRG - if (!channel) { - filemode = FMODE_READ; - filetype = FTYPE_PRG; - } - if (channel == 1) { - filemode = FMODE_WRITE; - filetype = FTYPE_PRG; + // Channel 0 is READ, channel 1 is WRITE + if (channel == 0 || channel == 1) { + mode = channel ? FMODE_WRITE : FMODE_READ; + if (type == FTYPE_DEL) + type = FTYPE_PRG; } - // Allow only read accesses - if (filemode != FMODE_READ) { + ch[channel].writing = (mode == FMODE_WRITE || mode == FMODE_APPEND); + + // Wildcards are only allowed on reading + if (ch[channel].writing && (strchr((const char *)plain_name, '*') || strchr((const char *)plain_name, '?'))) { + set_error(ERR_SYNTAX33); + return ST_OK; + } + + // Check for write-protection if writing + if (ch[channel].writing && write_protected) { set_error(ERR_WRITEPROTECT); return ST_OK; } - // Find file in directory and open it - if (find_file(plainname, &track, §or)) - return open_file_ts(channel, track, sector); - else - set_error(ERR_FILENOTFOUND); + // Relative files are not supported + if (type == FTYPE_REL) { + set_error(ERR_UNIMPLEMENTED); + return ST_OK; + } + + // Find file in directory + int dir_track, dir_sector, entry; + if (find_first_file(plain_name, plain_name_len, dir_track, dir_sector, entry)) { + + // File exists + D(bug(" file exists, dir track %d, sector %d, entry %d\n", dir_track, dir_sector, entry)); + ch[channel].dir_track = dir_track; + ch[channel].dir_sector = dir_sector; + ch[channel].entry = entry; + uint8 *de = dir + DIR_ENTRIES + entry * SIZEOF_DE; + + // Get file type from existing file if not specified in file name + if (type == FTYPE_DEL) + type = de[DE_TYPE] & 7; + + if ((de[DE_TYPE] & 7) != type) { + + // File type doesn't match + set_error(ERR_FILETYPE); + + } else if (mode == FMODE_WRITE) { + + if (name[0] == '@') { + + // Open old file for overwriting (save-replace) + return create_file(channel, plain_name, plain_name_len, type, true); + + } else { + + // File to be written already exists, error + set_error(ERR_FILEEXISTS); + } + + } else if (mode == FMODE_APPEND) { + + // Open old file for appending + open_file_ts(channel, de[DE_TRACK], de[DE_SECTOR]); + + // Seek to end of file + int track = 0, sector = 0, num_blocks = 0; + while (ch[channel].buf[0]) { + if (!read_sector(track = ch[channel].buf[0], sector = ch[channel].buf[1], ch[channel].buf)) + return ST_OK; + num_blocks++; + } + + // Change channel mode to writing, adjust buffer pointer + ch[channel].writing = true; + ch[channel].buf_len = ch[channel].buf[1] + 1; + ch[channel].buf_ptr = ch[channel].buf + ch[channel].buf_len; + ch[channel].track = track; + ch[channel].sector = sector; + ch[channel].num_blocks = num_blocks; + + } else if (mode == FMODE_M) { + + // Open old file for reading, even if it is not closed + return open_file_ts(channel, de[DE_TRACK], de[DE_SECTOR]); + + } else { + + // Open old file for reading, error if file is open + if (de[DE_TYPE] & 0x80) + return open_file_ts(channel, de[DE_TRACK], de[DE_SECTOR]); + else + set_error(ERR_WRITEFILEOPEN); + } + + } else { + + // File doesn't exist + D(bug(" file not found\n")); + + // Set file type to SEQ if not specified in file name + if (type == FTYPE_DEL) + type = FTYPE_SEQ; + + if (mode == FMODE_WRITE) { + + // Create new file for writing + return create_file(channel, plain_name, plain_name_len, type); + + } else + set_error(ERR_FILENOTFOUND); + } + return ST_OK; +} + + +/* + * Open channel for reading from file given track/sector of first block + */ + +uint8 ImageDrive::open_file_ts(int channel, int track, int sector) +{ + D(bug("open_file_ts track %d, sector %d\n", track, sector)); + + // Allocate buffer and set channel mode + int buf = alloc_buffer(-1); + if (buf == -1) { + set_error(ERR_NOCHANNEL); + return ST_OK; + } + ch[channel].buf_num = buf; + ch[channel].buf = ram + 0x300 + buf * 0x100; + ch[channel].mode = CHMOD_FILE; + + // On the next call to Read, the first block will be read + ch[channel].buf[0] = track; + ch[channel].buf[1] = sector; + ch[channel].buf_len = 0; return ST_OK; } /* - * Analyze file name, get access mode and type + * Create file and open channel for writing to file */ -void D64Drive::convert_filename(char *srcname, char *destname, int *filemode, int *filetype) +uint8 ImageDrive::create_file(int channel, const uint8 *name, int name_len, int type, bool overwrite) { - char *p; + D(bug("create_file %s, type %d\n", name, type)); - // Search for ':', p points to first character after ':' - if ((p = strchr(srcname, ':')) != NULL) - p++; - else - p = srcname; + // Allocate buffer + int buf = alloc_buffer(-1); + if (buf == -1) { + set_error(ERR_NOCHANNEL); + return ST_OK; + } + ch[channel].buf_num = buf; + ch[channel].buf = ram + 0x300 + buf * 0x100; - // Remaining string -> destname - strncpy(destname, p, NAMEBUF_LENGTH); - - // Search for ',' - p = destname; - while (*p && (*p != ',')) p++; - - // Look for mode parameters seperated by ',' - p = destname; - while ((p = strchr(p, ',')) != NULL) { - - // Cut string after the first ',' - *p++ = 0; - - switch (*p) { - case 'P': - *filetype = FTYPE_PRG; - break; - case 'S': - *filetype = FTYPE_SEQ; - break; - case 'U': - *filetype = FTYPE_USR; - break; - case 'L': - *filetype = FTYPE_REL; - break; - case 'R': - *filemode = FMODE_READ; - break; - case 'W': - *filemode = FMODE_WRITE; - break; - case 'A': - *filemode = FMODE_APPEND; - break; + // Allocate new directory entry if not overwriting + if (!overwrite) { + if (!alloc_dir_entry(ch[channel].dir_track, ch[channel].dir_sector, ch[channel].entry)) { + free_buffer(buf); + return ST_OK; } } -} + uint8 *de = dir + DIR_ENTRIES + ch[channel].entry * SIZEOF_DE; - -/* - * Search file in directory, find first track and sector - * false: not found, true: found - */ - -bool D64Drive::find_file(char *filename, int *track, int *sector) -{ - int i, j; - uint8 *p, *q; - DirEntry *de; - - // Scan all directory blocks - dir.next_track = bam->dir_track; - dir.next_sector = bam->dir_sector; - - while (dir.next_track) { - if (!read_sector(dir.next_track, dir.next_sector, (uint8 *) &dir.next_track)) - return false; - - // Scan all 8 entries of a block - for (j=0; j<8; j++) { - de = &dir.entry[j]; - *track = de->track; - *sector = de->sector; - - if (de->type) { - p = (uint8 *)filename; - q = de->name; - for (i=0; i<16 && *p; i++, p++, q++) { - if (*p == '*') // Wildcard '*' matches all following characters - return true; - if (*p != *q) { - if (*p != '?') goto next_entry; // Wildcard '?' matches single character - if (*q == 0xa0) goto next_entry; - } - } - - if (i == 16 || *q == 0xa0) - return true; - } -next_entry: ; - } + // Allocate first data block + ch[channel].track = DIR_TRACK - 1; + ch[channel].sector = -DATA_INTERLEAVE; + if (!alloc_next_block(ch[channel].track, ch[channel].sector, DATA_INTERLEAVE)) { + free_buffer(buf); + return ST_OK; } + ch[channel].num_blocks = 1; + D(bug(" first data block on track %d, sector %d\n", ch[channel].track, ch[channel].sector)); - return false; -} - - -/* - * Open file given track/sector of first block - */ - -uint8 D64Drive::open_file_ts(int channel, int track, int sector) -{ - chan_buf[channel] = new uint8[256]; - chan_mode[channel] = CHMOD_FILE; - - // On the next call to Read, the first block will be read - chan_buf[channel][0] = track; - chan_buf[channel][1] = sector; - buf_len[channel] = 0; + // Write directory entry + memset(de, 0, SIZEOF_DE); + de[DE_TYPE] = type; // bit 7 not set -> open file + if (overwrite) { + de[DE_OVR_TRACK] = ch[channel].track; + de[DE_OVR_SECTOR] = ch[channel].sector; + } else { + de[DE_TRACK] = ch[channel].track; + de[DE_SECTOR] = ch[channel].sector; + } + memset(de + DE_NAME, 0xa0, 16); + memcpy(de + DE_NAME, name, name_len); + write_sector(ch[channel].dir_track, ch[channel].dir_sector, dir); + // Set channel descriptor + ch[channel].mode = CHMOD_FILE; + ch[channel].writing = true; + ch[channel].buf_ptr = ch[channel].buf + 2; + ch[channel].buf_len = 2; return ST_OK; } @@ -337,47 +452,30 @@ uint8 D64Drive::open_file_ts(int channel, int track, int sector) * Prepare directory as BASIC program (channel 0) */ -const char type_char_1[] = "DSPUREERSELQGRL?"; -const char type_char_2[] = "EERSELQGRL??????"; -const char type_char_3[] = "LQGRL???????????"; +const char type_char_1[] = "DSPUREER"; +const char type_char_2[] = "EERSELQG"; +const char type_char_3[] = "LQGRL???"; -// Return true if name 'n' matches pattern 'p' -static bool match(uint8 *p, uint8 *n) +uint8 ImageDrive::open_directory(const uint8 *pattern, int pattern_len) { - if (!*p) // Null pattern matches everything - return true; - - do { - if (*p == '*') // Wildcard '*' matches all following characters - return true; - if ((*p != *n) && (*p != '?')) // Wildcard '?' matches single character - return false; - p++; n++; - } while (*p); - - return *n == 0xa0; -} - -uint8 D64Drive::open_directory(char *pattern) -{ - int i, j, n, m; - uint8 *p, *q; - DirEntry *de; - uint8 c; - char *tmppat; - // Special treatment for "$0" - if (pattern[0] == '0' && pattern[1] == 0) - pattern += 1; + if (pattern[0] == '0' && pattern_len == 1) { + pattern++; + pattern_len--; + } // Skip everything before the ':' in the pattern - if ((tmppat = strchr(pattern, ':')) != NULL) - pattern = tmppat + 1; + uint8 *t = (uint8 *)memchr(pattern, ':', pattern_len); + if (t) { + t++; + pattern_len -= t - pattern; + pattern = t; + } - p = buf_ptr[0] = chan_buf[0] = new uint8[8192]; - chan_mode[0] = CHMOD_DIRECTORY; + ch[0].mode = CHMOD_DIRECTORY; + uint8 *p = ch[0].buf_ptr = ch[0].buf = new uint8[8192]; - // Create directory title + // Create directory title with disk name, ID and format type *p++ = 0x01; // Load address $0401 (from PET days :-) *p++ = 0x04; *p++ = 0x01; // Dummy line link @@ -387,8 +485,9 @@ uint8 D64Drive::open_directory(char *pattern) *p++ = 0x12; // RVS ON *p++ = '\"'; - q = bam->disk_name; - for (i=0; i<23; i++) { + uint8 *q = bam + BAM_DISK_NAME; + for (int i=0; i<23; i++) { + int c; if ((c = *q++) == 0xa0) *p++ = ' '; // Replace 0xa0 by space else @@ -398,38 +497,45 @@ uint8 D64Drive::open_directory(char *pattern) *p++ = 0; // Scan all directory blocks - dir.next_track = bam->dir_track; - dir.next_sector = bam->dir_sector; + dir[DIR_NEXT_TRACK] = DIR_TRACK; + dir[DIR_NEXT_SECTOR] = 1; - while (dir.next_track) { - if (!read_sector(dir.next_track, dir.next_sector, (uint8 *) &dir.next_track)) + int num_dir_blocks = 0; + while (dir[DIR_NEXT_TRACK] && num_dir_blocks < num_sectors[DIR_TRACK]) { + if (!read_sector(dir[DIR_NEXT_TRACK], dir[DIR_NEXT_SECTOR], dir)) return ST_OK; + num_dir_blocks++; // Scan all 8 entries of a block - for (j=0; j<8; j++) { - de = &dir.entry[j]; + uint8 *de = dir + DIR_ENTRIES; + for (int j=0; j<8; j++, de+=SIZEOF_DE) { + if (de[DE_TYPE] && (pattern_len == 0 || match(pattern, pattern_len, de + DE_NAME))) { - if (de->type && match((uint8 *)pattern, de->name)) { - *p++ = 0x01; // Dummy line link + // Dummy line link + *p++ = 0x01; *p++ = 0x01; - *p++ = de->num_blocks_l; // Line number - *p++ = de->num_blocks_h; + // Line number = number of blocks + *p++ = de[DE_NUM_BLOCKS_L]; + *p++ = de[DE_NUM_BLOCKS_H]; + // Appropriate number of spaces to align file names *p++ = ' '; - n = (de->num_blocks_h << 8) + de->num_blocks_l; + int n = (de[DE_NUM_BLOCKS_H] << 8) + de[DE_NUM_BLOCKS_L]; if (n<10) *p++ = ' '; if (n<100) *p++ = ' '; + // File name enclosed in quotes *p++ = '\"'; - q = de->name; - m = 0; - for (i=0; i<16; i++) { + q = de + DE_NAME; + uint8 c; + bool m = false; + for (int i=0; i<16; i++) { if ((c = *q++) == 0xa0) { if (m) - *p++ = ' '; // Replace all 0xa0 by spaces + *p++ = ' '; // Replace all 0xa0 by spaces else - m = *p++ = '\"'; // But the first by a '"' + m = (*p++ = '\"'); // But the first by a '"' } else *p++ = c; } @@ -438,20 +544,24 @@ uint8 D64Drive::open_directory(char *pattern) else *p++ = '\"'; // No 0xa0, then append a space - if (de->type & 0x80) + // Open files are marked by '*' + if (de[DE_TYPE] & 0x80) *p++ = ' '; else *p++ = '*'; - *p++ = type_char_1[de->type & 0x0f]; - *p++ = type_char_2[de->type & 0x0f]; - *p++ = type_char_3[de->type & 0x0f]; + // File type + *p++ = type_char_1[de[DE_TYPE] & 7]; + *p++ = type_char_2[de[DE_TYPE] & 7]; + *p++ = type_char_3[de[DE_TYPE] & 7]; - if (de->type & 0x40) + // Protected files are marked by '<' + if (de[DE_TYPE] & 0x40) *p++ = '<'; else *p++ = ' '; + // Appropriate number of spaces at the end *p++ = ' '; if (n >= 10) *p++ = ' '; if (n >= 100) *p++ = ' '; @@ -460,14 +570,12 @@ uint8 D64Drive::open_directory(char *pattern) } } - // Final line - q = p; - for (i=0; i<29; i++) - *q++ = ' '; - - n = 0; - for (i=0; i<35; i++) - n += bam->bitmap[i*4]; + // Final line, count number of free blocks + int n = 0; + for (int i=1; i<=35; i++) { + if (i != DIR_TRACK) // exclude track 18 + n += num_free_blocks(i); + } *p++ = 0x01; // Dummy line link *p++ = 0x01; @@ -487,13 +595,14 @@ uint8 D64Drive::open_directory(char *pattern) *p++ = 'E'; *p++ = '.'; - p = q; + memset(p, ' ', 13); + p += 13; + *p++ = 0; *p++ = 0; *p++ = 0; - buf_len[0] = p - chan_buf[0]; - + ch[0].buf_len = p - ch[0].buf; return ST_OK; } @@ -502,15 +611,15 @@ uint8 D64Drive::open_directory(char *pattern) * Open channel for direct buffer access */ -uint8 D64Drive::open_direct(int channel, char *filename) +uint8 ImageDrive::open_direct(int channel, const uint8 *name) { int buf = -1; - if (filename[1] == 0) + if (name[1] == 0) buf = alloc_buffer(-1); else - if ((filename[1] >= '0') && (filename[1] <= '3') && (filename[2] == 0)) - buf = alloc_buffer(filename[1] - '0'); + if ((name[1] >= '0') && (name[1] <= '3') && (name[2] == 0)) + buf = alloc_buffer(name[1] - '0'); if (buf == -1) { set_error(ERR_NOCHANNEL); @@ -518,13 +627,14 @@ uint8 D64Drive::open_direct(int channel, char *filename) } // The buffers are in the 1541 RAM at $300 and are 256 bytes each - chan_buf[channel] = buf_ptr[channel] = ram + 0x300 + (buf << 8); - chan_mode[channel] = CHMOD_DIRECT; - chan_buf_num[channel] = buf; + ch[channel].mode = CHMOD_DIRECT; + ch[channel].buf = ram + 0x300 + buf * 0x100; + ch[channel].buf_num = buf; // Store actual buffer number in buffer - *chan_buf[channel] = buf + '0'; - buf_len[channel] = 1; + ch[channel].buf[1] = buf + '0'; + ch[channel].buf_len = 1; + ch[channel].buf_ptr = ch[channel].buf + 1; return ST_OK; } @@ -534,27 +644,65 @@ uint8 D64Drive::open_direct(int channel, char *filename) * Close channel */ -uint8 D64Drive::Close(int channel) +uint8 ImageDrive::Close(int channel) { - if (channel == 15) { - close_all_channels(); - return ST_OK; - } + D(bug("ImageDrive::Close channel %d\n", channel)); - switch (chan_mode[channel]) { + switch (ch[channel].mode) { case CHMOD_FREE: break; - case CHMOD_DIRECT: - free_buffer(chan_buf_num[channel]); - chan_buf[channel] = NULL; - chan_mode[channel] = CHMOD_FREE; + case CHMOD_COMMAND: + close_all_channels(); break; - default: - delete[] chan_buf[channel]; - chan_buf[channel] = NULL; - chan_mode[channel] = CHMOD_FREE; + case CHMOD_DIRECT: + free_buffer(ch[channel].buf_num); + ch[channel].buf = NULL; + ch[channel].mode = CHMOD_FREE; + break; + + case CHMOD_FILE: + if (ch[channel].writing) { + + // Current block empty? Then write CR character + if (ch[channel].buf_len == 2) { + ch[channel].buf[2] = 0x0d; + ch[channel].buf_len++; + } + + // Write last data block + ch[channel].buf[0] = 0; + ch[channel].buf[1] = ch[channel].buf_len - 1; + D(bug(" writing last data block\n")); + if (!write_sector(ch[channel].track, ch[channel].sector, ch[channel].buf)) + goto free; + + // Close write file in directory + read_sector(ch[channel].dir_track, ch[channel].dir_sector, dir); + uint8 *de = dir + DIR_ENTRIES + ch[channel].entry * SIZEOF_DE; + de[DE_TYPE] |= 0x80; + de[DE_NUM_BLOCKS_L] = ch[channel].num_blocks & 0xff; + de[DE_NUM_BLOCKS_H] = ch[channel].num_blocks >> 8; + if (de[DE_OVR_TRACK]) { + // Overwriting, free old data blocks and set pointer to new ones + free_block_chain(de[DE_TRACK], de[DE_SECTOR]); + de[DE_TRACK] = de[DE_OVR_TRACK]; + de[DE_SECTOR] = de[DE_OVR_SECTOR]; + de[DE_OVR_TRACK] = de[DE_OVR_SECTOR] = 0; + } + write_sector(ch[channel].dir_track, ch[channel].dir_sector, dir); + D(bug(" directory entry updated\n")); + } +free: free_buffer(ch[channel].buf_num); + ch[channel].buf = NULL; + ch[channel].mode = CHMOD_FREE; + break; + + case CHMOD_DIRECTORY: + delete[] ch[channel].buf; + ch[channel].buf = NULL; + ch[channel].mode = CHMOD_FREE; break; } @@ -566,10 +714,12 @@ uint8 D64Drive::Close(int channel) * Close all channels */ -void D64Drive::close_all_channels() +void ImageDrive::close_all_channels() { for (int i=0; i<15; i++) Close(i); + Close(16); + Close(17); cmd_len = 0; } @@ -579,11 +729,19 @@ void D64Drive::close_all_channels() * Read from channel */ -uint8 D64Drive::Read(int channel, uint8 *byte) +uint8 ImageDrive::Read(int channel, uint8 &byte) { - switch (chan_mode[channel]) { +// D(bug("ImageDrive::Read channel %d\n", channel)); + + switch (ch[channel].mode) { + case CHMOD_FREE: + if (current_error == ERR_OK) + set_error(ERR_FILENOTOPEN); + break; + case CHMOD_COMMAND: - *byte = *error_ptr++; + // Read error channel + byte = *error_ptr++; if (--error_len) return ST_OK; else { @@ -593,19 +751,25 @@ uint8 D64Drive::Read(int channel, uint8 *byte) break; case CHMOD_FILE: + if (ch[channel].writing) + return ST_READ_TIMEOUT; + if (current_error != ERR_OK) + return ST_READ_TIMEOUT; + // Read next block if necessary - if (chan_buf[channel][0] && !buf_len[channel]) { - if (!read_sector(chan_buf[channel][0], chan_buf[channel][1], chan_buf[channel])) + if (ch[channel].buf_len == 0 && ch[channel].buf[0]) { + D(bug(" reading next data block track %d, sector %d\n", ch[channel].buf[0], ch[channel].buf[1])); + if (!read_sector(ch[channel].buf[0], ch[channel].buf[1], ch[channel].buf)) return ST_READ_TIMEOUT; - buf_ptr[channel] = chan_buf[channel] + 2; + ch[channel].buf_ptr = ch[channel].buf + 2; // Determine block length - buf_len[channel] = chan_buf[channel][0] ? 254 : (uint8)chan_buf[channel][1]-1; + ch[channel].buf_len = ch[channel].buf[0] ? 254 : ch[channel].buf[1] - 1; } - if (buf_len[channel] > 0) { - *byte = *buf_ptr[channel]++; - if (!--buf_len[channel] && !chan_buf[channel][0]) + if (ch[channel].buf_len > 0) { + byte = *(ch[channel].buf_ptr)++; + if (--(ch[channel].buf_len) == 0 && ch[channel].buf[0] == 0) return ST_EOF; else return ST_OK; @@ -615,9 +779,9 @@ uint8 D64Drive::Read(int channel, uint8 *byte) case CHMOD_DIRECTORY: case CHMOD_DIRECT: - if (buf_len[channel] > 0) { - *byte = *buf_ptr[channel]++; - if (--buf_len[channel]) + if (ch[channel].buf_len > 0) { + byte = *(ch[channel].buf_ptr)++; + if (--(ch[channel].buf_len)) return ST_OK; else return ST_EOF; @@ -633,277 +797,100 @@ uint8 D64Drive::Read(int channel, uint8 *byte) * Write byte to channel */ -uint8 D64Drive::Write(int channel, uint8 byte, bool eoi) +uint8 ImageDrive::Write(int channel, uint8 byte, bool eoi) { - switch (chan_mode[channel]) { +// D(bug("ImageDrive::Write channel %d, byte %02x, eoi %d\n", channel, byte, eoi)); + + switch (ch[channel].mode) { case CHMOD_FREE: - set_error(ERR_FILENOTOPEN); + if (current_error == ERR_OK) + set_error(ERR_FILENOTOPEN); break; case CHMOD_COMMAND: // Collect characters and execute command on EOI - if (cmd_len >= 40) + if (cmd_len > 58) { + set_error(ERR_SYNTAX32); return ST_TIMEOUT; + } - cmd_buffer[cmd_len++] = byte; + cmd_buf[cmd_len++] = byte; if (eoi) { - cmd_buffer[cmd_len++] = 0; + execute_cmd(cmd_buf, cmd_len); cmd_len = 0; - execute_command(cmd_buffer); } return ST_OK; case CHMOD_DIRECTORY: set_error(ERR_WRITEFILEOPEN); break; + + case CHMOD_FILE: + if (!ch[channel].writing) + return ST_TIMEOUT; + if (current_error != ERR_OK) + return ST_TIMEOUT; + + // Buffer full? + if (ch[channel].buf_len >= 256) { + + // Yes, allocate new block + int track = ch[channel].track, sector = ch[channel].sector; + if (!alloc_next_block(track, sector, DATA_INTERLEAVE)) + return ST_TIMEOUT; + ch[channel].num_blocks++; + D(bug("next data block on track %d, sector %d\n", track, sector)); + + // Write buffer with link to new block + ch[channel].buf[0] = track; + ch[channel].buf[1] = sector; + write_sector(ch[channel].track, ch[channel].sector, ch[channel].buf); + + // Reset buffer + ch[channel].buf_ptr = ch[channel].buf + 2; + ch[channel].buf_len = 2; + ch[channel].track = track; + ch[channel].sector = sector; + } + *(ch[channel].buf_ptr)++ = byte; + ch[channel].buf_len++; + return ST_OK; + + case CHMOD_DIRECT: + if (ch[channel].buf_len < 256) { + *(ch[channel].buf_ptr)++ = byte; + ch[channel].buf_len++; + return ST_OK; + } else + return ST_TIMEOUT; + break; } return ST_TIMEOUT; } -/* - * Execute command string - */ - -void D64Drive::execute_command(char *command) -{ - uint16 adr; - int len; - - switch (command[0]) { - case 'B': - if (command[1] != '-') - set_error(ERR_SYNTAX30); - else - switch (command[2]) { - case 'R': - block_read_cmd(&command[3]); - break; - - case 'P': - buffer_ptr_cmd(&command[3]); - break; - - case 'A': - case 'F': - case 'W': - set_error(ERR_WRITEPROTECT); - break; - - default: - set_error(ERR_SYNTAX30); - break; - } - break; - - case 'M': - if (command[1] != '-') - set_error(ERR_SYNTAX30); - else - switch (command[2]) { - case 'R': - adr = ((uint8)command[4] << 8) | ((uint8)command[3]); - error_ptr = (char *)(ram + (adr & 0x07ff)); - if (!(error_len = (uint8)command[5])) - error_len = 1; - break; - - case 'W': - adr = ((uint8)command[4] << 8) | ((uint8)command[3]); - len = (uint8)command[5]; - for (int i=0; i= 0x30 && *cmd < 0x40) { - i *= 10; - i += *cmd++ & 0x0f; - } - *arg1 = i & 0xff; - - while (*cmd == ' ' || *cmd == 0x1d || *cmd == 0x2c) cmd++; - if (!*cmd) return false; - - i = 0; - while (*cmd >= 0x30 && *cmd < 0x40) { - i *= 10; - i += *cmd++ & 0x0f; - } - *arg2 = i & 0xff; - - while (*cmd == ' ' || *cmd == 0x1d || *cmd == 0x2c) cmd++; - if (!*cmd) return false; - - i = 0; - while (*cmd >= 0x30 && *cmd < 0x40) { - i *= 10; - i += *cmd++ & 0x0f; - } - *arg3 = i & 0xff; - - while (*cmd == ' ' || *cmd == 0x1d || *cmd == 0x2c) cmd++; - if (!*cmd) return false; - - i = 0; - while (*cmd >= 0x30 && *cmd < 0x40) { - i *= 10; - i += *cmd++ & 0x0f; - } - *arg4 = i & 0xff; - - return true; -} - - -/* - * Execute 'G' command - */ - -void D64Drive::chd64_cmd(char *d64name) -{ - char str[NAMEBUF_LENGTH]; - char *p = str; - - // Convert .d64 file name - for (int i=0; i=0; want--) @@ -940,86 +927,1241 @@ int D64Drive::alloc_buffer(int want) * Free floppy buffer */ -void D64Drive::free_buffer(int buf) +void ImageDrive::free_buffer(int buf) { buf_free[buf] = true; } /* - * Read sector (256 bytes) - * true: success, false: error + * Search file in directory, return directory track/sector and entry number + * false: not found, true: found */ -bool D64Drive::read_sector(int track, int sector, uint8 *buffer) +// Return true if name 'n' matches pattern 'p' +static bool match(const uint8 *p, int p_len, const uint8 *n) { - int offset; + if (p_len > 16) + p_len = 16; - // Convert track/sector to byte offset in file - if ((offset = offset_from_ts(track, sector)) < 0) { - set_error(ERR_ILLEGALTS); - return false; + int c = 0; + while (p_len-- > 0) { + if (*p == '*') // Wildcard '*' matches all following characters + return true; + if ((*p != *n) && (*p != '?')) // Wildcard '?' matches single character + return false; + p++; n++; c++; } - if (the_file == NULL) { - set_error(ERR_NOTREADY); - return false; + return *n == 0xa0 || c == 16; +} + +bool ImageDrive::find_file(const uint8 *pattern, int pattern_len, int &dir_track, int &dir_sector, int &entry, bool cont) +{ + // Counter to prevent cyclic directories from resulting in an infinite loop + int num_dir_blocks = 0; + + // Pointer to current directory entry + uint8 *de = NULL; + if (cont) + de = dir + DIR_ENTRIES + entry * SIZEOF_DE; + else { + dir[DIR_NEXT_TRACK] = DIR_TRACK; + dir[DIR_NEXT_SECTOR] = 1; + entry = 8; } -#ifdef AMIGA - if (offset != ftell(the_file)) - fseek(the_file, offset + image_header, SEEK_SET); -#else - fseek(the_file, offset + image_header, SEEK_SET); -#endif - fread(buffer, 256, 1, the_file); + while (num_dir_blocks < num_sectors[DIR_TRACK]) { + + // Goto next entry + entry++; de += SIZEOF_DE; + if (entry >= 8) { + + // Read next directory block + if (dir[DIR_NEXT_TRACK] == 0) + return false; + if (!read_sector(dir_track = dir[DIR_NEXT_TRACK], dir_sector = dir[DIR_NEXT_SECTOR], dir)) + return false; + num_dir_blocks++; + entry = 0; + de = dir + DIR_ENTRIES; + } + + // Does entry match pattern? + if (de[DE_TYPE] && match(pattern, pattern_len, de + DE_NAME)) + return true; + } + return false; +} + +bool ImageDrive::find_first_file(const uint8 *pattern, int pattern_len, int &dir_track, int &dir_sector, int &entry) +{ + return find_file(pattern, pattern_len, dir_track, dir_sector, entry, false); +} + +bool ImageDrive::find_next_file(const uint8 *pattern, int pattern_len, int &dir_track, int &dir_sector, int &entry) +{ + return find_file(pattern, pattern_len, dir_track, dir_sector, entry, true); +} + + +/* + * Allocate new entry in directory, returns false on error (usually when + * all sectors of track 18 are allocated) + * The track/sector and entry numbers are returned + */ + +bool ImageDrive::alloc_dir_entry(int &track, int §or, int &entry) +{ + // First look for free entry in existing directory blocks + dir[DIR_NEXT_TRACK] = DIR_TRACK; + dir[DIR_NEXT_SECTOR] = 1; + while (dir[DIR_NEXT_TRACK]) { + if (!read_sector(track = dir[DIR_NEXT_TRACK], sector = dir[DIR_NEXT_SECTOR], dir)) + return false; + + uint8 *de = dir + DIR_ENTRIES; + for (entry=0; entry<8; entry++, de+=SIZEOF_DE) { + if (de[DE_TYPE] == 0) { + D(bug(" allocated entry %d in dir track %d, sector %d\n", entry, track, sector)); + return true; + } + } + } + + // No free entry found, allocate new directory block + int last_track = track, last_sector = sector; + if (!alloc_next_block(track, sector, DIR_INTERLEAVE)) + return false; + D(bug(" new directory block track %d, sector %d\n", track, sector)); + + // Write link to new block to last block + dir[DIR_NEXT_TRACK] = track; + dir[DIR_NEXT_SECTOR] = sector; + write_sector(last_track, last_sector, dir); + + // Write new empty directory block and return first entry + memset(dir, 0, 256); + dir[DIR_NEXT_SECTOR] = 0xff; + write_sector(track, sector, dir); + entry = 0; + return true; +} + +/* + * Test if block is free in BAM (track/sector are not checked for validity) + */ + +bool ImageDrive::is_block_free(int track, int sector) +{ + uint8 *p = bam + BAM_BITMAP + (track - 1) * 4; + int byte = sector / 8 + 1; + int bit = sector & 7; + return p[byte] & (1 << bit); +} + + +/* + * Get number of free blocks on a track + */ + +int ImageDrive::num_free_blocks(int track) +{ + return bam[BAM_BITMAP + (track - 1) * 4]; +} + + +/* + * Clear BAM, mark all blocks as free + */ + +static void clear_bam(uint8 *bam) +{ + for (int track=1; track<=35; track++) { + static const uint8 num2bits[8] = {0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff}; + (bam + BAM_BITMAP)[(track-1) * 4 + 0] = num_sectors[track]; + (bam + BAM_BITMAP)[(track-1) * 4 + 1] = 0xff; + (bam + BAM_BITMAP)[(track-1) * 4 + 2] = 0xff; + (bam + BAM_BITMAP)[(track-1) * 4 + 3] = num2bits[num_sectors[track] - 16]; + } +} + + +/* + * Allocate block in BAM, returns error code + */ + +int ImageDrive::alloc_block(int track, int sector) +{ + if (track < 1 || track > 35 || sector < 0 || sector >= num_sectors[track]) + return ERR_ILLEGALTS; + + uint8 *p = bam + BAM_BITMAP + (track - 1) * 4; + int byte = sector / 8 + 1; + int bit = sector & 7; + + // Block free? + if (p[byte] & (1 << bit)) { + + // Yes, allocate and decrement free block count + D(bug("allocating block at track %d, sector %d\n", track, sector)); + p[byte] &= ~(1 << bit); + p[0]--; + bam_dirty = true; + return ERR_OK; + + } else + return ERR_NOBLOCK; +} + + +/* + * Free block in BAM, returns error code + */ + +int ImageDrive::free_block(int track, int sector) +{ + if (track < 1 || track > 35 || sector < 0 || sector >= num_sectors[track]) + return ERR_ILLEGALTS; + + uint8 *p = bam + BAM_BITMAP + (track - 1) * 4; + int byte = sector / 8 + 1; + int bit = sector & 7; + + // Block allocated? + if (!(p[byte] & (1 << bit))) { + + // Yes, free and increment free block count + D(bug("freeing block at track %d, sector %d\n", track, sector)); + p[byte] |= (1 << bit); + p[0]++; + bam_dirty = true; + } + return ERR_OK; +} + + +/* + * Allocate chain of data blocks in BAM + */ + +bool ImageDrive::alloc_block_chain(int track, int sector) +{ + uint8 buf[256]; + while (alloc_block(track, sector) == ERR_OK) { + if (!read_sector(track, sector, buf)) + return false; + track = buf[0]; + sector = buf[1]; + } return true; } /* - * Convert track/sector to offset + * Free chain of data blocks in BAM */ -const int num_sectors[41] = { - 0, - 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, - 19,19,19,19,19,19,19, - 18,18,18,18,18,18, - 17,17,17,17,17, - 17,17,17,17,17 // Tracks 36..40 -}; - -const int sector_offset[41] = { - 0, - 0,21,42,63,84,105,126,147,168,189,210,231,252,273,294,315,336, - 357,376,395,414,433,452,471, - 490,508,526,544,562,580, - 598,615,632,649,666, - 683,700,717,734,751 // Tracks 36..40 -}; - -int D64Drive::offset_from_ts(int track, int sector) +bool ImageDrive::free_block_chain(int track, int sector) { - if ((track < 1) || (track > NUM_TRACKS) || - (sector < 0) || (sector >= num_sectors[track])) - return -1; - - return (sector_offset[track] + sector) << 8; + uint8 buf[256]; + while (free_block(track, sector) == ERR_OK) { + if (!read_sector(track, sector, buf)) + return false; + track = buf[0]; + sector = buf[1]; + } + return true; } /* - * Conversion PETSCII->ASCII + * Search and allocate next free block, returns false if no more blocks + * are free (ERR_DISKFULL is also set in this case) + * "track" and "sector" must be set to the block where the search should + * begin */ -uint8 D64Drive::conv_from_64(uint8 c, bool map_slash) +bool ImageDrive::alloc_next_block(int &track, int §or, int interleave) { - if ((c >= 'A') && (c <= 'Z') || (c >= 'a') && (c <= 'z')) - return c ^ 0x20; - if ((c >= 0xc1) && (c <= 0xda)) - return c ^ 0x80; - if ((c == '/') && map_slash && ThePrefs.MapSlash) - return '\\'; - return c; + // Find track with free blocks + bool side_changed = false; + while (num_free_blocks(track) == 0) { + if (track == DIR_TRACK) { // Directory doesn't grow to other tracks +full: track = sector = 0; + set_error(ERR_DISKFULL); + return false; + } else if (track > DIR_TRACK) { + track++; + if (track > 35) { + if (!side_changed) + side_changed = true; + else + goto full; + track = DIR_TRACK - 1; + sector = 0; + } + } else { + track--; + if (track < 1) { + if (!side_changed) + side_changed = true; + else + goto full; + track = DIR_TRACK + 1; + sector = 0; + } + } + } + + // Find next free block on track + int num = num_sectors[track]; + sector = sector + interleave; + if (sector >= num) { + sector -= num; + if (sector) + sector--; + } + while (!is_block_free(track, sector)) { + sector++; + if (sector >= num_sectors[track]) { + sector = 0; + while (!is_block_free(track, sector)) { + sector++; + if (sector >= num_sectors[track]) { + // Something is wrong: the BAM free block count for this + // track was >0, but we found no free blocks + track = sector = 0; + set_error(ERR_DIRERROR); + return false; + } + } + } + } + + alloc_block(track, sector); + return true; +} + + +/* + * Sector reading/writing routines + */ + +static long offset_from_ts(const image_file_desc &desc, int track, int sector) +{ + if ((track < 1) || (track > desc.num_tracks) + || (sector < 0) || (sector >= num_sectors[track])) + return -1; + + return ((accum_num_sectors[track] + sector) << 8) + desc.header_size; +} + +// Get number of sectors per given track +int sectors_per_track(const image_file_desc &desc, int track) +{ + return num_sectors[track]; +} + +// Get reference to error info byte of given track/sector +uint8 &error_info_for_sector(image_file_desc &desc, int track, int sector) +{ + return desc.error_info[accum_num_sectors[track] + sector]; +} + +static inline const uint8 &error_info_for_sector(const image_file_desc &desc, int track, int sector) +{ + return desc.error_info[accum_num_sectors[track] + sector]; +} + +const int conv_job_error[16] = { + ERR_OK, // 0 -> 00 OK + ERR_OK, // 1 -> 00 OK + ERR_READ20, // 2 -> 20 READ ERROR + ERR_READ21, // 3 -> 21 READ ERROR + ERR_READ22, // 4 -> 22 READ ERROR + ERR_READ23, // 5 -> 23 READ ERROR + ERR_READ24, // 6 -> 24 READ ERROR (undetected by 1541) + ERR_WRITE25, // 7 -> 25 WRITE ERROR + ERR_WRITEPROTECT, // 8 -> 26 WRITE PROTECT ON + ERR_READ27, // 9 -> 27 READ ERROR + ERR_WRITE28, // 10 -> 28 WRITE ERROR + ERR_DISKID, // 11 -> 29 DISK ID MISMATCH + ERR_OK, // 12 -> 00 OK + ERR_OK, // 13 -> 00 OK + ERR_OK, // 14 -> 00 OK + ERR_NOTREADY // 15 -> 74 DRIVE NOT READY +}; + +// Read sector, return error code +static int read_sector(FILE *f, const image_file_desc &desc, int track, int sector, uint8 *buffer) +{ + // Convert track/sector to byte offset in file + long offset = offset_from_ts(desc, track, sector); + if (offset < 0) + return ERR_ILLEGALTS; + + if (f == NULL) + return ERR_NOTREADY; + + fseek(f, offset, SEEK_SET); + if (fread(buffer, 1, 256, f) != 256) + return ERR_READ22; + else { + unsigned int error = error_info_for_sector(desc, track, sector); + return conv_job_error[error & 0x0f]; + } +} + +// Write sector, return error code +static int write_sector(FILE *f, const image_file_desc &desc, int track, int sector, uint8 *buffer) +{ + // Convert track/sector to byte offset in file + long offset = offset_from_ts(desc, track, sector); + if (offset < 0) + return ERR_ILLEGALTS; + + if (f == NULL) + return ERR_NOTREADY; + + fseek(f, offset, SEEK_SET); + if (fwrite(buffer, 1, 256, f) != 256) + return ERR_WRITE25; + else + return ERR_OK; +} + +// Read sector and set error message, returns false on error +bool ImageDrive::read_sector(int track, int sector, uint8 *buffer) +{ + int error = ::read_sector(the_file, desc, track, sector, buffer); + if (error) + set_error(error, track, sector); + return error == ERR_OK; +} + +// Write sector and set error message, returns false on error +bool ImageDrive::write_sector(int track, int sector, uint8 *buffer) +{ + int error = ::write_sector(the_file, desc, track, sector, buffer); + if (error) + set_error(error, track, sector); + return error == ERR_OK; +} + +// Write error info back to image file +static void write_back_error_info(FILE *f, const image_file_desc &desc) +{ + if (desc.type == TYPE_D64 && desc.has_error_info) { + int num_sectors = desc.num_tracks == 40 ? NUM_SECTORS_40 : NUM_SECTORS_35; + fseek(f, num_sectors * 256, SEEK_SET); + fwrite(desc.error_info, num_sectors, 1, f); + } +} + +// Format disk image +static bool format_image(FILE *f, image_file_desc &desc, bool lowlevel, uint8 id1, uint8 id2, const uint8 *disk_name, int disk_name_len) +{ + uint8 p[256]; + + if (lowlevel) { + + // Fill buffer with 1541 empty sector pattern (4b 01 01 ..., + // except on track 1 where it's 01 01 01 ...) + memset(p, 1, 256); + + // Overwrite all blocks + for (int track=1; track<=35; track++) { + if (track == 2) + p[0] = 0x4b; + for (int sector=0; sector 16) + disk_name_len = 16; + memcpy(p + BAM_DISK_NAME, disk_name, disk_name_len); + p[BAM_DISK_ID] = id1; + p[BAM_DISK_ID + 1] = id2; + p[BAM_FMT_CHAR] = '2'; + p[BAM_FMT_CHAR + 1] = 'A'; + if (write_sector(f, desc, DIR_TRACK, 0, p) != ERR_OK) + return false; + + // Create and write empty directory + memset(p, 0, 256); + p[1] = 255; + return write_sector(f, desc, DIR_TRACK, 1, p) == ERR_OK; +} + + +/* + * Execute drive commands + */ + +// BLOCK-READ:channel,0,track,sector +void ImageDrive::block_read_cmd(int channel, int track, int sector, bool user_cmd) +{ + if (channel >= 16 || ch[channel].mode != CHMOD_DIRECT) { + set_error(ERR_NOCHANNEL); + return; + } + if (!read_sector(track, sector, ch[channel].buf)) + return; + if (user_cmd) { + ch[channel].buf_len = 256; + ch[channel].buf_ptr = ch[channel].buf; + } else { + ch[channel].buf_len = ch[channel].buf[0]; + ch[channel].buf_ptr = ch[channel].buf + 1; + } +} + +// BLOCK-WRITE:channel,0,track,sector +void ImageDrive::block_write_cmd(int channel, int track, int sector, bool user_cmd) +{ + if (write_protected) { + set_error(ERR_WRITEPROTECT); + return; + } + if (channel >= 16 || ch[channel].mode != CHMOD_DIRECT) { + set_error(ERR_NOCHANNEL); + return; + } + if (!user_cmd) + ch[channel].buf[0] = ch[channel].buf_len ? ch[channel].buf_len - 1 : 1; + if (!write_sector(track, sector, ch[channel].buf)) + return; + if (!user_cmd) { + ch[channel].buf_len = 1; + ch[channel].buf_ptr = ch[channel].buf + 1; + } +} + +// BLOCK-ALLOCATE:0,track,sector +void ImageDrive::block_allocate_cmd(int track, int sector) +{ + int err = alloc_block(track, sector); + if (err) { + if (err == ERR_NOBLOCK) { + // Find next free block and return its track/sector address in the + // error message (only look on higher tracks) + for (;;) { + sector++; + if (sector >= num_sectors[track]) { + track++; + sector = 0; + if (track > 35) { + set_error(ERR_NOBLOCK, 0, 0); + return; + } + } + if (is_block_free(track, sector)) { + set_error(ERR_NOBLOCK, track, sector); + return; + } + } + } else + set_error(err, track, sector); + } +} + +// BLOCK-FREE:0,track,sector +void ImageDrive::block_free_cmd(int track, int sector) +{ + int err = free_block(track, sector); + if (err) + set_error(err, track, sector); +} + +// BUFFER-POINTER:channel,pos +void ImageDrive::buffer_pointer_cmd(int channel, int pos) +{ + if (channel >= 16 || ch[channel].mode != CHMOD_DIRECT) { + set_error(ERR_NOCHANNEL); + return; + } + ch[channel].buf_ptr = ch[channel].buf + pos; + ch[channel].buf_len = 256 - pos; +} + +// M-R[] +void ImageDrive::mem_read_cmd(uint16 adr, uint8 len) +{ + error_len = len; + if (adr >= 0x300 && adr < 0x1000) { + // Read from RAM + error_ptr = (char *)ram + (adr & 0x7ff); + } else if (adr >= 0xc000) { + // Read from ROM + error_ptr = (char *)(TheC64->ROM1541) + (adr - 0xc000); + } else { + unsupp_cmd(); + memset(error_buf, 0, len); + error_ptr = error_buf; + } +} + +// M-W +void ImageDrive::mem_write_cmd(uint16 adr, uint8 len, uint8 *p) +{ + while (len) { + if (adr >= 0x300 && adr < 0x1000) { + // Write to RAM + ram[adr & 0x7ff] = *p; + } else if (adr < 0xc000) { + unsupp_cmd(); + return; + } + len--; adr++; p++; + } +} + +// COPY:new=file1,file2,... +// ^ ^ +// new_file old_files +void ImageDrive::copy_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_files, int old_files_len) +{ + // Check if destination file is already present + int dir_track, dir_sector, entry; + if (find_first_file(new_file, new_file_len, dir_track, dir_sector, entry)) { + set_error(ERR_FILEEXISTS); + return; + } + + // Loop for all source files + bool first = true; + while (old_files_len > 0) { + uint8 *comma = (uint8 *)memchr(old_files, ',', old_files_len); + int name_len = comma ? comma - old_files : old_files_len; + + // Check if source file is present + if (!find_first_file(old_files, name_len, dir_track, dir_sector, entry)) { + set_error(ERR_FILENOTFOUND); + Close(17); + return; + } + uint8 *de = dir + DIR_ENTRIES + entry * SIZEOF_DE; + uint8 type = de[DE_TYPE] & 7, track = de[DE_TRACK], sector = de[DE_SECTOR]; + + // If this is the first source file, open internal write channel for destination file + if (first) { + create_file(17, new_file, new_file_len, type, false); + if (ch[17].mode == CHMOD_FREE) + return; + first = false; + } + + // Open internal read channel for source file + open_file_ts(16, track, sector); + if (ch[16].mode == CHMOD_FREE) { + Close(17); + return; + } + + // Copy file + uint8 byte, st; + do { + st = Read(16, byte); + Write(17, byte, false); + } while (st == ST_OK); + Close(16); + if (st != ST_EOF) { + Close(17); + return; + } + + if (comma) { + old_files_len -= name_len + 1; + old_files = comma + 1; + } else + old_files_len = 0; + } + Close(17); +} + +// RENAME:new=old +// ^ ^ +// new_file old_file +void ImageDrive::rename_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_file, int old_file_len) +{ + // Check if destination file is already present + int dir_track, dir_sector, entry; + if (find_first_file(new_file, new_file_len, dir_track, dir_sector, entry)) { + set_error(ERR_FILEEXISTS); + return; + } + + // Check if source file is present + if (!find_first_file(old_file, old_file_len, dir_track, dir_sector, entry)) { + set_error(ERR_FILENOTFOUND); + return; + } + + // Check for write-protection + if (write_protected) { + set_error(ERR_WRITEPROTECT); + return; + } + + // Rename file in directory entry + uint8 *p = dir + DIR_ENTRIES + entry * SIZEOF_DE; + memset(p + DE_NAME, 0xa0, 16); + memcpy(p + DE_NAME, new_file, new_file_len); + write_sector(dir_track, dir_sector, dir); +} + +// SCRATCH:file1,file2,... +// ^ +// files +void ImageDrive::scratch_cmd(const uint8 *files, int files_len) +{ + // Check for write-protection + if (write_protected) { + set_error(ERR_WRITEPROTECT); + return; + } + + // Loop for all files + int num_files = 0; + while (files_len > 0) { + uint8 *comma = (uint8 *)memchr(files, ',', files_len); + int name_len = comma ? comma - files : files_len; + + int dir_track, dir_sector, entry; + if (find_first_file(files, name_len, dir_track, dir_sector, entry)) { + do { + uint8 *de = dir + DIR_ENTRIES + entry * SIZEOF_DE; + + // File protected? Then skip + if (de[DE_TYPE] & 0x40) + continue; + + // Free allocated data blocks and side sectors + free_block_chain(de[DE_TRACK], de[DE_SECTOR]); + free_block_chain(de[DE_SIDE_TRACK], de[DE_SIDE_SECTOR]); + + // Clear file type + de[DE_TYPE] = 0; + + // Write directory block back + write_sector(dir_track, dir_sector, dir); + num_files++; + } while (find_next_file(files, name_len, dir_track, dir_sector, entry)); + } + + if (comma) { + files_len -= name_len + 1; + files = comma + 1; + } else + files_len = 0; + } + + // Report number of files scratched + set_error(ERR_SCRATCHED, num_files); +} + +// INITIALIZE +void ImageDrive::initialize_cmd(void) +{ + // Close all channels and re-read BAM + close_all_channels(); + if (bam_dirty) { + write_sector(DIR_TRACK, 0, bam); + bam_dirty = false; + } + read_sector(DIR_TRACK, 0, bam); +} + +// NEW:name,id +// ^ ^ +// name comma (or NULL) +void ImageDrive::new_cmd(const uint8 *name, int name_len, const uint8 *comma) +{ + // Check for write-protection + if (write_protected) { + set_error(ERR_WRITEPROTECT); + return; + } + + // Remember current ID + uint8 id1 = bam[BAM_DISK_ID], id2 = bam[BAM_DISK_ID + 1]; + + // Formatting with ID? + if (comma) { + + close_all_channels(); + + // Clear BAM buffer + memset(bam, 0, 256); + + // Get ID from command + if (comma[1]) { + id1 = comma[1]; + id2 = comma[2] ? comma[2] : ' '; + } else { + id1 = id2 = ' '; + } + } + + // Format disk image + format_image(the_file, desc, comma, id1, id2, name, name_len); + + // Re-read BAM + read_sector(DIR_TRACK, 0, bam); + bam_dirty = false; +} + +// VALIDATE +void ImageDrive::validate_cmd(void) +{ + // Backup of old BAM in case something goes amiss + uint8 old_bam[256]; + memcpy(old_bam, bam, 256); + + // Clear BAM + clear_bam(bam); + bam_dirty = true; + + // Allocate BAM and directory + if (!alloc_block_chain(DIR_TRACK, 0)) { + memcpy(bam, old_bam, 256); + return; + } + + // Allocate all file data and side sector blocks + int dir_track, dir_sector, entry; + if (find_first_file((uint8 *)"*", 1, dir_track, dir_sector, entry)) { + do { + uint8 *de = dir + DIR_ENTRIES + entry * SIZEOF_DE; + + if (de[DE_TYPE] & 0x80) { + // Closed file, allocate all file data and side sector blocks + if (!alloc_block_chain(de[DE_TRACK], de[DE_SECTOR]) || !alloc_block_chain(de[DE_SIDE_TRACK], de[DE_SIDE_SECTOR])) { + memcpy(bam, old_bam, 256); + return; + } + } else { + // Open file, delete it + de[DE_TYPE] = 0; + write_sector(dir_track, dir_sector, dir); + } + } while (find_next_file((uint8 *)"*", 1, dir_track, dir_sector, entry)); + } +} + + +/* + * Check whether file with given header (64 bytes) and size looks like one + * of the file types supported by this module + */ + +static bool is_d64_file(const uint8 *header, long size) +{ + return size == NUM_SECTORS_35 * 256 || size == NUM_SECTORS_35 * 257 + || size == NUM_SECTORS_40 * 256 || size == NUM_SECTORS_40 * 257; +} + +static bool is_ed64_file(const uint8 *header, long size) +{ + // 35-track d64 file with header ID at the end (only used internally for + // converted zipcode files) + return size == NUM_SECTORS_35 * 256 + 2; +} + +static bool is_x64_file(const uint8 *header, long size) +{ + return memcmp(header, "C\x15\x41\x64\x01\x02", 6) == 0; +} + +static bool is_zipcode_file(const char *path) +{ +#if 0 + string base, part; + SplitPath(path, base, part); + return part.length() > 2 && part[0] >= '1' && part[0] <= '4' && part[1] == '!'; +#else + return false; +#endif +} + +bool IsImageFile(const char *path, const uint8 *header, long size) +{ + return is_d64_file(header, size) || is_x64_file(header, size) || is_zipcode_file(path); +} + + +#if 0 +/* + * Convert zipcode file to extended d64 file (d64 file with header ID) + */ + +static FILE *open_zipcode_file(FILE *old, int num, const string &base, string &part, uint8 &id1, uint8 &id2) +{ + if (old) + fclose(old); + part[0] = num + '1'; + FILE *f = fopen(AddToPath(base, part).c_str(), "rb"); + if (f == NULL) + return NULL; + if (fseek(f, 2, SEEK_SET) < 0) { + fclose(f); + return NULL; + } + if (num == 0) { + id1 = getc(f); + id2 = getc(f); + } + return f; +} + +static FILE *convert_zipcode_to_ed64(const string &path) +{ + FILE *in = NULL, *out = NULL; + uint8 id1, id2; + + // Split input file name + string base, part; + SplitPath(path, base, part); + + // Open output file + out = tmpfile(); + if (out == NULL) + goto error; + + // Decode all tracks + for (int track=1; track<=35; track++) { + int max_sect = 17 + ((track < 31) ? 1 : 0) + ((track < 25) ? 1 : 0) + ((track < 18) ? 2 : 0); + + // Select appropriate input file + switch (track) { + case 1: + if ((in = open_zipcode_file(NULL, 0, base, part, id1, id2)) == NULL) + goto error; + break; + case 9: + if ((in = open_zipcode_file(in, 1, base, part, id1, id2)) == NULL) + goto error; + break; + case 17: + if ((in = open_zipcode_file(in, 2, base, part, id1, id2)) == NULL) + goto error; + break; + case 26: + if ((in = open_zipcode_file(in, 3, base, part, id1, id2)) == NULL) + goto error; + break; + } + + // Clear "sector read" flags + bool sect_flag[21]; + for (int i=0; i= max_sect || sect_flag[s] || feof(in)) + goto error; + sect_flag[s] = true; + uint8 *p = act_track + s * 256; + + // Uncompress sector + if (t & 0x80) { + // Run-length encoded sector + uint8 len = getc(in); + uint8 rep = getc(in); + int count = 0; + for (int j=0; j 40) + return false; + + // Read header ID from BAM (use error_info as buffer) + fseek(f, desc.header_size + accum_num_sectors[18] * 256, SEEK_SET); + fread(desc.error_info, 1, 256, f); + desc.id1 = desc.error_info[BAM_DISK_ID]; + desc.id2 = desc.error_info[BAM_DISK_ID + 1]; + + // .x64 files have no error info + memset(desc.error_info, 1, sizeof(desc.error_info)); + desc.has_error_info = false; + return true; +} + +static bool parse_image_file(FILE *f, image_file_desc &desc) +{ + // Read header + uint8 header[64]; + fread(header, 1, sizeof(header), f); + + // Determine file size + fseek(f, 0, SEEK_END); + long size = ftell(f); + + // Determine file type and fill in image_file_desc structure + if (is_x64_file(header, size)) + return parse_x64_file(f, desc); + else if (is_d64_file(header, size)) + return parse_d64_file(f, desc, false); + else if (is_ed64_file(header, size)) + return parse_d64_file(f, desc, true); + else + return false; +} + + +/* + * Read directory of disk image file into (empty) c64_dir_entry vector, + * returns false on error + */ + +bool ReadImageDirectory(const char *path, vector &vec) +{ + bool result = false; + + // Open file + FILE *f = open_image_file(path, false); + if (f) { + int num_dir_blocks = 0; + + // Determine file type and fill in image_file_desc structure + image_file_desc desc; + if (!parse_image_file(f, desc)) + goto done; + + // Scan all directory blocks + uint8 dir[256]; + dir[DIR_NEXT_TRACK] = DIR_TRACK; + dir[DIR_NEXT_SECTOR] = 1; + + while (dir[DIR_NEXT_TRACK] && num_dir_blocks < num_sectors[DIR_TRACK]) { + if (read_sector(f, desc, dir[DIR_NEXT_TRACK], dir[DIR_NEXT_SECTOR], dir) != ERR_OK) + break; + num_dir_blocks++; + + // Scan all 8 entries of a block + uint8 *de = dir + DIR_ENTRIES; + for (int j=0; j<8; j++, de+=SIZEOF_DE) { + + // Skip empty entries + if (de[DE_TYPE] == 0) + continue; + + // Convert file name (strip everything after and including the first trailing space) + uint8 name_buf[17]; + memcpy(name_buf, de + DE_NAME, 16); + name_buf[16] = 0; + uint8 *p = (uint8 *)memchr(name_buf, 0xa0, 16); + if (p) + *p = 0; + + // Convert file type + int type = de[DE_TYPE] & 7; + if (type > 4) + type = FTYPE_UNKNOWN; + + // Read start address + uint8 sa_lo = 0, sa_hi = 0; + uint8 buf[256]; + if (read_sector(f, desc, de[DE_TRACK], de[DE_SECTOR], buf) == ERR_OK) { + sa_lo = buf[2]; + sa_hi = buf[3]; + } + + // Add entry + vec.push_back(c64_dir_entry(name_buf, type, !(de[DE_TYPE] & 0x80), de[DE_TYPE] & 0x40, ((de[DE_NUM_BLOCKS_H] << 8) + de[DE_NUM_BLOCKS_L]) * 254, 0, sa_lo, sa_hi)); + } + } + + result = true; +done: fclose(f); + } + return result; +} + + +/* + * Create new blank disk image file, returns false on error + */ + +bool CreateImageFile(const char *path) +{ + // Open file for writing + FILE *f = fopen(path, "wb"); + if (f == NULL) + return false; + + // Create descriptor + image_file_desc desc; + desc.type = TYPE_D64; + desc.header_size = 0; + desc.num_tracks = 35; + desc.id1 = 'F'; + desc.id1 = 'R'; + memset(desc.error_info, 1, sizeof(desc.error_info)); + desc.has_error_info = false; + + // Format image file + if (!format_image(f, desc, true, 'F', 'R', (uint8 *)"D64 FILE", 8)) { + fclose(f); + remove(path); + return false; + } + + // Close file + fclose(f); + return true; } diff --git a/Src/1541d64.h b/Src/1541d64.h index 745623f..29a1327 100644 --- a/Src/1541d64.h +++ b/Src/1541d64.h @@ -1,7 +1,21 @@ /* - * 1541d64.h - 1541 emulation in .d64 file + * 1541d64.h - 1541 emulation in disk image files (.d64/.x64/zipcode) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _1541D64_H @@ -10,99 +24,129 @@ #include "IEC.h" -// BAM structure -typedef struct { - uint8 dir_track; // Track... - uint8 dir_sector; // ...and sector of first directory block - int8 fmt_type; // Format type - int8 pad0; - uint8 bitmap[4*35]; // Sector allocation - uint8 disk_name[18]; // Disk name - uint8 id[2]; // Disk ID - int8 pad1; - uint8 fmt_char[2]; // Format characters - int8 pad2[4]; - int8 pad3[85]; -} BAM; +/* + * Definitions + */ -// Directory entry structure -typedef struct { - uint8 type; // File type - uint8 track; // Track... - uint8 sector; // ...and sector of first data block - uint8 name[16]; // File name - uint8 side_track; // Track... - uint8 side_sector; // ...and sector of first side sector - uint8 rec_len; // Record length - int8 pad0[4]; - uint8 ovr_track; // Track... - uint8 ovr_sector; // ...and sector on overwrite - uint8 num_blocks_l; // Number of blocks, LSB - uint8 num_blocks_h; // Number of blocks, MSB - int8 pad1[2]; -} DirEntry; +// Constants +const int NUM_SECTORS_35 = 683; // Number of sectors in a 35-track image +const int NUM_SECTORS_40 = 768; // Number of sectors in a 40-track image -// Directory block structure -typedef struct { - uint8 padding[2]; // Keep DirEntry word-aligned - uint8 next_track; - uint8 next_sector; - DirEntry entry[8]; -} Directory; +// Disk image types +enum { + TYPE_D64, // D64 file + TYPE_ED64, // Converted zipcode file (D64 with header ID) + TYPE_X64 // x64 file +}; +// Channel descriptor +struct channel_desc { + int mode; // Channel mode + bool writing; // Flag: writing to file (for file channels) + int buf_num; // Buffer number for direct access and file channels + uint8 *buf; // Pointer to start of buffer + uint8 *buf_ptr; // Pointer to current position in buffer + int buf_len; // Remaining bytes in buffer + int track, sector; // Track and sector the buffer will be written to (for writing to file channels) + int num_blocks; // Number of blocks in file (for writing to file channels) + int dir_track; // Track... + int dir_sector; // ...and sector of directory block containing file entry + int entry; // Number of entry in directory block +}; -class D64Drive : public Drive { +// Disk image file descriptor +struct image_file_desc { + int type; // See definitions above + int header_size; // Size of file header + int num_tracks; // Number of tracks + uint8 id1, id2; // Block header ID (as opposed to BAM ID) + uint8 error_info[NUM_SECTORS_40]; // Sector error information (1 byte/sector) + bool has_error_info; // Flag: error info present in file +}; + +// Disk image drive class +class ImageDrive : public Drive { public: - D64Drive(IEC *iec, char *filepath); - virtual ~D64Drive(); - virtual uint8 Open(int channel, char *filename); + ImageDrive(IEC *iec, const char *filepath); + virtual ~ImageDrive(); + + virtual uint8 Open(int channel, const uint8 *name, int name_len); virtual uint8 Close(int channel); - virtual uint8 Read(int channel, uint8 *byte); + virtual uint8 Read(int channel, uint8 &byte); virtual uint8 Write(int channel, uint8 byte, bool eoi); virtual void Reset(void); private: - void open_close_d64_file(char *d64name); - uint8 open_file(int channel, char *filename); - void convert_filename(char *srcname, char *destname, int *filemode, int *filetype); - bool find_file(char *filename, int *track, int *sector); + void close_image(void); + bool change_image(const char *path); + + uint8 open_file(int channel, const uint8 *name, int name_len); uint8 open_file_ts(int channel, int track, int sector); - uint8 open_directory(char *pattern); - uint8 open_direct(int channel, char *filename); - void close_all_channels(); - void execute_command(char *command); - void block_read_cmd(char *command); - void buffer_ptr_cmd(char *command); - bool parse_bcmd(char *cmd, int *arg1, int *arg2, int *arg3, int *arg4); - void chd64_cmd(char *d64name); + uint8 create_file(int channel, const uint8 *name, int name_len, int type, bool overwrite = false); + uint8 open_directory(const uint8 *pattern, int pattern_len); + uint8 open_direct(int channel, const uint8 *filename); + void close_all_channels(void); + int alloc_buffer(int want); void free_buffer(int buf); + + bool find_file(const uint8 *pattern, int pattern_len, int &dir_track, int &dir_sector, int &entry, bool cont); + bool find_first_file(const uint8 *pattern, int pattern_len, int &dir_track, int &dir_sector, int &entry); + bool find_next_file(const uint8 *pattern, int pattern_len, int &dir_track, int &dir_sector, int &entry); + bool alloc_dir_entry(int &track, int §or, int &entry); + + bool is_block_free(int track, int sector); + int num_free_blocks(int track); + int alloc_block(int track, int sector); + int free_block(int track, int sector); + bool alloc_block_chain(int track, int sector); + bool free_block_chain(int track, int sector); + bool alloc_next_block(int &track, int §or, int interleave); + bool read_sector(int track, int sector, uint8 *buffer); - int offset_from_ts(int track, int sector); - uint8 conv_from_64(uint8 c, bool map_slash); + bool write_sector(int track, int sector, uint8 *buffer); + void write_error_info(void); - char orig_d64_name[256]; // Original path of .d64 file + virtual void block_read_cmd(int channel, int track, int sector, bool user_cmd = false); + virtual void block_write_cmd(int channel, int track, int sector, bool user_cmd = false); + virtual void block_allocate_cmd(int track, int sector); + virtual void block_free_cmd(int track, int sector); + virtual void buffer_pointer_cmd(int channel, int pos); + virtual void mem_read_cmd(uint16 adr, uint8 len); + virtual void mem_write_cmd(uint16 adr, uint8 len, uint8 *p); + virtual void copy_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_files, int old_files_len); + virtual void rename_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_file, int old_file_len); + virtual void scratch_cmd(const uint8 *files, int files_len); + virtual void initialize_cmd(void); + virtual void new_cmd(const uint8 *name, int name_len, const uint8 *comma); + virtual void validate_cmd(void); - FILE *the_file; // File pointer for .d64 file + FILE *the_file; // File pointer for image file + image_file_desc desc; // Image file descriptor + bool write_protected; // Flag: image file write-protected - uint8 *ram; // 2KB 1541 RAM - BAM *bam; // Pointer to BAM - Directory dir; // Buffer for directory blocks + uint8 ram[0x800]; // 2k 1541 RAM + uint8 dir[258]; // Buffer for directory blocks + uint8 *bam; // Pointer to BAM in 1541 RAM (buffer 4, upper 256 bytes) + bool bam_dirty; // Flag: BAM modified, needs to be written back - int chan_mode[16]; // Channel mode - int chan_buf_num[16]; // Buffer number of channel (for direct access channels) - uint8 *chan_buf[16]; // Pointer to buffer - uint8 *buf_ptr[16]; // Pointer in buffer - int buf_len[16]; // Remaining bytes in buffer - - bool buf_free[4]; // Buffer 0..3 free? - - char cmd_buffer[44]; // Buffer for incoming command strings - int cmd_len; // Length of received command - - int image_header; // Length of .d64 file header - - uint8 error_info[683]; // Sector error information (1 byte/sector) + channel_desc ch[18]; // Descriptors for channels 0..17 (16 = internal read, 17 = internal write) + bool buf_free[4]; // Flags: buffer 0..3 free? }; + +/* + * Functions + */ + +// Check whether file with given header (64 bytes) and size looks like one +// of the file types supported by this module +extern bool IsImageFile(const char *path, const uint8 *header, long size); + +// Read directory of disk image file into (empty) c64_dir_entry vector +extern bool ReadImageDirectory(const char *path, vector &vec); + +// Create new blank disk image file +extern bool CreateImageFile(const char *path); + #endif diff --git a/Src/1541fs.cpp b/Src/1541fs.cpp index c6e42a1..767f81c 100644 --- a/Src/1541fs.cpp +++ b/Src/1541fs.cpp @@ -1,9 +1,24 @@ /* * 1541fs.cpp - 1541 emulation in host file system * - * Frodo (C) 1994-1997,2002 Christian Bauer - + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ + +/* * Notes: * ------ * @@ -32,25 +47,15 @@ #endif -// Access modes -enum { - FMODE_READ, FMODE_WRITE, FMODE_APPEND -}; - -// File types -enum { - FTYPE_PRG, FTYPE_SEQ -}; - // Prototypes -static bool match(char *p, char *n); +static bool match(const char *p, const char *n); /* * Constructor: Prepare emulation */ -FSDrive::FSDrive(IEC *iec, char *path) : Drive(iec) +FSDrive::FSDrive(IEC *iec, const char *path) : Drive(iec) { strcpy(orig_dir_path, path); dir_path[0] = 0; @@ -98,16 +103,12 @@ bool FSDrive::change_dir(char *dirpath) #else int Info[4]; - if ((ReadCatalogueInfo(dirpath,Info) & 2) != 0) // Directory or image file - { - strcpy(dir_path, dirpath); - strncpy(dir_title, dir_path, 16); - return true; - } - else - { - return false; - } + if ((ReadCatalogueInfo(dirpath,Info) & 2) != 0) { // Directory or image file + strcpy(dir_path, dirpath); + strncpy(dir_title, dir_path, 16); + return true; + } else + return false; #endif } @@ -116,13 +117,13 @@ bool FSDrive::change_dir(char *dirpath) * Open channel */ -uint8 FSDrive::Open(int channel, char *filename) +uint8 FSDrive::Open(int channel, const uint8 *name, int name_len) { set_error(ERR_OK); // Channel 15: Execute file name as command if (channel == 15) { - execute_command(filename); + execute_cmd(name, name_len); return ST_OK; } @@ -132,15 +133,15 @@ uint8 FSDrive::Open(int channel, char *filename) file[channel] = NULL; } - if (filename[0] == '$') - return open_directory(channel, filename+1); - - if (filename[0] == '#') { + if (name[0] == '#') { set_error(ERR_NOCHANNEL); return ST_OK; } - return open_file(channel, filename); + if (name[0] == '$') + return open_directory(channel, name + 1, name_len - 1); + + return open_file(channel, name, name_len); } @@ -148,45 +149,47 @@ uint8 FSDrive::Open(int channel, char *filename) * Open file */ -uint8 FSDrive::open_file(int channel, char *filename) +uint8 FSDrive::open_file(int channel, const uint8 *name, int name_len) { - char plainname[NAMEBUF_LENGTH]; - int filemode = FMODE_READ; - int filetype = FTYPE_PRG; - bool wildflag = false; - char *mode = "rb"; - - convert_filename(filename, plainname, &filemode, &filetype, &wildflag); + char plain_name[NAMEBUF_LENGTH]; + int plain_name_len; + int mode = FMODE_READ; + int type = FTYPE_PRG; + int rec_len = 0; + parse_file_name(name, name_len, (uint8 *)plain_name, plain_name_len, mode, type, rec_len, true); - // Channel 0 is READ PRG, channel 1 is WRITE PRG - if (!channel) { - filemode = FMODE_READ; - filetype = FTYPE_PRG; - } - if (channel == 1) { - filemode = FMODE_WRITE; - filetype = FTYPE_PRG; + // Channel 0 is READ, channel 1 is WRITE + if (channel == 0 || channel == 1) { + mode = channel ? FMODE_WRITE : FMODE_READ; + if (type == FTYPE_DEL) + type = FTYPE_PRG; } - // Wildcards are only allowed on reading - if (wildflag) { - if (filemode != FMODE_READ) { + bool writing = (mode == FMODE_WRITE || mode == FMODE_APPEND); + + // Expand wildcards (only allowed on reading) + if (strchr(plain_name, '*') || strchr(plain_name, '?')) { + if (writing) { set_error(ERR_SYNTAX33); return ST_OK; - } - find_first_file(plainname); + } else + find_first_file(plain_name); + } + + // Relative files are not supported + if (type == FTYPE_REL) { + set_error(ERR_UNIMPLEMENTED); + return ST_OK; } // Select fopen() mode according to file mode - switch (filemode) { - case FMODE_READ: - mode = "rb"; - break; + const char *mode_str = "rb"; + switch (mode) { case FMODE_WRITE: - mode = "wb"; + mode_str = "wb"; break; case FMODE_APPEND: - mode = "ab"; + mode_str = "ab"; break; } @@ -194,8 +197,8 @@ uint8 FSDrive::open_file(int channel, char *filename) #ifndef __riscos__ if (chdir(dir_path)) set_error(ERR_NOTREADY); - else if ((file[channel] = fopen(plainname, mode)) != NULL) { - if (filemode == FMODE_READ) // Read and buffer first byte + else if ((file[channel] = fopen(plain_name, mode_str)) != NULL) { + if (mode == FMODE_READ || mode == FMODE_M) // Read and buffer first byte read_char[channel] = fgetc(file[channel]); } else set_error(ERR_FILENOTFOUND); @@ -205,10 +208,10 @@ uint8 FSDrive::open_file(int channel, char *filename) char fullname[NAMEBUF_LENGTH]; // On RISC OS make a full filename - sprintf(fullname,"%s.%s",dir_path,plainname); + sprintf(fullname,"%s.%s",dir_path,plain_name); if ((file[channel] = fopen(fullname, mode)) != NULL) { - if (filemode == FMODE_READ) + if (mode == FMODE_READ || mode == FMODE_M) { read_char[channel] = fgetc(file[channel]); } @@ -224,62 +227,12 @@ uint8 FSDrive::open_file(int channel, char *filename) } -/* - * Analyze file name, get access mode and type - */ - -void FSDrive::convert_filename(char *srcname, char *destname, int *filemode, int *filetype, bool *wildflag) -{ - char *p, *q; - int i; - - // Search for ':', p points to first character after ':' - if ((p = strchr(srcname, ':')) != NULL) - p++; - else - p = srcname; - - // Convert char set of the remaining string -> destname - q = destname; - for (i=0; id_name)) { - strncpy(name, de->d_name, NAMEBUF_LENGTH); + if (match(pattern, de->d_name)) { + strncpy(pattern, de->d_name, NAMEBUF_LENGTH); closedir(dir); return; } @@ -327,20 +280,15 @@ void FSDrive::find_first_file(char *name) char Buffer[NAMEBUF_LENGTH]; de.offset = 0; de.buffsize = NAMEBUF_LENGTH; de.match = name; - do - { - de.readno = 1; - if (ReadDirName(dir_path,Buffer,&de) != NULL) {de.offset = -1;} - else if (de.offset != -1) - { - if (match(name,Buffer)) - { - strncpy(name, Buffer, NAMEBUF_LENGTH); - return; - } - } - } - while (de.offset != -1); + do { + de.readno = 1; + if (ReadDirName(dir_path,Buffer,&de) != NULL) + de.offset = -1; + else if (de.offset != -1 && match(name,Buffer)) { + strncpy(name, Buffer, NAMEBUF_LENGTH); + return; + } + } while (de.readno > 0); #endif } @@ -349,11 +297,10 @@ void FSDrive::find_first_file(char *name) * Open directory, create temporary file */ -uint8 FSDrive::open_directory(int channel, char *filename) +uint8 FSDrive::open_directory(int channel, const uint8 *pattern, int pattern_len) { char buf[] = "\001\004\001\001\0\0\022\042 \042 00 2A"; char str[NAMEBUF_LENGTH]; - char pattern[NAMEBUF_LENGTH]; char *p, *q; int i; int filemode; @@ -366,11 +313,19 @@ uint8 FSDrive::open_directory(int channel, char *filename) struct stat statbuf; // Special treatment for "$0" - if (filename[0] == '0' && filename[1] == 0) - filename += 1; + if (pattern[0] == '0' && pattern[1] == 0) { + pattern++; + pattern_len--; + } - // Convert filename ('$' already stripped), filemode/type are ignored - convert_filename(filename, pattern, &filemode, &filetype, &wildflag); + // Skip everything before the ':' in the pattern + uint8 *t = (uint8 *)memchr(pattern, ':', pattern_len); + if (t) + pattern = t + 1; + + // Convert pattern to ASCII + char ascii_pattern[NAMEBUF_LENGTH]; + petscii2ascii(ascii_pattern, pattern, NAMEBUF_LENGTH); // Open directory for reading and skip '.' and '..' if ((dir = opendir(dir_path)) == NULL) { @@ -390,14 +345,14 @@ uint8 FSDrive::open_directory(int channel, char *filename) // Create directory title p = &buf[8]; for (i=0; i<16 && dir_title[i]; i++) - *p++ = conv_to_64(dir_title[i], false); + *p++ = ascii2petscii(dir_title[i]); fwrite(buf, 1, 32, file[channel]); // Create and write one line for every directory entry while (de) { - // Include only files matching the pattern - if (match(pattern, de->d_name)) { + // Include only files matching the ascii_pattern + if (match(ascii_pattern, de->d_name)) { // Get file statistics chdir(dir_path); @@ -426,7 +381,7 @@ uint8 FSDrive::open_directory(int channel, char *filename) *p++ = '\"'; q = p; for (i=0; i<16 && str[i]; i++) - *q++ = conv_to_64(str[i], true); + *q++ = ascii2petscii(str[i]); *q++ = '\"'; p += 18; @@ -451,20 +406,24 @@ uint8 FSDrive::open_directory(int channel, char *filename) #else dir_full_info di; dir_env de; + unsigned char c; // Much of this is very similar to the original - if ((filename[0] == '0') && (filename[1] == 0)) {filename++;} - // Concatenate dir_path and pattern in buffer pattern ==> read subdirs! - strcpy(pattern,dir_path); - convert_filename(filename, pattern + strlen(pattern), &filemode, &filetype, &wildflag); + if ((pattern[0] == '0') && (pattern[1] == 0)) {pattern++;} + + // Concatenate dir_path and ascii_pattern in buffer ascii_pattern ==> read subdirs! + strcpy(ascii_pattern,dir_path); i = strlen(ascii_pattern); ascii_pattern[i++] = '.'; ascii_pattern[i] = 0; + convert_filename(pattern, ascii_pattern + i, &filemode, &filetype, &wildflag); + p = ascii_pattern + i; q = p; + do {c = *q++; if (c == '.') p = q;} while (c >= 32); + *(p-1) = 0; // separate directory-path and ascii_pattern + if ((uint8)(*p) < 32) {*p = '*'; *(p+1) = 0;} // We don't use tmpfile() -- problems involved! DeleteFile(RO_TEMPFILE); // first delete it, if it exists if ((file[channel] = fopen(RO_TEMPFILE,"wb+")) == NULL) - { - return(ST_OK); - } - de.offset = 0; de.buffsize = NAMEBUF_LENGTH; de.match = filename; + return(ST_OK); + de.offset = 0; de.buffsize = NAMEBUF_LENGTH; de.match = p; // Create directory title - copied from above p = &buf[8]; @@ -472,37 +431,32 @@ uint8 FSDrive::open_directory(int channel, char *filename) *p++ = conv_to_64(dir_title[i], false); fwrite(buf, 1, 32, file[channel]); - do - { - de.readno = 1; - if (ReadDirNameInfo(pattern,&di,&de) != NULL) {de.offset = -1;} - else if (de.offset != -1) // don't have to check for match here - { - memset(buf,' ',31); buf[31] = 0; // most of this: see above - p = buf; *p++ = 0x01; *p++ = 0x01; - i = (di.length + 254) / 254; *p++ = i & 0xff; *p++ = (i>>8) & 0xff; - p++; - if (i < 10) {*p++ = ' ';} - if (i < 100) {*p++ = ' ';} - strcpy(str, di.name); - *p++ = '\"'; q = p; - for (i=0; (i<16 && str[i]); i++) - { - *q++ = conv_to_64(str[i], true); - } - *q++ = '\"'; p += 18; - if ((di.otype & 2) == 0) - { - *p++ = 'P'; *p++ = 'R'; *p++ = 'G'; - } - else - { - *p++ = 'D'; *p++ = 'I'; *p++ = 'R'; - } - fwrite(buf, 1, 32, file[channel]); - } - } - while (de.offset != -1); + do { + de.readno = 1; + if (ReadDirNameInfo(ascii_pattern,&di,&de) != NULL) + de.offset = -1; + else if (de.readno > 0) { // don't have to check for match here + memset(buf,' ',31); buf[31] = 0; // most of this: see above + p = buf; *p++ = 0x01; *p++ = 0x01; + i = (di.length + 254) / 254; *p++ = i & 0xff; *p++ = (i>>8) & 0xff; + p++; + if (i < 10) + *p++ = ' '; + if (i < 100) + *p++ = ' '; + strcpy(str, di.name); + *p++ = '\"'; q = p; + for (i=0; (i<16 && str[i]); i++) + *q++ = conv_to_64(str[i], true); + *q++ = '\"'; p += 18; + if ((di.otype & 2) == 0) { + *p++ = 'P'; *p++ = 'R'; *p++ = 'G'; + } else { + *p++ = 'D'; *p++ = 'I'; *p++ = 'R'; + } + fwrite(buf, 1, 32, file[channel]); + } + } while (de.offset != -1); #endif // Final line @@ -558,15 +512,15 @@ void FSDrive::close_all_channels(void) * Read from channel */ -uint8 FSDrive::Read(int channel, uint8 *byte) +uint8 FSDrive::Read(int channel, uint8 &byte) { int c; // Channel 15: Error channel if (channel == 15) { - *byte = *error_ptr++; + byte = *error_ptr++; - if (*byte != '\r') + if (byte != '\r') return ST_OK; else { // End of message set_error(ERR_OK); @@ -577,7 +531,7 @@ uint8 FSDrive::Read(int channel, uint8 *byte) if (!file[channel]) return ST_READ_TIMEOUT; // Read one byte - *byte = read_char[channel]; + byte = read_char[channel]; c = fgetc(file[channel]); if (c == EOF) return ST_EOF; @@ -596,15 +550,14 @@ uint8 FSDrive::Write(int channel, uint8 byte, bool eoi) { // Channel 15: Collect chars and execute command on EOI if (channel == 15) { - if (cmd_len >= 40) + if (cmd_len >= 58) return ST_TIMEOUT; - cmd_buffer[cmd_len++] = byte; + cmd_buf[cmd_len++] = byte; if (eoi) { - cmd_buffer[cmd_len] = 0; + execute_cmd(cmd_buf, cmd_len); cmd_len = 0; - execute_command(cmd_buffer); } return ST_OK; } @@ -614,8 +567,8 @@ uint8 FSDrive::Write(int channel, uint8 byte, bool eoi) return ST_TIMEOUT; } - if (fputc(byte, file[channel]) == EOF) { - set_error(ERR_WRITEERROR); + if (putc(byte, file[channel]) == EOF) { + set_error(ERR_WRITE25); return ST_TIMEOUT; } @@ -624,59 +577,18 @@ uint8 FSDrive::Write(int channel, uint8 byte, bool eoi) /* - * Execute command string + * Execute drive commands */ -void FSDrive::execute_command(char *command) +// INITIALIZE +void FSDrive::initialize_cmd(void) { - switch (command[0]) { - case 'I': - close_all_channels(); - set_error(ERR_OK); - break; - - case 'U': - if ((command[1] & 0x0f) == 0x0a) { - Reset(); - } else - set_error(ERR_SYNTAX30); - break; - - case 'G': - if (command[1] != ':') - set_error(ERR_SYNTAX30); - else - chdir_cmd(&command[2]); - break; - - default: - set_error(ERR_SYNTAX30); - } + close_all_channels(); } - -/* - * Execute 'G' command - */ - -void FSDrive::chdir_cmd(char *dirpath) +// VALIDATE +void FSDrive::validate_cmd(void) { - char str[NAMEBUF_LENGTH]; - char *p = str; - - close_all_channels(); - - // G:. resets the directory path to its original setting - if (dirpath[0] == '.' && dirpath[1] == 0) { - change_dir(orig_dir_path); - } else { - - // Convert directory name - for (int i=0; iASCII - */ - -uint8 FSDrive::conv_from_64(uint8 c, bool map_slash) -{ - if ((c >= 'A') && (c <= 'Z') || (c >= 'a') && (c <= 'z')) - return c ^ 0x20; - if ((c >= 0xc1) && (c <= 0xda)) - return c ^ 0x80; - if ((c == '/') && map_slash && ThePrefs.MapSlash) -#ifdef __riscos__ - return '.'; // directory separator is '.' in RO - if (c == '.') {return('_');} // convert dot to underscore -#else - return '\\'; -#endif - return c; -} - - -/* - * Conversion ASCII->PETSCII - */ - -uint8 FSDrive::conv_to_64(uint8 c, bool map_slash) -{ - if ((c >= 'A') && (c <= 'Z') || (c >= 'a') && (c <= 'z')) - return c ^ 0x20; -#ifdef __riscos__ - if ((c == '.') && map_slash && ThePrefs.MapSlash) -#else - if ((c == '\\') && map_slash && ThePrefs.MapSlash) -#endif - return '/'; -#ifdef __riscos__ - if (c == '_') {return('.');} // convert underscore to dot -#endif - return c; -} diff --git a/Src/1541fs.h b/Src/1541fs.h index 1e975f0..9688547 100644 --- a/Src/1541fs.h +++ b/Src/1541fs.h @@ -1,7 +1,21 @@ /* * 1541fs.h - 1541 emulation in host file system * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _1541FS_H @@ -12,34 +26,31 @@ class FSDrive : public Drive { public: - FSDrive(IEC *iec, char *path); + FSDrive(IEC *iec, const char *path); virtual ~FSDrive(); - virtual uint8 Open(int channel, char *filename); + + virtual uint8 Open(int channel, const uint8 *name, int name_len); virtual uint8 Close(int channel); - virtual uint8 Read(int channel, uint8 *byte); + virtual uint8 Read(int channel, uint8 &byte); virtual uint8 Write(int channel, uint8 byte, bool eoi); virtual void Reset(void); private: bool change_dir(char *dirpath); - uint8 open_file(int channel, char *filename); - uint8 open_directory(int channel, char *filename); - void convert_filename(char *srcname, char *destname, int *filemode, int *filetype, bool *wildflag); - void find_first_file(char *name); + + uint8 open_file(int channel, const uint8 *name, int name_len); + uint8 open_directory(int channel, const uint8 *pattern, int pattern_len); + void find_first_file(char *pattern); void close_all_channels(void); - void execute_command(char *command); - void chdir_cmd(char *dirpath); - uint8 conv_from_64(uint8 c, bool map_slash); - uint8 conv_to_64(uint8 c, bool map_slash); + + virtual void initialize_cmd(void); + virtual void validate_cmd(void); char dir_path[256]; // Path to directory char orig_dir_path[256]; // Original directory path char dir_title[16]; // Directory title FILE *file[16]; // File pointers for each of the 16 channels - char cmd_buffer[44]; // Buffer for incoming command strings - int cmd_len; // Length of received command - uint8 read_char[16]; // Buffers for one-byte read-ahead }; diff --git a/Src/1541job.cpp b/Src/1541job.cpp index d1b0f96..548660b 100644 --- a/Src/1541job.cpp +++ b/Src/1541job.cpp @@ -1,10 +1,24 @@ /* * 1541job.cpp - Emulation of 1541 GCR disk reading/writing * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * diff --git a/Src/1541job.h b/Src/1541job.h index cff55f1..9150783 100644 --- a/Src/1541job.h +++ b/Src/1541job.h @@ -1,7 +1,21 @@ /* * 1541job.h - Emulation of 1541 GCR disk reading/writing * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _1541JOB_H diff --git a/Src/1541t64.cpp b/Src/1541t64.cpp index 87f03c0..35f451b 100644 --- a/Src/1541t64.cpp +++ b/Src/1541t64.cpp @@ -1,24 +1,38 @@ /* - * 1541t64.cpp - 1541 emulation in .t64/LYNX file + * 1541t64.cpp - 1541 emulation in archive-type files (.t64/LYNX/.p00) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ +/* + * NOTES: + * - This module handles access to files inside (uncompressed) archives + * and makes the archive look like a disk. It supports C64S tape images + * (.t64), C64 LYNX archives and .p00 files. + * - If any file is opened, the contents of the file in the archive file are + * copied into a temporary file which is used for reading. This is done + * to insert the load address. * - * Notes: - * ------ - * - * - If any file is opened, the contents of the file in the - * .t64 file are copied into a temporary file which is used - * for reading. This is done to insert the load address. - * - C64 LYNX archives are also handled by these routines - * - * Incompatibilities: - * ------------------ - * - * - Only read accesses possible - * - No "raw" directory reading - * - No relative/sequential/user files - * - Only "I" and "UJ" commands implemented + * Incompatibilities: + * - Only read accesses possible + * - No "raw" directory reading + * - No relative/sequential/user files + * - Unimplemented commands: B-P, M-R, M-W, C, S, P, N + * - Impossible to implement: B-R, B-W, B-E, B-A, B-F, M-E */ #include "sysdeps.h" @@ -27,41 +41,32 @@ #include "IEC.h" #include "Prefs.h" +#define DEBUG 0 +#include "fdebug.h" -// Access modes -enum { - FMODE_READ, FMODE_WRITE, FMODE_APPEND -}; - -// File types -enum { - FTYPE_PRG, FTYPE_SEQ, FTYPE_USR, FTYPE_REL -}; // Prototypes -static bool match(char *p, char *n); +static bool is_t64_header(const uint8 *header); +static bool is_lynx_header(const uint8 *header); +static bool is_p00_header(const uint8 *header); +static bool parse_t64_file(FILE *f, vector &vec, char *dir_title); +static bool parse_lynx_file(FILE *f, vector &vec, char *dir_title); +static bool parse_p00_file(FILE *f, vector &vec, char *dir_title); /* * Constructor: Prepare emulation */ -T64Drive::T64Drive(IEC *iec, char *filepath) : Drive(iec) +ArchDrive::ArchDrive(IEC *iec, const char *filepath) : Drive(iec), the_file(NULL) { - the_file = NULL; - file_info = NULL; - - Ready = false; - strcpy(orig_t64_name, filepath); for (int i=0; i<16; i++) file[i] = NULL; + Reset(); - // Open .t64 file - open_close_t64_file(filepath); - if (the_file != NULL) { - Reset(); + // Open archive file + if (change_arch(filepath)) Ready = true; - } } @@ -69,175 +74,65 @@ T64Drive::T64Drive(IEC *iec, char *filepath) : Drive(iec) * Destructor */ -T64Drive::~T64Drive() +ArchDrive::~ArchDrive() { - // Close .t64 file - open_close_t64_file(""); - + // Close archive file + if (the_file) { + close_all_channels(); + fclose(the_file); + } Ready = false; } /* - * Open/close the .t64/LYNX file + * Open the archive file */ -void T64Drive::open_close_t64_file(char *t64name) +bool ArchDrive::change_arch(const char *path) { - uint8 buf[64]; - bool parsed_ok = false; + FILE *new_file; - // Close old .t64, if open - if (the_file != NULL) { - close_all_channels(); - fclose(the_file); - the_file = NULL; - delete[] file_info; - file_info = NULL; - } + // Open new archive file + if ((new_file = fopen(path, "rb")) != NULL) { - // Open new .t64 file - if (t64name[0]) { - if ((the_file = fopen(t64name, "rb")) != NULL) { + file_info.clear(); - // Check file ID - fread(&buf, 64, 1, the_file); - if (buf[0] == 0x43 && buf[1] == 0x36 && buf[2] == 0x34) { - is_lynx = false; - parsed_ok = parse_t64_file(); - } else if (buf[0x3c] == 0x4c && buf[0x3d] == 0x59 && buf[0x3e] == 0x4e && buf[0x3f] == 0x58) { - is_lynx = true; - parsed_ok = parse_lynx_file(); - } + // Read header, determine archive type and parse archive contents + uint8 header[64]; + fread(header, 1, 64, new_file); + bool parsed_ok = false; + if (is_t64_header(header)) { + archive_type = TYPE_T64; + parsed_ok = parse_t64_file(new_file, file_info, dir_title); + } else if (is_lynx_header(header)) { + archive_type = TYPE_LYNX; + parsed_ok = parse_lynx_file(new_file, file_info, dir_title); + } else if (is_p00_header(header)) { + archive_type = TYPE_P00; + parsed_ok = parse_p00_file(new_file, file_info, dir_title); + } - if (!parsed_ok) { + if (!parsed_ok) { + fclose(new_file); + if (the_file) { + close_all_channels(); fclose(the_file); the_file = NULL; - delete[] file_info; - file_info = NULL; - return; } - } - } -} - - -/* - * Parse .t64 file and construct FileInfo array - */ - -bool T64Drive::parse_t64_file(void) -{ - uint8 buf[32]; - uint8 *buf2; - char *p; - int max, i, j; - - // Read header and get maximum number of files contained - fseek(the_file, 32, SEEK_SET); - fread(&buf, 32, 1, the_file); - max = (buf[3] << 8) | buf[2]; - - memcpy(dir_title, buf+8, 16); - - // Allocate buffer for file records and read them - buf2 = new uint8[max*32]; - fread(buf2, 32, max, the_file); - - // Determine number of files contained - for (i=0, num_files=0; i destname - strncpy(destname, p, NAMEBUF_LENGTH); - - // Search for ',' - p = destname; - while (*p && (*p != ',')) p++; - - // Look for mode parameters seperated by ',' - p = destname; - while ((p = strchr(p, ',')) != NULL) { - - // Cut string after the first ',' - *p++ = 0; - - switch (*p) { - case 'P': - *filetype = FTYPE_PRG; - break; - case 'S': - *filetype = FTYPE_SEQ; - break; - case 'U': - *filetype = FTYPE_USR; - break; - case 'L': - *filetype = FTYPE_REL; - break; - case 'R': - *filemode = FMODE_READ; - break; - case 'W': - *filemode = FMODE_WRITE; - break; - case 'A': - *filemode = FMODE_APPEND; - break; - } - } -} - - /* * Find first file matching wildcard pattern */ // Return true if name 'n' matches pattern 'p' -static bool match(char *p, char *n) +static bool match(const uint8 *p, int p_len, const uint8 *n) { - if (!*p) // Null pattern matches everything - return true; - - do { + while (p_len-- > 0) { if (*p == '*') // Wildcard '*' matches all following characters return true; if ((*p != *n) && (*p != '?')) // Wildcard '?' matches single character return false; p++; n++; - } while (*p); + } - return !(*n); + return *n == 0; } -bool T64Drive::find_first_file(char *name, int type, int *num) +bool ArchDrive::find_first_file(const uint8 *pattern, int pattern_len, int &num) { - for (int i=0; i::const_iterator i, end = file_info.end(); + for (i = file_info.begin(), num = 0; i != end; i++, num++) { + if (match(pattern, pattern_len, (uint8 *)i->name)) return true; - } - + } return false; } @@ -434,77 +279,81 @@ bool T64Drive::find_first_file(char *name, int type, int *num) * Open directory, create temporary file */ -uint8 T64Drive::open_directory(int channel, char *filename) +uint8 ArchDrive::open_directory(int channel, const uint8 *pattern, int pattern_len) { - char buf[] = "\001\004\001\001\0\0\022\042 \042 00 2A"; - char str[NAMEBUF_LENGTH]; - char pattern[NAMEBUF_LENGTH]; - char *p, *q; - int i, num; - int filemode; - int filetype; - // Special treatment for "$0" - if (strlen(filename) == 1 && filename[0] == '0') - filename += 1; + if (pattern[0] == '0' && pattern_len == 1) { + pattern++; + pattern_len--; + } - // Convert filename ('$' already stripped), filemode/type are ignored - convert_filename(filename, pattern, &filemode, &filetype); + // Skip everything before the ':' in the pattern + uint8 *t = (uint8 *)memchr(pattern, ':', pattern_len); + if (t) { + t++; + pattern_len -= t - pattern; + pattern = t; + } // Create temporary file if ((file[channel] = tmpfile()) == NULL) return ST_OK; // Create directory title - p = &buf[8]; - for (i=0; i<16 && dir_title[i]; i++) - *p++ = dir_title[i]; + uint8 buf[] = "\001\004\001\001\0\0\022\042 \042 00 2A"; + for (int i=0; i<16 && dir_title[i]; i++) + buf[i + 8] = dir_title[i]; fwrite(buf, 1, 32, file[channel]); // Create and write one line for every directory entry - for (num=0; num::const_iterator i, end = file_info.end(); + for (i = file_info.begin(); i != end; i++) { // Include only files matching the pattern - if (match(pattern, file_info[num].name)) { + if (pattern_len == 0 || match(pattern, pattern_len, (uint8 *)i->name)) { // Clear line with spaces and terminate with null byte memset(buf, ' ', 31); buf[31] = 0; - p = buf; + uint8 *p = (uint8 *)buf; *p++ = 0x01; // Dummy line link *p++ = 0x01; // Calculate size in blocks (254 bytes each) - i = (file_info[num].length + 254) / 254; - *p++ = i & 0xff; - *p++ = (i >> 8) & 0xff; + int n = (i->size + 254) / 254; + *p++ = n & 0xff; + *p++ = (n >> 8) & 0xff; p++; - if (i < 10) p++; // Less than 10: add one space - if (i < 100) p++; // Less than 100: add another space + if (n < 10) p++; // Less than 10: add one space + if (n < 100) p++; // Less than 100: add another space // Convert and insert file name - strcpy(str, file_info[num].name); *p++ = '\"'; - q = p; - for (i=0; i<16 && str[i]; i++) - *q++ = str[i]; + uint8 *q = p; + for (int j=0; j<16 && i->name[j]; j++) + *q++ = i->name[j]; *q++ = '\"'; p += 18; // File type - switch (file_info[num].type) { - case FTYPE_PRG: - *p++ = 'P'; - *p++ = 'R'; - *p++ = 'G'; + switch (i->type) { + case FTYPE_DEL: + *p++ = 'D'; + *p++ = 'E'; + *p++ = 'L'; break; case FTYPE_SEQ: *p++ = 'S'; *p++ = 'E'; *p++ = 'Q'; break; + case FTYPE_PRG: + *p++ = 'P'; + *p++ = 'R'; + *p++ = 'G'; + break; case FTYPE_USR: *p++ = 'U'; *p++ = 'S'; @@ -532,7 +381,7 @@ uint8 T64Drive::open_directory(int channel, char *filename) // Rewind file for reading and read first byte rewind(file[channel]); - read_char[channel] = fgetc(file[channel]); + read_char[channel] = getc(file[channel]); return ST_OK; } @@ -542,8 +391,10 @@ uint8 T64Drive::open_directory(int channel, char *filename) * Close channel */ -uint8 T64Drive::Close(int channel) +uint8 ArchDrive::Close(int channel) { + D(bug("ArchDrive::Close channel %d\n", channel)); + if (channel == 15) { close_all_channels(); return ST_OK; @@ -562,7 +413,7 @@ uint8 T64Drive::Close(int channel) * Close all channels */ -void T64Drive::close_all_channels(void) +void ArchDrive::close_all_channels(void) { for (int i=0; i<15; i++) Close(i); @@ -575,15 +426,15 @@ void T64Drive::close_all_channels(void) * Read from channel */ -uint8 T64Drive::Read(int channel, uint8 *byte) +uint8 ArchDrive::Read(int channel, uint8 &byte) { - int c; + D(bug("ArchDrive::Read channel %d\n", channel)); // Channel 15: Error channel if (channel == 15) { - *byte = *error_ptr++; + byte = *error_ptr++; - if (*byte != '\r') + if (byte != '\x0d') return ST_OK; else { // End of message set_error(ERR_OK); @@ -594,8 +445,8 @@ uint8 T64Drive::Read(int channel, uint8 *byte) if (!file[channel]) return ST_READ_TIMEOUT; // Get char from buffer and read next - *byte = read_char[channel]; - c = fgetc(file[channel]); + byte = read_char[channel]; + int c = getc(file[channel]); if (c == EOF) return ST_EOF; else { @@ -609,19 +460,22 @@ uint8 T64Drive::Read(int channel, uint8 *byte) * Write to channel */ -uint8 T64Drive::Write(int channel, uint8 byte, bool eoi) +uint8 ArchDrive::Write(int channel, uint8 byte, bool eoi) { + D(bug("ArchDrive::Write channel %d, byte %02x, eoi %d\n", channel, byte, eoi)); + // Channel 15: Collect chars and execute command on EOI if (channel == 15) { - if (cmd_len >= 40) + if (cmd_len > 58) { + set_error(ERR_SYNTAX32); return ST_TIMEOUT; + } - cmd_buffer[cmd_len++] = byte; + cmd_buf[cmd_len++] = byte; if (eoi) { - cmd_buffer[cmd_len] = 0; + execute_cmd(cmd_buf, cmd_len); cmd_len = 0; - execute_command(cmd_buffer); } return ST_OK; } @@ -636,59 +490,39 @@ uint8 T64Drive::Write(int channel, uint8 byte, bool eoi) /* - * Execute command string + * Execute drive commands */ -void T64Drive::execute_command(char *command) +// RENAME:new=old +// ^ ^ +// new_file old_file +void ArchDrive::rename_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_file, int old_file_len) { - switch (command[0]) { - case 'I': - close_all_channels(); - set_error(ERR_OK); - break; - - case 'U': - if ((command[1] & 0x0f) == 0x0a) { - Reset(); - } else - set_error(ERR_SYNTAX30); - break; - - case 'G': - if (command[1] != ':') - set_error(ERR_SYNTAX30); - else - cht64_cmd(&command[2]); - break; - - default: - set_error(ERR_SYNTAX30); + // Check if destination file is already present + int num; + if (find_first_file(new_file, new_file_len, num)) { + set_error(ERR_FILEEXISTS); + return; } + + // Check if source file is present + if (!find_first_file(old_file, old_file_len, num)) { + set_error(ERR_FILENOTFOUND); + return; + } + + set_error(ERR_WRITEPROTECT); } - -/* - * Execute 'G' command - */ - -void T64Drive::cht64_cmd(char *t64name) +// INITIALIZE +void ArchDrive::initialize_cmd(void) { - char str[NAMEBUF_LENGTH]; - char *p = str; - - // Convert .t64 file name - for (int i=0; iASCII + * Check whether file with given header (64 bytes) and size looks like one + * of the file types supported by this module */ -uint8 T64Drive::conv_from_64(uint8 c, bool map_slash) +static bool is_t64_header(const uint8 *header) { - if ((c >= 'A') && (c <= 'Z') || (c >= 'a') && (c <= 'z')) - return c ^ 0x20; - if ((c >= 0xc1) && (c <= 0xda)) - return c ^ 0x80; - if ((c == '/') && map_slash && ThePrefs.MapSlash) - return '\\'; - return c; + if (memcmp(header, "C64S tape file", 14) == 0 + || memcmp(header, "C64 tape image", 14) == 0 + || memcmp(header, "C64S tape image", 15) == 0) + return true; + else + return false; +} + +static bool is_lynx_header(const uint8 *header) +{ + return memcmp(header + 0x38, "USE LYNX", 8) == 0; +} + +static bool is_p00_header(const uint8 *header) +{ + return memcmp(header, "C64File", 7) == 0; +} + +bool IsArchFile(const char *path, const uint8 *header, long size) +{ + return is_t64_header(header) || is_lynx_header(header) || is_p00_header(header); +} + + +/* + * Read directory of archive file into (empty) c64_dir_entry vector, + * returns false on error + */ + +static bool parse_t64_file(FILE *f, vector &vec, char *dir_title) +{ + // Read header and get maximum number of files contained + fseek(f, 32, SEEK_SET); + uint8 buf[32]; + fread(&buf, 32, 1, f); + int max = (buf[3] << 8) | buf[2]; + if (max == 0) + max = 1; + + memcpy(dir_title, buf+8, 16); + + // Allocate buffer for file records and read them + uint8 *buf2 = new uint8[max * 32]; + fread(buf2, 32, max, f); + + // Determine number of files contained + int num_files = 0; + for (int i=0; i &vec, char *dir_title) +{ + // Dummy directory title + strcpy(dir_title, "LYNX ARCHIVE "); + + // Read header and get number of directory blocks and files contained + fseek(f, 0x60, SEEK_SET); + int dir_blocks; + fscanf(f, "%d", &dir_blocks); + while (getc(f) != 0x0d) + if (feof(f)) + return false; + int num_files; + fscanf(f, "%d\x0d", &num_files); + + // Construct file information array + vec.reserve(num_files); + int cur_offset = dir_blocks * 254; + for (int i=0; i &vec, char *dir_title) +{ + // Dummy directory title + strcpy(dir_title, ".P00 FILE "); + + // Contains only one file + vec.reserve(1); + + // Read file name and start address + uint8 name_buf[17]; + fseek(f, 8, SEEK_SET); + fread(name_buf, 17, 1, f); + name_buf[16] = 0; + uint8 sa_lo, sa_hi; + fseek(f, 26, SEEK_SET); + fread(&sa_lo, 1, 1, f); + fread(&sa_hi, 1, 1, f); + + // Get file size + fseek(f, 0, SEEK_END); + size_t size = ftell(f) - 26; + + // Add entry + vec.push_back(c64_dir_entry(name_buf, FTYPE_PRG, false, false, size, 26, sa_lo, sa_hi)); + return true; +} + +bool ReadArchDirectory(const char *path, vector &vec) +{ + // Open file + FILE *f = fopen(path, "rb"); + if (f) { + + // Read header + uint8 header[64]; + fread(header, 1, sizeof(header), f); + + // Determine archive type and parse archive + bool result = false; + char dir_title[16]; + if (is_t64_header(header)) + result = parse_t64_file(f, vec, dir_title); + else if (is_lynx_header(header)) + result = parse_lynx_file(f, vec, dir_title); + else if (is_p00_header(header)) + result = parse_p00_file(f, vec, dir_title); + + fclose(f); + return result; + } else + return false; } diff --git a/Src/1541t64.h b/Src/1541t64.h index 4c784a1..1b3dccf 100644 --- a/Src/1541t64.h +++ b/Src/1541t64.h @@ -1,7 +1,21 @@ /* - * 1541t64.h - 1541 emulation in .t64/LYNX file + * 1541t64.h - 1541 emulation in archive-type files (.t64/LYNX/.p00) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _1541T64_H @@ -10,53 +24,61 @@ #include "IEC.h" -// Information for file inside a .t64 file -typedef struct { - char name[17]; // File name, PETSCII - uint8 type; // File type - uint8 sa_lo, sa_hi; // Start address - int offset; // Offset of first byte in .t64 file - int length; // Length of file -} FileInfo; +/* + * Definitions + */ +// Archive types +enum { + TYPE_T64, // C64S tape file + TYPE_LYNX, // C64 LYNX archive + TYPE_P00 // .p00 file +}; -class T64Drive : public Drive { +// Archive file drive class +class ArchDrive : public Drive { public: - T64Drive(IEC *iec, char *filepath); - virtual ~T64Drive(); - virtual uint8 Open(int channel, char *filename); + ArchDrive(IEC *iec, const char *filepath); + virtual ~ArchDrive(); + + virtual uint8 Open(int channel, const uint8 *name, int name_len); virtual uint8 Close(int channel); - virtual uint8 Read(int channel, uint8 *byte); + virtual uint8 Read(int channel, uint8 &byte); virtual uint8 Write(int channel, uint8 byte, bool eoi); virtual void Reset(void); private: - void open_close_t64_file(char *t64name); - bool parse_t64_file(void); - bool parse_lynx_file(void); - uint8 open_file(int channel, char *filename); - uint8 open_directory(int channel, char *filename); - void convert_filename(char *srcname, char *destname, int *filemode, int *filetype); - bool find_first_file(char *name, int type, int *num); + bool change_arch(const char *path); + + uint8 open_file(int channel, const uint8 *name, int name_len); + uint8 open_directory(int channel, const uint8 *pattern, int pattern_len); + bool find_first_file(const uint8 *pattern, int pattern_len, int &num); void close_all_channels(void); - void execute_command(char *command); - void cht64_cmd(char *t64path); - uint8 conv_from_64(uint8 c, bool map_slash); - FILE *the_file; // File pointer for .t64 file - bool is_lynx; // Flag: .t64 file is really a LYNX archive + virtual void rename_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_file, int old_file_len); + virtual void initialize_cmd(void); + virtual void validate_cmd(void); + + FILE *the_file; // File pointer for archive file + int archive_type; // File/archive type (see defines above) + vector file_info; // Vector of file information structs for all files in the archive - char orig_t64_name[256]; // Original path of .t64 file char dir_title[16]; // Directory title FILE *file[16]; // File pointers for each of the 16 channels (all temporary files) - int num_files; // Number of files in .t64 file and in file_info array - FileInfo *file_info; // Pointer to array of file information structs for each file - - char cmd_buffer[44]; // Buffer for incoming command strings - int cmd_len; // Length of received command - uint8 read_char[16]; // Buffers for one-byte read-ahead }; + +/* + * Functions + */ + +// Check whether file with given header (64 bytes) and size looks like one +// of the file types supported by this module +extern bool IsArchFile(const char *path, const uint8 *header, long size); + +// Read directory of archive file into (empty) c64_dir_entry vector +extern bool ReadArchDirectory(const char *path, vector &vec); + #endif diff --git a/Src/AcornGUI.cc b/Src/AcornGUI.cc index 38abdbc..9c204d4 100644 --- a/Src/AcornGUI.cc +++ b/Src/AcornGUI.cc @@ -1,13 +1,25 @@ /* - * AcornGUI.cc + * AcornGUI.cc - Frodo's Graphical User Interface for Acorn RISC OS machines * - * Frodo's Graphical User Interface for Acorn RISC OS machines (WIMP) - * (C) 1997 Andreas Dehmel + * (C) 1997 Andreas Dehmel * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ - - #include "sysdeps.h" #include "C64.h" @@ -515,6 +527,12 @@ void WIMP::ThePrefsToWindow(void) PrefsWindow->WriteIconNumber(Icon_Prefs_CycleBad,ThePrefs.BadLineCycles); PrefsWindow->WriteIconNumber(Icon_Prefs_CycleCIA,ThePrefs.CIACycles); PrefsWindow->WriteIconNumber(Icon_Prefs_CycleFloppy,ThePrefs.FloppyCycles); + +#ifdef SUPPORT_XROM + // XROM + PrefsWindow->SetIconState(Icon_Prefs_XROMOn,(ThePrefs.XPandROMOn)?IFlg_Slct:0,IFlg_Slct); + PrefsWindow->WriteIconText(Icon_Prefs_XROMPath,ThePrefs.XPandROMFile); +#endif } @@ -595,6 +613,12 @@ void WIMP::WindowToThePrefs(void) prefs->CIACycles = PrefsWindow->ReadIconNumber(Icon_Prefs_CycleCIA); prefs->FloppyCycles = PrefsWindow->ReadIconNumber(Icon_Prefs_CycleFloppy); +#ifdef SUPPORT_XROM + // XROM + pread_opt(XPandROMOn,XROMOn); + strcpy(prefs->XPandROMFile,PrefsWindow->ReadIconText(Icon_Prefs_XROMPath)); +#endif + // Finally make the changes known to the system: the_c64->NewPrefs(prefs); ThePrefs = *prefs; @@ -1587,7 +1611,7 @@ void WIMP::UserMessage(void) i = -1; // indicator whether file is accepted if ((Block[5] == EmuWindow->MyHandle()) && (Block[10] == FileType_C64File)) {i=0;} else if ((Block[5] == EmuWindow->MyHandle()) && (Block[10] == FileType_Data)) {i=0;} - else if ((Block[5] == PrefsWindow->MyHandle()) && (Block[10] == FileType_Text)) {i=0;} + else if ((Block[5] == PrefsWindow->MyHandle()) && ((Block[10] == FileType_Text) || (Block[10] == FileType_C64File))) {i=0;} else if ((Block[5] == ConfigWindow->MyHandle()) && (Block[10] == FileType_Text)) {i=0;} if (i >= 0) { @@ -1647,6 +1671,12 @@ void WIMP::UserMessage(void) Block[MsgB_YourRef] = Block[MsgB_MyRef]; Block[MsgB_Action] = Message_DataLoadAck; Wimp_SendMessage(17,Block,Block[MsgB_Sender],Block[6]); } + else if ((Block[6] == Icon_Prefs_XROMPath) && (Block[10] == FileType_C64File)) + { + PrefsWindow->WriteIconText(Icon_Prefs_XROMPath,((char*)Block)+44); + Block[MsgB_YourRef] = Block[MsgB_MyRef]; Block[MsgB_Action] = Message_DataLoadAck; + Wimp_SendMessage(17,Block,Block[MsgB_Sender],Block[6]); + } else // interpret as drive path (if dragged on one of the drive path icons) { switch (Block[6]) @@ -1655,7 +1685,7 @@ void WIMP::UserMessage(void) case Icon_Prefs_Dr9Path: i = 1; break; case Icon_Prefs_Dr10Path: i = 2; break; case Icon_Prefs_Dr11Path: i = 3; break; - default: -1; break; + default: i = -1; break; } if (i >= 0) {NewDriveImage(i,Block,false);} } diff --git a/Src/AcornGUI.h b/Src/AcornGUI.h index c4f0825..f8da0aa 100644 --- a/Src/AcornGUI.h +++ b/Src/AcornGUI.h @@ -1,9 +1,23 @@ /* - * AcornGUI.h + * AcornGUI.h - Defines variables for the WIMP interface * - * Defines variables for the WIMP interface - * (C) 1997 Andreas Dehmel + * (C) 1997 Andreas Dehmel * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ @@ -262,6 +276,8 @@ #define Icon_Prefs_PrefPath 70 #define Icon_Prefs_Save 71 #define Icon_Prefs_PrefSprite 72 +#define Icon_Prefs_XROMOn 75 +#define Icon_Prefs_XROMPath 76 #define Icon_Conf_PollAfter 3 #define Icon_Conf_SpeedAfter 5 diff --git a/Src/AcornGUI_SC.cc b/Src/AcornGUI_SC.cc index e5233c3..5721819 100644 --- a/Src/AcornGUI_SC.cc +++ b/Src/AcornGUI_SC.cc @@ -1,10 +1,26 @@ /* - * AcornGUI_SC.cc + * AcornGUI_SC.cc * - * The RISC OS port needs to recompile AcornGUI_SC.cc with FRODO_SC defined - * or it won't work. Source code is identical with AcornGUI.cc + * The RISC OS port needs to recompile AcornGUI_SC.cc with FRODO_SC defined + * or it won't work. Source code is identical with AcornGUI.cc * + * (C) 1997 Andreas Dehmel + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ - #include "AcornGUI.cc" diff --git a/Src/BRUCELEE.h b/Src/BRUCELEE.h new file mode 100644 index 0000000..9e9cdd0 --- /dev/null +++ b/Src/BRUCELEE.h @@ -0,0 +1,3104 @@ +#ifndef __brucelee_bin__ +#define __brucelee_bin__ + +static unsigned int size_brucelee_bin = 49530; +static unsigned char brucelee_bin[] __attribute__((aligned(16))) = { + 0x01, 0x08, 0x25, 0x08, 0xe0, 0x18, 0x9e, 0x32, 0x30, 0x38, 0x37, 0x20, 0x43, 0x52, 0x41, 0x43, + 0x4b, 0x45, 0x44, 0x20, 0x42, 0x59, 0x20, 0x54, 0x42, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0xa2, 0x00, 0xbd, 0x38, 0x08, 0x9d, 0x00, 0x01, + 0xe8, 0xd0, 0xf7, 0xa2, 0xff, 0x9a, 0x4c, 0x00, 0x01, 0x78, 0xa9, 0x34, 0x85, 0x01, 0xa0, 0x00, + 0xa9, 0x0d, 0x85, 0xae, 0xa9, 0xc9, 0x85, 0xaf, 0xa9, 0x00, 0x85, 0xac, 0x85, 0xad, 0xa5, 0xac, + 0xd0, 0x02, 0xc6, 0xad, 0xc6, 0xac, 0xa5, 0xae, 0xd0, 0x02, 0xc6, 0xaf, 0xc6, 0xae, 0xb1, 0xae, + 0x91, 0xac, 0xa5, 0xae, 0xc9, 0xbe, 0xd0, 0xe6, 0xa5, 0xaf, 0xc9, 0x08, 0xd0, 0xe0, 0xa9, 0x00, + 0x85, 0xae, 0xa9, 0x08, 0x85, 0xaf, 0xb1, 0xac, 0xc9, 0xbf, 0xd0, 0x12, 0x20, 0x78, 0x01, 0xb1, + 0xac, 0xaa, 0xa9, 0x00, 0x91, 0xae, 0x20, 0x7f, 0x01, 0xca, 0xd0, 0xf8, 0xf0, 0x16, 0xc9, 0xcf, + 0xd0, 0x0d, 0x20, 0x78, 0x01, 0xb1, 0xac, 0xaa, 0x20, 0x78, 0x01, 0xb1, 0xac, 0xd0, 0xe5, 0x91, + 0xae, 0x20, 0x7f, 0x01, 0x20, 0x78, 0x01, 0xd0, 0xcd, 0xa9, 0x37, 0x85, 0x01, 0x58, 0x4c, 0x00, + 0x08, 0xe6, 0xac, 0xd0, 0x02, 0xe6, 0xad, 0x60, 0xe6, 0xae, 0xd0, 0x02, 0xe6, 0xaf, 0x60, 0x78, + 0xa9, 0x34, 0x85, 0x01, 0xa9, 0x00, 0x85, 0xfb, 0x85, 0xfd, 0xa9, 0xdf, 0x85, 0xfc, 0xa9, 0xff, + 0x85, 0xfe, 0xa0, 0x00, 0xa2, 0x20, 0xb1, 0xfb, 0x91, 0xfd, 0xc8, 0xd0, 0xf9, 0xc6, 0xfc, 0xc6, + 0xfe, 0xca, 0xd0, 0xf2, 0xa9, 0xdc, 0x85, 0xfc, 0xa0, 0x00, 0xa9, 0xce, 0x91, 0xfb, 0xc8, 0xd0, + 0xfb, 0xe6, 0xfc, 0xa5, 0xfc, 0xc9, 0xe0, 0xd0, 0xf1, 0xa9, 0x37, 0x85, 0x01, 0x58, 0xa9, 0xd8, + 0x85, 0xfc, 0xa0, 0x00, 0xa9, 0x01, 0x91, 0xfb, 0xc8, 0xd0, 0xfb, 0xe6, 0xfc, 0xa5, 0xfc, 0xc9, + 0xdc, 0xd0, 0xf1, 0xa9, 0x78, 0x8d, 0x18, 0xd0, 0xa9, 0x3b, 0x8d, 0x11, 0xd0, 0xa9, 0x18, 0x8d, + 0x16, 0xd0, 0xa9, 0x0e, 0x8d, 0x20, 0xd0, 0xa9, 0x00, 0x8d, 0x00, 0xdd, 0x8d, 0x21, 0xd0, 0x85, + 0xc6, 0xc5, 0xc6, 0xf0, 0xfc, 0x85, 0xc6, 0xa9, 0x0b, 0x8d, 0x11, 0xd0, 0x78, 0xa9, 0x34, 0x85, + 0x01, 0xa9, 0xa8, 0x85, 0xfc, 0xa9, 0xe0, 0x85, 0xfe, 0xa2, 0x16, 0xa0, 0x00, 0xb1, 0xfb, 0x91, + 0xfd, 0xc8, 0xd0, 0xf9, 0xe6, 0xfc, 0xe6, 0xfe, 0xca, 0xd0, 0xf2, 0xa2, 0x00, 0xbd, 0x00, 0xa5, + 0x9d, 0x00, 0xc0, 0xbd, 0x00, 0xa6, 0x9d, 0x00, 0xc1, 0xbd, 0x00, 0xa7, 0x9d, 0x00, 0xcf, 0x01, + 0xcf, 0xbd, 0x00, 0xbe, 0x9d, 0x00, 0xfe, 0xbd, 0x00, 0xcf, 0x01, 0xbf, 0x9d, 0x00, 0xff, 0xe8, + 0xd0, 0xdf, 0xa9, 0x37, 0x85, 0x01, 0x58, 0x4c, 0x00, 0xc0, 0xbf, 0x39, 0x78, 0xd8, 0xa2, 0xff, + 0x9a, 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xad, 0xff, 0x03, 0xf0, 0x03, 0x4c, 0xd1, + 0x04, 0xa9, 0x00, 0x8d, 0x00, 0xeb, 0x8d, 0x70, 0xef, 0x8d, 0x70, 0xf0, 0x8d, 0x1b, 0xd4, 0xa9, + 0xff, 0x8d, 0x0f, 0xd4, 0x8d, 0x0e, 0xd4, 0xa9, 0x80, 0x8d, 0x12, 0xd4, 0xa2, 0x00, 0xa0, 0x60, + 0x88, 0xd0, 0xfd, 0xad, 0x1b, 0xd4, 0x9d, 0x00, 0x02, 0xe8, 0xd0, 0xf2, 0x20, 0x80, 0x00, 0xa9, + 0x32, 0x85, 0x01, 0xa2, 0x00, 0xbd, 0x00, 0xd0, 0x9d, 0x00, 0x89, 0x49, 0xff, 0x9d, 0x00, 0x8b, + 0xbd, 0x00, 0xd1, 0x9d, 0x00, 0x88, 0x49, 0xff, 0x9d, 0x00, 0x8a, 0xe8, 0xd0, 0xe7, 0xa9, 0x36, + 0x85, 0x01, 0xa2, 0x07, 0xa9, 0xff, 0x9d, 0x00, 0x89, 0xa9, 0x03, 0x9d, 0x10, 0x8a, 0xa9, 0xc0, + 0x9d, 0xb0, 0x8a, 0xca, 0x10, 0xee, 0xa9, 0x7f, 0x85, 0xf3, 0xa9, 0x00, 0x85, 0x04, 0xa9, 0x90, + 0x85, 0x05, 0xa9, 0x00, 0x85, 0x06, 0x85, 0x08, 0xa9, 0xa0, 0x85, 0x07, 0xa9, 0xa4, 0x85, 0x09, + 0x20, 0x92, 0x48, 0xa9, 0x7f, 0x85, 0xf3, 0xa9, 0x00, 0x85, 0x04, 0xa9, 0x94, 0x85, 0x05, 0xa9, + 0x00, 0x85, 0x06, 0x85, 0x08, 0xa9, 0xa8, 0x85, 0x07, 0xa9, 0xac, 0x85, 0x09, 0x20, 0x92, 0x48, + 0xa9, 0x7f, 0x85, 0xf3, 0xa9, 0x00, 0x85, 0x04, 0xa9, 0x98, 0x85, 0x05, 0xa9, 0x00, 0x85, 0x06, + 0x85, 0x08, 0xa9, 0xb0, 0x85, 0x07, 0xa9, 0xb4, 0x85, 0x09, 0x20, 0x92, 0x48, 0xa9, 0x7f, 0x85, + 0xf3, 0xa9, 0x00, 0x85, 0x04, 0xa9, 0x9c, 0x85, 0x05, 0xa9, 0x00, 0x85, 0x06, 0x85, 0x08, 0xa9, + 0xb8, 0xaa, 0x9a, 0x85, 0x07, 0xa9, 0xbc, 0x85, 0x09, 0x20, 0x92, 0x48, 0x20, 0x2f, 0x51, 0x20, + 0xf7, 0x10, 0xa9, 0x35, 0x85, 0x01, 0xa9, 0xf0, 0x8d, 0x28, 0xd0, 0x8d, 0x2a, 0xd0, 0x8d, 0x2b, + 0xd0, 0xa9, 0xf7, 0x8d, 0x27, 0xd0, 0xa9, 0xf5, 0x8d, 0x29, 0xd0, 0x78, 0xd8, 0xa2, 0xfd, 0x9a, + 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0x20, 0x00, 0xe0, 0xa9, 0x00, 0x85, 0x16, 0xa9, + 0x02, 0x85, 0x17, 0x78, 0x20, 0x72, 0x0f, 0x20, 0x63, 0x07, 0x4c, 0x84, 0x05, 0x78, 0xad, 0x11, + 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xa9, 0x00, 0x8d, 0x15, 0xd0, 0x8d, 0x00, 0xd0, 0x8d, 0x01, + 0xd0, 0xa9, 0x01, 0x8d, 0x0a, 0xe3, 0x20, 0x00, 0xe0, 0xa2, 0xfd, 0x9a, 0x20, 0x72, 0x0f, 0x20, + 0x63, 0x07, 0x4e, 0x04, 0x01, 0xad, 0xc9, 0x42, 0x8d, 0xcb, 0x42, 0xad, 0xca, 0x42, 0x8d, 0xcc, + 0x42, 0xa9, 0x00, 0x8d, 0xca, 0x42, 0x8d, 0xc9, 0x42, 0x20, 0xbc, 0x09, 0xa9, 0x00, 0x85, 0x1d, + 0xa9, 0xf3, 0x85, 0x1e, 0xad, 0x11, 0xd0, 0x09, 0x10, 0x8d, 0x11, 0xd0, 0x58, 0x4c, 0xc2, 0x1b, + 0x78, 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0x20, 0x5e, 0x25, 0xa9, 0x00, 0x8d, 0x00, + 0x01, 0x20, 0x56, 0x1a, 0x20, 0x2e, 0x0e, 0xa2, 0x3f, 0xa9, 0x00, 0x9d, 0xc0, 0x83, 0xca, 0x10, + 0xfa, 0xa9, 0x01, 0x8d, 0x15, 0xd0, 0x8d, 0x1d, 0xd0, 0x8d, 0x10, 0xd0, 0xa9, 0x00, 0x8d, 0x17, + 0xd0, 0x8d, 0x1b, 0xd0, 0x8d, 0x1c, 0xd0, 0xa9, 0x0a, 0x8d, 0x00, 0xd0, 0xa9, 0x56, 0x8d, 0x01, + 0xd0, 0xa9, 0xff, 0x8d, 0x27, 0xd0, 0xa9, 0x0f, 0x8d, 0xf8, 0x8f, 0xa2, 0x0b, 0xbd, 0x40, 0x0e, + 0x9d, 0xcc, 0x83, 0xca, 0x10, 0xf7, 0xa9, 0x2c, 0x8d, 0x08, 0x04, 0xa9, 0x15, 0x8d, 0x09, 0x04, + 0xa9, 0x01, 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, + 0xa9, 0xfd, 0x8d, 0x12, 0xd0, 0xa9, 0xf6, 0x8d, 0x20, 0xd0, 0x8d, 0x21, 0xd0, 0xa9, 0xff, 0x8d, + 0x22, 0xd0, 0x8d, 0x23, 0xd0, 0xa2, 0x08, 0x8e, 0x16, 0xd0, 0x20, 0xa9, 0x09, 0xa2, 0x00, 0xa9, + 0xf1, 0x9d, 0xe0, 0xd9, 0x9d, 0xe0, 0xda, 0xa9, 0xdc, 0x9d, 0x00, 0x8c, 0x9d, 0x68, 0x8c, 0xca, + 0xd0, 0xed, 0xa2, 0x27, 0xbd, 0x0d, 0x4a, 0x09, 0x80, 0x9d, 0x50, 0x8c, 0xbd, 0xbd, 0x49, 0x09, + 0x80, 0x9d, 0xc8, 0x8c, 0xbd, 0xe5, 0x49, 0x09, 0x80, 0x9d, 0xf0, 0x8c, 0xbd, 0x35, 0x4a, 0x09, + 0x80, 0x9d, 0x68, 0x8d, 0xca, 0x10, 0xdd, 0xa9, 0xff, 0x8d, 0x00, 0x01, 0xa9, 0x4f, 0xa2, 0x06, + 0xa0, 0x31, 0x20, 0xe2, 0x17, 0xa9, 0x50, 0xa2, 0x07, 0xa0, 0x2b, 0x20, 0xe2, 0x17, 0xa9, 0x51, + 0xa2, 0x08, 0xa0, 0x31, 0x20, 0xe2, 0x17, 0xa2, 0x09, 0xbd, 0xf0, 0x8d, 0x18, 0x69, 0x40, 0x9d, + 0xf0, 0x8d, 0xbd, 0x40, 0x8e, 0x18, 0x69, 0x40, 0x9d, 0x40, 0x8e, 0xe0, 0x02, 0xb0, 0x1b, 0xbd, + 0xeb, 0x8d, 0x18, 0x69, 0x40, 0x9d, 0xeb, 0x8d, 0xbd, 0x3b, 0x8e, 0x18, 0x69, 0x40, 0x9d, 0x3b, + 0x8e, 0xbd, 0x8b, 0x8e, 0x18, 0x69, 0x40, 0x9d, 0x8b, 0x8e, 0xca, 0x10, 0xcc, 0xad, 0xcb, 0x42, + 0x8d, 0xc9, 0x42, 0xad, 0xcc, 0x42, 0x8d, 0xca, 0x42, 0xad, 0xc9, 0x42, 0xf0, 0x03, 0x20, 0x65, + 0x0e, 0xad, 0xca, 0x42, 0xf0, 0x03, 0x20, 0x4c, 0x0e, 0xad, 0x85, 0x13, 0xd0, 0x1b, 0xce, 0xbb, + 0x09, 0x10, 0x16, 0xa9, 0x04, 0x8d, 0xbb, 0x09, 0xa9, 0x03, 0x8d, 0x14, 0xe3, 0xa2, 0x00, 0x8e, + 0x70, 0xe8, 0xca, 0x8e, 0x71, 0xe8, 0x20, 0x03, 0xe0, 0xa2, 0x00, 0xbd, 0x8f, 0xcf, 0x01, 0xcf, + 0x5d, 0xb1, 0xcf, 0x01, 0xcf, 0x5d, 0x90, 0xcf, 0x01, 0xcf, 0x5d, 0xaf, 0xcf, 0x01, 0xcf, 0x5d, + 0x91, 0xcf, 0x01, 0xcf, 0x5d, 0xb0, 0xcf, 0x01, 0xcf, 0xf0, 0x07, 0x91, 0x1d, 0xe6, 0x1e, 0x4c, + 0xf3, 0x06, 0xa9, 0x09, 0x85, 0x4a, 0xa9, 0x60, 0x85, 0x49, 0xad, 0x11, 0xd0, 0x09, 0x10, 0x8d, + 0x11, 0xd0, 0x58, 0x20, 0xb1, 0x08, 0x78, 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xa9, + 0x00, 0x8d, 0x15, 0xd0, 0x8d, 0x00, 0xd0, 0x8d, 0x01, 0xd0, 0x85, 0x03, 0xa9, 0x01, 0x8d, 0x0a, + 0xe3, 0x20, 0x00, 0xe0, 0xad, 0xc9, 0x42, 0x8d, 0xcb, 0x42, 0xad, 0xca, 0x42, 0x8d, 0xcc, 0x42, + 0x20, 0xa7, 0x0e, 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xa2, 0xfd, 0x9a, 0x20, 0x72, + 0x0f, 0x20, 0x63, 0x07, 0x20, 0xbc, 0x09, 0xa9, 0x00, 0x85, 0x1d, 0xa9, 0xf3, 0x85, 0x1e, 0xad, + 0x11, 0xd0, 0x09, 0x10, 0x8d, 0x11, 0xd0, 0x58, 0x4c, 0xc2, 0x1b, 0xa9, 0x00, 0x85, 0x8b, 0x85, + 0x8c, 0x20, 0x2d, 0x08, 0x20, 0x86, 0x13, 0xa9, 0xff, 0x85, 0x4b, 0xa0, 0x8b, 0xa9, 0xd8, 0x20, + 0x69, 0x08, 0xa9, 0x00, 0x8d, 0x38, 0x43, 0x8d, 0x60, 0x43, 0x8d, 0x61, 0x43, 0xa9, 0x8c, 0x8d, + 0x4c, 0x43, 0xa9, 0xde, 0x8d, 0x74, 0x43, 0x8d, 0x75, 0x43, 0x20, 0x56, 0x1a, 0xa9, 0xf8, 0x20, + 0xa9, 0x09, 0xa2, 0x27, 0xa9, 0x00, 0x9d, 0x00, 0xd8, 0x9d, 0x28, 0xd8, 0xa9, 0x20, 0x9d, 0x00, + 0x8c, 0xa9, 0x06, 0x9d, 0x50, 0x8c, 0xe0, 0x08, 0xb0, 0x0a, 0xa9, 0x0f, 0x9d, 0xf8, 0x8f, 0xa9, + 0xff, 0x9d, 0x00, 0x89, 0xca, 0x10, 0xdd, 0xa9, 0x00, 0xaa, 0x9d, 0x80, 0x81, 0x9d, 0x80, 0x82, + 0x9d, 0x00, 0x83, 0xe8, 0xd0, 0xf4, 0xa2, 0x03, 0xbd, 0x9b, 0x47, 0x9d, 0x20, 0xd0, 0xca, 0x10, + 0xf7, 0xa9, 0x01, 0x8d, 0x00, 0xdd, 0xa9, 0x38, 0x8d, 0x18, 0xd0, 0x85, 0xf2, 0xa9, 0x18, 0x8d, + 0x16, 0xd0, 0xa9, 0x00, 0x8d, 0x15, 0xd0, 0x8d, 0x17, 0xd0, 0x8d, 0x1b, 0xd0, 0x8d, 0x1c, 0xd0, + 0xa9, 0xff, 0x8d, 0x1d, 0xd0, 0xa9, 0x80, 0x20, 0x5a, 0x31, 0x20, 0xc2, 0x31, 0xa9, 0x11, 0x8d, + 0xbd, 0x43, 0x20, 0x96, 0x1a, 0x20, 0xbb, 0x1a, 0x20, 0xc7, 0x1a, 0x20, 0xed, 0x1a, 0xa9, 0x01, + 0x85, 0x60, 0x85, 0x66, 0xa2, 0x04, 0xa9, 0xff, 0x9d, 0x40, 0x4f, 0xca, 0x10, 0xfa, 0xa2, 0x00, + 0xa9, 0x00, 0x4c, 0x8e, 0x0b, 0xa9, 0x7f, 0x8d, 0x0d, 0xdd, 0x8d, 0x0d, 0xdc, 0xad, 0x0d, 0xdd, + 0xad, 0x0d, 0xdc, 0xd8, 0xa9, 0xc1, 0x8d, 0x08, 0x04, 0xa9, 0x48, 0x8d, 0x09, 0x04, 0xa9, 0x01, + 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0xfb, + 0x8d, 0x12, 0xd0, 0xa9, 0xff, 0x8d, 0x0e, 0xd4, 0x8d, 0x0f, 0xd4, 0xa9, 0x80, 0x8d, 0x12, 0xd4, + 0x60, 0xa2, 0x00, 0x8d, 0x38, 0x43, 0x8c, 0x4c, 0x43, 0xbd, 0x38, 0x43, 0x18, 0x69, 0x50, 0x9d, + 0x39, 0x43, 0xbd, 0x4c, 0x43, 0x69, 0x00, 0x9d, 0x4d, 0x43, 0xe8, 0xe0, 0x0d, 0x90, 0xea, 0xad, + 0x38, 0x43, 0x18, 0x69, 0x28, 0x8d, 0x60, 0x43, 0xad, 0x4c, 0x43, 0x69, 0x00, 0x8d, 0x74, 0x43, + 0xa2, 0x00, 0xbd, 0x60, 0x43, 0x18, 0x69, 0x50, 0x9d, 0x61, 0x43, 0xbd, 0x74, 0x43, 0x69, 0x00, + 0x9d, 0x75, 0x43, 0xe8, 0xe0, 0x0d, 0x90, 0xea, 0x60, 0xa5, 0x49, 0x05, 0x4a, 0xd0, 0x03, 0x4c, + 0x31, 0x05, 0xa9, 0x00, 0x8d, 0x0e, 0x01, 0x20, 0x9e, 0x13, 0xad, 0x0c, 0x01, 0xf0, 0x19, 0xa9, + 0x00, 0x8d, 0x0c, 0x01, 0xad, 0x09, 0x01, 0x4c, 0x56, 0x09, 0x29, 0x7f, 0xc9, 0x03, 0xf0, 0x24, + 0xc9, 0x06, 0xf0, 0x2c, 0xc9, 0x05, 0xf0, 0x4c, 0xa5, 0x4a, 0xc9, 0x08, 0xd0, 0x0f, 0xa5, 0x49, + 0xc9, 0x02, 0xb0, 0x09, 0xa9, 0x0e, 0xa2, 0x0a, 0xa0, 0x02, 0x20, 0xe2, 0x17, 0xad, 0x01, 0xdc, + 0x29, 0x10, 0xd0, 0xb5, 0x20, 0x4b, 0x09, 0xa9, 0x10, 0x85, 0x48, 0xa5, 0x48, 0xd0, 0xfc, 0x60, + 0xad, 0xca, 0x42, 0x49, 0x01, 0x8d, 0xca, 0x42, 0x8d, 0xcc, 0x42, 0x20, 0x4c, 0x0e, 0x20, 0x4b, + 0x09, 0xa9, 0x09, 0x85, 0x4a, 0xa9, 0x60, 0x85, 0x49, 0xa9, 0x04, 0x85, 0x48, 0xa5, 0x48, 0xd0, + 0xfc, 0x4c, 0xb1, 0x08, 0xad, 0xc9, 0x42, 0x49, 0x01, 0x8d, 0xc9, 0x42, 0x8d, 0xcb, 0x42, 0x20, + 0x65, 0x0e, 0x20, 0x4b, 0x09, 0xa9, 0x09, 0x85, 0x4a, 0xa9, 0x60, 0x85, 0x49, 0xa9, 0x04, 0x85, + 0x48, 0xd0, 0xda, 0xad, 0x00, 0xdc, 0x2d, 0x01, 0xdc, 0x29, 0x10, 0xf0, 0xf6, 0x60, 0xc9, 0x2a, + 0xf0, 0x0f, 0xc9, 0xaa, 0xf0, 0x1b, 0xc9, 0x11, 0xf0, 0x26, 0xc9, 0x91, 0xf0, 0x32, 0x4c, 0xd2, + 0x08, 0xa9, 0x08, 0xa2, 0x0a, 0xa0, 0x02, 0x20, 0xe2, 0x17, 0xa9, 0x00, 0x8d, 0x83, 0x13, 0xf0, + 0x2d, 0xa9, 0x0a, 0xaa, 0xa0, 0x02, 0x20, 0xe2, 0x17, 0xa9, 0x00, 0x8d, 0x84, 0x13, 0xf0, 0x1e, + 0xa9, 0x09, 0xa2, 0x0a, 0xa0, 0x02, 0x20, 0xe2, 0x17, 0xa9, 0x01, 0x8d, 0x83, 0x13, 0xd0, 0x0e, + 0xa9, 0x0d, 0xa2, 0x0a, 0xa0, 0x02, 0x20, 0xe2, 0x17, 0xa9, 0x01, 0x8d, 0x84, 0x13, 0x4c, 0x16, + 0x09, 0xa2, 0x00, 0x9d, 0x00, 0xd8, 0x9d, 0x00, 0xd9, 0x9d, 0x00, 0xda, 0x9d, 0x00, 0xdb, 0xe8, + 0xd0, 0xf1, 0x60, 0x00, 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xad, 0x15, 0xd0, 0x29, + 0x1f, 0x85, 0x47, 0xa9, 0x00, 0x8d, 0x15, 0xd0, 0xa2, 0x27, 0xa9, 0x20, 0x9d, 0x00, 0x8c, 0xca, + 0x10, 0xfa, 0xa6, 0x29, 0xbd, 0xa0, 0x47, 0xa2, 0x00, 0x9d, 0x78, 0xd8, 0x9d, 0x00, 0xd9, 0x9d, + 0x00, 0xda, 0x9d, 0x00, 0xdb, 0xe8, 0xd0, 0xf1, 0x20, 0x3f, 0x42, 0x20, 0x5e, 0x25, 0xa5, 0x29, + 0xc9, 0x0b, 0xd0, 0x12, 0xa5, 0x36, 0x05, 0x38, 0x05, 0x3a, 0xd0, 0x0a, 0xa5, 0x47, 0x8d, 0x15, + 0xd0, 0xa2, 0x0d, 0x4c, 0x17, 0x32, 0xa5, 0x29, 0x0a, 0x65, 0x03, 0xaa, 0xbd, 0x00, 0x03, 0xf0, + 0x11, 0x5e, 0x00, 0x03, 0xa9, 0x07, 0xa2, 0x01, 0x20, 0x75, 0x31, 0xa9, 0xd0, 0xa2, 0x02, 0x20, + 0x75, 0x31, 0xa9, 0x00, 0xa0, 0x83, 0x99, 0x57, 0x4f, 0x88, 0x10, 0xfa, 0x85, 0x87, 0x85, 0x88, + 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, 0xa6, 0x29, 0xbd, 0x9e, 0x4c, 0x85, 0x7a, 0xf0, 0x06, + 0xa9, 0x00, 0x85, 0x8b, 0x85, 0x8c, 0xbd, 0x0b, 0x13, 0x85, 0x5d, 0xbd, 0x47, 0x13, 0x85, 0x5e, + 0xa5, 0x40, 0xf0, 0x06, 0xa9, 0x03, 0x85, 0x5d, 0x85, 0x5e, 0xad, 0xca, 0x42, 0xf0, 0x04, 0xa9, + 0x08, 0x85, 0x5e, 0xa9, 0x01, 0x85, 0xb6, 0xa9, 0x04, 0x85, 0xce, 0xa9, 0x00, 0x8d, 0xde, 0x4f, + 0x8d, 0xdf, 0x4f, 0x8d, 0xe0, 0x4f, 0x85, 0xcf, 0x01, 0xbf, 0x8d, 0x06, 0x01, 0xa5, 0x29, 0x0a, + 0xaa, 0xbd, 0xa8, 0x4a, 0x85, 0x06, 0xbd, 0xa9, 0x4a, 0x85, 0x07, 0xa0, 0x13, 0xb1, 0x06, 0x99, + 0x53, 0x01, 0x88, 0x10, 0xf8, 0xa9, 0x38, 0xa6, 0x29, 0xe0, 0x0a, 0x90, 0x0a, 0xe0, 0x12, 0xf0, + 0x04, 0xa9, 0x3a, 0xd0, 0x02, 0xa9, 0x3c, 0x85, 0xf2, 0xbd, 0x34, 0x4b, 0x85, 0x06, 0xbd, 0x49, + 0x4b, 0x85, 0x07, 0xa9, 0x78, 0x85, 0x04, 0x85, 0x10, 0xa9, 0xa0, 0x85, 0x08, 0x85, 0x12, 0xa9, + 0x8c, 0x85, 0x05, 0x85, 0x09, 0xa9, 0xd8, 0x85, 0x11, 0x85, 0x13, 0xa9, 0x27, 0x85, 0xf3, 0xa0, + 0x00, 0xb1, 0x06, 0x10, 0x2c, 0x29, 0x7f, 0xf0, 0x51, 0xaa, 0x20, 0x8d, 0x47, 0xb1, 0x06, 0x10, + 0x03, 0x20, 0x5f, 0x0b, 0x91, 0x04, 0x09, 0x80, 0x91, 0x08, 0x20, 0x86, 0x47, 0x20, 0x8d, 0x47, + 0x20, 0x94, 0x47, 0x20, 0x51, 0x0b, 0x20, 0x58, 0x0b, 0x20, 0x5b, 0x48, 0xca, 0xd0, 0xde, 0xf0, + 0xd0, 0xaa, 0x20, 0x8d, 0x47, 0xb1, 0x06, 0x10, 0x03, 0x20, 0x5f, 0x0b, 0x91, 0x04, 0x09, 0x80, + 0x91, 0x08, 0x20, 0x86, 0x47, 0x20, 0x94, 0x47, 0x20, 0x51, 0x0b, 0x20, 0x58, 0x0b, 0x20, 0x5b, + 0x48, 0xca, 0xd0, 0xe1, 0x20, 0x8d, 0x47, 0x4c, 0xd7, 0x0a, 0x20, 0x6e, 0x33, 0xad, 0x11, 0xd0, + 0x09, 0x10, 0x8d, 0x11, 0xd0, 0xa5, 0x47, 0x8d, 0x15, 0xd0, 0x4c, 0x6f, 0x3a, 0xe6, 0x04, 0xd0, + 0x02, 0xe6, 0x05, 0x60, 0xe6, 0x06, 0xd0, 0x02, 0xe6, 0x07, 0x60, 0xe6, 0x10, 0xd0, 0x02, 0xe6, + 0x11, 0x60, 0xe6, 0x12, 0xd0, 0x02, 0xe6, 0x13, 0x60, 0x48, 0xa9, 0xf8, 0x91, 0x10, 0x91, 0x12, + 0x68, 0x29, 0x7f, 0x60, 0x20, 0x80, 0x0b, 0xa2, 0x03, 0xa9, 0x86, 0x91, 0x04, 0x20, 0x43, 0x0b, + 0xca, 0x10, 0xf8, 0xa9, 0x27, 0x85, 0x4c, 0x4c, 0x87, 0x0b, 0x85, 0x54, 0x86, 0x55, 0x84, 0x56, + 0x60, 0xa4, 0x56, 0xa6, 0x55, 0xa5, 0x54, 0x60, 0x09, 0x01, 0x95, 0x95, 0xcf, 0x03, 0x2a, 0x29, + 0x03, 0xa8, 0x84, 0x52, 0xb9, 0xa8, 0x59, 0x95, 0xec, 0x20, 0x21, 0x0e, 0xa4, 0x52, 0xb9, 0xab, + 0x59, 0x95, 0xef, 0xf0, 0x03, 0x20, 0x21, 0x0e, 0xa4, 0x52, 0xa9, 0x00, 0x95, 0xcf, 0x01, 0xbf, + 0x95, 0xce, 0x9d, 0x06, 0x01, 0xa9, 0x0f, 0x95, 0x98, 0xa9, 0x01, 0x95, 0x9b, 0xa9, 0x01, 0x95, + 0xb6, 0xa9, 0x01, 0x95, 0xa4, 0xa9, 0x02, 0x9d, 0x48, 0x4f, 0x9d, 0x4e, 0x4f, 0xa9, 0x03, 0x9d, + 0x4b, 0x4f, 0x9d, 0x51, 0x4f, 0xa9, 0x24, 0x95, 0xd1, 0x86, 0x51, 0xad, 0x04, 0x01, 0xf0, 0x03, + 0x8a, 0xd0, 0x13, 0xa6, 0x29, 0xbd, 0xc2, 0x4b, 0xa8, 0xbd, 0xae, 0x4b, 0xa6, 0x51, 0x95, 0x9e, + 0x98, 0x95, 0xa1, 0x4c, 0x4d, 0x0c, 0xb5, 0x8a, 0xd0, 0x41, 0xe0, 0x01, 0xd0, 0x28, 0xa6, 0x29, + 0xbd, 0x6f, 0x13, 0xf0, 0x0e, 0x20, 0x59, 0x11, 0xc9, 0xc0, 0xb0, 0x07, 0xbd, 0x6f, 0x13, 0x10, + 0xd2, 0x30, 0x07, 0x20, 0x59, 0x11, 0x29, 0x01, 0xf0, 0xc9, 0xa6, 0x29, 0xbd, 0xea, 0x4b, 0xa8, + 0xbd, 0xd6, 0x4b, 0x4c, 0xf0, 0x0b, 0xa6, 0x29, 0xbd, 0x33, 0x13, 0xf0, 0xe6, 0x20, 0x59, 0x11, + 0xc9, 0xc0, 0xb0, 0xdf, 0xbd, 0x6f, 0x13, 0x10, 0xaa, 0x30, 0xdf, 0x95, 0x9e, 0xb5, 0x8c, 0x95, + 0xa1, 0xb5, 0x8e, 0x95, 0xd1, 0xa9, 0x00, 0x95, 0x8a, 0xbd, 0x6d, 0x27, 0xac, 0x7d, 0x27, 0xf0, + 0x03, 0x18, 0x69, 0x05, 0xa8, 0xb9, 0x63, 0x27, 0xbc, 0x6d, 0x27, 0x99, 0xf8, 0x8f, 0xc8, 0x18, + 0x69, 0x01, 0x99, 0xf8, 0x8f, 0xb5, 0x9e, 0x0a, 0x48, 0xbc, 0x6d, 0x27, 0xad, 0x10, 0xd0, 0x90, + 0x05, 0x19, 0x73, 0x27, 0xd0, 0x03, 0x39, 0x78, 0x27, 0x8d, 0x10, 0xd0, 0x98, 0x0a, 0xa8, 0x68, + 0x99, 0x00, 0xd0, 0xb5, 0xa1, 0x18, 0x69, 0x1d, 0x99, 0x01, 0xd0, 0xbd, 0x70, 0x27, 0x30, 0x26, + 0xb5, 0x9e, 0x0a, 0x48, 0xbc, 0x70, 0x27, 0xad, 0x10, 0xd0, 0x90, 0x05, 0x19, 0x73, 0x27, 0xd0, + 0x03, 0x39, 0x78, 0x27, 0x8d, 0x10, 0xd0, 0x98, 0x0a, 0xa8, 0x68, 0x99, 0x00, 0xd0, 0xb5, 0xa1, + 0x18, 0x69, 0x1d, 0x99, 0x01, 0xd0, 0xbc, 0x6d, 0x27, 0xad, 0x15, 0xd0, 0x19, 0x73, 0x27, 0x8d, + 0x15, 0xd0, 0xbc, 0x70, 0x27, 0x30, 0x09, 0xad, 0x15, 0xd0, 0x19, 0x73, 0x27, 0x8d, 0x15, 0xd0, + 0x60, 0x20, 0xb5, 0x10, 0xad, 0x79, 0xcf, 0x01, 0xcf, 0x4d, 0x99, 0xcf, 0x01, 0xcf, 0x8d, 0x66, + 0x11, 0xa2, 0x01, 0xa9, 0x80, 0x20, 0x8e, 0x0b, 0xa9, 0x10, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x2a, + 0x9d, 0x48, 0x4f, 0xa9, 0x2b, 0x9d, 0x4b, 0x4f, 0xa9, 0x6c, 0x9d, 0x4e, 0x4f, 0xa9, 0x6d, 0x9d, + 0x51, 0x4f, 0xa9, 0x0a, 0x95, 0xce, 0xb5, 0xd1, 0xc9, 0x14, 0x90, 0x04, 0xa9, 0x14, 0x95, 0xd1, + 0x60, 0xa5, 0x5e, 0xd0, 0x29, 0xa2, 0x01, 0xb5, 0x95, 0x29, 0x01, 0xd0, 0x21, 0x20, 0xd5, 0x0c, + 0xa6, 0x29, 0xbd, 0x5b, 0x13, 0x85, 0x5e, 0xad, 0xca, 0x42, 0xf0, 0x04, 0xa9, 0x30, 0x85, 0x5e, + 0x20, 0xd0, 0x10, 0x70, 0x0a, 0xb0, 0x05, 0xa5, 0x40, 0xd0, 0x04, 0x60, 0x46, 0x5e, 0x60, 0xa9, + 0x03, 0x85, 0x5e, 0x60, 0xe0, 0x01, 0xd0, 0x2c, 0xa9, 0x5b, 0x18, 0x65, 0x29, 0x8d, 0x56, 0x0d, + 0xa9, 0x13, 0x69, 0x00, 0x8d, 0x57, 0x0d, 0xad, 0x00, 0xe0, 0x85, 0x5e, 0xad, 0xca, 0x42, 0xf0, + 0x04, 0xa9, 0x30, 0x85, 0x5e, 0x20, 0xd0, 0x10, 0x70, 0xd5, 0xb0, 0x05, 0xa5, 0x40, 0xd0, 0xcf, + 0x01, 0xcf, 0x60, 0x46, 0x5e, 0x60, 0xe0, 0x02, 0xd0, 0x28, 0xa9, 0x1f, 0x18, 0x65, 0x29, 0x8d, + 0x86, 0x0d, 0xa9, 0x13, 0x69, 0x00, 0x8d, 0x87, 0x0d, 0xad, 0x00, 0xe0, 0x85, 0x5d, 0x20, 0xd0, + 0x10, 0x70, 0x0a, 0xb0, 0x05, 0xa5, 0x40, 0xd0, 0x04, 0x60, 0x46, 0x5d, 0x60, 0xa9, 0x03, 0x85, + 0x5d, 0x60, 0x20, 0x46, 0x0d, 0x4c, 0x76, 0x0d, 0xa5, 0x5d, 0xf0, 0x02, 0xc6, 0x5d, 0xa5, 0x5e, + 0xf0, 0x02, 0xc6, 0x5e, 0x60, 0xa5, 0x5d, 0xd0, 0x42, 0xa5, 0x96, 0x29, 0x01, 0xf0, 0x1c, 0xa5, + 0x40, 0xd0, 0x18, 0xad, 0xca, 0x42, 0xd0, 0x13, 0x20, 0xd0, 0x10, 0x70, 0x0e, 0xb0, 0x0c, 0x20, + 0x59, 0x11, 0xc9, 0x19, 0x90, 0x05, 0xa9, 0x10, 0x85, 0x5d, 0x60, 0xa2, 0x02, 0xb5, 0x95, 0x29, + 0x01, 0xd0, 0x18, 0x20, 0xf8, 0x0d, 0xa6, 0x29, 0xbd, 0x1f, 0x13, 0x85, 0x5d, 0x20, 0xd0, 0x10, + 0x70, 0xab, 0xb0, 0x05, 0xa5, 0x40, 0xd0, 0xa5, 0x60, 0x46, 0x5d, 0x60, 0x20, 0xb5, 0x10, 0xa9, + 0x40, 0x20, 0x8e, 0x0b, 0xa9, 0x82, 0x9d, 0x4e, 0x4f, 0xa9, 0x00, 0x9d, 0x4b, 0x4f, 0x9d, 0x51, + 0x4f, 0xb5, 0xd1, 0xc9, 0x07, 0x90, 0x04, 0xa9, 0x07, 0x95, 0xd1, 0xa9, 0x10, 0x95, 0xce, 0x20, + 0xdd, 0x2d, 0x4c, 0x1c, 0x2e, 0x38, 0xe9, 0x03, 0xa8, 0xb9, 0xae, 0x59, 0xa8, 0x8a, 0x99, 0x40, + 0x4f, 0x60, 0x8a, 0x48, 0xa2, 0x04, 0xbd, 0x3b, 0x0e, 0xca, 0x10, 0xfa, 0x68, 0xaa, 0x60, 0x08, + 0x0e, 0x80, 0x00, 0x80, 0xea, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x4a, 0x00, 0x00, + 0xa2, 0x13, 0xbd, 0x40, 0x8e, 0xc9, 0x4d, 0xf0, 0x05, 0x49, 0x40, 0x9d, 0x40, 0x8e, 0xca, 0x10, + 0xf1, 0xa2, 0x50, 0xad, 0xca, 0x42, 0x4c, 0x7b, 0x0e, 0xa2, 0x13, 0xbd, 0xf0, 0x8d, 0xc9, 0x4d, + 0xf0, 0x05, 0x49, 0x40, 0x9d, 0xf0, 0x8d, 0xca, 0x10, 0xf1, 0xa2, 0x00, 0xad, 0xc9, 0x42, 0xd0, + 0x15, 0xa9, 0x42, 0x9d, 0xef, 0x8d, 0xa9, 0x40, 0x9d, 0xf8, 0x8d, 0xa9, 0x56, 0x9d, 0xfa, 0x8d, + 0xa9, 0x00, 0x9d, 0x04, 0x8e, 0x60, 0xa9, 0x00, 0x9d, 0xef, 0x8d, 0xa9, 0x42, 0x9d, 0xf8, 0x8d, + 0xa9, 0x40, 0x9d, 0xfa, 0x8d, 0xa9, 0x56, 0x9d, 0x04, 0x8e, 0x60, 0x78, 0xad, 0x11, 0xd0, 0x29, + 0xef, 0x8d, 0x11, 0xd0, 0xa9, 0x00, 0x8d, 0x15, 0xd0, 0xa9, 0x06, 0x8d, 0x20, 0xd0, 0x8d, 0x21, + 0xd0, 0xa2, 0x00, 0xa9, 0xdc, 0x9d, 0x00, 0x8c, 0x9d, 0x00, 0x8d, 0x9d, 0x00, 0x8e, 0x9d, 0x00, + 0x8f, 0xe8, 0xd0, 0xf1, 0x20, 0x5e, 0x25, 0xa5, 0x03, 0x0a, 0xaa, 0xa0, 0x00, 0xbd, 0x7d, 0x4a, + 0x99, 0x6b, 0x4a, 0xbd, 0x81, 0x4a, 0x99, 0x7b, 0x4a, 0xe8, 0xc8, 0xc0, 0x02, 0x90, 0xee, 0xa2, + 0x0f, 0xbd, 0x5d, 0x4a, 0x09, 0x80, 0x9d, 0x24, 0x8d, 0xbd, 0x6d, 0x4a, 0x09, 0x80, 0x9d, 0x4c, + 0x8d, 0xca, 0x10, 0xed, 0xa9, 0xa4, 0x8d, 0x08, 0x04, 0xa9, 0x14, 0x8d, 0x09, 0x04, 0xa9, 0x01, + 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0x63, + 0x8d, 0x12, 0xd0, 0xa9, 0x30, 0x8d, 0x18, 0xd0, 0xa9, 0x18, 0x8d, 0x16, 0xd0, 0xad, 0x11, 0xd0, + 0x09, 0x10, 0x8d, 0x11, 0xd0, 0x58, 0xa9, 0x80, 0x85, 0x18, 0x85, 0x19, 0xa9, 0x03, 0x85, 0x1a, + 0xa9, 0x40, 0x85, 0x48, 0xad, 0xc9, 0x42, 0xf0, 0x02, 0x06, 0x48, 0xa5, 0x48, 0xf0, 0x26, 0xa5, + 0x18, 0xf0, 0x05, 0xc6, 0x18, 0x4c, 0x69, 0x0f, 0xa5, 0x19, 0xf0, 0x07, 0xc6, 0x18, 0xc6, 0x19, + 0x4c, 0x69, 0x0f, 0xa5, 0x1a, 0xf0, 0x06, 0xc6, 0x18, 0xc6, 0x19, 0xc6, 0x1a, 0xa5, 0x18, 0x05, + 0x19, 0x05, 0x1a, 0xd0, 0xd6, 0x60, 0xa9, 0x00, 0xaa, 0xe0, 0xf3, 0xb0, 0x02, 0x95, 0x03, 0xe0, + 0xfb, 0xb0, 0x03, 0x9d, 0xed, 0x4e, 0xe8, 0xd0, 0xf0, 0x85, 0x89, 0x85, 0x8a, 0xa2, 0x07, 0xa9, + 0x01, 0x9d, 0x4b, 0x01, 0x9d, 0x00, 0x01, 0xca, 0x10, 0xf7, 0x20, 0x5e, 0x25, 0xa9, 0x05, 0x8d, + 0x95, 0x4e, 0x8d, 0x96, 0x4e, 0x20, 0xc5, 0x10, 0xa2, 0x27, 0xa9, 0x01, 0x9d, 0x00, 0x03, 0xca, + 0x10, 0xfa, 0xa9, 0x00, 0x8d, 0x00, 0x03, 0x8d, 0x01, 0x03, 0x20, 0xca, 0x33, 0x20, 0xe2, 0x0f, + 0xa9, 0x04, 0x85, 0x28, 0xad, 0xca, 0x42, 0xf0, 0x04, 0xa9, 0x09, 0x85, 0x28, 0xa2, 0x02, 0xbd, + 0x8b, 0x43, 0x9d, 0x92, 0x43, 0x9d, 0x95, 0x43, 0xca, 0x10, 0xf4, 0xa2, 0x1b, 0xb5, 0x28, 0x9d, + 0x9f, 0x43, 0xca, 0x10, 0xf8, 0x60, 0xa9, 0x01, 0xa2, 0x60, 0x9d, 0x40, 0x03, 0xca, 0x10, 0xfa, + 0x60, 0xa9, 0x40, 0x85, 0x04, 0xa9, 0x03, 0x85, 0x05, 0xa9, 0x00, 0x85, 0x4e, 0x0a, 0xaa, 0x20, + 0x07, 0x10, 0xe6, 0x4e, 0xa5, 0x4e, 0xc9, 0x14, 0x90, 0xf3, 0x60, 0xbd, 0xe2, 0x4c, 0x85, 0x0a, + 0xbd, 0xe3, 0x4c, 0x85, 0x0b, 0xa0, 0x00, 0xb1, 0x0a, 0x30, 0x13, 0x48, 0xb1, 0x04, 0xaa, 0x68, + 0x91, 0x04, 0x8a, 0x91, 0x0a, 0x20, 0x7c, 0x3a, 0x20, 0x43, 0x0b, 0x4c, 0x13, 0x10, 0x60, 0xa2, + 0x13, 0xbd, 0x53, 0x01, 0x9d, 0xb4, 0x47, 0xca, 0x10, 0xf7, 0xa9, 0xfe, 0x85, 0x82, 0x60, 0xa2, + 0x13, 0xbd, 0xb4, 0x47, 0x9d, 0x53, 0x01, 0xca, 0x10, 0xf7, 0xa9, 0x00, 0x85, 0x82, 0x60, 0xa2, + 0x08, 0xbd, 0x0f, 0x01, 0xf0, 0x5f, 0x8a, 0x48, 0xbd, 0x19, 0x01, 0x9d, 0x2d, 0x01, 0x85, 0x70, + 0xbd, 0x23, 0x01, 0x85, 0x6f, 0xbd, 0x0f, 0x01, 0x30, 0x29, 0xde, 0x19, 0x01, 0xbd, 0x19, 0x01, + 0xdd, 0x37, 0x01, 0xb0, 0x06, 0xbd, 0x41, 0x01, 0x9d, 0x19, 0x01, 0x85, 0x6e, 0xa5, 0x6f, 0xc9, + 0x05, 0xf0, 0x0a, 0xc9, 0x0a, 0xf0, 0x06, 0x20, 0x4e, 0x40, 0x4c, 0xaf, 0x10, 0x20, 0x63, 0x40, + 0x4c, 0xaf, 0x10, 0xfe, 0x19, 0x01, 0xbd, 0x19, 0x01, 0xdd, 0x41, 0x01, 0x90, 0x06, 0xbd, 0x37, + 0x01, 0x9d, 0x19, 0x01, 0x85, 0x6e, 0xa5, 0x6f, 0xc9, 0x05, 0xf0, 0xe1, 0xc9, 0x0a, 0xf0, 0xdd, + 0x20, 0x4e, 0x40, 0x68, 0xaa, 0xca, 0x10, 0x99, 0x60, 0x48, 0x8a, 0x48, 0x98, 0x48, 0xa0, 0x82, + 0x20, 0x09, 0x25, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x60, 0xa2, 0x13, 0xbd, 0xce, 0x4c, 0x95, 0x2a, + 0xca, 0x10, 0xf8, 0x60, 0xa5, 0x88, 0xc9, 0x20, 0xb0, 0x04, 0xc9, 0x19, 0xb8, 0x60, 0xa9, 0xff, + 0x2c, 0xdf, 0x10, 0x60, 0xa5, 0x03, 0x18, 0x69, 0x26, 0xaa, 0xa9, 0x01, 0x9d, 0x00, 0x03, 0xca, + 0xca, 0x10, 0xf9, 0xa6, 0x03, 0xa9, 0x00, 0x9d, 0x00, 0x03, 0x60, 0x60, 0xf7, 0x10, 0xca, 0xff, + 0xfa, 0x9d, 0x11, 0x17, 0xbd, 0x05, 0xa2, 0x48, 0x8a, 0x48, 0x98, 0x48, 0xba, 0xbd, 0x04, 0x01, + 0x29, 0x00, 0xf0, 0x03, 0x6c, 0x00, 0xde, 0x6c, 0x08, 0x04, 0x40, 0x6c, 0xfc, 0xff, 0x6c, 0x00, + 0x00, 0x48, 0x8a, 0x48, 0xa9, 0x00, 0xa2, 0x7f, 0x9d, 0x80, 0x81, 0x9d, 0xc0, 0x82, 0xca, 0x10, + 0xf7, 0x68, 0xaa, 0x68, 0x60, 0x48, 0x8a, 0x48, 0xa9, 0x00, 0xa2, 0x7f, 0x9d, 0x00, 0x82, 0x9d, + 0x40, 0x83, 0xca, 0x10, 0xf7, 0x68, 0xaa, 0x68, 0x60, 0x48, 0x8a, 0x48, 0xa9, 0x00, 0xa2, 0x3f, + 0x9d, 0x80, 0x82, 0x9d, 0xc0, 0x83, 0xca, 0x10, 0xf7, 0x68, 0xaa, 0x68, 0x60, 0xad, 0x04, 0x01, + 0xd0, 0x03, 0xa9, 0x01, 0x60, 0xe6, 0x16, 0xb1, 0x16, 0x60, 0xff, 0x00, 0xe0, 0x60, 0xe0, 0xc0, + 0xe0, 0x20, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0x40, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0xc0, + 0xe0, 0x20, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0x40, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0xc0, + 0xe0, 0x20, 0xe0, 0x80, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, + 0xe0, 0x00, 0xcf, 0x03, 0xe0, 0x40, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0xc0, 0xe0, 0x00, + 0xe0, 0x20, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0x40, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0xc0, + 0xe0, 0x20, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0x40, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0x00, + 0xe0, 0x60, 0xe0, 0xc0, 0xe0, 0x20, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0xa0, 0xe0, 0x40, 0xe0, 0xa0, + 0xe0, 0xa0, 0xe0, 0xa0, 0xe0, 0xa0, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0xc0, 0xe0, 0x20, + 0xe0, 0xa0, 0xe0, 0xa0, 0xe0, 0xa0, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, + 0xe0, 0x40, 0xe0, 0x40, 0xe0, 0xa0, 0xe0, 0xa0, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x80, 0xe0, 0x80, + 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, + 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x60, 0xe0, 0x60, 0xe0, 0xc0, 0xe0, 0xc0, 0xe0, 0x20, + 0xe0, 0x20, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xe0, 0x80, 0xcf, 0x03, 0xe0, 0x90, 0xca, 0x90, + 0xca, 0x90, 0xca, 0x91, 0xca, 0x91, 0xca, 0x91, 0xca, 0x92, 0xca, 0x92, 0xca, 0x93, 0xca, 0x93, + 0xca, 0x93, 0xca, 0x94, 0xca, 0x94, 0xca, 0x94, 0xca, 0x95, 0xca, 0x95, 0xca, 0x96, 0xca, 0x96, + 0xca, 0x96, 0xca, 0x97, 0xca, 0x97, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, 0xca, 0x90, + 0xca, 0x90, 0xca, 0x90, 0xca, 0x97, 0xca, 0x98, 0xca, 0x98, 0xca, 0x99, 0xca, 0x99, 0xca, 0x99, + 0xca, 0x96, 0xca, 0x9a, 0xca, 0x9a, 0xca, 0x9a, 0xca, 0x9b, 0xca, 0x9b, 0xca, 0x9c, 0xca, 0x9c, + 0xca, 0x9c, 0xca, 0x9d, 0xca, 0x9d, 0xca, 0x9d, 0xca, 0x9e, 0xca, 0x9e, 0xca, 0x9f, 0xca, 0x9f, + 0xca, 0xc0, 0xca, 0xc0, 0xca, 0xc0, 0xca, 0xc1, 0xca, 0xc1, 0xca, 0xc1, 0xca, 0x9b, 0xca, 0xc2, + 0xca, 0xc2, 0xca, 0x9b, 0xca, 0x9b, 0xca, 0x9b, 0xca, 0x9b, 0xca, 0xc3, 0xca, 0xc3, 0xca, 0xc3, + 0xca, 0xc4, 0xca, 0x9b, 0xca, 0x9b, 0xca, 0x9b, 0xca, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, + 0x00, 0xc4, 0x00, 0xc5, 0x00, 0xc8, 0x00, 0xc5, 0x00, 0xc8, 0x00, 0xc6, 0x00, 0xc9, 0x00, 0xc4, + 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, + 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc6, 0x00, 0xc9, 0x00, 0xc6, 0x00, 0xc9, + 0x00, 0xc7, 0x00, 0xca, 0x00, 0xc7, 0x00, 0xca, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc7, 0x00, 0x68, + 0x78, 0x78, 0x00, 0x70, 0x18, 0x30, 0x50, 0x00, 0x00, 0x08, 0x00, 0x04, 0x12, 0xcf, 0x03, 0x08, + 0x12, 0x00, 0x00, 0xcf, 0x03, 0xa0, 0x00, 0x70, 0x0c, 0x30, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x04, + 0xcf, 0x05, 0x08, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x80, 0x80, 0x02, 0x02, 0x00, 0x00, 0x02, + 0x00, 0x80, 0x00, 0x02, 0x00, 0x80, 0xbf, 0x03, 0xf0, 0xee, 0xee, 0x00, 0xc0, 0xc0, 0xa0, 0xb0, + 0x00, 0x00, 0x30, 0x00, 0x20, 0xc0, 0x20, 0x30, 0x20, 0xc0, 0x00, 0x00, 0xcf, 0x03, 0xee, 0x00, + 0xee, 0x60, 0xee, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x20, 0xee, 0x30, 0x50, 0x30, 0xee, 0x00, 0x00, + 0x80, 0x80, 0x00, 0x00, 0x80, 0x02, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0xbf, 0x03, 0x02, + 0xbf, 0x03, 0x01, 0x01, 0x00, 0xa2, 0xff, 0x8e, 0x09, 0x01, 0xe8, 0x8e, 0x0c, 0x01, 0x8e, 0x02, + 0xdc, 0x8e, 0x03, 0xdc, 0xa9, 0x7f, 0x8d, 0x0d, 0xdc, 0x8d, 0x0d, 0xdd, 0x60, 0xad, 0x0c, 0x01, + 0xd0, 0x0a, 0xad, 0x00, 0xdc, 0x2d, 0x01, 0xdc, 0x49, 0xff, 0xf0, 0x01, 0x60, 0xa2, 0xff, 0x8e, + 0x03, 0xdc, 0x8e, 0x0a, 0x01, 0xe8, 0x8e, 0x0b, 0x01, 0x8e, 0x01, 0xdc, 0xad, 0x00, 0xdc, 0xc9, + 0xff, 0xf0, 0x31, 0x8d, 0x0d, 0x01, 0x8e, 0x03, 0xdc, 0xca, 0x8e, 0x02, 0xdc, 0xa9, 0xfd, 0x8d, + 0x00, 0xdc, 0xad, 0x01, 0xdc, 0x10, 0x0c, 0xa9, 0xcf, 0x01, 0xbf, 0x8d, 0x00, 0xdc, 0xad, 0x01, + 0xdc, 0x29, 0x10, 0xd0, 0x03, 0xee, 0x0b, 0x01, 0xad, 0x0e, 0x01, 0xd0, 0x06, 0x20, 0x2c, 0x14, + 0x4c, 0xf5, 0x13, 0x20, 0x62, 0x14, 0xa9, 0x00, 0x8d, 0x02, 0xdc, 0x8d, 0x03, 0xdc, 0xad, 0x00, + 0xdc, 0x2d, 0x01, 0xdc, 0x49, 0xff, 0xf0, 0x01, 0x60, 0xad, 0x09, 0x01, 0x29, 0x7f, 0xcd, 0x0a, + 0x01, 0xf0, 0x19, 0xad, 0x0b, 0x01, 0xf0, 0x02, 0xa9, 0x80, 0x0d, 0x0a, 0x01, 0x8d, 0x09, 0x01, + 0xad, 0x0a, 0x01, 0xc9, 0xff, 0xf0, 0x05, 0xa9, 0x01, 0x8d, 0x0c, 0x01, 0x60, 0xa2, 0x07, 0x0e, + 0x0d, 0x01, 0x90, 0x07, 0xca, 0x10, 0xf8, 0x8e, 0x0a, 0x01, 0x60, 0xa0, 0x07, 0xbd, 0x94, 0x14, + 0x8d, 0x00, 0xdc, 0xad, 0x01, 0xdc, 0x19, 0x94, 0x14, 0x49, 0xff, 0xd0, 0x05, 0x88, 0x10, 0xed, + 0x30, 0xe2, 0x98, 0x18, 0x7d, 0x9c, 0x14, 0xc9, 0x0f, 0xf0, 0xf2, 0xc9, 0x34, 0xf0, 0xee, 0x8d, + 0x0a, 0x01, 0x60, 0xa0, 0x00, 0xb9, 0x88, 0x14, 0x8d, 0x00, 0xdc, 0xad, 0x01, 0xdc, 0xc8, 0xd9, + 0x88, 0x14, 0xf0, 0x0b, 0xc8, 0xc0, 0x08, 0xd0, 0xec, 0xa9, 0x6f, 0x8d, 0x0a, 0x01, 0x60, 0x98, + 0x4a, 0xa8, 0xb9, 0x90, 0x14, 0x8d, 0x0a, 0x01, 0x60, 0xfe, 0xef, 0xfd, 0xdf, 0x7f, 0xef, 0xf7, + 0x7f, 0x04, 0x0d, 0x3c, 0x1f, 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xcf, 0x01, 0xbf, 0x7f, 0x00, + 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0xa2, 0x6d, 0xa9, 0x6e, 0xcd, 0x12, 0xd0, 0xf0, 0x0a, + 0xec, 0x12, 0xd0, 0xd0, 0xf6, 0xa2, 0x0a, 0xca, 0xd0, 0xfd, 0xa9, 0xfb, 0x8d, 0x22, 0xd0, 0x20, + 0x26, 0x15, 0x20, 0x26, 0x15, 0xa9, 0xfc, 0x8d, 0x22, 0xd0, 0x20, 0x26, 0x15, 0x20, 0x26, 0x15, + 0xa9, 0xff, 0x8d, 0x22, 0xd0, 0x20, 0x26, 0x15, 0x20, 0x26, 0x15, 0xa9, 0xf1, 0x8d, 0x22, 0xd0, + 0x20, 0x26, 0x15, 0xa9, 0xff, 0x8d, 0x22, 0xd0, 0x20, 0x26, 0x15, 0x20, 0x26, 0x15, 0xa9, 0xfc, + 0x8d, 0x22, 0xd0, 0x20, 0x26, 0x15, 0x20, 0x26, 0x15, 0xa9, 0xfb, 0x8d, 0x22, 0xd0, 0xa9, 0x30, + 0x8d, 0x18, 0xd0, 0xa9, 0x18, 0x8d, 0x16, 0xd0, 0xa9, 0x01, 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, + 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0x63, 0x8d, 0x12, 0xd0, 0xa5, 0x48, 0xf0, + 0x02, 0xc6, 0x48, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa2, 0x0a, 0xca, 0xd0, 0xfd, 0x60, 0xa5, + 0x48, 0xf0, 0x02, 0xc6, 0x48, 0xa5, 0x49, 0xf0, 0x0c, 0xc6, 0x49, 0xd0, 0x08, 0xa5, 0x4a, 0xf0, + 0x04, 0xc6, 0x4a, 0xc6, 0x49, 0xa9, 0x30, 0x8d, 0x18, 0xd0, 0xa9, 0x18, 0x8d, 0x16, 0xd0, 0x20, + 0x06, 0xe0, 0xa9, 0x74, 0x8d, 0x08, 0x04, 0xa9, 0x15, 0x8d, 0x09, 0x04, 0xa9, 0x01, 0x8d, 0x1a, + 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0x82, 0x8d, 0x12, + 0xd0, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa2, 0x04, 0xca, 0xd0, 0xfd, 0xa9, 0x32, 0x8d, 0x18, + 0xd0, 0xa9, 0x16, 0x8d, 0x16, 0xd0, 0xa9, 0x2c, 0x8d, 0x08, 0x04, 0xa9, 0x15, 0x8d, 0x09, 0x04, + 0xa9, 0x01, 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, + 0xa9, 0xfd, 0x8d, 0x12, 0xd0, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xd8, 0xa9, 0x00, 0x85, 0x44, + 0xa6, 0x29, 0x20, 0x03, 0xeb, 0x20, 0x73, 0xef, 0x20, 0x73, 0xf0, 0xe6, 0x16, 0x20, 0xe2, 0x25, + 0xad, 0xec, 0x4e, 0xd0, 0x0b, 0xa9, 0x02, 0x8d, 0x45, 0x4f, 0x8d, 0x46, 0x4f, 0x8d, 0x47, 0x4f, + 0xce, 0xec, 0x4e, 0xa5, 0xf2, 0xc9, 0x38, 0xd0, 0x04, 0xa9, 0xa0, 0xd0, 0x12, 0xc9, 0x3a, 0xd0, + 0x04, 0xa9, 0xa8, 0xd0, 0x0a, 0xc9, 0x3c, 0xd0, 0x04, 0xa9, 0xb0, 0xd0, 0x02, 0xa9, 0xb8, 0x85, + 0x7c, 0xad, 0x83, 0x13, 0xf0, 0x04, 0xa9, 0x00, 0xf0, 0x02, 0xa9, 0x2c, 0x8d, 0x2a, 0x8c, 0xad, + 0xca, 0x42, 0xd0, 0x05, 0xad, 0xc9, 0x42, 0xf0, 0x0b, 0xad, 0x84, 0x13, 0xf0, 0x04, 0xa9, 0x00, + 0xf0, 0x02, 0xa9, 0x2c, 0x8d, 0x4d, 0x8c, 0xad, 0x04, 0x01, 0xf0, 0x0f, 0xad, 0x05, 0x01, 0x30, + 0x0a, 0xe6, 0x87, 0xd0, 0x06, 0xa5, 0x88, 0x30, 0x02, 0xe6, 0x88, 0xe6, 0x7f, 0xd0, 0x19, 0xa5, + 0x82, 0x30, 0x0f, 0xe6, 0x82, 0x10, 0x0b, 0xa9, 0x86, 0x8d, 0x05, 0x01, 0x20, 0x42, 0x1a, 0x20, + 0x2b, 0x10, 0xe6, 0x80, 0xd0, 0x02, 0xe6, 0x81, 0xa9, 0xfe, 0xa2, 0x00, 0xa4, 0x82, 0x10, 0x06, + 0x85, 0x82, 0xa6, 0x80, 0xa9, 0xf7, 0x85, 0x84, 0x86, 0x83, 0xa5, 0x82, 0x10, 0x0f, 0xa2, 0x13, + 0xbd, 0xb4, 0x47, 0x45, 0x83, 0x25, 0x84, 0x9d, 0x53, 0x01, 0xca, 0x10, 0xf3, 0xa2, 0x00, 0xb5, + 0x00, 0xc9, 0xef, 0xd0, 0xb6, 0xa5, 0x48, 0xf0, 0x02, 0xc6, 0x48, 0xa5, 0x49, 0xf0, 0x05, 0xc6, + 0x49, 0x4c, 0x89, 0x16, 0xa5, 0x4a, 0xf0, 0x04, 0xc6, 0x4a, 0xc6, 0x49, 0xad, 0x02, 0xdc, 0x8d, + 0x05, 0x20, 0xad, 0x03, 0xdc, 0x8d, 0x06, 0x20, 0xa9, 0x00, 0x8d, 0x02, 0xdc, 0x8d, 0x03, 0xdc, + 0xad, 0x04, 0x01, 0xf0, 0x61, 0xad, 0x01, 0xdc, 0xa6, 0x03, 0xf0, 0x03, 0xad, 0x00, 0xdc, 0x29, + 0x0f, 0xbc, 0x83, 0x13, 0xd0, 0x0a, 0x48, 0x29, 0x03, 0xa8, 0x68, 0x4a, 0x4a, 0x19, 0x85, 0x4a, + 0x85, 0x98, 0xa5, 0x03, 0x49, 0x01, 0xaa, 0xbd, 0x00, 0xdc, 0xcf, 0x04, 0x4a, 0x29, 0x01, 0x85, + 0x9b, 0xad, 0xca, 0x42, 0xf0, 0x2f, 0xa5, 0x03, 0x49, 0x01, 0xaa, 0x08, 0xad, 0x01, 0xdc, 0x28, + 0xf0, 0x03, 0xad, 0x00, 0xdc, 0x29, 0x0f, 0xbc, 0x83, 0x13, 0xd0, 0x0a, 0x48, 0x29, 0x03, 0xa8, + 0x68, 0x4a, 0x4a, 0x19, 0x85, 0x4a, 0x85, 0x99, 0xa6, 0x03, 0xbd, 0x00, 0xdc, 0xcf, 0x04, 0x4a, + 0x29, 0x01, 0x85, 0x9c, 0xa5, 0x02, 0xc9, 0x32, 0xf0, 0x0e, 0x85, 0x05, 0x91, 0x04, 0x88, 0xd0, + 0xfb, 0xc6, 0x05, 0xce, 0x39, 0x05, 0xd0, 0xf4, 0xad, 0x05, 0x20, 0x8d, 0x02, 0xdc, 0xad, 0x06, + 0x20, 0x8d, 0x03, 0xdc, 0xad, 0x04, 0x01, 0xf0, 0x13, 0xad, 0x05, 0x01, 0x30, 0x12, 0xa5, 0x98, + 0x05, 0x99, 0xc9, 0x0f, 0xd0, 0x06, 0xa5, 0x9b, 0x25, 0x9c, 0xd0, 0x04, 0xa9, 0x00, 0x85, 0x82, + 0xa5, 0x7a, 0xd0, 0x5a, 0xad, 0x05, 0x01, 0x30, 0x55, 0xad, 0x04, 0x01, 0xf0, 0x50, 0xad, 0xca, + 0x42, 0xf0, 0x4b, 0xa5, 0x99, 0xc9, 0x0f, 0xd0, 0x3f, 0xa5, 0x9c, 0xf0, 0x3b, 0xe6, 0x89, 0xd0, + 0x3d, 0xe6, 0x8a, 0xa5, 0x8a, 0xc9, 0x07, 0x90, 0x35, 0xa9, 0x00, 0x8d, 0xca, 0x42, 0xa9, 0x20, + 0x85, 0x88, 0x20, 0x4f, 0x42, 0xa5, 0x28, 0xc9, 0x05, 0x90, 0x05, 0xe9, 0x05, 0x4c, 0x81, 0x17, + 0xa9, 0x00, 0x85, 0x28, 0xad, 0x9f, 0x43, 0xc9, 0x05, 0x90, 0x05, 0xe9, 0x05, 0x4c, 0x91, 0x17, + 0xa9, 0x00, 0x8d, 0x9f, 0x43, 0x20, 0xed, 0x1a, 0xa9, 0x00, 0x85, 0x89, 0x85, 0x8a, 0x60, 0x20, + 0x7c, 0x2d, 0xad, 0x04, 0x01, 0xd0, 0x16, 0xa0, 0x00, 0xb1, 0x1d, 0x29, 0x0f, 0x85, 0x98, 0xb1, + 0x1d, 0xcf, 0x04, 0x4a, 0x85, 0x9b, 0xe6, 0x1d, 0xd0, 0x02, 0xe6, 0x1e, 0xa2, 0x02, 0xb5, 0x95, + 0x29, 0x01, 0xf0, 0x1a, 0xa5, 0x29, 0xc9, 0x13, 0xd0, 0x0e, 0xa5, 0x88, 0xc9, 0x02, 0xb0, 0x04, + 0xa9, 0x0e, 0xd0, 0x02, 0xa9, 0x0f, 0x85, 0x98, 0x20, 0x5b, 0x1c, 0x20, 0x80, 0x27, 0xca, 0x10, + 0xdd, 0x60, 0x48, 0x20, 0x67, 0x1a, 0x68, 0x0a, 0xaa, 0x84, 0x06, 0xbd, 0xbe, 0x43, 0x38, 0xe5, + 0x06, 0x85, 0x06, 0xbd, 0xcf, 0x01, 0xbf, 0x43, 0xe9, 0x00, 0x85, 0x07, 0xb1, 0x06, 0x38, 0xe9, + 0x20, 0xc9, 0x80, 0xf0, 0x14, 0x29, 0x7f, 0x91, 0x04, 0x09, 0x80, 0x91, 0x08, 0xc8, 0xd0, 0xec, + 0xe6, 0x05, 0xe6, 0x07, 0xe6, 0x09, 0x4c, 0xfa, 0x17, 0x60, 0x20, 0x5e, 0x25, 0xad, 0x04, 0x01, + 0xd0, 0x06, 0x8d, 0xbb, 0x09, 0x4c, 0x84, 0x05, 0xc6, 0x28, 0x30, 0x64, 0xa9, 0x24, 0x85, 0xd1, + 0x85, 0xd2, 0x85, 0xd3, 0xa9, 0x00, 0x85, 0x8b, 0x85, 0x8c, 0x20, 0x3f, 0x42, 0xad, 0xc9, 0x42, + 0xf0, 0x0b, 0xad, 0x9f, 0x43, 0x30, 0x06, 0xa5, 0x03, 0x49, 0x01, 0x85, 0x03, 0x20, 0xa7, 0x0e, + 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xad, 0xc9, 0x42, 0xf0, 0x2b, 0xad, 0x9f, 0x43, + 0x30, 0x26, 0xa2, 0x1b, 0xb5, 0x28, 0xbc, 0x9f, 0x43, 0x9d, 0x9f, 0x43, 0x98, 0x95, 0x28, 0xca, + 0x10, 0xf2, 0x20, 0xed, 0x0f, 0xa2, 0x02, 0xbd, 0x92, 0x43, 0x48, 0xbd, 0x95, 0x43, 0x9d, 0x92, + 0x43, 0x68, 0x9d, 0x95, 0x43, 0xca, 0x10, 0xef, 0x20, 0x63, 0x07, 0xa6, 0x29, 0x4c, 0x17, 0x32, + 0x20, 0x3f, 0x42, 0x20, 0x56, 0x1a, 0x78, 0xad, 0x11, 0xd0, 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xa9, + 0x00, 0x8d, 0x15, 0xd0, 0xa9, 0x2c, 0x8d, 0x08, 0x04, 0xa9, 0x15, 0x8d, 0x09, 0x04, 0xa9, 0x01, + 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0xfb, + 0x8d, 0x12, 0xd0, 0xa9, 0x06, 0x8d, 0x20, 0xd0, 0x8d, 0x21, 0xd0, 0xa9, 0x0f, 0x8d, 0x22, 0xd0, + 0x8d, 0x23, 0xd0, 0xa2, 0x08, 0x8e, 0x16, 0xd0, 0x20, 0xa9, 0x09, 0xa2, 0x00, 0xa9, 0xf1, 0x9d, + 0xe0, 0xd9, 0x9d, 0xe0, 0xda, 0xa9, 0xdc, 0x9d, 0x00, 0x8c, 0x9d, 0x90, 0x8c, 0xe8, 0xd0, 0xed, + 0xa2, 0x11, 0xbd, 0xcd, 0x42, 0x09, 0x80, 0x9d, 0x33, 0x8c, 0xbd, 0xdf, 0x42, 0x09, 0x80, 0x9d, + 0x5b, 0x8c, 0xca, 0x10, 0xed, 0xa5, 0x03, 0x0a, 0xaa, 0xa0, 0x00, 0xbd, 0x7d, 0x4a, 0x99, 0x6b, + 0x4a, 0xbd, 0x81, 0x4a, 0x99, 0x7b, 0x4a, 0x88, 0x10, 0xf1, 0xa2, 0x0f, 0xbd, 0x5d, 0x4a, 0x09, + 0x80, 0x9d, 0xd4, 0x8c, 0xbd, 0x6d, 0x4a, 0x09, 0x80, 0x9d, 0xfc, 0x8c, 0xca, 0x10, 0xed, 0x20, + 0xdc, 0x32, 0xa9, 0x4e, 0x85, 0x04, 0xa9, 0x76, 0x85, 0x06, 0xa9, 0x8d, 0x85, 0x05, 0x85, 0x07, + 0xa0, 0x00, 0xa2, 0x01, 0xbd, 0x9b, 0x43, 0xcf, 0x04, 0x4a, 0x20, 0x84, 0x19, 0xc8, 0xbd, 0x9b, + 0x43, 0x29, 0x0f, 0x20, 0x84, 0x19, 0xc8, 0xe8, 0xe0, 0x04, 0x90, 0xe7, 0xad, 0x11, 0xd0, 0x09, + 0x10, 0x8d, 0x11, 0xd0, 0x58, 0xa9, 0xfe, 0x85, 0x48, 0xa5, 0x48, 0xd0, 0xfc, 0xad, 0xc9, 0x42, + 0xf0, 0x08, 0xad, 0x9f, 0x43, 0x30, 0x03, 0x4c, 0x2a, 0x18, 0xa9, 0x40, 0x85, 0x48, 0xa5, 0x48, + 0xd0, 0xfc, 0x4c, 0x84, 0x05, 0x29, 0x0f, 0x0a, 0x0a, 0x69, 0x34, 0x09, 0x80, 0x91, 0x04, 0x18, + 0x69, 0x01, 0x91, 0x06, 0x18, 0x69, 0x01, 0xc8, 0x91, 0x04, 0x18, 0x69, 0x01, 0x91, 0x06, 0x60, + 0xa9, 0x00, 0x8d, 0xbb, 0x43, 0x18, 0x2e, 0xbc, 0x43, 0x2e, 0xbb, 0x43, 0x2e, 0xbc, 0x43, 0x2e, + 0xbb, 0x43, 0x2e, 0xbc, 0x43, 0x2e, 0xbb, 0x43, 0x60, 0xad, 0x04, 0x01, 0xd0, 0x2e, 0xad, 0x01, + 0xdc, 0x29, 0x10, 0xf0, 0x19, 0xa9, 0x01, 0x8d, 0x0e, 0x01, 0x20, 0x9e, 0x13, 0xad, 0x0c, 0x01, + 0xf0, 0x1a, 0xa9, 0x00, 0x8d, 0x0c, 0x01, 0xad, 0x09, 0x01, 0xc9, 0x04, 0xd0, 0x0e, 0x20, 0x4b, + 0x09, 0xa9, 0x06, 0x85, 0x48, 0xa5, 0x48, 0xd0, 0xfc, 0x4c, 0x0f, 0x05, 0x60, 0xad, 0x05, 0x01, + 0x48, 0x29, 0x80, 0x8d, 0x05, 0x01, 0x68, 0x29, 0x06, 0xf0, 0x0d, 0x38, 0xe9, 0x01, 0x0d, 0x05, + 0x01, 0x8d, 0x05, 0x01, 0xa9, 0xff, 0x85, 0x4b, 0x60, 0xad, 0x05, 0x01, 0x29, 0x06, 0xd0, 0x42, + 0xad, 0x05, 0x01, 0x10, 0x3d, 0xa5, 0x03, 0x49, 0x01, 0x29, 0x01, 0xaa, 0xbd, 0x00, 0xdc, 0x29, + 0x10, 0xd0, 0x2f, 0xad, 0x05, 0x01, 0x49, 0x80, 0x09, 0x06, 0x8d, 0x05, 0x01, 0x30, 0x14, 0x20, + 0xb6, 0x1b, 0xa5, 0x82, 0x10, 0x03, 0x20, 0x3b, 0x10, 0xa9, 0x00, 0x85, 0x82, 0x20, 0xbb, 0x1a, + 0x4c, 0xc2, 0x31, 0xa9, 0x11, 0x8d, 0xbd, 0x43, 0x20, 0x96, 0x1a, 0xa9, 0x51, 0x85, 0x82, 0x4c, + 0xa4, 0x1b, 0x60, 0xa2, 0x02, 0xd0, 0x05, 0xa2, 0x00, 0x8e, 0x00, 0x01, 0x20, 0x67, 0x1a, 0x20, + 0x8a, 0x1a, 0xe8, 0xe0, 0x0d, 0x90, 0xf5, 0x60, 0xbd, 0x38, 0x43, 0x85, 0x04, 0xbd, 0x4c, 0x43, + 0x85, 0x05, 0xbd, 0x60, 0x43, 0x85, 0x08, 0xbd, 0x74, 0x43, 0x85, 0x09, 0xad, 0x00, 0x01, 0xd0, + 0x01, 0x60, 0xa9, 0x00, 0x85, 0x08, 0xa9, 0xde, 0x85, 0x09, 0x60, 0xa0, 0x27, 0xa9, 0x00, 0x91, + 0x04, 0x91, 0x08, 0x88, 0x10, 0xf9, 0x60, 0xce, 0xbd, 0x43, 0xd0, 0x0d, 0xa9, 0x20, 0x8d, 0xbd, + 0x43, 0xa9, 0x00, 0xaa, 0xa0, 0x2c, 0x4c, 0xe2, 0x17, 0xad, 0xbd, 0x43, 0xc9, 0x10, 0xd0, 0x0b, + 0xa6, 0x03, 0xe8, 0x8a, 0xa2, 0x00, 0xa0, 0x2c, 0x4c, 0xe2, 0x17, 0x60, 0xa9, 0x03, 0x8d, 0x00, + 0x01, 0xa2, 0x00, 0xa0, 0x38, 0x4c, 0xad, 0x1b, 0xa9, 0x05, 0xa2, 0x00, 0xa0, 0x44, 0x4c, 0xe2, + 0x17, 0x60, 0xa5, 0xe6, 0xa0, 0x43, 0x20, 0x84, 0x1b, 0xa5, 0xe9, 0xa0, 0x45, 0x20, 0x84, 0x1b, + 0xa5, 0x5a, 0xa0, 0x47, 0x20, 0x84, 0x1b, 0xa5, 0x5b, 0xa0, 0x4e, 0x4c, 0x84, 0x1b, 0xa9, 0x00, + 0x8d, 0x9b, 0x43, 0xa5, 0x28, 0x8d, 0x98, 0x43, 0x38, 0xe9, 0x0a, 0x90, 0x06, 0xee, 0x9b, 0x43, + 0x4c, 0xf7, 0x1a, 0x18, 0x69, 0x0a, 0x8d, 0x98, 0x43, 0xad, 0x9b, 0x43, 0xcf, 0x04, 0x0a, 0x0d, + 0x98, 0x43, 0xa0, 0x4a, 0x4c, 0x84, 0x1b, 0x48, 0x20, 0x0e, 0x32, 0x09, 0x10, 0x99, 0x00, 0x8c, + 0x68, 0x29, 0x0f, 0x09, 0x10, 0x99, 0x01, 0x8c, 0x60, 0xa9, 0x01, 0x8d, 0x0e, 0x01, 0x20, 0x9e, + 0x13, 0xad, 0x0c, 0x01, 0xd0, 0x01, 0x60, 0xa9, 0x00, 0x8d, 0x0c, 0x01, 0xad, 0x09, 0x01, 0x29, + 0x7f, 0x85, 0x4b, 0xc9, 0x04, 0xd0, 0x03, 0x4c, 0x0f, 0x05, 0xc9, 0x0d, 0xd0, 0x0e, 0xad, 0x85, + 0x13, 0x49, 0x01, 0x8d, 0x85, 0x13, 0xa9, 0x00, 0x8d, 0xbb, 0x09, 0x60, 0xc9, 0x3c, 0xf0, 0x05, + 0xc9, 0x1f, 0xf0, 0x04, 0x60, 0x4c, 0x22, 0x1a, 0xa9, 0x20, 0xcd, 0x00, 0x8c, 0xd0, 0x0c, 0xa2, + 0x27, 0xbd, 0x07, 0x47, 0x9d, 0x00, 0x8c, 0xca, 0x10, 0xf7, 0x60, 0xa2, 0x27, 0x9d, 0x00, 0x8c, + 0xca, 0x10, 0xfa, 0x60, 0x48, 0x20, 0x0e, 0x32, 0x09, 0x10, 0xc9, 0x1a, 0x90, 0x03, 0x18, 0x69, + 0x07, 0x99, 0x00, 0x8c, 0x68, 0x29, 0x0f, 0x09, 0x10, 0xc9, 0x1a, 0x90, 0x03, 0x18, 0x69, 0x07, + 0x99, 0x01, 0x8c, 0x60, 0xa9, 0x0b, 0x8d, 0x00, 0x01, 0xa2, 0x01, 0xa0, 0x0f, 0x20, 0xe2, 0x17, + 0xa9, 0x00, 0x8d, 0x00, 0x01, 0x60, 0xa9, 0x0c, 0x8d, 0x00, 0x01, 0xa2, 0x01, 0xa0, 0x0f, 0x4c, + 0xad, 0x1b, 0xa9, 0x03, 0x85, 0x48, 0x20, 0xb8, 0x19, 0xad, 0x04, 0x01, 0xf0, 0x11, 0x20, 0x29, + 0x1b, 0x20, 0xec, 0x19, 0x20, 0x08, 0x1a, 0xad, 0x05, 0x01, 0x10, 0x03, 0x4c, 0x32, 0x1c, 0xa5, + 0xd2, 0x29, 0xcf, 0x01, 0xbf, 0x85, 0xd2, 0xa5, 0xd3, 0x29, 0x87, 0x85, 0xd3, 0x20, 0x96, 0x1a, + 0x20, 0xbc, 0x40, 0xa5, 0x7a, 0xd0, 0x09, 0x20, 0xa4, 0x0d, 0x20, 0x0f, 0x0d, 0x20, 0xb1, 0x0d, + 0xa5, 0x7b, 0xd0, 0x06, 0xa9, 0x01, 0x85, 0x7b, 0xd0, 0x02, 0xc6, 0x7b, 0x20, 0x6f, 0x3a, 0x20, + 0x12, 0x52, 0x20, 0x39, 0x2e, 0xad, 0x7a, 0xcf, 0x01, 0xcf, 0x4d, 0x9a, 0xcf, 0x01, 0xcf, 0x8d, + 0x07, 0x20, 0xa6, 0x29, 0xbd, 0x9e, 0x4c, 0xd0, 0x03, 0x20, 0xc3, 0x29, 0x20, 0x84, 0x31, 0x20, + 0x9e, 0x17, 0x20, 0x84, 0x25, 0x20, 0x55, 0x2d, 0xa5, 0x48, 0xd0, 0xfc, 0x4c, 0xc2, 0x1b, 0xb5, + 0x9e, 0x38, 0xe9, 0x0c, 0x4a, 0x4a, 0x95, 0xe6, 0xa5, 0x29, 0xc9, 0x0d, 0xd0, 0x07, 0xb5, 0xa1, + 0x18, 0x69, 0x04, 0xd0, 0x02, 0xb5, 0xa1, 0x38, 0xe9, 0x0c, 0xcf, 0x04, 0x4a, 0x95, 0xe9, 0x60, + 0xa9, 0x08, 0x85, 0x86, 0xbd, 0x06, 0x01, 0xf0, 0x04, 0xde, 0x06, 0x01, 0x60, 0x9d, 0xdb, 0x4f, + 0xbd, 0x57, 0x4f, 0x1d, 0x5a, 0x4f, 0x1d, 0x5d, 0x4f, 0x1d, 0x60, 0x4f, 0xf0, 0x16, 0xa9, 0x27, + 0x85, 0x4e, 0x8a, 0x18, 0x69, 0x75, 0xa8, 0xb9, 0x57, 0x4f, 0x99, 0x63, 0x4f, 0xcf, 0x03, 0x88, + 0xc6, 0x4e, 0x10, 0xf3, 0xa9, 0x00, 0x9d, 0x57, 0x4f, 0x9d, 0x5a, 0x4f, 0x9d, 0x5d, 0x4f, 0x9d, + 0x60, 0x4f, 0xb5, 0xcf, 0x01, 0xbf, 0xf0, 0x0c, 0xd5, 0xc2, 0xd0, 0x08, 0xb5, 0xcb, 0xf0, 0x08, + 0xd6, 0xcb, 0x10, 0x04, 0xa9, 0x06, 0x95, 0xcb, 0xb5, 0xcf, 0x01, 0xbf, 0x95, 0xc2, 0xc9, 0x19, + 0xd0, 0x03, 0x4c, 0x77, 0x1d, 0xc9, 0x18, 0xd0, 0x07, 0xb5, 0xce, 0xf0, 0x03, 0x4c, 0xb7, 0x24, + 0xb5, 0xb6, 0x29, 0x08, 0xd0, 0x03, 0x4c, 0x6f, 0x1d, 0xa9, 0x00, 0x95, 0xc8, 0xa9, 0x01, 0x85, + 0x85, 0xde, 0x63, 0x4f, 0x30, 0x08, 0x46, 0x85, 0x20, 0x39, 0x1e, 0x4c, 0xd8, 0x1c, 0xde, 0x66, + 0x4f, 0x30, 0x06, 0x20, 0xf2, 0x1d, 0x4c, 0xe5, 0x1c, 0xde, 0x69, 0x4f, 0x30, 0x08, 0x46, 0x85, + 0x20, 0xc4, 0x1e, 0x4c, 0xf0, 0x1c, 0xde, 0x6c, 0x4f, 0x30, 0x08, 0x46, 0x85, 0x20, 0x86, 0x1e, + 0x4c, 0xfd, 0x1c, 0xa9, 0x23, 0x85, 0x4e, 0x8a, 0xa8, 0xb9, 0x6f, 0x4f, 0x99, 0x57, 0x4f, 0xcf, + 0x03, 0xc8, 0xc6, 0x4e, 0x10, 0xf3, 0xa9, 0x00, 0x9d, 0x06, 0x01, 0x9d, 0xc3, 0x4f, 0x9d, 0xc6, + 0x4f, 0x9d, 0xc9, 0x4f, 0x9d, 0xcc, 0x4f, 0x9d, 0xcf, 0x01, 0xcf, 0x4f, 0x9d, 0xd2, 0x4f, 0x9d, + 0xd5, 0x4f, 0x9d, 0xd8, 0x4f, 0xc6, 0x86, 0x30, 0x28, 0xb5, 0xb6, 0x29, 0x04, 0xd0, 0x22, 0xa5, + 0x85, 0xf0, 0x0b, 0xb5, 0xc2, 0xc9, 0x1a, 0xf0, 0x18, 0xa9, 0x00, 0x4c, 0x68, 0x1c, 0xa5, 0x86, + 0xc9, 0x07, 0xf0, 0x0d, 0xb5, 0xa4, 0xd0, 0x06, 0x20, 0xc4, 0x1e, 0x4c, 0x66, 0x1d, 0x20, 0x86, + 0x1e, 0xa9, 0x18, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x40, 0x95, 0xce, 0x60, 0x95, 0xc8, 0xa9, 0xff, + 0x95, 0xc5, 0xa9, 0x00, 0xb4, 0xce, 0xf0, 0x03, 0x4c, 0x08, 0x20, 0xb5, 0xc2, 0xc9, 0x0e, 0xd0, + 0x46, 0x8a, 0xf0, 0x12, 0xb5, 0xb6, 0x29, 0x05, 0xf0, 0x2c, 0xb5, 0xa4, 0xc9, 0x01, 0xd0, 0x03, + 0x4c, 0xc4, 0x1e, 0x4c, 0x86, 0x1e, 0xb5, 0xa7, 0x29, 0x01, 0xf0, 0x14, 0x56, 0xb0, 0xf0, 0x16, + 0xb5, 0xa4, 0xf0, 0x06, 0x20, 0xc4, 0x1e, 0x4c, 0xb9, 0x1d, 0x20, 0x86, 0x1e, 0x4c, 0xb9, 0x1d, + 0xb5, 0xb6, 0x29, 0x05, 0xd0, 0x43, 0x20, 0x39, 0x1e, 0x20, 0x39, 0x1e, 0xa9, 0x0e, 0x4c, 0x92, + 0x1f, 0xa9, 0x02, 0x95, 0xb0, 0xd0, 0xf2, 0xb5, 0xb6, 0x29, 0x05, 0xf0, 0xf4, 0xb5, 0x98, 0xc9, + 0x0e, 0xd0, 0x3d, 0xb5, 0xa1, 0xc9, 0x2e, 0x90, 0x30, 0x20, 0xc4, 0x1f, 0xb5, 0xcb, 0xd0, 0x03, + 0x20, 0xec, 0x1d, 0x20, 0xec, 0x1d, 0x20, 0xec, 0x1d, 0xb5, 0xb6, 0x29, 0x04, 0xf0, 0x16, 0xb5, + 0xa1, 0xc9, 0x2e, 0x90, 0x04, 0xb5, 0xc8, 0x29, 0x01, 0xd0, 0x0e, 0xd6, 0xa1, 0xfe, 0x57, 0x4f, + 0xa9, 0x01, 0x4c, 0x92, 0x1f, 0xb5, 0xb6, 0x29, 0x08, 0xd0, 0x75, 0xa9, 0x05, 0x4c, 0xa0, 0x1f, + 0xc9, 0x0d, 0xd0, 0x42, 0xb5, 0xb6, 0x29, 0x04, 0xd0, 0x06, 0xb5, 0xb6, 0x29, 0x01, 0xd0, 0x26, + 0xb5, 0xa1, 0xc9, 0xc7, 0xb0, 0x5a, 0x20, 0xc4, 0x1f, 0xb5, 0xcb, 0xd0, 0x03, 0x20, 0x39, 0x1e, + 0x20, 0x39, 0x1e, 0x20, 0x39, 0x1e, 0xb5, 0xa1, 0xc9, 0xc7, 0xb0, 0x44, 0xf6, 0xa1, 0xfe, 0x5a, + 0x4f, 0xa9, 0x02, 0x4c, 0x92, 0x1f, 0x8a, 0xf0, 0x03, 0x4c, 0xfa, 0x1e, 0xa5, 0xa4, 0xf0, 0x03, + 0x4c, 0x1d, 0x1f, 0x4c, 0xeb, 0x1e, 0xc9, 0x0b, 0xd0, 0x3d, 0xb5, 0x9e, 0xc9, 0x0d, 0x90, 0x20, + 0x20, 0xc4, 0x1f, 0xb5, 0xcb, 0xd0, 0x03, 0x20, 0x70, 0x1e, 0x20, 0x70, 0x1e, 0xb5, 0xc2, 0xc9, + 0x03, 0xd0, 0x10, 0xb5, 0xcb, 0xc9, 0x04, 0xb0, 0x0a, 0xb5, 0x9b, 0xd0, 0x06, 0x4c, 0x64, 0x1f, + 0x4c, 0x89, 0x1f, 0xb5, 0x9e, 0xc9, 0x0d, 0x90, 0xf7, 0xd6, 0x9e, 0xfe, 0x5d, 0x4f, 0xa9, 0x00, + 0x95, 0xa4, 0xa9, 0x03, 0x4c, 0x92, 0x1f, 0xc9, 0x07, 0xd0, 0x3a, 0xb5, 0x9e, 0xc9, 0xa3, 0xb0, + 0xdf, 0x20, 0xc4, 0x1f, 0xb5, 0xcb, 0xd0, 0x03, 0x20, 0xb1, 0x1e, 0x20, 0xb1, 0x1e, 0xb5, 0xc2, + 0xc9, 0x04, 0xd0, 0x0d, 0xb5, 0xcb, 0xc9, 0x04, 0xb0, 0x07, 0xb5, 0x9b, 0xd0, 0x03, 0x4c, 0x6d, + 0x1f, 0xb5, 0x9e, 0xc9, 0xa3, 0xb0, 0xb9, 0xf6, 0x9e, 0xfe, 0x60, 0x4f, 0xa9, 0x01, 0x95, 0xa4, + 0xa9, 0x04, 0x4c, 0x92, 0x1f, 0xc9, 0x09, 0xd0, 0x2e, 0x8a, 0xd0, 0x1b, 0xb5, 0xb6, 0x29, 0x04, + 0xd0, 0x9e, 0xb5, 0xb6, 0x29, 0x01, 0xf0, 0x1c, 0xb5, 0x9e, 0xc9, 0xa2, 0xb0, 0x16, 0xa9, 0x00, + 0x95, 0xa4, 0xa9, 0x1a, 0x4c, 0x92, 0x1f, 0xc9, 0x01, 0xd0, 0x09, 0xb5, 0xb6, 0x29, 0x04, 0xd0, + 0x03, 0x4c, 0x44, 0x22, 0x4c, 0x89, 0x1f, 0xc9, 0x05, 0xd0, 0x1e, 0x8a, 0xd0, 0xe9, 0xb5, 0xb6, + 0x29, 0x04, 0xd0, 0xcc, 0xb5, 0xb6, 0x29, 0x01, 0xf0, 0xea, 0xb5, 0x9e, 0xc9, 0x10, 0x90, 0xe4, + 0xa9, 0x01, 0x95, 0xa4, 0xa9, 0x1a, 0x4c, 0x92, 0x1f, 0x48, 0xb5, 0xb6, 0x29, 0x08, 0xf0, 0x04, + 0x68, 0x4c, 0x76, 0x1f, 0x68, 0xc9, 0x0a, 0xd0, 0x12, 0xb5, 0xb6, 0x29, 0x04, 0xd0, 0xa1, 0xa9, + 0x00, 0x95, 0xa4, 0x20, 0xc4, 0x1f, 0xa9, 0x06, 0x4c, 0xa0, 0x1f, 0xc9, 0x06, 0xd0, 0x24, 0xb5, + 0xb6, 0x29, 0x04, 0xd0, 0x8b, 0xa9, 0x01, 0x95, 0xa4, 0x20, 0xc4, 0x1f, 0xa9, 0x07, 0x4c, 0xa0, + 0x1f, 0xa9, 0x00, 0x95, 0xa4, 0xa9, 0x0c, 0x4c, 0xae, 0x1f, 0xa9, 0x01, 0x95, 0xa4, 0xa9, 0x0d, + 0x4c, 0xae, 0x1f, 0xc9, 0x0f, 0xd0, 0x0f, 0xb5, 0x9b, 0xd0, 0x0b, 0xb5, 0xb6, 0x29, 0x04, 0xd0, + 0x05, 0xa9, 0x11, 0x4c, 0xbc, 0x1f, 0xb5, 0xc2, 0xd0, 0x03, 0xfe, 0xdb, 0x4f, 0xa9, 0x00, 0x95, + 0xcf, 0x01, 0xbf, 0xa8, 0xb9, 0x8c, 0x4a, 0x9d, 0x06, 0x01, 0xa9, 0x00, 0x95, 0xce, 0x60, 0x95, + 0xcf, 0x01, 0xbf, 0xa8, 0xb9, 0x8c, 0x4a, 0x9d, 0x06, 0x01, 0xa9, 0x0f, 0x95, 0xce, 0x60, 0x95, + 0xcf, 0x01, 0xbf, 0xa8, 0xb9, 0x8c, 0x4a, 0x9d, 0x06, 0x01, 0xa9, 0x0c, 0x95, 0xce, 0x60, 0x20, + 0xae, 0x1f, 0xa9, 0x04, 0x95, 0xce, 0x60, 0x48, 0x8a, 0x48, 0x98, 0x48, 0xa0, 0x80, 0x20, 0x09, + 0x25, 0xad, 0x66, 0x11, 0xd0, 0x12, 0xee, 0xd9, 0x0c, 0xee, 0xdc, 0x0c, 0xad, 0xd9, 0x0c, 0xc9, + 0x99, 0x90, 0x05, 0xa9, 0x9a, 0x8d, 0x59, 0x11, 0xad, 0x07, 0x20, 0xd0, 0x15, 0xee, 0x14, 0x1c, + 0xee, 0x17, 0x1c, 0xad, 0x14, 0x1c, 0xc9, 0x9a, 0x90, 0x08, 0xa2, 0x04, 0xa9, 0x9a, 0x8d, 0xfe, + 0x1f, 0x18, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x60, 0x00, 0x00, 0xff, 0x84, 0x52, 0xb5, 0xcf, 0x01, + 0xbf, 0xc9, 0x05, 0xd0, 0x38, 0xb5, 0xb6, 0x29, 0x04, 0xd0, 0x6a, 0xc0, 0x0d, 0xb0, 0x14, 0xc0, + 0x02, 0x90, 0x10, 0xc0, 0x08, 0xb0, 0x11, 0xb5, 0xb6, 0x29, 0x01, 0xd0, 0x58, 0x20, 0x39, 0x1e, + 0x20, 0x39, 0x1e, 0xa9, 0x05, 0x4c, 0xf4, 0x24, 0xc0, 0x0c, 0xd0, 0x06, 0x20, 0xf2, 0x1d, 0x20, + 0xf2, 0x1d, 0x20, 0xf2, 0x1d, 0x20, 0xf2, 0x1d, 0xa9, 0x05, 0x4c, 0xf4, 0x24, 0xc9, 0x0c, 0xd0, + 0x41, 0xb5, 0xb6, 0x29, 0x0c, 0xd0, 0x2e, 0xc0, 0x0c, 0xd0, 0x0b, 0x86, 0x51, 0xa0, 0x84, 0x20, + 0x09, 0x25, 0xa6, 0x51, 0xa4, 0x52, 0xc0, 0x0a, 0x90, 0x0b, 0x20, 0xf2, 0x1d, 0x20, 0x86, 0x1e, + 0xa9, 0x0c, 0x4c, 0xf4, 0x24, 0xc0, 0x03, 0x90, 0x08, 0x20, 0x86, 0x1e, 0xa9, 0x0c, 0x4c, 0xf4, + 0x24, 0xb5, 0xb6, 0x29, 0x01, 0xd0, 0x71, 0x20, 0x39, 0x1e, 0x20, 0x86, 0x1e, 0xa9, 0x0c, 0x4c, + 0xf4, 0x24, 0xc9, 0x0d, 0xd0, 0x41, 0xb5, 0xb6, 0x29, 0x0c, 0xd0, 0x5c, 0xc0, 0x0c, 0xd0, 0x0b, + 0x86, 0x51, 0xa0, 0x84, 0x20, 0x09, 0x25, 0xa6, 0x51, 0xa4, 0x52, 0xc0, 0x0a, 0x90, 0x0b, 0x20, + 0xf2, 0x1d, 0x20, 0xc4, 0x1e, 0xa9, 0x0d, 0x4c, 0xf4, 0x24, 0xc0, 0x03, 0x90, 0x08, 0x20, 0xc4, + 0x1e, 0xa9, 0x0d, 0x4c, 0xf4, 0x24, 0xb5, 0xb6, 0x29, 0x01, 0xd0, 0x2c, 0x20, 0x39, 0x1e, 0x20, + 0xc4, 0x1e, 0xa9, 0x0d, 0x4c, 0xf4, 0x24, 0xc9, 0x06, 0xd0, 0x4a, 0xb5, 0xb6, 0x29, 0x04, 0xd0, + 0x17, 0xc0, 0x0a, 0x90, 0x16, 0xf0, 0x03, 0x20, 0xf2, 0x1d, 0x20, 0xf2, 0x1d, 0x20, 0x86, 0x1e, + 0x20, 0x86, 0x1e, 0xa9, 0x06, 0x4c, 0xf4, 0x24, 0x4c, 0x04, 0x25, 0xc0, 0x07, 0x90, 0x0b, 0x20, + 0x86, 0x1e, 0x20, 0x86, 0x1e, 0xa9, 0x06, 0x4c, 0xf4, 0x24, 0xb5, 0xb6, 0x29, 0x01, 0xd0, 0xe8, + 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0xc0, 0x06, 0xf0, 0x03, 0x20, 0x39, 0x1e, 0x20, 0x39, 0x1e, + 0xa9, 0x06, 0x4c, 0xf4, 0x24, 0xc9, 0x07, 0xd0, 0x47, 0xb5, 0xb6, 0x29, 0x04, 0xd0, 0xc9, 0xc0, + 0x0a, 0x90, 0x13, 0xf0, 0x03, 0x20, 0xf2, 0x1d, 0x20, 0xf2, 0x1d, 0x20, 0xc4, 0x1e, 0x20, 0xc4, + 0x1e, 0xa9, 0x07, 0x4c, 0xf4, 0x24, 0xc0, 0x07, 0x90, 0x0b, 0x20, 0xc4, 0x1e, 0x20, 0xc4, 0x1e, + 0xa9, 0x07, 0x4c, 0xf4, 0x24, 0xb5, 0xb6, 0x29, 0x01, 0xd0, 0x9d, 0x20, 0xc4, 0x1e, 0x20, 0xc4, + 0x1e, 0xc0, 0x06, 0xf0, 0x03, 0x20, 0x39, 0x1e, 0x20, 0x39, 0x1e, 0xa9, 0x07, 0x4c, 0xf4, 0x24, + 0xc9, 0x19, 0xd0, 0x11, 0xe0, 0x00, 0xd0, 0x04, 0xc0, 0x01, 0xf0, 0x03, 0x4c, 0xf4, 0x24, 0x4c, + 0x18, 0x18, 0x4c, 0x04, 0x25, 0xc9, 0x17, 0xf0, 0x03, 0x4c, 0x35, 0x22, 0xb5, 0xb6, 0x29, 0x04, + 0xf0, 0xf0, 0xa9, 0x01, 0x95, 0xaa, 0x8a, 0xf0, 0x15, 0xad, 0xca, 0x42, 0xd0, 0x10, 0xb5, 0xa4, + 0xc9, 0x01, 0xd0, 0x06, 0xa9, 0x07, 0x95, 0x98, 0xd0, 0x04, 0xa9, 0x0b, 0x95, 0x98, 0xb5, 0xad, + 0xf0, 0x05, 0xd6, 0xad, 0x4c, 0xee, 0x21, 0xb5, 0x98, 0xc9, 0x0e, 0xd0, 0x09, 0x20, 0xf2, 0x1d, + 0x20, 0xf2, 0x1d, 0x4c, 0xe5, 0x21, 0xc9, 0x0d, 0xd0, 0x09, 0x20, 0x39, 0x1e, 0x20, 0x39, 0x1e, + 0x4c, 0xe5, 0x21, 0xc9, 0x0b, 0xd0, 0x09, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0x4c, 0xe5, 0x21, + 0xc9, 0x07, 0xd0, 0x0f, 0x20, 0xc4, 0x1e, 0x20, 0xc4, 0x1e, 0x56, 0xaa, 0xa9, 0x04, 0x95, 0xad, + 0x20, 0xc4, 0x1f, 0xa5, 0x60, 0xc9, 0x01, 0xd0, 0x13, 0xa5, 0x65, 0xf0, 0x09, 0x20, 0x39, 0x1e, + 0x20, 0x39, 0x1e, 0x4c, 0x07, 0x22, 0x20, 0xf2, 0x1d, 0x20, 0xf2, 0x1d, 0xa9, 0x0f, 0x95, 0x98, + 0xa9, 0x01, 0x95, 0x9b, 0xe6, 0x52, 0xbd, 0x57, 0x4f, 0x38, 0xfd, 0x5a, 0x4f, 0x10, 0x0e, 0x49, + 0xff, 0x69, 0x01, 0x9d, 0x5a, 0x4f, 0xa9, 0x00, 0x9d, 0x57, 0x4f, 0xf0, 0x08, 0x9d, 0x57, 0x4f, + 0xa9, 0x00, 0x9d, 0x5a, 0x4f, 0xa9, 0x17, 0x4c, 0xf4, 0x24, 0xc9, 0x10, 0xd0, 0x31, 0xb5, 0xce, + 0xc9, 0x01, 0xf0, 0x05, 0xa9, 0x10, 0x4c, 0xf4, 0x24, 0xb5, 0x9e, 0xc5, 0x9e, 0x90, 0x1b, 0xa9, + 0x00, 0x95, 0xa4, 0xa9, 0x12, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x10, 0x95, 0xce, 0xa9, 0x00, 0x9d, + 0x06, 0x01, 0x8a, 0x48, 0xa0, 0x81, 0x20, 0x09, 0x25, 0x68, 0xaa, 0x60, 0xa9, 0x01, 0x4c, 0x4c, + 0x22, 0xc9, 0x11, 0xd0, 0x4f, 0xb5, 0xb6, 0x29, 0x0c, 0xd0, 0x51, 0xc0, 0x08, 0xd0, 0x0b, 0x86, + 0x51, 0xa0, 0x85, 0x20, 0x09, 0x25, 0xa6, 0x51, 0xa4, 0x52, 0xc0, 0x01, 0xf0, 0x05, 0xa9, 0x11, + 0x4c, 0xf4, 0x24, 0xa9, 0x00, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x06, 0x95, 0xce, 0xa9, 0x00, 0x9d, + 0x06, 0x01, 0x8a, 0xd0, 0x0a, 0x20, 0xd0, 0x10, 0x70, 0x14, 0xb0, 0x12, 0x56, 0xce, 0x60, 0x20, + 0xd0, 0x10, 0x70, 0x0d, 0xb0, 0x05, 0xa5, 0x40, 0xd0, 0x07, 0x60, 0x56, 0xce, 0x60, 0x16, 0xce, + 0x60, 0xa9, 0x01, 0x95, 0xce, 0x60, 0xc9, 0x16, 0xd0, 0x32, 0xb5, 0xb6, 0x29, 0x08, 0xf0, 0x03, + 0x4c, 0x04, 0x25, 0xc0, 0x0c, 0xd0, 0x0b, 0x86, 0x51, 0xa0, 0x85, 0x20, 0x09, 0x25, 0xa6, 0x51, + 0xa4, 0x52, 0xc0, 0x01, 0xf0, 0x13, 0xb5, 0xa4, 0xc9, 0x01, 0xd0, 0x05, 0xfe, 0x60, 0x4f, 0xd0, + 0x03, 0xfe, 0x5d, 0x4f, 0xa9, 0x16, 0x4c, 0xf4, 0x24, 0x4c, 0x8c, 0x22, 0xc9, 0x14, 0xf0, 0x03, + 0x4c, 0xcd, 0x23, 0xb5, 0xb6, 0x29, 0x01, 0xf0, 0x72, 0x20, 0xdd, 0x2d, 0xa5, 0x62, 0x29, 0x7f, + 0xc9, 0x10, 0xb0, 0x57, 0xb5, 0xa4, 0xa4, 0x63, 0x30, 0x02, 0x49, 0x01, 0xc9, 0x01, 0xf0, 0x64, + 0x98, 0x29, 0x7f, 0xc9, 0x21, 0x90, 0x09, 0xb5, 0xa4, 0x49, 0x01, 0x95, 0xa4, 0x4c, 0x52, 0x23, + 0xa5, 0x9e, 0xa4, 0x63, 0x10, 0x05, 0x38, 0xe9, 0x0f, 0xd0, 0x03, 0x18, 0x69, 0x0f, 0x38, 0xf5, + 0x9e, 0xb0, 0x04, 0x49, 0xff, 0x69, 0x01, 0xc9, 0x05, 0xb0, 0x02, 0xa9, 0x05, 0x95, 0xce, 0xa9, + 0x15, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x00, 0x9d, 0x06, 0x01, 0x95, 0xc8, 0x60, 0xb5, 0xa4, 0xc9, + 0x01, 0xd0, 0x14, 0x20, 0xae, 0x1e, 0xe6, 0x52, 0xa9, 0x14, 0x4c, 0xf4, 0x24, 0xa5, 0x62, 0x30, + 0xec, 0x20, 0x1c, 0x2e, 0x4c, 0x8c, 0x22, 0x20, 0x6d, 0x1e, 0x4c, 0x5b, 0x23, 0xb5, 0xb6, 0x29, + 0x04, 0xd0, 0xda, 0x4c, 0xc4, 0x1d, 0xb5, 0x95, 0x29, 0x81, 0xc9, 0x81, 0xd0, 0x35, 0xa5, 0x63, + 0x29, 0x7f, 0xc9, 0x05, 0x90, 0x9c, 0xc9, 0x0c, 0xb0, 0x0d, 0x20, 0x7e, 0x1f, 0xb5, 0xcf, 0x01, + 0xbf, 0xc9, 0x11, 0xd0, 0x01, 0x60, 0x4c, 0x8c, 0x22, 0xc9, 0x13, 0xb0, 0xb2, 0xb5, 0xa4, 0xc9, + 0x01, 0xf0, 0x0e, 0xa9, 0x0c, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x0c, 0x95, 0xce, 0xa9, 0x00, 0x9d, + 0x06, 0x01, 0x60, 0xa9, 0x0d, 0xd0, 0xf0, 0xa5, 0x63, 0x29, 0x7f, 0xc9, 0x0b, 0xb0, 0x92, 0xc9, + 0x05, 0x90, 0xc5, 0xa9, 0x16, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x13, 0x95, 0xce, 0x60, 0xc9, 0x15, + 0xd0, 0x36, 0xb5, 0xb6, 0x29, 0x01, 0xf0, 0xa1, 0xb5, 0xce, 0xc9, 0x01, 0xd0, 0x14, 0xb5, 0xa4, + 0x49, 0x01, 0x95, 0xa4, 0xa9, 0x14, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x00, 0x9d, 0x06, 0x01, 0xa9, + 0x80, 0x95, 0xce, 0x60, 0xb5, 0xa4, 0xc9, 0x01, 0xd0, 0x08, 0x20, 0xae, 0x1e, 0xa9, 0x15, 0x4c, + 0xf4, 0x24, 0x20, 0x6d, 0x1e, 0xa9, 0x15, 0x4c, 0xf4, 0x24, 0xc9, 0x12, 0xd0, 0x03, 0x4c, 0xf4, + 0x24, 0xc9, 0x0f, 0xd0, 0x2e, 0x8a, 0xf0, 0x04, 0xc0, 0x02, 0x90, 0x24, 0xb5, 0xa4, 0xc9, 0x01, + 0xd0, 0x0f, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0xa9, 0x01, 0x95, 0xa4, 0xa9, 0x0f, 0x4c, 0xf4, + 0x24, 0x20, 0xc4, 0x1e, 0x20, 0xc4, 0x1e, 0xa9, 0x00, 0x95, 0xa4, 0xa9, 0x0f, 0x4c, 0xf4, 0x24, + 0x4c, 0x8c, 0x22, 0xc9, 0x13, 0xd0, 0x6f, 0x8a, 0xf0, 0x08, 0xb5, 0xd1, 0x30, 0x04, 0xc0, 0x02, + 0x90, 0x61, 0xb5, 0xb6, 0x29, 0x05, 0xd0, 0x03, 0x20, 0x39, 0x1e, 0xb5, 0xa4, 0xc9, 0x01, 0xd0, + 0x2f, 0xc0, 0x0a, 0xd0, 0x1c, 0xe0, 0x02, 0xd0, 0x18, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0x20, + 0x86, 0x1e, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0x20, 0x86, + 0x1e, 0x20, 0x86, 0x1e, 0x20, 0x86, 0x1e, 0xa9, 0x01, 0x95, 0xa4, 0xa9, 0x13, 0x4c, 0xf4, 0x24, + 0xc0, 0x0a, 0xd0, 0x10, 0xe0, 0x02, 0xd0, 0x0c, 0x20, 0xc4, 0x1e, 0x20, 0xc4, 0x1e, 0x20, 0xc4, + 0x1e, 0x20, 0xc4, 0x1e, 0x20, 0xc4, 0x1e, 0x20, 0xc4, 0x1e, 0xa9, 0x00, 0x95, 0xa4, 0xa9, 0x13, + 0x4c, 0xf4, 0x24, 0x4c, 0x8c, 0x22, 0xc9, 0x18, 0xd0, 0x3d, 0xb5, 0xb6, 0x29, 0x08, 0xd0, 0x09, + 0xa9, 0x01, 0x85, 0x52, 0xa9, 0x18, 0x4c, 0xf4, 0x24, 0x8a, 0x48, 0xa9, 0x00, 0xa0, 0x27, 0x1d, + 0x63, 0x4f, 0xcf, 0x03, 0xe8, 0x88, 0x10, 0xf7, 0xa8, 0x68, 0xaa, 0x98, 0xd0, 0x12, 0xa9, 0x00, + 0x85, 0x51, 0xa6, 0x29, 0x86, 0x4e, 0xbd, 0xc2, 0x4b, 0xa8, 0xbd, 0xae, 0x4b, 0x4c, 0x8e, 0x2f, + 0xb5, 0xa4, 0x85, 0x4c, 0x4c, 0xd4, 0x1c, 0x95, 0xcf, 0x01, 0xbf, 0xa8, 0xb9, 0x8c, 0x4a, 0x9d, + 0x06, 0x01, 0xc6, 0x52, 0xa5, 0x52, 0x95, 0xce, 0x60, 0xa9, 0x00, 0x4c, 0x92, 0x1f, 0xa9, 0x15, + 0x8d, 0x18, 0xd4, 0xad, 0x00, 0xeb, 0xd0, 0x0e, 0x8c, 0x00, 0xeb, 0x98, 0x29, 0x0f, 0xaa, 0xbd, + 0x72, 0x25, 0x8d, 0x81, 0x25, 0x60, 0xad, 0x70, 0xef, 0xd0, 0x0e, 0x8c, 0x70, 0xef, 0x98, 0x29, + 0x0f, 0xaa, 0xbd, 0x72, 0x25, 0x8d, 0x82, 0x25, 0x60, 0xad, 0x70, 0xf0, 0xd0, 0x0e, 0x8c, 0x70, + 0xf0, 0x98, 0x29, 0x0f, 0xaa, 0xbd, 0x72, 0x25, 0x8d, 0x83, 0x25, 0x60, 0x98, 0x29, 0x0f, 0xaa, + 0xbd, 0x72, 0x25, 0xcd, 0x81, 0x25, 0xb0, 0xc0, 0xcd, 0x82, 0x25, 0xb0, 0xce, 0xcd, 0x83, 0x25, + 0xb0, 0xdc, 0x60, 0xa9, 0x00, 0x8d, 0x00, 0xeb, 0x8d, 0x70, 0xef, 0x8d, 0x70, 0xf0, 0xa2, 0x20, + 0x9d, 0x00, 0xd4, 0xca, 0x10, 0xfa, 0x60, 0x0b, 0x0c, 0x0a, 0x00, 0x08, 0x07, 0x09, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0xbf, 0x03, 0xa2, 0x02, 0x86, 0x51, 0xb5, 0x95, 0x29, 0x01, + 0xf0, 0x49, 0xbd, 0x6d, 0x27, 0x20, 0x04, 0x27, 0xbd, 0x4e, 0x4f, 0xaa, 0x20, 0x19, 0x27, 0x48, + 0x8a, 0xa6, 0x51, 0x95, 0xd4, 0x68, 0x95, 0xda, 0x98, 0x0a, 0x75, 0xe0, 0xa8, 0xb5, 0xd4, 0x20, + 0xa0, 0x26, 0xa6, 0x51, 0xe0, 0x02, 0xf0, 0x23, 0xbd, 0x70, 0x27, 0x30, 0x1e, 0x20, 0x04, 0x27, + 0xbd, 0x4e, 0x4f, 0xaa, 0xe8, 0x20, 0x19, 0x27, 0x48, 0x8a, 0xa6, 0x51, 0x95, 0xd7, 0x68, 0x95, + 0xdd, 0x98, 0x0a, 0x75, 0xe0, 0xa8, 0xb5, 0xd7, 0x20, 0xa0, 0x26, 0xa6, 0x51, 0xca, 0x10, 0xaa, + 0xa9, 0x00, 0x8d, 0x7e, 0x27, 0x60, 0xad, 0x7e, 0x27, 0xf0, 0x01, 0x60, 0xee, 0x7e, 0x27, 0xa2, + 0x02, 0x86, 0x51, 0xb5, 0x95, 0x29, 0x01, 0xf0, 0x3f, 0xb5, 0x9e, 0x95, 0xb9, 0xb4, 0xd4, 0xf0, + 0x09, 0xb4, 0xa4, 0xc0, 0x01, 0xf0, 0x03, 0x38, 0xe9, 0x08, 0x0a, 0x48, 0xbc, 0x6d, 0x27, 0xad, + 0x10, 0xd0, 0x90, 0x05, 0x19, 0x73, 0x27, 0xd0, 0x03, 0x39, 0x78, 0x27, 0x8d, 0x10, 0xd0, 0x98, + 0x0a, 0xa8, 0x68, 0x99, 0x00, 0xd0, 0xb5, 0xa1, 0x18, 0x69, 0x1d, 0x99, 0x01, 0xd0, 0xbc, 0x6d, + 0x27, 0xb5, 0xda, 0x99, 0x27, 0xd0, 0xe0, 0x02, 0xf0, 0x44, 0xbc, 0x4b, 0x4f, 0xb5, 0x9e, 0xc0, + 0x05, 0xf0, 0x0c, 0xc0, 0x3f, 0xf0, 0x08, 0xc0, 0x43, 0xf0, 0x04, 0xc0, 0x19, 0xd0, 0x03, 0x38, + 0xe9, 0x08, 0x0a, 0x48, 0xbc, 0x70, 0x27, 0xad, 0x10, 0xd0, 0x90, 0x05, 0x19, 0x73, 0x27, 0xd0, + 0x03, 0x39, 0x78, 0x27, 0x8d, 0x10, 0xd0, 0x98, 0x0a, 0xa8, 0x68, 0x99, 0x00, 0xd0, 0xb5, 0xa1, + 0x18, 0x69, 0x1d, 0x99, 0x01, 0xd0, 0xbc, 0x70, 0x27, 0xb5, 0xdd, 0x99, 0x27, 0xd0, 0xa6, 0x51, + 0xca, 0x30, 0x03, 0x4c, 0xed, 0x25, 0xa2, 0x04, 0xa0, 0x04, 0xad, 0x7d, 0x27, 0xf0, 0x02, 0xa0, + 0x09, 0xb9, 0x63, 0x27, 0x9d, 0xf8, 0x8f, 0x88, 0xca, 0x10, 0xf6, 0xad, 0x7d, 0x27, 0x49, 0x01, + 0x8d, 0x7d, 0x27, 0x60, 0xd0, 0x35, 0xa9, 0x3f, 0x8d, 0x7f, 0x27, 0xb5, 0xe0, 0xaa, 0xbd, 0x00, + 0xe0, 0x91, 0x0e, 0xce, 0x7f, 0x27, 0xca, 0x30, 0x11, 0x88, 0xa9, 0x00, 0x91, 0x0e, 0xce, 0x7f, + 0x27, 0x88, 0x91, 0x0e, 0xce, 0x7f, 0x27, 0x88, 0x10, 0xe4, 0xad, 0x7f, 0x27, 0x49, 0x3f, 0xa8, + 0xa9, 0x00, 0x91, 0x0e, 0xc8, 0xce, 0x7f, 0x27, 0x10, 0xf8, 0x60, 0xa9, 0x3f, 0x8d, 0x7f, 0x27, + 0xb5, 0xe0, 0x0a, 0xaa, 0xca, 0x88, 0x88, 0xbd, 0x00, 0xe0, 0x91, 0x0e, 0xce, 0x7f, 0x27, 0xca, + 0x88, 0xbd, 0x00, 0xe0, 0x91, 0x0e, 0xce, 0x7f, 0x27, 0xca, 0x30, 0xce, 0x88, 0xa9, 0x00, 0x91, + 0x0e, 0xce, 0x7f, 0x27, 0x88, 0x10, 0xe0, 0x00, 0x0a, 0xac, 0x7d, 0x27, 0xf0, 0x03, 0x18, 0x69, + 0x0a, 0xa8, 0xb9, 0x4f, 0x27, 0x85, 0x0e, 0xb9, 0x50, 0x27, 0x85, 0x0f, 0x60, 0xbd, 0xbd, 0x59, + 0x8d, 0xab, 0x26, 0x8d, 0xe4, 0x26, 0x8d, 0xee, 0x26, 0xbd, 0x8f, 0x5a, 0x8d, 0xac, 0x26, 0x8d, + 0xe5, 0x26, 0x8d, 0xef, 0x26, 0xbc, 0x61, 0x5b, 0xa9, 0x02, 0xc5, 0x51, 0xd0, 0x04, 0xa9, 0xf0, + 0xd0, 0x03, 0xbd, 0x33, 0x5c, 0x48, 0xbd, 0xcf, 0x01, 0xbf, 0x5c, 0x48, 0xa6, 0x51, 0x98, 0x95, + 0xe0, 0x68, 0xaa, 0x68, 0x60, 0x80, 0x81, 0xc0, 0x81, 0x00, 0x82, 0x40, 0x82, 0x80, 0x82, 0xc0, + 0x82, 0x00, 0x83, 0x40, 0x83, 0x80, 0x83, 0xc0, 0x83, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, 0x00, 0x02, 0x04, 0x01, 0x03, 0xff, 0x01, 0x02, 0x04, 0x08, 0x10, 0xfe, 0xfd, + 0xfb, 0xf7, 0xef, 0x00, 0x01, 0x00, 0xbd, 0xdb, 0x4f, 0xd0, 0xc9, 0xfe, 0xdb, 0x4f, 0xbd, 0x48, + 0x4f, 0x9d, 0x54, 0x4f, 0xb4, 0xa4, 0xb5, 0xcf, 0x01, 0xbf, 0xc9, 0x0e, 0xd0, 0x10, 0xb5, 0xb6, + 0x29, 0x08, 0xf0, 0x05, 0xa0, 0x08, 0x4c, 0xa1, 0x29, 0xa0, 0x44, 0x4c, 0xa1, 0x29, 0xc9, 0x1a, + 0xd0, 0x0e, 0xc0, 0x01, 0xd0, 0x05, 0xa0, 0x42, 0x4c, 0xa1, 0x29, 0xa0, 0x40, 0x4c, 0xa1, 0x29, + 0xc9, 0x19, 0xd0, 0x05, 0xa0, 0x08, 0x4c, 0xa1, 0x29, 0xc9, 0x18, 0xd0, 0x15, 0xbc, 0x54, 0x4f, + 0xc0, 0x44, 0xf0, 0x09, 0xb5, 0xd4, 0x15, 0xd7, 0xd0, 0x03, 0x4c, 0xa1, 0x29, 0xa0, 0x08, 0x4c, + 0xa1, 0x29, 0xc9, 0x1b, 0xd0, 0x22, 0xb5, 0xce, 0xc0, 0x00, 0xf0, 0x0e, 0xc9, 0x04, 0x90, 0x05, + 0xa0, 0x38, 0x4c, 0xa1, 0x29, 0xa0, 0x3a, 0x4c, 0xa1, 0x29, 0xc9, 0x04, 0x90, 0x05, 0xa0, 0x3c, + 0x4c, 0xa1, 0x29, 0xa0, 0x3e, 0x4c, 0xa1, 0x29, 0xc9, 0x13, 0xd0, 0x22, 0xb5, 0xce, 0xc9, 0x0a, + 0x90, 0x0e, 0xc0, 0x00, 0xd0, 0x05, 0xa0, 0x3c, 0x4c, 0xa1, 0x29, 0xa0, 0x38, 0x4c, 0xa1, 0x29, + 0xc0, 0x00, 0xd0, 0x05, 0xa0, 0x3e, 0x4c, 0xa1, 0x29, 0xa0, 0x3a, 0x4c, 0xa1, 0x29, 0xc9, 0x10, + 0xd0, 0x05, 0xa0, 0x2a, 0x4c, 0xa1, 0x29, 0xc9, 0x11, 0xd0, 0x0e, 0xc0, 0x01, 0xd0, 0x05, 0xa0, + 0x06, 0x4c, 0xa1, 0x29, 0xa0, 0x04, 0x4c, 0xa1, 0x29, 0xc9, 0x12, 0xd0, 0x0e, 0xc0, 0x01, 0xd0, + 0x05, 0xa0, 0x2e, 0x4c, 0xa1, 0x29, 0xa0, 0x2c, 0x4c, 0xa1, 0x29, 0xc9, 0x16, 0xd0, 0x22, 0xb5, + 0xce, 0xc9, 0x0b, 0x90, 0x0e, 0xc0, 0x01, 0xd0, 0x05, 0xa0, 0x34, 0x4c, 0xa1, 0x29, 0xa0, 0x30, + 0x4c, 0xa1, 0x29, 0xc0, 0x01, 0xd0, 0x05, 0xa0, 0x36, 0x4c, 0xa1, 0x29, 0xa0, 0x32, 0x4c, 0xa1, + 0x29, 0xc9, 0x0f, 0xd0, 0x0e, 0xc0, 0x01, 0xd0, 0x05, 0xa0, 0x02, 0x4c, 0xa1, 0x29, 0xa0, 0x00, + 0x4c, 0xa1, 0x29, 0xc9, 0x0c, 0xd0, 0x10, 0xb5, 0xce, 0xc9, 0x0a, 0x90, 0x05, 0xa0, 0x16, 0x4c, + 0xa1, 0x29, 0xa0, 0x18, 0x4c, 0xa1, 0x29, 0xc9, 0x0d, 0xd0, 0x10, 0xb5, 0xce, 0xc9, 0x0a, 0x90, + 0x05, 0xa0, 0x1a, 0x4c, 0xa1, 0x29, 0xa0, 0x1c, 0x4c, 0xa1, 0x29, 0xc9, 0x14, 0xd0, 0x06, 0xc0, + 0x01, 0xf0, 0x2e, 0xd0, 0x0e, 0xc9, 0x15, 0xd0, 0x06, 0xc0, 0x01, 0xf0, 0x24, 0xd0, 0x04, 0xc9, + 0x03, 0xd0, 0x1a, 0xb5, 0xb6, 0x29, 0x04, 0xf0, 0x03, 0x4c, 0x85, 0x29, 0xbc, 0x48, 0x4f, 0xc0, + 0x0e, 0xf0, 0x05, 0xa0, 0x0e, 0x4c, 0xa1, 0x29, 0xa0, 0x10, 0x4c, 0xa1, 0x29, 0xc9, 0x04, 0xd0, + 0x1a, 0xb5, 0xb6, 0x29, 0x04, 0xf0, 0x03, 0x4c, 0x85, 0x29, 0xbc, 0x48, 0x4f, 0xc0, 0x12, 0xf0, + 0x05, 0xa0, 0x12, 0x4c, 0xa1, 0x29, 0xa0, 0x14, 0x4c, 0xa1, 0x29, 0xc9, 0x05, 0xd0, 0x2b, 0xb4, + 0xce, 0xc0, 0x0f, 0x90, 0x05, 0xa0, 0x08, 0x4c, 0xa1, 0x29, 0xc0, 0x0c, 0x90, 0x05, 0xa0, 0x1e, + 0x4c, 0xa1, 0x29, 0xc0, 0x02, 0x90, 0x05, 0xa0, 0x20, 0x4c, 0xa1, 0x29, 0xc0, 0x01, 0x90, 0x05, + 0xa0, 0x1e, 0x4c, 0xa1, 0x29, 0xa0, 0x08, 0x4c, 0xa1, 0x29, 0xc9, 0x06, 0xd0, 0x14, 0xb4, 0xce, + 0xc0, 0x0c, 0x90, 0x05, 0xa0, 0x22, 0x4c, 0xa1, 0x29, 0xc0, 0x03, 0x90, 0xf7, 0xa0, 0x24, 0x4c, + 0xa1, 0x29, 0xc9, 0x07, 0xd0, 0x14, 0xb4, 0xce, 0xc0, 0x0c, 0x90, 0x05, 0xa0, 0x26, 0x4c, 0xa1, + 0x29, 0xc0, 0x03, 0x90, 0xf7, 0xa0, 0x28, 0x4c, 0xa1, 0x29, 0xc9, 0x17, 0xd0, 0x0a, 0xbc, 0x54, + 0x4f, 0xb5, 0xaa, 0xf0, 0x18, 0x4c, 0xa1, 0x29, 0xc9, 0x00, 0xd0, 0x11, 0xb5, 0xb6, 0x29, 0x04, + 0xf0, 0x1c, 0xbc, 0x54, 0x4f, 0xc0, 0x0a, 0xf0, 0x0d, 0xc0, 0x0c, 0xf0, 0x09, 0xbc, 0x54, 0x4f, + 0xc0, 0x0a, 0xf0, 0x05, 0xa0, 0x0a, 0x4c, 0xa1, 0x29, 0xa0, 0x0c, 0x4c, 0xa1, 0x29, 0xc0, 0x01, + 0xf0, 0x05, 0xa0, 0x00, 0x4c, 0xa1, 0x29, 0xa0, 0x02, 0x98, 0x9d, 0x48, 0x4f, 0x18, 0x69, 0x01, + 0x9d, 0x4b, 0x4f, 0xb5, 0x95, 0xcf, 0x03, 0x2a, 0x29, 0x03, 0xa8, 0xb9, 0xa5, 0x59, 0x18, 0x7d, + 0x48, 0x4f, 0x9d, 0x4e, 0x4f, 0x69, 0x01, 0x9d, 0x51, 0x4f, 0x60, 0xa9, 0x00, 0xa2, 0x02, 0x95, + 0xb3, 0x95, 0xbc, 0xca, 0x10, 0xf9, 0xad, 0x1e, 0xd0, 0xd0, 0x01, 0x60, 0x85, 0x67, 0x29, 0x03, + 0xd0, 0x03, 0x4c, 0x07, 0x2a, 0xa5, 0x67, 0x29, 0x0c, 0xd0, 0x03, 0x4c, 0xf2, 0x29, 0xa5, 0xb3, + 0x09, 0x08, 0x85, 0xb3, 0xa5, 0xb4, 0x09, 0x02, 0x85, 0xb4, 0xa5, 0x67, 0x29, 0x30, 0xd0, 0x03, + 0x4c, 0x07, 0x2a, 0xa5, 0xb3, 0x09, 0x10, 0x85, 0xb3, 0xa5, 0xb5, 0x09, 0x02, 0x85, 0xb5, 0xa5, + 0x67, 0x29, 0x0c, 0xf0, 0x12, 0xa5, 0x67, 0x29, 0x30, 0xf0, 0x0c, 0xa5, 0xb4, 0x09, 0x10, 0x85, + 0xb4, 0xa5, 0xb5, 0x09, 0x08, 0x85, 0xb5, 0xa2, 0x02, 0xb5, 0xb3, 0x85, 0x4c, 0xa0, 0x00, 0x46, + 0x4c, 0xb0, 0x0b, 0xc8, 0xc0, 0x05, 0x90, 0xf7, 0xca, 0x10, 0xee, 0x4c, 0x4e, 0x2b, 0x84, 0x52, + 0xb5, 0xcf, 0x01, 0xbf, 0xc9, 0x18, 0xf0, 0xed, 0xc9, 0x1a, 0xf0, 0xe9, 0xc9, 0x0f, 0xf0, 0xe5, + 0xc9, 0x13, 0xf0, 0xe1, 0xc9, 0x19, 0xf0, 0xdd, 0xc9, 0x1b, 0xf0, 0xd9, 0xb9, 0x40, 0x4f, 0x30, + 0x1f, 0xa8, 0xb9, 0xcf, 0x01, 0xbf, 0x00, 0xc9, 0x1b, 0xf0, 0x17, 0xc9, 0x16, 0xf0, 0x18, 0xc9, + 0x11, 0xf0, 0x3e, 0xc9, 0x0d, 0xf0, 0x69, 0xc9, 0x0c, 0xf0, 0x65, 0xc9, 0x0e, 0xd0, 0x03, 0x4c, + 0xfa, 0x2a, 0xa4, 0x52, 0x4c, 0x2b, 0x2a, 0xb9, 0xce, 0x00, 0xc9, 0x08, 0xb0, 0xf4, 0xa9, 0x04, + 0x85, 0x61, 0x20, 0x54, 0x2c, 0x90, 0xeb, 0x30, 0xe9, 0x8a, 0x48, 0x98, 0x48, 0xa0, 0x87, 0x20, + 0x09, 0x25, 0x68, 0xa8, 0x68, 0xaa, 0x20, 0x3e, 0x2b, 0xb5, 0xbc, 0x09, 0x02, 0x95, 0xbc, 0xd0, + 0xd1, 0xa9, 0x06, 0x85, 0x61, 0x20, 0x54, 0x2c, 0x90, 0xc8, 0x30, 0xc6, 0xb9, 0xa1, 0x00, 0x38, + 0xf5, 0xa1, 0x10, 0x04, 0x49, 0xff, 0x69, 0x01, 0xc9, 0x16, 0xb0, 0xb6, 0x20, 0x29, 0x2e, 0x20, + 0x3e, 0x2b, 0xb5, 0xbc, 0x09, 0x04, 0xc0, 0x00, 0xd0, 0x02, 0x09, 0x80, 0x95, 0xbc, 0xd0, 0xa2, + 0xb9, 0xce, 0x00, 0xc9, 0x0a, 0xb0, 0x60, 0xa9, 0x06, 0x85, 0x61, 0x20, 0x54, 0x2c, 0x90, 0x57, + 0x30, 0x55, 0x20, 0x29, 0x2e, 0x20, 0x3e, 0x2b, 0xb5, 0xbc, 0x09, 0x08, 0xc0, 0x00, 0xd0, 0x02, + 0x09, 0x80, 0x95, 0xbc, 0xd0, 0x41, 0xb5, 0xa1, 0x38, 0xf9, 0xa1, 0x00, 0xc9, 0x0a, 0x30, 0x37, + 0x90, 0x35, 0xb9, 0x45, 0x4f, 0xf0, 0x30, 0x38, 0xe9, 0x01, 0x99, 0x45, 0x4f, 0xb5, 0xbc, 0x29, + 0x10, 0xd0, 0x24, 0xb9, 0xbc, 0x00, 0x29, 0x10, 0xd0, 0x1d, 0xb5, 0xcf, 0x01, 0xbf, 0xc9, 0x0c, + 0xf0, 0x17, 0xc9, 0x0d, 0xf0, 0x13, 0xc9, 0x11, 0xf0, 0x0f, 0x20, 0x29, 0x2e, 0xb5, 0xbc, 0x09, + 0x10, 0xc0, 0x00, 0xd0, 0x02, 0x09, 0x80, 0x95, 0xbc, 0x4c, 0x76, 0x2a, 0xb9, 0xbc, 0x00, 0x09, + 0x01, 0x99, 0xbc, 0x00, 0xb9, 0xa4, 0x00, 0x49, 0x01, 0x95, 0xa4, 0x60, 0xa2, 0x02, 0x86, 0x51, + 0xb5, 0xbc, 0x29, 0x01, 0xf0, 0x42, 0xa9, 0x00, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x04, 0x9d, 0x06, + 0x01, 0xa9, 0x18, 0x95, 0xce, 0xfe, 0xdb, 0x4f, 0x8a, 0xf0, 0x18, 0x20, 0xd0, 0x10, 0x70, 0x0f, + 0xb0, 0x07, 0xa5, 0x40, 0xd0, 0x09, 0x4c, 0x9a, 0x2b, 0xa9, 0x0a, 0x95, 0xce, 0xd0, 0x1b, 0xa9, + 0x02, 0x95, 0xce, 0x20, 0xd0, 0x10, 0x70, 0x0e, 0xb0, 0x06, 0xa9, 0x03, 0x95, 0xce, 0xd0, 0x0a, + 0xa9, 0x08, 0x95, 0xce, 0xd0, 0x04, 0xa9, 0x0a, 0x95, 0xce, 0xb5, 0xbc, 0x29, 0x02, 0xf0, 0x11, + 0xb5, 0xd1, 0x38, 0xe9, 0x02, 0x95, 0xd1, 0x30, 0x46, 0xa9, 0x0f, 0x95, 0xcf, 0x01, 0xbf, 0xa9, + 0x03, 0x95, 0xce, 0xb5, 0xbc, 0x29, 0x04, 0xf0, 0x1e, 0xb5, 0xbc, 0x10, 0x09, 0xa9, 0x64, 0xa2, + 0x02, 0x20, 0x75, 0x31, 0xa6, 0x51, 0xb5, 0xd1, 0x38, 0xe9, 0x03, 0x95, 0xd1, 0x30, 0x57, 0xa9, + 0x0f, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x04, 0x95, 0xce, 0xb5, 0xbc, 0x29, 0x08, 0xf0, 0x1e, 0xb5, + 0xbc, 0x10, 0x09, 0xa9, 0x4b, 0xa2, 0x02, 0x20, 0x75, 0x31, 0xa6, 0x51, 0xb5, 0xd1, 0x38, 0xe9, + 0x07, 0x95, 0xd1, 0x30, 0x33, 0xa9, 0x13, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x0c, 0x95, 0xce, 0xb5, + 0xbc, 0x29, 0x10, 0xf0, 0x1e, 0xb5, 0xbc, 0x10, 0x09, 0xa9, 0x32, 0xa2, 0x02, 0x20, 0x75, 0x31, + 0xa6, 0x51, 0xb5, 0xd1, 0x38, 0xe9, 0x05, 0x95, 0xd1, 0x30, 0x0f, 0xa9, 0x1b, 0x95, 0xcf, 0x01, + 0xbf, 0xa9, 0x08, 0x95, 0xce, 0xca, 0x30, 0x03, 0x4c, 0x50, 0x2b, 0x60, 0xb5, 0xbc, 0x29, 0x80, + 0xf0, 0x1d, 0x86, 0x51, 0xe0, 0x01, 0xd0, 0x10, 0xa9, 0x01, 0xaa, 0x20, 0x75, 0x31, 0xa9, 0xc2, + 0xa2, 0x02, 0x20, 0x75, 0x31, 0x4c, 0x47, 0x2c, 0xa9, 0xc8, 0xa2, 0x02, 0x20, 0x75, 0x31, 0xa6, + 0x51, 0xa9, 0x13, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x0c, 0x95, 0xce, 0x4c, 0xf9, 0x2b, 0xb9, 0x9e, + 0x00, 0x38, 0xf5, 0x9e, 0x48, 0x08, 0xb9, 0xa4, 0x00, 0xc9, 0x01, 0xd0, 0x08, 0x28, 0x68, 0x49, + 0xff, 0x69, 0x01, 0x48, 0x08, 0x28, 0x68, 0xc5, 0x61, 0x60, 0xa5, 0x60, 0x30, 0x05, 0xc6, 0x60, + 0xf0, 0x1a, 0x60, 0x29, 0x7f, 0x38, 0xe9, 0x01, 0xf0, 0x05, 0x09, 0x80, 0x85, 0x60, 0x60, 0xae, + 0x21, 0x43, 0xbd, 0xb2, 0x4c, 0x85, 0x60, 0xc6, 0x66, 0x30, 0x2b, 0x60, 0xa9, 0xa0, 0x85, 0x7c, + 0xa9, 0xf1, 0x85, 0x7d, 0xa9, 0x42, 0x85, 0x7e, 0xa5, 0x29, 0xc9, 0x0a, 0x90, 0x0c, 0xa9, 0xa8, + 0x85, 0x7c, 0xa9, 0x09, 0x85, 0x7d, 0xa9, 0x43, 0x85, 0x7e, 0xae, 0x21, 0x43, 0xbd, 0xb2, 0x4c, + 0x85, 0x60, 0xc6, 0x66, 0x10, 0x1c, 0xce, 0x21, 0x43, 0x10, 0x0b, 0xa2, 0x07, 0x8e, 0x21, 0x43, + 0xa5, 0x65, 0x49, 0x01, 0x85, 0x65, 0xae, 0x21, 0x43, 0xbd, 0xb2, 0x4c, 0x85, 0x60, 0xa9, 0x10, + 0x85, 0x66, 0xa5, 0x65, 0xd0, 0x0a, 0xe6, 0x64, 0xa5, 0x64, 0xc9, 0x08, 0x90, 0x0d, 0xb0, 0x07, + 0xc6, 0x64, 0x10, 0x07, 0xa9, 0x07, 0x2c, 0xa9, 0x00, 0x85, 0x64, 0xa2, 0x02, 0x86, 0x51, 0x8a, + 0xcf, 0x03, 0x0a, 0x18, 0x65, 0x7d, 0x8d, 0x2c, 0x2d, 0xa5, 0x7e, 0x69, 0x00, 0x8d, 0x2d, 0x2d, + 0x8a, 0x18, 0x69, 0x61, 0x8d, 0xbc, 0x43, 0x20, 0x9f, 0x19, 0xad, 0xbc, 0x43, 0x85, 0x06, 0x38, + 0xe9, 0x04, 0x85, 0x08, 0xad, 0xbb, 0x43, 0x18, 0x65, 0x7c, 0x85, 0x07, 0x18, 0x69, 0x04, 0x85, + 0x09, 0xa0, 0x00, 0xa6, 0x64, 0xbd, 0x00, 0xe0, 0xc0, 0x04, 0xb0, 0x0a, 0x91, 0x06, 0x20, 0x8d, + 0x47, 0x91, 0x06, 0x4c, 0x43, 0x2d, 0x91, 0x08, 0x20, 0x94, 0x47, 0x91, 0x08, 0xc8, 0xe8, 0xe0, + 0x08, 0xd0, 0x02, 0xa2, 0x00, 0xc0, 0x08, 0xd0, 0xdc, 0xa6, 0x51, 0xca, 0x10, 0x9f, 0x60, 0xa2, + 0x02, 0xb5, 0x95, 0x29, 0x01, 0xf0, 0x18, 0xb5, 0xcf, 0x01, 0xbf, 0xc9, 0x13, 0xf0, 0x04, 0xc9, + 0x19, 0xd0, 0x04, 0xb5, 0xce, 0xd0, 0x0a, 0xb5, 0xd1, 0x10, 0x06, 0x8a, 0xf0, 0x07, 0x20, 0x01, + 0x30, 0xca, 0x10, 0xdf, 0x60, 0x4c, 0x18, 0x18, 0xa2, 0x02, 0xb5, 0xd1, 0x30, 0x3a, 0xad, 0xca, + 0x42, 0xd0, 0x08, 0xb5, 0x95, 0x29, 0x81, 0xc9, 0x81, 0xf0, 0x08, 0xb5, 0x95, 0x29, 0x41, 0xc9, + 0x41, 0xd0, 0x25, 0xb5, 0xcf, 0x01, 0xbf, 0xc9, 0x00, 0xd0, 0x1f, 0xb5, 0xce, 0xd0, 0x1b, 0xb5, + 0xb6, 0x29, 0x05, 0xf0, 0x15, 0xb5, 0xc2, 0xc9, 0x0d, 0xf0, 0x13, 0xc9, 0x0c, 0xf0, 0x0f, 0xa9, + 0x14, 0x95, 0xcf, 0x01, 0xbf, 0x95, 0xce, 0xa9, 0x00, 0x9d, 0x06, 0x01, 0xca, 0x10, 0xcf, 0x01, + 0xbf, 0x60, 0x20, 0x8c, 0x22, 0xa9, 0x18, 0x95, 0xce, 0x20, 0xd0, 0x10, 0x70, 0x0c, 0xb0, 0x05, + 0xa5, 0x40, 0xd0, 0x06, 0x60, 0xa9, 0x03, 0x95, 0xce, 0x60, 0xa9, 0x01, 0x95, 0xce, 0x60, 0xb5, + 0xa1, 0x38, 0xe5, 0xa1, 0x08, 0xb0, 0x04, 0x49, 0xff, 0x69, 0x01, 0xc9, 0x31, 0x90, 0x02, 0xa9, + 0x30, 0x28, 0xb0, 0x02, 0x09, 0x80, 0x85, 0x62, 0xb5, 0x9e, 0x38, 0xe5, 0x9e, 0x08, 0xb0, 0x04, + 0x49, 0xff, 0x69, 0x01, 0xc9, 0x31, 0x90, 0x02, 0xa9, 0x30, 0x28, 0xb0, 0x02, 0x09, 0x80, 0x85, + 0x63, 0x60, 0xa9, 0x00, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x00, 0x95, 0xce, 0x9d, 0x06, 0x01, 0x60, + 0xa5, 0x63, 0x10, 0x04, 0xa9, 0x01, 0xd0, 0x02, 0xa9, 0x00, 0x95, 0xa4, 0x60, 0x48, 0x8a, 0x48, + 0x98, 0x48, 0xa0, 0x86, 0x20, 0x09, 0x25, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x60, 0xa9, 0x00, 0x8d, + 0x00, 0x01, 0xa2, 0x02, 0x86, 0x51, 0xb5, 0x95, 0x29, 0x01, 0xf0, 0x20, 0xb5, 0xcf, 0x01, 0xbf, + 0xc9, 0x19, 0xf0, 0x1a, 0xc9, 0x17, 0xd0, 0x03, 0x20, 0x10, 0x2e, 0xb5, 0xb6, 0x29, 0x02, 0x85, + 0x53, 0x20, 0x39, 0x1c, 0x20, 0x6e, 0x2e, 0xa6, 0x51, 0xf6, 0xe9, 0x20, 0x6e, 0x2e, 0xa6, 0x51, + 0xca, 0x10, 0xd3, 0x60, 0xb5, 0xe9, 0xaa, 0x20, 0x67, 0x1a, 0xa6, 0x51, 0xb4, 0xe6, 0xa9, 0x02, + 0x85, 0x4c, 0xb1, 0x04, 0x29, 0x7f, 0x20, 0x89, 0x2e, 0xc8, 0xc6, 0x4c, 0x10, 0xf4, 0x60, 0xc9, + 0x05, 0xd0, 0x03, 0x4c, 0x7b, 0x2f, 0xc9, 0x02, 0xd0, 0x03, 0x4c, 0x3c, 0x2f, 0xc9, 0x03, 0xd0, + 0x03, 0x4c, 0x51, 0x2f, 0xc9, 0x04, 0xd0, 0x03, 0x4c, 0x66, 0x2f, 0xc9, 0x62, 0xf0, 0x4b, 0xc9, + 0x2d, 0xf0, 0x3d, 0xc9, 0x2e, 0xf0, 0x39, 0x06, 0x53, 0xf0, 0x34, 0xc9, 0x13, 0xf0, 0x4b, 0xc9, + 0x14, 0xf0, 0x47, 0xc9, 0x31, 0xf0, 0x43, 0xc9, 0x64, 0xf0, 0x3c, 0xc9, 0x66, 0xf0, 0x31, 0xc9, + 0x0f, 0xf0, 0x34, 0xc9, 0x40, 0xf0, 0x30, 0xc9, 0x57, 0xf0, 0x08, 0xc9, 0x54, 0x90, 0x10, 0xc9, + 0x5b, 0x90, 0x24, 0xc9, 0x71, 0x90, 0x04, 0xc9, 0x7d, 0x90, 0x1c, 0xc9, 0x60, 0xf0, 0x0e, 0x60, + 0xa5, 0x29, 0xc9, 0x10, 0xf0, 0x01, 0x60, 0x4c, 0xd6, 0x2f, 0x4c, 0x0c, 0x31, 0x4c, 0x6b, 0x30, + 0xa5, 0x29, 0xc9, 0x0a, 0xb0, 0x01, 0x60, 0x4c, 0x4b, 0x30, 0x8a, 0xd0, 0xe2, 0x20, 0x0e, 0x33, + 0x20, 0x1c, 0x33, 0xb0, 0x2a, 0x48, 0x20, 0x15, 0x33, 0x68, 0x91, 0x04, 0x09, 0x80, 0x48, 0x98, + 0x18, 0x69, 0x28, 0xa8, 0x68, 0x91, 0x04, 0x29, 0x7f, 0x48, 0x98, 0x38, 0xe9, 0x28, 0xa8, 0x68, + 0x20, 0x0e, 0x33, 0xa9, 0x7d, 0xa2, 0x02, 0x20, 0x75, 0x31, 0xa0, 0x8e, 0x20, 0x09, 0x25, 0x4c, + 0x15, 0x33, 0x20, 0xd4, 0x30, 0xb0, 0xa8, 0xa6, 0x29, 0xbd, 0x5e, 0x4b, 0x85, 0x4e, 0xbd, 0x12, + 0x4c, 0xa8, 0xbd, 0xfe, 0x4b, 0xd0, 0x3d, 0x20, 0xd4, 0x30, 0xb0, 0xe9, 0xa6, 0x29, 0xbd, 0x72, + 0x4b, 0x85, 0x4e, 0xbd, 0x3a, 0x4c, 0xa8, 0xbd, 0x26, 0x4c, 0xd0, 0x28, 0x20, 0xd4, 0x30, 0xb0, + 0xd4, 0xa6, 0x29, 0xbd, 0x86, 0x4b, 0x85, 0x4e, 0xbd, 0x62, 0x4c, 0xa8, 0xbd, 0x4e, 0x4c, 0xd0, + 0x13, 0x20, 0xd4, 0x30, 0xb0, 0xe9, 0xa6, 0x29, 0xbd, 0x9a, 0x4b, 0x85, 0x4e, 0xbd, 0x8a, 0x4c, + 0xa8, 0xbd, 0x76, 0x4c, 0xa6, 0x51, 0xf0, 0x08, 0x20, 0x01, 0x30, 0x68, 0x68, 0x4c, 0x68, 0x2e, + 0x95, 0x9e, 0x98, 0x95, 0xa1, 0xa5, 0x4e, 0x85, 0x29, 0xa2, 0x02, 0xb5, 0x95, 0x29, 0x01, 0xf0, + 0x0e, 0xb5, 0xd1, 0x95, 0x8e, 0xa5, 0x9e, 0x95, 0x8a, 0xa5, 0xa1, 0x95, 0x8c, 0xd0, 0x06, 0xa9, + 0x00, 0x95, 0x8a, 0x95, 0x8c, 0x20, 0x01, 0x30, 0xca, 0xd0, 0xe0, 0x78, 0x20, 0x42, 0x0d, 0xa2, + 0xff, 0x9a, 0x20, 0xbc, 0x09, 0x20, 0x84, 0x25, 0x58, 0x4c, 0xc2, 0x1b, 0x8a, 0xf0, 0x01, 0x60, + 0xa5, 0xa1, 0xc9, 0xa0, 0x90, 0xf9, 0xa6, 0x03, 0xde, 0x95, 0x4e, 0xe6, 0x28, 0x20, 0xed, 0x1a, + 0xa0, 0x8e, 0x20, 0x09, 0x25, 0xa9, 0x56, 0xa2, 0x0a, 0xa0, 0x24, 0x20, 0xe2, 0x17, 0xa9, 0x56, + 0xa2, 0x0b, 0xa0, 0x24, 0x4c, 0xe2, 0x17, 0xa9, 0x01, 0x49, 0xff, 0x35, 0xcf, 0x03, 0x95, 0xbc, + 0x6d, 0x27, 0xad, 0x15, 0xd0, 0x39, 0x78, 0x27, 0x8d, 0x15, 0xd0, 0xbc, 0x70, 0x27, 0x30, 0x09, + 0xad, 0x15, 0xd0, 0x39, 0x78, 0x27, 0x8d, 0x15, 0xd0, 0xb5, 0xec, 0xf0, 0x08, 0x20, 0x21, 0x0e, + 0xa9, 0xff, 0x99, 0x40, 0x4f, 0xb5, 0xef, 0xf0, 0x08, 0x20, 0x21, 0x0e, 0xa9, 0xff, 0x99, 0x40, + 0x4f, 0xe0, 0x01, 0xd0, 0x06, 0x20, 0x31, 0x11, 0x4c, 0x48, 0x30, 0x20, 0x45, 0x11, 0x4c, 0x42, + 0x0d, 0xa5, 0x29, 0xc9, 0x12, 0xd0, 0x01, 0x60, 0x48, 0x8a, 0x48, 0x98, 0x48, 0xa0, 0x8c, 0x20, + 0x09, 0x25, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0xa6, 0x51, 0xf0, 0x03, 0x4c, 0x01, 0x30, 0x4c, 0x7d, + 0x40, 0xa5, 0x05, 0x18, 0x69, 0x4c, 0x85, 0x05, 0xb1, 0x04, 0x29, 0x07, 0xc9, 0x05, 0xf0, 0x52, + 0xad, 0xde, 0x4f, 0xd0, 0x16, 0xa9, 0x01, 0x8d, 0xde, 0x4f, 0xb5, 0xe9, 0x8d, 0xe4, 0x4f, 0x8c, + 0xe1, 0x4f, 0xce, 0xe1, 0x4f, 0xce, 0xe4, 0x4f, 0x4c, 0xc8, 0x30, 0xad, 0xdf, 0x4f, 0xd0, 0x16, + 0xa9, 0x01, 0x8d, 0xdf, 0x4f, 0xb5, 0xe9, 0x8d, 0xe5, 0x4f, 0x8c, 0xe2, 0x4f, 0xce, 0xe2, 0x4f, + 0xce, 0xe5, 0x4f, 0x4c, 0xc8, 0x30, 0xad, 0xe0, 0x4f, 0xd0, 0x17, 0xa9, 0x01, 0x8d, 0xe0, 0x4f, + 0xb5, 0xe9, 0x8d, 0xe6, 0x4f, 0x8c, 0xe3, 0x4f, 0xce, 0xe3, 0x4f, 0xce, 0xe6, 0x4f, 0xa9, 0xfd, + 0x91, 0x04, 0xa5, 0x05, 0x38, 0xe9, 0x4c, 0x85, 0x05, 0x60, 0xa5, 0x29, 0xc9, 0x0b, 0xf0, 0x30, + 0x38, 0xb5, 0x9e, 0xc9, 0x10, 0xb0, 0x05, 0xbd, 0x5d, 0x4f, 0xd0, 0x24, 0xa9, 0xa1, 0xd5, 0x9e, + 0xb0, 0x05, 0xbd, 0x60, 0x4f, 0xd0, 0x19, 0xa9, 0xc5, 0xd5, 0xa1, 0xb0, 0x06, 0xb5, 0xcf, 0x01, + 0xbf, 0xc9, 0x0e, 0xf0, 0x0d, 0xb5, 0xa1, 0xc9, 0x31, 0xb0, 0x05, 0xbd, 0x57, 0x4f, 0xd0, 0x02, + 0x38, 0x60, 0x18, 0x60, 0xb5, 0xcf, 0x01, 0xbf, 0xc9, 0x19, 0xf0, 0x15, 0xb5, 0xb6, 0x29, 0x04, + 0xf0, 0x0f, 0xa9, 0x17, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x10, 0x95, 0xce, 0xa9, 0x00, 0x9d, 0x06, + 0x01, 0x95, 0xaa, 0xb1, 0x04, 0x4c, 0xa9, 0x2e, 0xa2, 0x02, 0x18, 0xb5, 0x41, 0x75, 0x25, 0x95, + 0x41, 0xca, 0x10, 0xf7, 0xa2, 0x00, 0xb5, 0x41, 0xdd, 0x92, 0x43, 0x90, 0x19, 0xe8, 0xe0, 0x03, + 0x90, 0xf4, 0xa2, 0x02, 0x18, 0xbd, 0x92, 0x43, 0x7d, 0x8e, 0x43, 0x9d, 0x92, 0x43, 0xca, 0x10, + 0xf4, 0xe6, 0x28, 0x20, 0xed, 0x1a, 0x20, 0xdc, 0x32, 0xa0, 0x30, 0xad, 0x9c, 0x43, 0x20, 0x17, + 0x1b, 0xa0, 0x32, 0xad, 0x9d, 0x43, 0x20, 0x17, 0x1b, 0xa0, 0x34, 0xad, 0x9e, 0x43, 0x4c, 0x17, + 0x1b, 0x48, 0xa9, 0x00, 0x85, 0x25, 0x85, 0x26, 0x85, 0x27, 0x68, 0x95, 0x25, 0x4c, 0x2c, 0x31, + 0xad, 0x04, 0x01, 0xf0, 0xd1, 0xad, 0x7b, 0xcf, 0x01, 0xcf, 0x4d, 0x9b, 0xcf, 0x01, 0xcf, 0xd0, + 0x13, 0xad, 0x7e, 0xcf, 0x01, 0xcf, 0x4d, 0x9e, 0xcf, 0x01, 0xcf, 0xd0, 0x0b, 0xad, 0x81, 0xcf, + 0x01, 0xcf, 0x4d, 0xa1, 0xcf, 0x01, 0xcf, 0xd0, 0x03, 0x6c, 0x00, 0xde, 0xa2, 0x00, 0xbd, 0x88, + 0x43, 0xd5, 0x41, 0x90, 0x0b, 0xf0, 0x02, 0xb0, 0xa9, 0xe8, 0xe0, 0x03, 0x90, 0xf0, 0xb0, 0xa2, + 0xa2, 0x03, 0xb5, 0x41, 0x9d, 0x88, 0x43, 0xca, 0x10, 0xf8, 0xa2, 0x03, 0xbd, 0x88, 0x43, 0x9d, + 0x98, 0x43, 0xa9, 0x00, 0x9d, 0x9b, 0x43, 0xca, 0x10, 0xf2, 0x8d, 0x9e, 0x43, 0x08, 0xf8, 0xa2, + 0x17, 0x0e, 0x9a, 0x43, 0x2e, 0x99, 0x43, 0x2e, 0x98, 0x43, 0xa0, 0x03, 0xb9, 0x9b, 0x43, 0x79, + 0x9b, 0x43, 0x99, 0x9b, 0x43, 0x88, 0x10, 0xf4, 0xca, 0x10, 0xe6, 0x28, 0xa0, 0x3c, 0xad, 0x9c, + 0x43, 0x20, 0x17, 0x1b, 0xa0, 0x3e, 0xad, 0x9d, 0x43, 0x20, 0x17, 0x1b, 0xa0, 0x40, 0xad, 0x9e, + 0x43, 0x4c, 0x17, 0x1b, 0xb0, 0x04, 0xcf, 0x04, 0x4a, 0x29, 0x0f, 0x60, 0xa6, 0x29, 0xa9, 0x00, + 0x85, 0x51, 0x8a, 0x85, 0x4e, 0xbd, 0xc2, 0x4b, 0xa8, 0xbd, 0xae, 0x4b, 0x4c, 0x8e, 0x2f, 0xa2, + 0x02, 0x86, 0x4f, 0xa6, 0x4f, 0xbd, 0xde, 0x4f, 0xd0, 0x03, 0x4c, 0xc4, 0x32, 0xfe, 0xde, 0x4f, + 0xc9, 0x08, 0xd0, 0x23, 0x20, 0xcc, 0x32, 0xa6, 0x4f, 0xbc, 0xe1, 0x4f, 0xbd, 0xe4, 0x4f, 0xaa, + 0xa9, 0x2f, 0x20, 0xe2, 0x17, 0xa6, 0x4f, 0xbc, 0xe1, 0x4f, 0xbd, 0xe4, 0x4f, 0xaa, 0xe8, 0xa9, + 0x30, 0x20, 0xe2, 0x17, 0x4c, 0xc4, 0x32, 0xc9, 0x0c, 0xd0, 0x1e, 0xbc, 0xe1, 0x4f, 0xbd, 0xe4, + 0x4f, 0xaa, 0xa9, 0x31, 0x20, 0xe2, 0x17, 0xa6, 0x4f, 0xbc, 0xe1, 0x4f, 0xbd, 0xe4, 0x4f, 0xaa, + 0xe8, 0xa9, 0x32, 0x20, 0xe2, 0x17, 0x4c, 0xc4, 0x32, 0xc9, 0x10, 0xf0, 0xba, 0xc9, 0x14, 0xd0, + 0x31, 0xbc, 0xe1, 0x4f, 0xbd, 0xe4, 0x4f, 0xaa, 0xa9, 0x00, 0x20, 0xe2, 0x17, 0x88, 0x88, 0xa5, + 0x04, 0x18, 0x69, 0x50, 0x85, 0x04, 0xa5, 0x05, 0x69, 0x4c, 0x85, 0x05, 0xa9, 0xf8, 0x91, 0x04, + 0xa6, 0x4f, 0xbc, 0xe1, 0x4f, 0xbd, 0xe4, 0x4f, 0xaa, 0xe8, 0xa9, 0x33, 0x20, 0xe2, 0x17, 0x4c, + 0xc4, 0x32, 0xc9, 0x18, 0xd0, 0x05, 0xa9, 0x00, 0x9d, 0xde, 0x4f, 0xc6, 0x4f, 0x30, 0x03, 0x4c, + 0x2c, 0x32, 0x60, 0x48, 0x8a, 0x48, 0x98, 0x48, 0xa0, 0x8d, 0x20, 0x09, 0x25, 0x68, 0xa8, 0x68, + 0xaa, 0x68, 0x60, 0xa2, 0x02, 0xb5, 0x41, 0x9d, 0x98, 0x43, 0xa9, 0x00, 0x9d, 0x9b, 0x43, 0xca, + 0x10, 0xf3, 0x8d, 0x9e, 0x43, 0x08, 0xf8, 0xa2, 0x17, 0x0e, 0x9a, 0x43, 0x2e, 0x99, 0x43, 0x2e, + 0x98, 0x43, 0xa0, 0x03, 0xb9, 0x9b, 0x43, 0x79, 0x9b, 0x43, 0x99, 0x9b, 0x43, 0x88, 0x10, 0xf4, + 0xca, 0x10, 0xe6, 0x28, 0x60, 0x85, 0x57, 0x86, 0x58, 0x84, 0x59, 0x60, 0xa5, 0x57, 0xa6, 0x58, + 0xa4, 0x59, 0x60, 0xa6, 0x51, 0xb5, 0xe9, 0x85, 0x5b, 0x84, 0x5a, 0xa5, 0x29, 0x0a, 0xaa, 0xbd, + 0xe2, 0x4c, 0x85, 0x14, 0xbd, 0xe3, 0x4c, 0x85, 0x15, 0xa0, 0x00, 0xa9, 0x01, 0x85, 0x5c, 0xb1, + 0x14, 0x30, 0x1e, 0xd0, 0x02, 0x46, 0x5c, 0xc8, 0xc8, 0xb1, 0x14, 0xc5, 0x5a, 0xf0, 0x02, 0x46, + 0x5c, 0xc8, 0xb1, 0x14, 0xc5, 0x5b, 0xf0, 0x02, 0x46, 0x5c, 0xa5, 0x5c, 0xd0, 0x05, 0xc8, 0xd0, + 0xda, 0x38, 0x60, 0xcf, 0x03, 0x88, 0xa9, 0x00, 0x91, 0x14, 0xa6, 0x29, 0xd6, 0x2a, 0xc8, 0xb1, + 0x14, 0x29, 0x7f, 0x18, 0x60, 0xa5, 0x29, 0x0a, 0xaa, 0xbd, 0xe2, 0x4c, 0x85, 0x14, 0xbd, 0xe3, + 0x4c, 0x85, 0x15, 0xa0, 0x00, 0xb1, 0x14, 0x30, 0x31, 0xd0, 0x28, 0xc8, 0xb1, 0x14, 0x48, 0xc8, + 0xb1, 0x14, 0x48, 0xc8, 0x84, 0x52, 0xb1, 0x14, 0xaa, 0x20, 0x67, 0x1a, 0x68, 0xa8, 0x68, 0x29, + 0x7f, 0x91, 0x04, 0x09, 0x80, 0x48, 0x98, 0x18, 0x69, 0x28, 0xa8, 0x68, 0x91, 0x04, 0xa4, 0x52, + 0x4c, 0xaf, 0x33, 0xcf, 0x04, 0xc8, 0x4c, 0x7e, 0x33, 0xa2, 0x04, 0xa9, 0x00, 0x9d, 0x97, 0x4e, + 0xca, 0x10, 0xfa, 0xa5, 0x29, 0x0a, 0xaa, 0xbd, 0x9d, 0x4e, 0x48, 0xbd, 0x9c, 0x4e, 0x48, 0x60, + 0xa9, 0x13, 0x85, 0x4e, 0xa5, 0x4e, 0x0a, 0xaa, 0x20, 0xda, 0x33, 0xc6, 0x4e, 0x10, 0xf5, 0x60, + 0xbd, 0xe2, 0x4c, 0x85, 0x14, 0xbd, 0xe3, 0x4c, 0x85, 0x15, 0xa0, 0x00, 0xb1, 0x14, 0x30, 0x0a, + 0xa9, 0x01, 0x91, 0x14, 0x20, 0x63, 0x3a, 0x4c, 0xe6, 0x33, 0x60, 0x60, 0xa9, 0x03, 0x8d, 0x97, + 0x4e, 0x60, 0xa9, 0x03, 0x8d, 0x97, 0x4e, 0x60, 0xa9, 0x1f, 0x8d, 0x9a, 0x4e, 0xa9, 0x01, 0x85, + 0x71, 0xa9, 0x0b, 0x85, 0x74, 0xa9, 0x0b, 0x85, 0x72, 0xa9, 0x07, 0x85, 0x75, 0x85, 0x76, 0xa9, + 0x1a, 0x85, 0x73, 0xa9, 0xff, 0x85, 0x77, 0x85, 0x78, 0xa9, 0xf4, 0x85, 0x79, 0x60, 0xa2, 0x00, + 0xb5, 0x02, 0xa8, 0xc0, 0x32, 0xd0, 0xf7, 0xa9, 0xfc, 0xa2, 0x02, 0x9d, 0x9a, 0xd8, 0x9d, 0xc2, + 0xd8, 0xca, 0x10, 0xf7, 0xa9, 0x1b, 0x85, 0x71, 0x85, 0x72, 0xa9, 0x01, 0x85, 0x73, 0xa9, 0x09, + 0x85, 0x74, 0xa9, 0x0a, 0x85, 0x75, 0xa9, 0x05, 0x85, 0x76, 0xa9, 0xff, 0x85, 0x77, 0xa9, 0xfc, + 0x85, 0x78, 0xa9, 0xf8, 0x85, 0x79, 0x60, 0xa9, 0x05, 0x85, 0x6e, 0x85, 0x70, 0xa9, 0x0b, 0x85, + 0x6f, 0xa9, 0x22, 0x85, 0x71, 0xa9, 0x04, 0x85, 0x74, 0xa9, 0xff, 0x85, 0x77, 0x60, 0xa9, 0x06, + 0x85, 0x71, 0xa9, 0x1b, 0x85, 0x72, 0xa9, 0x05, 0x85, 0x74, 0x85, 0x75, 0xa9, 0xff, 0x85, 0x77, + 0xa9, 0xf2, 0x85, 0x78, 0x60, 0xa9, 0xfa, 0xa2, 0x03, 0x9d, 0x9b, 0xd8, 0x9d, 0xc3, 0xd8, 0xca, + 0x10, 0xf7, 0xa9, 0x04, 0x85, 0x6e, 0x85, 0x70, 0xa9, 0x0c, 0x85, 0x6f, 0xa9, 0x10, 0x85, 0x71, + 0x85, 0x72, 0xa9, 0x05, 0x85, 0x74, 0xa9, 0x06, 0x85, 0x75, 0xa9, 0xfc, 0x85, 0x77, 0xa9, 0xff, + 0x85, 0x78, 0x60, 0xa9, 0x01, 0x8d, 0x97, 0x4e, 0x60, 0xa2, 0x04, 0xa9, 0x02, 0x9d, 0x0f, 0x01, + 0xa9, 0x82, 0x9d, 0x14, 0x01, 0xca, 0x10, 0xf3, 0xa9, 0x00, 0x8d, 0x18, 0x01, 0x8d, 0x12, 0x01, + 0xa9, 0x06, 0x8d, 0x38, 0x01, 0x8d, 0x1e, 0x01, 0x8d, 0x32, 0x01, 0x8d, 0x3c, 0x01, 0x8d, 0x3d, + 0x01, 0xa9, 0x02, 0x8d, 0x1b, 0x01, 0x8d, 0x2f, 0x01, 0x8d, 0x39, 0x01, 0x8d, 0x3b, 0x01, 0xa6, + 0x40, 0xd0, 0x02, 0xa9, 0x06, 0x8d, 0x20, 0x01, 0x8d, 0x34, 0x01, 0x8d, 0x3e, 0x01, 0xa9, 0x12, + 0xa6, 0x40, 0xd0, 0x02, 0xa9, 0x14, 0x8d, 0x37, 0x01, 0x8d, 0x48, 0x01, 0xa9, 0x15, 0xa6, 0x40, + 0xd0, 0x02, 0xa9, 0x13, 0x8d, 0x1a, 0x01, 0x8d, 0x2e, 0x01, 0x8d, 0x42, 0x01, 0xa9, 0x16, 0x8d, + 0x1f, 0x01, 0x8d, 0x33, 0x01, 0x8d, 0x1d, 0x01, 0x8d, 0x31, 0x01, 0xa6, 0x40, 0xd0, 0x02, 0xa9, + 0x14, 0x8d, 0x21, 0x01, 0x8d, 0x35, 0x01, 0x8d, 0x3f, 0x01, 0xa9, 0x21, 0x8d, 0x19, 0x01, 0x8d, + 0x2d, 0x01, 0x8d, 0x41, 0x01, 0xa6, 0x40, 0xf0, 0x02, 0xa9, 0x25, 0x8d, 0x43, 0x01, 0x8d, 0x45, + 0x01, 0xa9, 0x26, 0xa6, 0x40, 0xd0, 0x02, 0xa9, 0x22, 0x8d, 0x46, 0x01, 0x8d, 0x47, 0x01, 0x8d, + 0x49, 0x01, 0xa9, 0x05, 0x8d, 0x28, 0x01, 0x8d, 0x29, 0x01, 0xa9, 0x07, 0x8d, 0x23, 0x01, 0x8d, + 0x2a, 0x01, 0xa9, 0x0a, 0x8d, 0x24, 0x01, 0x8d, 0x2b, 0x01, 0xa9, 0x0c, 0x8d, 0x25, 0x01, 0x8d, + 0x27, 0x01, 0x60, 0xa9, 0x01, 0x8d, 0x97, 0x4e, 0x60, 0xa9, 0x01, 0x8d, 0x97, 0x4e, 0x8d, 0x98, + 0x4e, 0x8d, 0x99, 0x4e, 0x60, 0xa9, 0xff, 0x8d, 0x1c, 0xdb, 0x8d, 0x1d, 0xdb, 0x8d, 0x44, 0xdb, + 0x8d, 0x45, 0xdb, 0x8d, 0x6c, 0xdb, 0x8d, 0x6d, 0xdb, 0x8d, 0x94, 0xdb, 0x8d, 0x95, 0xdb, 0xa6, + 0x03, 0xbd, 0x95, 0x4e, 0xd0, 0x03, 0x20, 0xef, 0x2f, 0x60, 0xa9, 0xff, 0x8d, 0x1e, 0xdb, 0xa9, + 0x01, 0x8d, 0x97, 0x4e, 0x8d, 0x98, 0x4e, 0xa9, 0x08, 0x85, 0x71, 0x85, 0x72, 0x85, 0x73, 0xa9, + 0x03, 0x85, 0x74, 0xa9, 0x05, 0x85, 0x6f, 0xa9, 0x07, 0x85, 0x75, 0xa9, 0x09, 0x85, 0x76, 0xa9, + 0x0b, 0x85, 0x6e, 0xa9, 0xf8, 0x85, 0x77, 0xa9, 0xf1, 0x85, 0x78, 0xa9, 0xea, 0x85, 0x79, 0x60, + 0xa2, 0x00, 0xa9, 0xfe, 0x9d, 0x78, 0xd8, 0x9d, 0x00, 0xd9, 0x9d, 0x00, 0xda, 0x9d, 0x00, 0xdb, + 0xe8, 0xd0, 0xf1, 0xa2, 0x7f, 0xa9, 0x00, 0x9d, 0x40, 0x83, 0xca, 0x10, 0xfa, 0x8d, 0x17, 0xd0, + 0xa9, 0xff, 0x8d, 0x1d, 0xd0, 0xa9, 0x01, 0x8d, 0x97, 0x4e, 0x8d, 0x98, 0x4e, 0xa9, 0x00, 0x8d, + 0x2e, 0x43, 0x8d, 0x2f, 0x43, 0x8d, 0x30, 0x43, 0xa9, 0x10, 0x8d, 0x31, 0x43, 0xa9, 0x06, 0x8d, + 0x36, 0x43, 0xa9, 0x07, 0x8d, 0x37, 0x43, 0x60, 0xa5, 0x30, 0xd0, 0x32, 0xa5, 0x7b, 0xd0, 0x2e, + 0xce, 0x97, 0x4e, 0x10, 0x29, 0xad, 0x98, 0x4e, 0xd0, 0x13, 0xa0, 0x81, 0x20, 0x09, 0x25, 0xa9, + 0x1d, 0xa2, 0x09, 0xa0, 0x07, 0x20, 0xe2, 0x17, 0xee, 0x98, 0x4e, 0xd0, 0x11, 0xa9, 0x1e, 0xa2, + 0x09, 0xa0, 0x07, 0x20, 0xe2, 0x17, 0xce, 0x98, 0x4e, 0xa9, 0x05, 0x8d, 0x97, 0x4e, 0x60, 0xa5, + 0x7b, 0xd0, 0x28, 0xad, 0x97, 0x4e, 0x30, 0x23, 0xa5, 0x30, 0xf0, 0x1f, 0xa5, 0x2a, 0x05, 0x2b, + 0x05, 0x2c, 0xd0, 0x17, 0xce, 0x97, 0x4e, 0xad, 0x97, 0x4e, 0xc9, 0x02, 0xd0, 0x03, 0x20, 0x4f, + 0x42, 0x18, 0x69, 0x10, 0xa2, 0x0c, 0xa0, 0x11, 0x4c, 0xe2, 0x17, 0x60, 0xa0, 0x00, 0xb6, 0x00, + 0xe0, 0xef, 0xd0, 0xf8, 0xa5, 0x30, 0xd0, 0x4f, 0xad, 0x98, 0x4e, 0x30, 0x18, 0xce, 0x98, 0x4e, + 0x20, 0x4f, 0x42, 0xa9, 0x1a, 0xa2, 0x0b, 0xa0, 0x25, 0x20, 0xe2, 0x17, 0xa9, 0x07, 0xa2, 0x0c, + 0xa0, 0x25, 0x20, 0xe2, 0x17, 0xa5, 0x7b, 0xd0, 0x2e, 0xce, 0x99, 0x4e, 0x10, 0x29, 0xad, 0x97, + 0x4e, 0xd0, 0x13, 0xa0, 0x81, 0x20, 0x09, 0x25, 0xa9, 0x1d, 0xa2, 0x09, 0xa0, 0x21, 0x20, 0xe2, + 0x17, 0xee, 0x97, 0x4e, 0xd0, 0x11, 0xa9, 0x1e, 0xa2, 0x09, 0xa0, 0x21, 0x20, 0xe2, 0x17, 0xce, + 0x97, 0x4e, 0xa9, 0x05, 0x8d, 0x99, 0x4e, 0x60, 0xa5, 0x7b, 0xd0, 0x20, 0xad, 0x97, 0x4e, 0x30, + 0x1b, 0xa5, 0x2d, 0xd0, 0x17, 0xce, 0x97, 0x4e, 0xad, 0x97, 0x4e, 0xc9, 0x02, 0xd0, 0x03, 0x20, + 0x4f, 0x42, 0x18, 0x69, 0x10, 0xa2, 0x0c, 0xa0, 0x1d, 0x20, 0xe2, 0x17, 0xce, 0x99, 0x4e, 0x30, + 0x01, 0x60, 0xa9, 0x20, 0x8d, 0x99, 0x4e, 0xad, 0x98, 0x4e, 0xf0, 0x15, 0xce, 0x98, 0x4e, 0xa9, + 0x06, 0xa2, 0x06, 0xa0, 0x09, 0x20, 0xe2, 0x17, 0xa9, 0x60, 0xa2, 0x06, 0xa0, 0x15, 0x4c, 0xe2, + 0x17, 0xee, 0x98, 0x4e, 0xa9, 0x60, 0xa2, 0x06, 0xa0, 0x09, 0x20, 0xe2, 0x17, 0xa9, 0x06, 0xa2, + 0x06, 0xa0, 0x15, 0x4c, 0xe2, 0x17, 0xad, 0x70, 0x4d, 0xf0, 0x28, 0xee, 0x99, 0x4e, 0xad, 0x99, + 0x4e, 0xc9, 0x20, 0xd0, 0x0c, 0xa9, 0x34, 0xa2, 0x04, 0xa0, 0x0b, 0x20, 0xe2, 0x17, 0x4c, 0x8d, + 0x37, 0xc9, 0x40, 0xd0, 0x0e, 0xa9, 0x00, 0x8d, 0x99, 0x4e, 0xa9, 0x36, 0xa2, 0x04, 0xa0, 0x0b, + 0x20, 0xe2, 0x17, 0xad, 0x70, 0x4d, 0xd0, 0x22, 0xad, 0x97, 0x4e, 0x30, 0x1d, 0xce, 0x97, 0x4e, + 0x20, 0x4f, 0x42, 0xa9, 0x16, 0xa2, 0x08, 0xa0, 0x0b, 0x20, 0xe2, 0x17, 0xa9, 0x16, 0xa2, 0x09, + 0xa0, 0x0b, 0x20, 0xe2, 0x17, 0xa9, 0x06, 0x20, 0x90, 0x40, 0xad, 0x74, 0x4d, 0xf0, 0x28, 0xee, + 0x9a, 0x4e, 0xad, 0x9a, 0x4e, 0xc9, 0x20, 0xd0, 0x0c, 0xa9, 0x35, 0xa2, 0x04, 0xa0, 0x1c, 0x20, + 0xe2, 0x17, 0x4c, 0xe1, 0x37, 0xc9, 0x40, 0xd0, 0x0e, 0xa9, 0x00, 0x8d, 0x9a, 0x4e, 0xa9, 0x37, + 0xa2, 0x04, 0xa0, 0x1c, 0x20, 0xe2, 0x17, 0xad, 0x74, 0x4d, 0xd0, 0x2b, 0xad, 0x98, 0x4e, 0x30, + 0x26, 0xce, 0x98, 0x4e, 0xa9, 0x00, 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, 0x20, 0x4f, 0x42, + 0xa9, 0x16, 0xa2, 0x08, 0xa0, 0x19, 0x20, 0xe2, 0x17, 0xa9, 0x16, 0xa2, 0x09, 0xa0, 0x19, 0x20, + 0xe2, 0x17, 0xa9, 0x06, 0x20, 0x9a, 0x40, 0xe6, 0x77, 0x30, 0x2b, 0xa5, 0x77, 0xc9, 0x03, 0xf0, + 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0xa4, 0x40, 0x4c, 0x40, 0x38, 0xa6, 0x71, 0xe0, 0x03, 0xb0, + 0xf4, 0xa9, 0x06, 0x20, 0xa4, 0x40, 0xe6, 0x71, 0xa9, 0x02, 0x85, 0x77, 0xd0, 0xe7, 0xa9, 0xa0, + 0x85, 0x77, 0xa9, 0x01, 0x85, 0x71, 0xad, 0x70, 0x4d, 0xf0, 0x2f, 0xe6, 0x78, 0x30, 0x2b, 0xa5, + 0x78, 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x90, 0x40, 0x4c, 0x74, 0x38, 0xa6, + 0x72, 0xe0, 0x0c, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0x90, 0x40, 0xe6, 0x72, 0xa9, 0x02, 0x85, 0x78, + 0xd0, 0xe7, 0xa9, 0xe4, 0x85, 0x78, 0xa9, 0x0b, 0x85, 0x72, 0xad, 0x74, 0x4d, 0xf0, 0x2f, 0xe6, + 0x79, 0x30, 0x2b, 0xa5, 0x79, 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x9a, 0x40, + 0x4c, 0xa8, 0x38, 0xa6, 0x73, 0xe0, 0x1b, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0x9a, 0x40, 0xe6, 0x73, + 0xa9, 0x02, 0x85, 0x79, 0xd0, 0xe7, 0xa9, 0xe4, 0x85, 0x79, 0xa9, 0x1a, 0x85, 0x73, 0x4c, 0x70, + 0x2c, 0xad, 0x99, 0x4d, 0xd0, 0x1b, 0xad, 0x99, 0x4e, 0x30, 0x16, 0xce, 0x99, 0x4e, 0xa9, 0x0a, + 0xa0, 0x19, 0x20, 0x8a, 0x3a, 0xa9, 0x0a, 0xa0, 0x1a, 0x20, 0x8a, 0x3a, 0xa9, 0x06, 0x20, 0x90, + 0x40, 0xad, 0x91, 0x4d, 0xd0, 0x18, 0xad, 0x9a, 0x4e, 0x30, 0x13, 0xce, 0x9a, 0x4e, 0xa9, 0x0a, + 0xa0, 0x00, 0x20, 0x8a, 0x3a, 0xa9, 0x15, 0xa2, 0x0b, 0xa0, 0x00, 0x20, 0xe2, 0x17, 0xa5, 0x30, + 0x0d, 0x81, 0x4d, 0xf0, 0x07, 0xa5, 0x30, 0x0d, 0x89, 0x4d, 0xd0, 0x1f, 0xad, 0x9b, 0x4e, 0x30, + 0x1a, 0xce, 0x9b, 0x4e, 0xa9, 0x19, 0xa2, 0x02, 0xa0, 0x22, 0x20, 0xe2, 0x17, 0xa9, 0x03, 0xa0, + 0x1e, 0x20, 0x8a, 0x3a, 0xa9, 0x06, 0xa0, 0x20, 0x20, 0x8a, 0x3a, 0xe6, 0x77, 0x30, 0x2b, 0xa5, + 0x77, 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x86, 0x40, 0x4c, 0x44, 0x39, 0xa6, + 0x71, 0xe0, 0x1c, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0x86, 0x40, 0xe6, 0x71, 0xa9, 0x02, 0x85, 0x77, + 0xd0, 0xe7, 0xa9, 0xe0, 0x85, 0x77, 0xa9, 0x1b, 0x85, 0x71, 0xad, 0x99, 0x4d, 0xf0, 0x2f, 0xe6, + 0x78, 0x30, 0x2b, 0xa5, 0x78, 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x90, 0x40, + 0x4c, 0x78, 0x39, 0xa6, 0x72, 0xe0, 0x1c, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0x90, 0x40, 0xe6, 0x72, + 0xa9, 0x02, 0x85, 0x78, 0xd0, 0xe7, 0xa9, 0xe0, 0x85, 0x78, 0xa9, 0x1b, 0x85, 0x72, 0xe6, 0x79, + 0x30, 0x2b, 0xa5, 0x79, 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0xb4, 0x40, 0x4c, + 0xa7, 0x39, 0xa6, 0x73, 0xe0, 0x02, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0xb4, 0x40, 0xe6, 0x73, 0xa9, + 0x02, 0x85, 0x79, 0xd0, 0xe7, 0xa9, 0xe2, 0x85, 0x79, 0xa9, 0x01, 0x85, 0x73, 0x4c, 0x70, 0x2c, + 0xa5, 0x30, 0xd0, 0x0f, 0xad, 0x97, 0x4e, 0x30, 0x0a, 0xce, 0x97, 0x4e, 0xa9, 0x05, 0xa0, 0x01, + 0x20, 0xa0, 0x3a, 0x20, 0x28, 0x32, 0x4c, 0x70, 0x2c, 0x20, 0x28, 0x32, 0xad, 0xc3, 0x4d, 0x0d, + 0xc7, 0x4d, 0x0d, 0xcb, 0x4d, 0x0d, 0xcf, 0x01, 0xcf, 0x4d, 0x0d, 0xd3, 0x4d, 0xd0, 0x0f, 0xad, + 0x97, 0x4e, 0x30, 0x0a, 0xce, 0x97, 0x4e, 0xa9, 0x02, 0xa0, 0x21, 0x4c, 0xa0, 0x3a, 0xad, 0xd7, + 0x4d, 0x0d, 0xdb, 0x4d, 0x0d, 0xdf, 0x4d, 0x0d, 0xe3, 0x4d, 0x0d, 0xe7, 0x4d, 0x0d, 0xeb, 0x4d, + 0xd0, 0x0f, 0xad, 0x98, 0x4e, 0x30, 0x0a, 0xce, 0x98, 0x4e, 0xa9, 0x05, 0xa0, 0x26, 0x4c, 0xa0, + 0x3a, 0xe6, 0x77, 0x30, 0x2b, 0xa5, 0x77, 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, + 0xa4, 0x40, 0x4c, 0x38, 0x3a, 0xa6, 0x71, 0xe0, 0x24, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0xa4, 0x40, + 0xe6, 0x71, 0xa9, 0x02, 0x85, 0x77, 0xd0, 0xe7, 0xa9, 0x22, 0x85, 0x71, 0xa9, 0xe0, 0x85, 0x77, + 0xad, 0xef, 0x4d, 0x0d, 0xf3, 0x4d, 0xf0, 0x11, 0xa5, 0x6e, 0x85, 0x70, 0xe6, 0x6e, 0xc9, 0x23, + 0x90, 0x04, 0xa9, 0x05, 0x85, 0x6e, 0x4c, 0x4e, 0x40, 0xa5, 0x6e, 0x85, 0x70, 0xc6, 0x6e, 0xc9, + 0x06, 0xb0, 0x04, 0xa9, 0x24, 0x85, 0x6e, 0x4c, 0x4e, 0x40, 0x60, 0xa5, 0x14, 0x18, 0x69, 0x04, + 0x85, 0x14, 0x90, 0x02, 0xe6, 0x15, 0x60, 0xa5, 0x29, 0x0a, 0xaa, 0xbd, 0xc5, 0x4e, 0x48, 0xbd, + 0xc4, 0x4e, 0x48, 0x60, 0xa5, 0x0a, 0x18, 0x69, 0x04, 0x85, 0x0a, 0xa5, 0x0b, 0x69, 0x00, 0x85, + 0x0b, 0x60, 0x20, 0x4f, 0x42, 0x85, 0x6c, 0x84, 0x6d, 0xa9, 0x13, 0x20, 0xca, 0x3a, 0xa9, 0x13, + 0x20, 0xca, 0x3a, 0xa9, 0x14, 0x4c, 0xca, 0x3a, 0x20, 0x8a, 0x3a, 0xc6, 0x6c, 0xa9, 0x17, 0x4c, + 0xca, 0x3a, 0x20, 0x8a, 0x3a, 0xc6, 0x6c, 0xa9, 0x2d, 0x4c, 0xca, 0x3a, 0x20, 0x4f, 0x42, 0x85, + 0x6c, 0x84, 0x6d, 0xa9, 0x63, 0x20, 0xca, 0x3a, 0xa9, 0x63, 0x20, 0xca, 0x3a, 0xa9, 0x64, 0x4c, + 0xca, 0x3a, 0xa6, 0x6c, 0xa4, 0x6d, 0x20, 0xe2, 0x17, 0xe6, 0x6c, 0x60, 0xa5, 0x31, 0x0d, 0x00, + 0x4e, 0xd0, 0x0f, 0xad, 0x99, 0x4e, 0x30, 0x0a, 0xce, 0x99, 0x4e, 0xa9, 0x07, 0xa0, 0x0e, 0x20, + 0x8a, 0x3a, 0xad, 0xf8, 0x4d, 0x0d, 0xfc, 0x4d, 0xd0, 0x1d, 0xad, 0x9a, 0x4e, 0x30, 0x18, 0xce, + 0x9a, 0x4e, 0xad, 0x04, 0x4e, 0xf0, 0x09, 0xa9, 0x01, 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, + 0xa9, 0x07, 0xa0, 0x19, 0x20, 0x8a, 0x3a, 0xa5, 0x32, 0x0d, 0x11, 0x4e, 0x0d, 0x15, 0x4e, 0xd0, + 0x0f, 0xad, 0x9b, 0x4e, 0x30, 0x0a, 0xce, 0x9b, 0x4e, 0xa9, 0x02, 0xa0, 0x26, 0x20, 0xaa, 0x3a, + 0xad, 0x00, 0x4e, 0xd0, 0x0f, 0xad, 0x97, 0x4e, 0x30, 0x0a, 0xce, 0x97, 0x4e, 0xa9, 0x0a, 0xa0, + 0x01, 0x20, 0x8a, 0x3a, 0xa5, 0x31, 0x05, 0x32, 0xd0, 0x0f, 0xad, 0x98, 0x4e, 0x30, 0x0a, 0xce, + 0x98, 0x4e, 0xa9, 0x0a, 0xa0, 0x26, 0x20, 0x8a, 0x3a, 0xe6, 0x77, 0x30, 0x2b, 0xa5, 0x77, 0xc9, + 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x86, 0x40, 0x4c, 0x80, 0x3b, 0xa6, 0x71, 0xe0, + 0x0b, 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0x86, 0x40, 0xe6, 0x71, 0xa9, 0x02, 0x85, 0x77, 0xd0, 0xe7, + 0xa9, 0x06, 0x85, 0x71, 0xa9, 0xda, 0x85, 0x77, 0xe6, 0x78, 0x30, 0x2b, 0xa5, 0x78, 0xc9, 0x03, + 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x90, 0x40, 0x4c, 0xaf, 0x3b, 0xa6, 0x72, 0xe0, 0x20, + 0xb0, 0xf4, 0xa9, 0x06, 0x20, 0x90, 0x40, 0xe6, 0x72, 0xa9, 0x02, 0x85, 0x78, 0xd0, 0xe7, 0xa9, + 0x1b, 0x85, 0x72, 0xa9, 0xda, 0x85, 0x78, 0x4c, 0x70, 0x2c, 0xad, 0x99, 0x4e, 0x30, 0x11, 0xad, + 0x09, 0x4e, 0xd0, 0x0c, 0xce, 0x99, 0x4e, 0xa9, 0x01, 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, + 0xad, 0x0d, 0x4e, 0xd0, 0x18, 0xad, 0x97, 0x4e, 0x30, 0x13, 0xce, 0x97, 0x4e, 0xa9, 0x07, 0xa0, + 0x17, 0x20, 0x8a, 0x3a, 0xa9, 0x00, 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, 0xa5, 0x33, 0xd0, + 0x1d, 0xad, 0x98, 0x4e, 0x30, 0x18, 0xce, 0x98, 0x4e, 0xa9, 0x00, 0x85, 0x65, 0xa9, 0x07, 0x8d, + 0x21, 0x43, 0x20, 0x4f, 0x42, 0xa9, 0x18, 0xa2, 0x02, 0xa0, 0x23, 0x20, 0xe2, 0x17, 0xad, 0x11, + 0x4e, 0x0d, 0x15, 0x4e, 0xd0, 0x10, 0xa5, 0x6e, 0x85, 0x70, 0xc6, 0x6e, 0xc9, 0x05, 0xb0, 0x14, + 0xa9, 0x18, 0x85, 0x6e, 0xd0, 0x0e, 0xa5, 0x6e, 0x85, 0x70, 0xe6, 0x6e, 0xc9, 0x18, 0x90, 0x04, + 0xa9, 0x04, 0x85, 0x6e, 0x20, 0x4e, 0x40, 0xe6, 0x77, 0x30, 0x2b, 0xa5, 0x77, 0xc9, 0x03, 0xf0, + 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0xa4, 0x40, 0x4c, 0x5e, 0x3c, 0xa6, 0x71, 0xe0, 0x14, 0xb0, + 0xf4, 0xa9, 0x06, 0x20, 0xa4, 0x40, 0xe6, 0x71, 0xa9, 0x02, 0x85, 0x77, 0xd0, 0xe7, 0xa9, 0x10, + 0x85, 0x71, 0xa9, 0xc0, 0x85, 0x77, 0xe6, 0x78, 0x30, 0x2b, 0xa5, 0x78, 0xc9, 0x03, 0xf0, 0x0a, + 0xc9, 0x07, 0xf0, 0x19, 0x20, 0xac, 0x40, 0x4c, 0x8d, 0x3c, 0xa6, 0x72, 0xe0, 0x14, 0xb0, 0xf4, + 0xa9, 0x06, 0x20, 0xac, 0x40, 0xe6, 0x72, 0xa9, 0x02, 0x85, 0x78, 0xd0, 0xe7, 0xa9, 0x10, 0x85, + 0x72, 0xa9, 0xc0, 0x85, 0x78, 0x4c, 0x70, 0x2c, 0xad, 0x97, 0x4e, 0x30, 0x12, 0xad, 0x1e, 0x4e, + 0x0d, 0x22, 0x4e, 0xd0, 0x0a, 0xce, 0x97, 0x4e, 0xa9, 0x04, 0xa0, 0x26, 0x20, 0xb4, 0x3a, 0xa0, + 0x00, 0xb6, 0x00, 0xe0, 0xef, 0xf0, 0x0e, 0xa9, 0x80, 0x8d, 0xf9, 0x68, 0x8d, 0x82, 0x6f, 0x8d, + 0x09, 0x6a, 0x4c, 0x84, 0x05, 0x4c, 0x28, 0x32, 0xad, 0x97, 0x4e, 0x30, 0x11, 0xad, 0x33, 0x4e, + 0xd0, 0x0c, 0xce, 0x97, 0x4e, 0xa9, 0x00, 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, 0x20, 0x28, + 0x32, 0x4c, 0x70, 0x2c, 0xad, 0x97, 0x4e, 0xd0, 0x03, 0x4c, 0xaf, 0x3d, 0xad, 0x86, 0x4e, 0xd0, + 0x34, 0x8d, 0x97, 0x4e, 0x20, 0x3f, 0x42, 0xad, 0x15, 0xd0, 0x29, 0x1f, 0x8d, 0x15, 0xd0, 0xa9, + 0x61, 0xa2, 0x0b, 0xa0, 0x00, 0x20, 0xe2, 0x17, 0xa9, 0xb8, 0xa2, 0x02, 0x20, 0x75, 0x31, 0xa9, + 0x0b, 0xa2, 0x01, 0x20, 0x75, 0x31, 0xa2, 0x01, 0xa9, 0x00, 0x8d, 0x9a, 0x4e, 0xa9, 0x50, 0x8d, + 0x98, 0x4e, 0x4c, 0x4e, 0x3d, 0x20, 0x33, 0x41, 0xad, 0x1e, 0xd0, 0xaa, 0x29, 0x03, 0xf0, 0x10, + 0x8a, 0x29, 0xc0, 0xf0, 0x0b, 0xa2, 0x00, 0xa5, 0xcf, 0x01, 0xbf, 0xc9, 0x19, 0xf0, 0x03, 0x20, + 0x7d, 0x40, 0xce, 0x98, 0x4e, 0xd0, 0x43, 0xa9, 0x08, 0x8d, 0x98, 0x4e, 0xa5, 0x9e, 0xa2, 0x02, + 0xdd, 0x89, 0x4a, 0xb0, 0x03, 0xca, 0xd0, 0xf8, 0x8e, 0x99, 0x4e, 0xa9, 0x38, 0x18, 0x6d, 0x99, + 0x4e, 0xa2, 0x02, 0xa0, 0x10, 0x20, 0xe2, 0x17, 0xad, 0x9a, 0x4e, 0xd0, 0x10, 0xee, 0x9a, 0x4e, + 0xa9, 0x06, 0x20, 0x81, 0x3d, 0xa9, 0x06, 0x20, 0x8e, 0x3d, 0x4c, 0x80, 0x3d, 0xce, 0x9a, 0x4e, + 0xa9, 0x00, 0x20, 0x81, 0x3d, 0xa9, 0x00, 0x20, 0x8e, 0x3d, 0x60, 0x18, 0x69, 0x3b, 0x6d, 0x99, + 0x4e, 0xa2, 0x03, 0xa0, 0x12, 0x4c, 0xe2, 0x17, 0x18, 0x69, 0x3e, 0x6d, 0x99, 0x4e, 0xa2, 0x04, + 0xa0, 0x12, 0x4c, 0xe2, 0x17, 0xa9, 0x00, 0xa9, 0x5e, 0xa2, 0x0b, 0xa0, 0x25, 0x20, 0xe2, 0x17, + 0xa9, 0x5f, 0xa2, 0x0c, 0xa0, 0x26, 0x4c, 0xe2, 0x17, 0xad, 0x98, 0x4e, 0xf0, 0xe7, 0xaa, 0x20, + 0x59, 0x11, 0x29, 0x0f, 0x09, 0x80, 0xe0, 0x01, 0xd0, 0x04, 0xa9, 0x00, 0xf0, 0x05, 0x20, 0x59, + 0x11, 0x29, 0x07, 0x09, 0xf8, 0xa2, 0x11, 0x9d, 0xd3, 0xd8, 0x9d, 0xfb, 0xd8, 0x9d, 0x23, 0xd9, + 0x9d, 0x4b, 0xd9, 0xe0, 0x0c, 0xb0, 0x12, 0x9d, 0x86, 0xd8, 0x9d, 0xae, 0xd8, 0x9d, 0x76, 0xd9, + 0x9d, 0x9e, 0xd9, 0x9d, 0xc6, 0xd9, 0x9d, 0xee, 0xd9, 0xca, 0x10, 0xdb, 0xae, 0x98, 0x4e, 0xce, + 0x98, 0x4e, 0xa9, 0x3e, 0x85, 0xf2, 0xe0, 0x11, 0x90, 0x0b, 0x20, 0x59, 0x11, 0xc9, 0x10, 0xb0, + 0x04, 0xa9, 0x3c, 0x85, 0xf2, 0xa0, 0x8b, 0x20, 0x09, 0x25, 0xad, 0x9a, 0x4e, 0x49, 0x01, 0x8d, + 0x9a, 0x4e, 0xa9, 0x47, 0x18, 0x6d, 0x9a, 0x4e, 0xa2, 0x03, 0xa0, 0x0c, 0x20, 0xe2, 0x17, 0xa9, + 0x49, 0x18, 0x6d, 0x9a, 0x4e, 0xa2, 0x03, 0xa0, 0x19, 0x20, 0xe2, 0x17, 0xa9, 0x4b, 0x18, 0x6d, + 0x9a, 0x4e, 0xa2, 0x06, 0xa0, 0x0e, 0x20, 0xe2, 0x17, 0xa9, 0x4d, 0x18, 0x6d, 0x9a, 0x4e, 0xa2, + 0x06, 0xa0, 0x17, 0x4c, 0xe2, 0x17, 0xad, 0x97, 0x4e, 0x30, 0x0f, 0xad, 0x40, 0x4e, 0xd0, 0x0a, + 0xce, 0x97, 0x4e, 0xa9, 0x0a, 0xa0, 0x26, 0x20, 0xb4, 0x3a, 0xad, 0x98, 0x4e, 0x30, 0x14, 0xa5, + 0x36, 0x0d, 0x52, 0x4e, 0x0d, 0x56, 0x4e, 0xd0, 0x0a, 0xce, 0x98, 0x4e, 0xa9, 0x07, 0xa0, 0x26, + 0x20, 0xb4, 0x3a, 0x4c, 0x28, 0x32, 0xa5, 0x03, 0x0a, 0x0a, 0xaa, 0xa5, 0xa1, 0xc9, 0x64, 0x90, + 0x35, 0xc9, 0x8a, 0xb0, 0x0b, 0xbd, 0x4b, 0x01, 0xf0, 0x2c, 0xde, 0x4b, 0x01, 0x4c, 0xaf, 0x3e, + 0xe8, 0xc9, 0xb6, 0xb0, 0x0b, 0xbd, 0x4b, 0x01, 0xf0, 0x1c, 0xde, 0x4b, 0x01, 0x4c, 0xaf, 0x3e, + 0xe8, 0xbd, 0x4b, 0x01, 0xf0, 0x10, 0xde, 0x4b, 0x01, 0xa9, 0x01, 0xaa, 0x20, 0x75, 0x31, 0xa9, + 0xf4, 0xa2, 0x02, 0x4c, 0x75, 0x31, 0xa5, 0x7b, 0xd0, 0x03, 0x20, 0x4b, 0x10, 0xad, 0x15, 0xd0, + 0x29, 0x03, 0x8d, 0x15, 0xd0, 0x60, 0xad, 0x97, 0x4e, 0x30, 0x12, 0xad, 0x4a, 0x4e, 0x0d, 0x4e, + 0x4e, 0xd0, 0x0a, 0xce, 0x97, 0x4e, 0xa9, 0x04, 0xa0, 0x26, 0x20, 0xb4, 0x3a, 0x4c, 0x28, 0x32, + 0xad, 0x97, 0x4e, 0x30, 0x1d, 0xad, 0x5b, 0x4e, 0xd0, 0x18, 0xa9, 0x57, 0xa2, 0x03, 0xa0, 0x11, + 0x20, 0xe2, 0x17, 0xa9, 0x58, 0xa2, 0x04, 0xa0, 0x11, 0x20, 0xe2, 0x17, 0xce, 0x97, 0x4e, 0x20, + 0x4f, 0x42, 0xad, 0x98, 0x4e, 0x30, 0x23, 0xad, 0x5f, 0x4e, 0x0d, 0x63, 0x4e, 0x0d, 0x6b, 0x4e, + 0xd0, 0x18, 0xa9, 0x57, 0xa2, 0x03, 0xa0, 0x17, 0x20, 0xe2, 0x17, 0xa9, 0x58, 0xa2, 0x04, 0xa0, + 0x17, 0x20, 0xe2, 0x17, 0xce, 0x98, 0x4e, 0x20, 0x4f, 0x42, 0xad, 0x99, 0x4e, 0x30, 0x25, 0xa5, + 0x39, 0xd0, 0x21, 0xa9, 0x59, 0xa2, 0x09, 0xa0, 0x25, 0x20, 0xe2, 0x17, 0xa9, 0x5a, 0xa2, 0x08, + 0xa0, 0x25, 0x20, 0xe2, 0x17, 0xa9, 0x5b, 0xa2, 0x07, 0xa0, 0x25, 0x20, 0xe2, 0x17, 0x20, 0x4f, + 0x42, 0xce, 0x99, 0x4e, 0x60, 0xad, 0x97, 0x4e, 0x30, 0x0e, 0xa5, 0x3a, 0xd0, 0x0a, 0xce, 0x97, + 0x4e, 0xa9, 0x07, 0xa0, 0x01, 0x20, 0xb4, 0x3a, 0x4c, 0x28, 0x32, 0xce, 0x99, 0x4e, 0x10, 0x16, + 0xa9, 0x0a, 0x8d, 0x99, 0x4e, 0xad, 0x80, 0xd8, 0x29, 0x07, 0x49, 0x02, 0x09, 0xf8, 0xa2, 0x1b, + 0x9d, 0x80, 0xd8, 0xca, 0x10, 0xfa, 0xce, 0x9a, 0x4e, 0xf0, 0x18, 0x10, 0x05, 0xa9, 0x01, 0x8d, + 0x9a, 0x4e, 0xa5, 0x6e, 0x85, 0x70, 0xe6, 0x6e, 0xc9, 0x1b, 0x90, 0x04, 0xa9, 0x0b, 0x85, 0x6e, + 0x20, 0x4e, 0x40, 0xad, 0x97, 0x4e, 0xf0, 0x11, 0xad, 0x7d, 0x4e, 0xd0, 0x0c, 0xce, 0x97, 0x4e, + 0xa9, 0x5d, 0xa2, 0x0a, 0xa0, 0x25, 0x20, 0xe2, 0x17, 0xad, 0x98, 0x4e, 0xf0, 0x11, 0xad, 0x81, + 0x4e, 0xd0, 0x0c, 0xce, 0x98, 0x4e, 0xa9, 0x5c, 0xa2, 0x0a, 0xa0, 0x18, 0x20, 0xe2, 0x17, 0x20, + 0x28, 0x32, 0xa9, 0x02, 0x85, 0x4c, 0xa6, 0x4c, 0xf6, 0x77, 0x30, 0x67, 0xb5, 0x77, 0xc9, 0x03, + 0xf0, 0x1e, 0xc9, 0x07, 0xf0, 0x4d, 0xe0, 0x00, 0xd0, 0x06, 0x20, 0x86, 0x40, 0x4c, 0x49, 0x40, + 0xe0, 0x01, 0xd0, 0x06, 0x20, 0x90, 0x40, 0x4c, 0x49, 0x40, 0x20, 0x9a, 0x40, 0x4c, 0x49, 0x40, + 0xb4, 0x71, 0xe0, 0x00, 0xd0, 0x06, 0xc0, 0x23, 0xb0, 0xdc, 0x90, 0x04, 0xc0, 0x25, 0xb0, 0xd6, + 0xa9, 0x06, 0xe0, 0x00, 0xd0, 0x06, 0x20, 0x86, 0x40, 0x4c, 0x2f, 0x40, 0xe0, 0x01, 0xd0, 0x06, + 0x20, 0x90, 0x40, 0x4c, 0x2f, 0x40, 0x20, 0x9a, 0x40, 0xa6, 0x4c, 0xf6, 0x71, 0xa9, 0x02, 0x95, + 0x77, 0xd0, 0xb3, 0xa9, 0xca, 0x95, 0x77, 0xa9, 0x08, 0x95, 0x71, 0xe0, 0x00, 0xd0, 0x04, 0xa9, + 0xc8, 0x95, 0x77, 0xc6, 0x4c, 0x10, 0x8f, 0x60, 0x20, 0x78, 0x40, 0xa9, 0x1c, 0xa6, 0x6f, 0xa4, + 0x70, 0x20, 0xe2, 0x17, 0xa9, 0x1b, 0xa6, 0x6f, 0xa4, 0x6e, 0x4c, 0xe2, 0x17, 0x20, 0x78, 0x40, + 0xa9, 0x55, 0xa6, 0x6f, 0xa4, 0x70, 0x20, 0xe2, 0x17, 0xa9, 0x54, 0xa6, 0x6f, 0xa4, 0x6e, 0x4c, + 0xe2, 0x17, 0xa0, 0x89, 0x4c, 0x09, 0x25, 0xa9, 0x19, 0x95, 0xcf, 0x01, 0xbf, 0xa9, 0x10, 0x95, + 0xce, 0x60, 0x18, 0x69, 0x1f, 0xa6, 0x74, 0xa4, 0x71, 0x4c, 0xe2, 0x17, 0x18, 0x69, 0x1f, 0xa6, + 0x75, 0xa4, 0x72, 0x4c, 0xe2, 0x17, 0x18, 0x69, 0x1f, 0xa6, 0x76, 0xa4, 0x73, 0x4c, 0xe2, 0x17, + 0x18, 0x69, 0x07, 0x4c, 0x86, 0x40, 0xd0, 0xda, 0x18, 0x69, 0x07, 0x4c, 0x90, 0x40, 0xd0, 0xdc, + 0x18, 0x69, 0x07, 0x4c, 0x9a, 0x40, 0xd0, 0xde, 0xce, 0x01, 0x01, 0xd0, 0x25, 0x20, 0x59, 0x11, + 0x29, 0x0f, 0xf0, 0xf9, 0x8d, 0x01, 0x01, 0x20, 0x59, 0x11, 0x29, 0x30, 0x8d, 0x9a, 0xac, 0x8d, + 0x9b, 0xac, 0x09, 0xcc, 0x8d, 0x9a, 0xa4, 0x8d, 0x9b, 0xa4, 0x29, 0xb8, 0x8d, 0x32, 0xa4, 0x8d, + 0x33, 0xa4, 0xce, 0x02, 0x01, 0xd0, 0x1d, 0x20, 0x59, 0x11, 0x29, 0x0f, 0xf0, 0xf9, 0x8d, 0x02, + 0x01, 0x20, 0x59, 0x11, 0x29, 0x30, 0x8d, 0x8a, 0xad, 0x8d, 0x8b, 0xad, 0x09, 0xcc, 0x8d, 0x8a, + 0xa5, 0x8d, 0x8b, 0xa5, 0xce, 0x03, 0x01, 0xd0, 0x25, 0x20, 0x59, 0x11, 0x29, 0x0f, 0xf0, 0xf9, + 0x8d, 0x03, 0x01, 0x20, 0x59, 0x11, 0x29, 0x0c, 0x8d, 0xa2, 0xac, 0x8d, 0xa3, 0xac, 0x09, 0x33, + 0x8d, 0xa2, 0xa4, 0x8d, 0xa3, 0xa4, 0x29, 0x2e, 0x8d, 0x3a, 0xa7, 0x8d, 0x3b, 0xa7, 0x60, 0xa2, + 0x03, 0xa0, 0x00, 0x20, 0x59, 0x11, 0x3d, 0x22, 0x43, 0x99, 0x40, 0x83, 0x20, 0x59, 0x11, 0x3d, + 0x22, 0x43, 0x99, 0x80, 0x83, 0xcf, 0x03, 0xc8, 0xca, 0x10, 0xe8, 0xad, 0x2e, 0x43, 0xd0, 0x0e, + 0xad, 0x30, 0x43, 0xd0, 0x06, 0x20, 0x01, 0x42, 0x4c, 0x75, 0x41, 0xce, 0x30, 0x43, 0xad, 0x2f, + 0x43, 0xd0, 0x0e, 0xad, 0x31, 0x43, 0xd0, 0x06, 0x20, 0x20, 0x42, 0x4c, 0x75, 0x41, 0xce, 0x31, + 0x43, 0xa2, 0x01, 0xbd, 0x2e, 0x43, 0xf0, 0x17, 0xbd, 0x34, 0x43, 0x18, 0x69, 0x05, 0x9d, 0x34, + 0x43, 0xc9, 0xe0, 0x90, 0x0a, 0xa9, 0x00, 0x9d, 0x2e, 0x43, 0xa9, 0x02, 0x9d, 0x30, 0x43, 0xca, + 0x10, 0xe1, 0xad, 0x2e, 0x43, 0xf0, 0x00, 0xad, 0x2f, 0x43, 0xf0, 0x00, 0xa2, 0x01, 0xbd, 0x2e, + 0x43, 0xf0, 0x56, 0xa0, 0x01, 0xbd, 0x34, 0x43, 0xc9, 0xa8, 0xb0, 0x01, 0xc8, 0xbd, 0x32, 0x43, + 0xc5, 0x9e, 0xb0, 0x05, 0xfe, 0x32, 0x43, 0xd0, 0x05, 0xf0, 0x03, 0xde, 0x32, 0x43, 0x88, 0x10, + 0xec, 0xbd, 0x32, 0x43, 0x0a, 0x48, 0xad, 0x10, 0xd0, 0x90, 0x05, 0x1d, 0xc5, 0x42, 0xd0, 0x03, + 0x3d, 0xc7, 0x42, 0x8d, 0x10, 0xd0, 0x8a, 0x0a, 0xaa, 0x68, 0x9d, 0x0c, 0xd0, 0x8a, 0x4a, 0xaa, + 0xbd, 0x34, 0x43, 0x18, 0x69, 0x1d, 0x48, 0x8a, 0x0a, 0xaa, 0x68, 0x9d, 0x0d, 0xd0, 0x8a, 0x4a, + 0xaa, 0x20, 0x59, 0x11, 0x09, 0xf0, 0x9d, 0x2d, 0xd0, 0xca, 0x10, 0xa2, 0x60, 0xa9, 0x0d, 0x8d, + 0xfe, 0x8f, 0xad, 0x15, 0xd0, 0x09, 0x40, 0x8d, 0x15, 0xd0, 0xa9, 0x01, 0x8d, 0x2e, 0x43, 0xa9, + 0x50, 0x8d, 0x32, 0x43, 0xa9, 0x37, 0x8d, 0x34, 0x43, 0x4c, 0x29, 0x2e, 0xa9, 0x0e, 0x8d, 0xff, + 0x8f, 0xad, 0x15, 0xd0, 0x09, 0x80, 0x8d, 0x15, 0xd0, 0xa9, 0x01, 0x8d, 0x2f, 0x43, 0xa9, 0x5e, + 0x8d, 0x33, 0x43, 0xa9, 0x37, 0x8d, 0x35, 0x43, 0x4c, 0x29, 0x2e, 0xa2, 0x09, 0xa9, 0x00, 0x9d, + 0x40, 0x83, 0x9d, 0x80, 0x83, 0xcf, 0x03, 0xca, 0x10, 0xf5, 0x60, 0x48, 0x8a, 0x48, 0x98, 0x48, + 0xa0, 0x8a, 0x20, 0x09, 0x25, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x60, 0xa9, 0x58, 0x85, 0x49, 0xa9, + 0x04, 0x85, 0x4a, 0xa2, 0x27, 0xa9, 0x00, 0x9d, 0x00, 0x8c, 0xca, 0x10, 0xfa, 0x60, 0xa5, 0x49, + 0x05, 0x4a, 0xd0, 0x20, 0xe6, 0x40, 0xa5, 0x03, 0x0a, 0x0a, 0xaa, 0xa0, 0x03, 0xa9, 0x01, 0x9d, + 0x4b, 0x01, 0xe8, 0x88, 0x10, 0xf9, 0x20, 0xc5, 0x10, 0x20, 0xca, 0x33, 0x20, 0xe0, 0x10, 0xa2, + 0x00, 0x4c, 0x17, 0x32, 0x20, 0x59, 0x11, 0x29, 0x07, 0x09, 0xf8, 0xa2, 0x1c, 0x9d, 0xac, 0xda, + 0x9d, 0xd4, 0xda, 0x9d, 0xfc, 0xda, 0x9d, 0x24, 0xdb, 0x9d, 0x4c, 0xdb, 0x9d, 0x74, 0xdb, 0x9d, + 0x9c, 0xdb, 0x9d, 0xc4, 0xdb, 0xca, 0x10, 0xe5, 0xa9, 0x04, 0xa2, 0x00, 0xa0, 0x0a, 0x4c, 0xe2, + 0x17, 0x40, 0x80, 0xcf, 0x01, 0xbf, 0x7f, 0xbf, 0x04, 0x10, 0x12, 0x00, 0x02, 0x18, 0x1a, 0x0c, + 0x0e, 0x5c, 0x5c, 0x1c, 0x1e, 0x2c, 0x2e, 0x0c, 0x0e, 0x24, 0x26, 0x11, 0x13, 0x01, 0x03, 0x19, + 0x1b, 0x0d, 0x0f, 0x5c, 0x5c, 0x1d, 0x1f, 0x2d, 0x2f, 0x0d, 0x0f, 0x25, 0x27, 0x0c, 0x33, 0x03, + 0xcc, 0x03, 0x33, 0x0c, 0xc3, 0xcc, 0xff, 0x33, 0xff, 0x3c, 0xff, 0xf3, 0x3f, 0x30, 0xcc, 0xc0, + 0x33, 0xc0, 0xcc, 0x30, 0xc3, 0xc3, 0x30, 0x3f, 0x30, 0xc3, 0x00, 0xff, 0x00, 0xc3, 0xff, 0x3c, + 0xff, 0xc3, 0xff, 0x3c, 0xff, 0xc3, 0x0c, 0xfc, 0x0c, 0xc3, 0x00, 0xff, 0x00, 0x00, 0x18, 0x3c, + 0x3c, 0x18, 0xbf, 0x12, 0x30, 0x0a, 0xce, 0x99, 0x4e, 0xa9, 0x07, 0xa0, 0x0e, 0x20, 0x8a, 0x3a, + 0xad, 0xf8, 0x4d, 0x0d, 0xfc, 0x4d, 0xd0, 0x1d, 0xad, 0x9a, 0x4e, 0x30, 0x18, 0xce, 0x9a, 0x4e, + 0xad, 0x04, 0x4e, 0xf0, 0x09, 0xa9, 0x01, 0x85, 0x65, 0xa9, 0x07, 0x8d, 0x21, 0x43, 0xa9, 0x07, + 0xa0, 0x19, 0x20, 0x8a, 0x3a, 0xa5, 0x32, 0x0d, 0x11, 0x4e, 0x0d, 0x15, 0x4e, 0xd0, 0x0f, 0xad, + 0x9b, 0x4e, 0x30, 0x0a, 0xce, 0x9b, 0x4e, 0xa9, 0x02, 0xa0, 0x26, 0x20, 0xaa, 0x3a, 0xad, 0x00, + 0x4e, 0xd0, 0x0f, 0xad, 0xbf, 0x04, 0x9c, 0x40, 0x00, 0x75, 0x30, 0x01, 0xbf, 0x0d, 0x30, 0x0a, + 0xce, 0x98, 0x4e, 0xa9, 0x0a, 0xa0, 0x26, 0x20, 0x8a, 0x3a, 0xe6, 0x77, 0x30, 0x2b, 0xa5, 0x77, + 0xc9, 0x03, 0xf0, 0x0a, 0xc9, 0x07, 0xf0, 0x19, 0x20, 0x86, 0x40, 0x4c, 0x80, 0x88, 0x44, 0x8c, + 0x44, 0x90, 0x44, 0x94, 0x44, 0x50, 0x47, 0x98, 0x44, 0x9e, 0x44, 0xa6, 0x44, 0xcf, 0x01, 0xcf, + 0x44, 0xf4, 0x44, 0x19, 0x45, 0x7e, 0x45, 0x8b, 0x45, 0x3e, 0x45, 0xaa, 0x44, 0xbc, 0x45, 0xb6, + 0x45, 0xb0, 0x45, 0xaa, 0x45, 0xc2, 0x45, 0xc4, 0x45, 0xc6, 0x45, 0xc8, 0x45, 0xcd, 0x45, 0xcf, + 0x01, 0xcf, 0x45, 0xd4, 0x45, 0xd8, 0x45, 0xdc, 0x45, 0xde, 0x45, 0xe4, 0x45, 0xe6, 0x45, 0xe8, + 0x45, 0xea, 0x45, 0xec, 0x45, 0xef, 0x45, 0xf2, 0x45, 0xf5, 0x45, 0xf8, 0x45, 0xfb, 0x45, 0xfd, + 0x45, 0xff, 0x45, 0x02, 0x46, 0x05, 0x46, 0x08, 0x46, 0x0b, 0x46, 0x0e, 0x46, 0x10, 0x46, 0x12, + 0x46, 0x16, 0x46, 0x1a, 0x46, 0x1e, 0x46, 0x22, 0x46, 0x26, 0x46, 0x28, 0x46, 0x2a, 0x46, 0x2c, + 0x46, 0x4b, 0x46, 0x2e, 0x46, 0x68, 0x46, 0x54, 0x46, 0x37, 0x46, 0x71, 0x46, 0x59, 0x46, 0x3c, + 0x46, 0x76, 0x46, 0x5e, 0x46, 0x41, 0x46, 0x7b, 0x46, 0x63, 0xcf, 0x03, 0x46, 0x80, 0x46, 0x85, + 0x46, 0x89, 0x46, 0x8d, 0x46, 0x91, 0x46, 0x95, 0x46, 0x99, 0x46, 0x9d, 0x46, 0xa0, 0x46, 0xa3, + 0x46, 0xcf, 0x01, 0xbf, 0x46, 0xe0, 0x46, 0xf5, 0x46, 0xfe, 0x46, 0xe0, 0x45, 0xe2, 0x45, 0x2f, + 0x47, 0x32, 0x47, 0x34, 0x47, 0x36, 0x47, 0x3a, 0x47, 0x3e, 0x47, 0x42, 0x47, 0x46, 0x47, 0x49, + 0x47, 0x4d, 0x47, 0x66, 0x47, 0x6e, 0x47, 0x70, 0x47, 0x82, 0x47, 0x84, 0x47, 0xcf, 0x03, 0x20, + 0xa0, 0x31, 0x55, 0x50, 0xa0, 0x32, 0x55, 0x50, 0xa0, 0x54, 0x4f, 0x50, 0xa0, 0x46, 0x41, 0x4c, + 0x4c, 0x53, 0xa0, 0xcf, 0x07, 0x6b, 0xa0, 0xcf, 0x03, 0xb1, 0xa0, 0xcf, 0x24, 0x20, 0xa0, 0x4a, + 0x4f, 0x59, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x20, 0x23, 0x20, 0x31, 0x20, 0x49, 0x53, 0x20, 0x49, + 0x4e, 0x20, 0x4c, 0x45, 0x46, 0x54, 0x20, 0x48, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x20, 0x4d, 0x4f, + 0x44, 0x45, 0x20, 0xa0, 0x4a, 0x4f, 0x59, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x20, 0x23, 0x20, 0x31, + 0x20, 0x49, 0x53, 0x20, 0x49, 0x4e, 0x20, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x41, 0x4e, + 0x44, 0x45, 0x44, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0xa0, 0x4a, 0x4f, 0x59, 0x53, 0x54, 0x49, 0x43, + 0x4b, 0x20, 0x23, 0x20, 0x32, 0x20, 0x49, 0x53, 0x20, 0x49, 0x4e, 0x20, 0x4c, 0x45, 0x46, 0x54, + 0x20, 0x48, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0xa0, 0x4a, 0x4f, + 0x59, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x20, 0x23, 0x20, 0x32, 0x20, 0x49, 0x53, 0x20, 0x49, 0x4e, + 0x20, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x20, 0x4d, 0x4f, + 0x44, 0x45, 0xa0, 0x42, 0x52, 0x55, 0x43, 0x45, 0x20, 0x4c, 0x45, 0x45, 0xa0, 0x42, 0x59, 0xa0, + 0x52, 0x4f, 0x4e, 0x20, 0x4a, 0x20, 0x46, 0x4f, 0x52, 0x54, 0x49, 0x45, 0x52, 0xa0, 0x2a, 0x2a, + 0x20, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x20, 0x2a, 0x2a, 0xa0, 0xcf, 0x0c, 0x20, 0xa0, 0x47, + 0x41, 0x4d, 0x45, 0x20, 0x4f, 0x56, 0x45, 0x52, 0xa0, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x20, + 0xa0, 0x31, 0x7c, 0x7d, 0x7e, 0x7f, 0xa0, 0x31, 0x42, 0x42, 0xa3, 0xa3, 0xa0, 0x7c, 0x7d, 0x7e, + 0xa3, 0xa3, 0xa0, 0x42, 0x42, 0xcf, 0x03, 0xa3, 0xa0, 0x20, 0xa0, 0xde, 0xa0, 0xa2, 0xa0, 0xcf, + 0x04, 0x20, 0xa0, 0xb1, 0xa0, 0x81, 0xa4, 0xa4, 0x83, 0xa0, 0x81, 0xa5, 0x83, 0xa0, 0x20, 0x20, + 0xa5, 0xa0, 0x04, 0xa0, 0x05, 0xa0, 0x06, 0xa0, 0x07, 0xa0, 0xe6, 0xa0, 0xe7, 0xa0, 0xf6, 0xa0, + 0xf5, 0xa0, 0xf5, 0xf6, 0xa0, 0xf4, 0xf5, 0xa0, 0x20, 0xf5, 0xa0, 0x20, 0xf4, 0xa0, 0x20, 0x20, + 0xa0, 0xfa, 0xa0, 0xf9, 0xa0, 0xf9, 0xfa, 0xa0, 0xf8, 0xf9, 0xa0, 0x20, 0xf9, 0xa0, 0x20, 0xf8, + 0xa0, 0x20, 0x20, 0xa0, 0xb1, 0xa0, 0x4a, 0xa0, 0x11, 0x12, 0x13, 0xa0, 0x14, 0x15, 0x16, 0xa0, + 0x17, 0x18, 0x19, 0xa0, 0x1a, 0x1b, 0x1c, 0xa0, 0x1d, 0x00, 0x1d, 0xa0, 0xb3, 0xa0, 0xb4, 0xa0, + 0x06, 0xa0, 0x07, 0xa0, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xa0, 0xbd, 0xbe, 0xcf, + 0x01, 0xbf, 0xc0, 0xa0, 0x12, 0x18, 0x1c, 0xd4, 0xa0, 0xbd, 0xd3, 0xdd, 0xc0, 0xa0, 0x12, 0xde, + 0xef, 0xd4, 0xa0, 0x20, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x20, 0xa0, 0xb0, 0xb1, 0x10, 0x11, + 0xa0, 0xb6, 0xbc, 0xc1, 0x17, 0xa0, 0x0e, 0x0f, 0x10, 0x11, 0xa0, 0x14, 0x15, 0x16, 0x17, 0xa0, + 0x20, 0xc8, 0xaf, 0xf9, 0x19, 0x1a, 0x1b, 0x20, 0xa0, 0x03, 0xf3, 0xc9, 0xca, 0xa0, 0x12, 0xd0, + 0xd1, 0xd2, 0xa0, 0x03, 0xf3, 0xf4, 0x00, 0xa0, 0x12, 0x05, 0x06, 0xb5, 0xa0, 0xb7, 0xb8, 0xb9, + 0xa0, 0xbc, 0xb8, 0x1c, 0xa0, 0xc4, 0xc5, 0xc6, 0xa0, 0xb0, 0xc5, 0xc1, 0xa0, 0xf5, 0xf6, 0xf7, + 0xa0, 0xbe, 0xcf, 0x01, 0xbf, 0x18, 0xa0, 0xf2, 0x02, 0xa0, 0xb1, 0xb6, 0xa0, 0x20, 0x62, 0xc6, + 0xb3, 0x76, 0x2d, 0x62, 0x31, 0x20, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x20, 0x2d, 0x76, 0x32, + 0x20, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0xa0, 0x20, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, + 0x62, 0xc6, 0xb5, 0x76, 0x2d, 0x62, 0x43, 0x4f, 0x4d, 0x50, 0x55, 0x54, 0x45, 0x52, 0x20, 0x2d, + 0x76, 0x4f, 0x50, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0xa0, 0x20, 0x62, 0xc6, 0xb7, 0x76, 0x2d, + 0x20, 0x54, 0x4f, 0x20, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x47, 0x41, 0x4d, 0x45, 0xa0, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x20, 0x31, 0xa0, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x20, 0x32, + 0xa0, 0x22, 0x32, 0x35, 0x23, 0x25, 0x00, 0x2c, 0x25, 0x25, 0x00, 0x08, 0x23, 0x09, 0x00, 0x11, + 0x19, 0x18, 0x14, 0x00, 0x24, 0x21, 0x34, 0x21, 0x33, 0x2f, 0x26, 0x34, 0x00, 0x32, 0x25, 0x36, + 0x0e, 0x12, 0x00, 0x22, 0x39, 0x00, 0x32, 0x2a, 0x26, 0x20, 0x20, 0xa0, 0x20, 0xa0, 0x4f, 0xa0, + 0xcf, 0x03, 0xcf, 0xa0, 0x20, 0x20, 0xa3, 0xa0, 0x20, 0x20, 0xa3, 0xa0, 0xcf, 0x03, 0x69, 0xa0, + 0x64, 0x64, 0xa0, 0x20, 0x20, 0xa3, 0xa0, 0x7a, 0x7a, 0xa0, 0x2a, 0x2a, 0x20, 0x43, 0x4f, 0x4e, + 0x47, 0x52, 0x41, 0x54, 0x55, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x20, 0x2a, 0x2a, 0xa0, + 0xcf, 0x07, 0x29, 0xa0, 0xa6, 0xa0, 0x44, 0x41, 0x54, 0x41, 0x53, 0x4f, 0x46, 0x54, 0x20, 0x50, + 0x52, 0x45, 0x53, 0x45, 0x4e, 0x54, 0x53, 0xa0, 0x27, 0xa0, 0xae, 0xa0, 0xe6, 0x04, 0xd0, 0x02, + 0xe6, 0x05, 0x60, 0xe6, 0x06, 0xd0, 0x02, 0xe6, 0x07, 0x60, 0xe6, 0x08, 0xd0, 0x02, 0xe6, 0x09, + 0x60, 0xf0, 0xfb, 0xf1, 0xfe, 0xf7, 0xcf, 0x04, 0xfe, 0xcf, 0x03, 0xfc, 0xff, 0xfa, 0xfa, 0xf9, + 0xfb, 0xf9, 0xfa, 0xf9, 0xfc, 0xf9, 0xff, 0xfe, 0xff, 0xfb, 0xf1, 0xfe, 0xfb, 0xf2, 0xf1, 0xfc, + 0xf2, 0xf1, 0xfb, 0xf2, 0xf1, 0x4e, 0xa9, 0x07, 0xa0, 0x01, 0x20, 0xb4, 0x3a, 0xfb, 0xf1, 0xfe, + 0xfb, 0xf2, 0xf1, 0xfc, 0xf2, 0xf1, 0xf6, 0xfe, 0xf1, 0xf8, 0xf9, 0xf1, 0xf6, 0xfe, 0xfb, 0xfc, + 0xfe, 0xfb, 0xf4, 0xfe, 0xfb, 0xfe, 0xf6, 0xf1, 0xfe, 0xf6, 0xfb, 0xfc, 0xfe, 0xf1, 0xff, 0xf8, + 0xfc, 0xfc, 0xf8, 0xfb, 0xf0, 0xfe, 0xf4, 0xf6, 0xf2, 0xf1, 0x8a, 0x9a, 0xea, 0xfd, 0x78, 0x97, + 0xfd, 0x78, 0x97, 0xfd, 0x78, 0x97, 0xfd, 0x62, 0x97, 0xfd, 0xfd, 0x56, 0xfd, 0xb6, 0xc7, 0xfd, + 0xc8, 0x47, 0xc8, 0x47, 0xc8, 0x47, 0xc8, 0x47, 0xd1, 0x47, 0xd1, 0x47, 0xd1, 0x47, 0xd4, 0x47, + 0xd4, 0x47, 0xd4, 0x47, 0xd7, 0x47, 0xdd, 0x47, 0xd7, 0x47, 0xe0, 0x47, 0xd7, 0x47, 0xe3, 0x47, + 0xd7, 0x47, 0xec, 0x47, 0xef, 0x47, 0xf2, 0x47, 0xf9, 0x47, 0xfc, 0x47, 0xff, 0x47, 0x02, 0x48, + 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x06, 0x48, 0x05, 0x48, + 0x06, 0x48, 0x05, 0x48, 0x06, 0x48, 0x08, 0x48, 0x06, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, + 0x48, 0xc6, 0xf3, 0x10, 0x30, 0xa9, 0x27, 0x85, 0xf3, 0xa5, 0x04, 0x18, 0x69, 0x28, 0x85, 0x04, + 0x90, 0x02, 0xe6, 0x05, 0xa5, 0x08, 0x18, 0x69, 0x28, 0x85, 0x08, 0x90, 0x02, 0xe6, 0x09, 0xa5, + 0x10, 0x18, 0x69, 0x28, 0x85, 0x10, 0x90, 0x02, 0xe6, 0x11, 0xa5, 0x12, 0x18, 0x69, 0x28, 0x85, + 0x12, 0x90, 0x02, 0xe6, 0x13, 0x68, 0x60, 0xa0, 0x00, 0xa2, 0x03, 0xb1, 0x04, 0x91, 0x06, 0x20, + 0x8d, 0x47, 0x91, 0x06, 0x20, 0x8d, 0x47, 0x20, 0x86, 0x47, 0xca, 0x10, 0xee, 0xa2, 0x03, 0xb1, + 0x04, 0x91, 0x08, 0x20, 0x94, 0x47, 0x91, 0x08, 0x20, 0x94, 0x47, 0x20, 0x86, 0x47, 0xca, 0x10, + 0xee, 0xc6, 0xf3, 0x10, 0xd2, 0x60, 0xa9, 0x32, 0x8d, 0x18, 0xd0, 0xa9, 0xfc, 0x8d, 0x21, 0xd0, + 0xa9, 0x1e, 0x8d, 0x08, 0x04, 0xa9, 0x49, 0x8d, 0x09, 0x04, 0xa9, 0x01, 0x8d, 0x1a, 0xd0, 0x8d, + 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0x40, 0x8d, 0x12, 0xd0, 0xa5, + 0x29, 0x0a, 0xaa, 0xbd, 0x0b, 0x48, 0x85, 0x0a, 0xbd, 0x0c, 0x48, 0x85, 0x0b, 0xbd, 0x33, 0x48, + 0x85, 0x0c, 0xbd, 0x34, 0x48, 0x85, 0x0d, 0xa0, 0x0b, 0xb1, 0x0a, 0x99, 0x53, 0x01, 0xc0, 0x04, + 0xb0, 0x05, 0xb1, 0x0c, 0x99, 0xf5, 0x47, 0x88, 0x10, 0xef, 0x20, 0xa8, 0x15, 0x68, 0xa8, 0x68, + 0xaa, 0x68, 0x40, 0xa9, 0x41, 0xcd, 0x12, 0xd0, 0xb0, 0xfb, 0xa2, 0x0a, 0xca, 0xd0, 0xfd, 0xa5, + 0xf2, 0x8d, 0x18, 0xd0, 0xad, 0x53, 0x01, 0x8d, 0x21, 0xd0, 0xad, 0x54, 0x01, 0x8d, 0x22, 0xd0, + 0xad, 0x55, 0x01, 0x8d, 0x23, 0xd0, 0xa9, 0x00, 0x85, 0x44, 0xa9, 0x03, 0x85, 0xf4, 0xa9, 0x82, + 0x8d, 0x08, 0x04, 0xa9, 0x49, 0x8d, 0x09, 0x04, 0xa9, 0x01, 0x8d, 0x1a, 0xd0, 0x8d, 0x19, 0xd0, + 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa6, 0x44, 0xbd, 0xf5, 0x47, 0x8d, 0x12, 0xd0, + 0xc9, 0xfd, 0xf0, 0x06, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa9, 0xc1, 0x8d, 0x08, 0x04, 0xa9, + 0x48, 0x8d, 0x09, 0x04, 0x4c, 0x6f, 0x49, 0xa6, 0xf4, 0xbc, 0x53, 0x01, 0xa6, 0x44, 0xbd, 0xf5, + 0x47, 0xaa, 0xe8, 0xe8, 0x8a, 0xe8, 0xec, 0x12, 0xd0, 0xf0, 0x0a, 0xcd, 0x12, 0xd0, 0xd0, 0xf6, + 0xa2, 0x0a, 0xca, 0xd0, 0xfd, 0x8c, 0x21, 0xd0, 0xa6, 0xf4, 0xbd, 0x54, 0x01, 0x8d, 0x22, 0xd0, + 0xbd, 0x55, 0x01, 0x8d, 0x23, 0xd0, 0xa5, 0xf4, 0x18, 0x69, 0x03, 0x85, 0xf4, 0xe6, 0x44, 0x4c, + 0x53, 0x49, 0xcf, 0x0c, 0x5c, 0x04, 0x06, 0x24, 0x26, 0x28, 0x2a, 0x08, 0x0a, 0x0c, 0x0e, 0x5c, + 0x5c, 0x14, 0x16, 0x0c, 0x0e, 0x0c, 0x0e, 0xcf, 0x16, 0x5c, 0x05, 0x07, 0x25, 0x27, 0x29, 0x2b, + 0x09, 0x0b, 0x0d, 0x0f, 0x5c, 0x5c, 0x15, 0x17, 0x0d, 0x0f, 0x0d, 0x0f, 0xcf, 0x0e, 0x5c, 0x61, + 0x62, 0x5d, 0x5e, 0x75, 0x76, 0x5d, 0x5e, 0x73, 0x74, 0x6d, 0x6e, 0x65, 0x66, 0x75, 0x76, 0x5c, + 0x5c, 0x6f, 0x70, 0x71, 0x72, 0x63, 0x64, 0x73, 0x74, 0x63, 0x64, 0x6b, 0x6c, 0x75, 0x76, 0x73, + 0x74, 0xcf, 0x06, 0x5c, 0x5f, 0x60, 0x77, 0x78, 0xcf, 0x04, 0x5c, 0x71, 0x72, 0x6d, 0x6e, 0x6b, + 0x6c, 0x5c, 0x5c, 0x69, 0x6a, 0x5c, 0x5c, 0x65, 0x66, 0x6d, 0x6e, 0x71, 0x72, 0x75, 0x76, 0x67, + 0x68, 0x63, 0x64, 0x71, 0x72, 0x5c, 0x5c, 0x20, 0x22, 0x14, 0x16, 0x00, 0x02, 0x30, 0x32, 0x0c, + 0x0e, 0x24, 0x26, 0x5c, 0x5c, 0x38, 0x3a, 0x21, 0x23, 0x15, 0x17, 0x01, 0x03, 0x31, 0x33, 0x0d, + 0x0f, 0x25, 0x27, 0x5c, 0x5c, 0x39, 0x3b, 0x38, 0x3a, 0x3c, 0x3e, 0x39, 0x3b, 0x3d, 0x3f, 0x00, + 0x08, 0x04, 0x0c, 0x00, 0x3a, 0x76, 0x00, 0x03, 0x03, 0xbf, 0x05, 0xcf, 0x04, 0x03, 0xbf, 0x0e, + 0x01, 0x00, 0xd0, 0x4a, 0xd0, 0x4a, 0xd0, 0x4a, 0xd0, 0x4a, 0xe4, 0x4a, 0xe4, 0x4a, 0xe4, 0x4a, + 0xe9, 0x4a, 0xe9, 0x4a, 0xe9, 0x4a, 0xee, 0x4a, 0xfd, 0x4a, 0xee, 0x4a, 0x02, 0x4b, 0xee, 0x4a, + 0x0c, 0x4b, 0xee, 0x4a, 0x1b, 0x4b, 0x25, 0x4b, 0x2a, 0x4b, 0x04, 0x00, 0x06, 0x88, 0x0e, 0x04, + 0x00, 0x0a, 0x0e, 0x34, 0x06, 0x00, 0x0a, 0x0e, 0x34, 0x04, 0x00, 0x0a, 0x0e, 0x34, 0x84, 0x00, + 0x70, 0x0e, 0x60, 0x34, 0x00, 0x32, 0x0e, 0x40, 0x74, 0x00, 0x0e, 0x04, 0x88, 0x08, 0x00, 0x0e, + 0x04, 0x88, 0x08, 0x00, 0x2c, 0x04, 0x88, 0x66, 0x00, 0x8e, 0x02, 0x88, 0x96, 0x00, 0x00, 0x0e, + 0x7c, 0x96, 0x00, 0x0e, 0x00, 0x7c, 0x86, 0x00, 0x60, 0x02, 0x7a, 0x02, 0x00, 0x60, 0x0e, 0x7a, + 0x04, 0x00, 0x60, 0x06, 0x7e, 0x08, 0x00, 0x2c, 0x04, 0x38, 0x08, 0x00, 0x2c, 0x04, 0x38, 0x00, + 0x82, 0x82, 0x68, 0x8c, 0x84, 0x00, 0x70, 0x0f, 0x30, 0x84, 0x00, 0x70, 0x0f, 0x30, 0xf9, 0x09, + 0x3e, 0x9d, 0x1b, 0x82, 0xdd, 0x27, 0x11, 0x91, 0xd8, 0x4c, 0x43, 0xc6, 0x46, 0xb4, 0x5c, 0x8d, + 0x90, 0xe0, 0xe0, 0x68, 0x6a, 0x6b, 0x6c, 0x6e, 0x6f, 0x70, 0x72, 0x73, 0x74, 0x75, 0x77, 0x78, + 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x7f, 0x01, 0xbf, 0x03, 0x05, 0x04, 0x05, 0x00, 0x07, + 0x08, 0x03, 0x0a, 0x00, 0x0f, 0x00, 0x0d, 0x00, 0x0f, 0x11, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x07, + 0x06, 0x05, 0x08, 0x09, 0x08, 0x0b, 0x0c, 0x0b, 0x00, 0x0b, 0x11, 0x0b, 0x12, 0x13, 0xbf, 0x03, + 0x01, 0x02, 0x00, 0x06, 0x02, 0x08, 0x07, 0x06, 0x00, 0x0e, 0x0e, 0x00, 0x0c, 0x00, 0x0e, 0xbf, + 0x03, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, + 0xbf, 0x05, 0x1a, 0x18, 0x30, 0x20, 0x94, 0x22, 0x86, 0x1c, 0x14, 0x12, 0x34, 0x40, 0x18, 0x98, + 0x18, 0x1c, 0xcf, 0x03, 0x18, 0x12, 0xc4, 0x62, 0xc4, 0xc0, 0xb4, 0x51, 0xb3, 0x44, 0x46, 0xc6, + 0x8c, 0x4c, 0x5c, 0x32, 0x5c, 0xc3, 0x5c, 0xb4, 0xc6, 0x95, 0x9f, 0x95, 0x96, 0x38, 0x96, 0x28, + 0x81, 0x1f, 0x00, 0x00, 0x96, 0x00, 0x70, 0x00, 0x92, 0x7a, 0x81, 0xbf, 0x03, 0x62, 0x92, 0xc4, + 0xc4, 0xb4, 0xc2, 0x72, 0x74, 0x00, 0x00, 0x5c, 0x00, 0x5c, 0x00, 0xbe, 0xc4, 0x8e, 0xbf, 0x03, + 0x10, 0xa0, 0x00, 0x00, 0x10, 0x9c, 0xa0, 0x30, 0xcf, 0x04, 0xa0, 0x00, 0x10, 0x00, 0xa0, 0x00, + 0xa0, 0xa0, 0x00, 0x92, 0x92, 0x00, 0x00, 0xc2, 0x51, 0x80, 0x51, 0x74, 0x47, 0xc4, 0x5a, 0x00, + 0xc3, 0x00, 0xc4, 0x00, 0x93, 0x44, 0x00, 0x00, 0x2c, 0x00, 0x10, 0x1f, 0x10, 0xa0, 0x0f, 0x10, + 0xa0, 0x10, 0x10, 0x34, 0x00, 0x50, 0x10, 0x80, 0x10, 0x10, 0x00, 0x00, 0x32, 0x00, 0xb0, 0x32, + 0x40, 0x66, 0x46, 0x53, 0xc0, 0xc4, 0x5c, 0xbe, 0x00, 0xbe, 0xb3, 0xbe, 0xc6, 0x96, 0x00, 0x00, + 0xcf, 0x03, 0xa1, 0x00, 0x10, 0x16, 0x10, 0xa1, 0x9d, 0x00, 0x10, 0x10, 0x00, 0xa0, 0x00, 0xa0, + 0xbf, 0x04, 0x62, 0x62, 0xc5, 0x00, 0x74, 0x51, 0xc0, 0xb5, 0xc7, 0x00, 0x5e, 0xbe, 0x00, 0xbe, + 0x00, 0xbe, 0xbf, 0x03, 0x0f, 0xcf, 0x03, 0x10, 0x00, 0x58, 0x20, 0x20, 0x0f, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x10, 0xbf, 0x05, 0x62, 0x62, 0xc4, 0x62, 0x00, 0x66, 0x51, 0x51, 0xc6, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0xbe, 0xbf, 0x08, 0xff, 0xbf, 0x04, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xbf, + 0x03, 0xcf, 0x03, 0xff, 0x84, 0x08, 0x06, 0x04, 0x02, 0x04, 0x06, 0x08, 0x32, 0x1f, 0x1e, 0x1a, + 0x18, 0x1d, 0x1b, 0x33, 0x35, 0x30, 0x72, 0x5f, 0x5e, 0x5a, 0x58, 0x5d, 0x5b, 0x73, 0x75, 0x70, + 0x06, 0x06, 0x0a, 0x02, 0x02, 0x0a, 0x08, 0x0d, 0x04, 0x05, 0xcf, 0x03, 0x03, 0x00, 0x04, 0x06, + 0x02, 0x02, 0x01, 0x00, 0x0c, 0x4d, 0x25, 0x4d, 0x3e, 0x4d, 0x67, 0x4d, 0x70, 0x4d, 0x79, 0x4d, + 0xa2, 0x4d, 0xc3, 0x4d, 0xf8, 0x4d, 0x09, 0x4e, 0x1e, 0x4e, 0x2b, 0x4e, 0x38, 0x4e, 0x45, 0x4e, + 0x4a, 0x4e, 0x5b, 0x4e, 0x74, 0x4e, 0x7d, 0x4e, 0x86, 0x4e, 0x8b, 0x4e, 0x90, 0x4e, 0x01, 0x9f, + 0x1f, 0x07, 0x01, 0x92, 0x26, 0x07, 0x01, 0x9f, 0x02, 0x0a, 0x01, 0x9f, 0x19, 0x0a, 0x01, 0x92, + 0x1d, 0x0a, 0x01, 0x92, 0x26, 0x0a, 0xff, 0x01, 0x9e, 0x09, 0x07, 0x01, 0x9f, 0x1e, 0x07, 0x01, + 0x92, 0x06, 0x0a, 0x01, 0x9e, 0x0f, 0x0a, 0x01, 0x9f, 0x18, 0x0a, 0x01, 0x92, 0x20, 0x0a, 0xff, + 0x01, 0x92, 0x05, 0x07, 0x01, 0x9e, 0x09, 0x07, 0x01, 0x9f, 0x16, 0x07, 0x01, 0x9e, 0x1a, 0x07, + 0x01, 0x9f, 0x1e, 0x07, 0x01, 0x9e, 0x05, 0x0a, 0x01, 0x9f, 0x09, 0x0a, 0x01, 0x9e, 0x0f, 0x0a, + 0x01, 0x9f, 0x15, 0x0a, 0x01, 0x9e, 0x1b, 0x0a, 0xff, 0x01, 0x9e, 0x1d, 0x0a, 0x01, 0x9f, 0x26, + 0x0a, 0xff, 0x01, 0x9e, 0x0b, 0x04, 0x01, 0x9f, 0x1c, 0x04, 0xff, 0x01, 0x9e, 0x02, 0x03, 0x01, + 0x9e, 0x06, 0x03, 0x01, 0x9f, 0x1c, 0x03, 0x01, 0x9e, 0x20, 0x03, 0x01, 0x9f, 0x26, 0x03, 0x01, + 0x9f, 0x1e, 0x06, 0x01, 0x9e, 0x02, 0x0a, 0x01, 0x9f, 0x17, 0x0a, 0x01, 0x9f, 0x1a, 0x0a, 0x01, + 0x9e, 0x1e, 0x0a, 0xff, 0x01, 0x9f, 0x08, 0x05, 0x01, 0x9e, 0x0a, 0x05, 0x01, 0x9f, 0x0e, 0x05, + 0x01, 0x9f, 0x16, 0x05, 0x01, 0x9f, 0x1a, 0x05, 0x01, 0x9e, 0x1c, 0x05, 0x01, 0x9f, 0x06, 0x09, + 0x01, 0x9e, 0x1e, 0x09, 0xff, 0x01, 0x9e, 0x03, 0x02, 0x01, 0x9f, 0x0c, 0x02, 0x01, 0x9e, 0x0d, + 0x02, 0x01, 0x9f, 0x19, 0x02, 0x01, 0x9e, 0x1a, 0x02, 0x01, 0x9f, 0x05, 0x05, 0x01, 0x9e, 0x06, + 0x05, 0x01, 0x9f, 0x0c, 0x05, 0x01, 0x9e, 0x0d, 0x05, 0x01, 0x9f, 0x19, 0x05, 0x01, 0x9e, 0x1a, + 0x05, 0x01, 0x9f, 0x02, 0x09, 0x01, 0x9e, 0x03, 0x09, 0xff, 0x01, 0x9f, 0x0f, 0x03, 0x01, 0x9f, + 0x18, 0x03, 0x01, 0x9e, 0x06, 0x07, 0x01, 0x9f, 0x21, 0x07, 0xff, 0x01, 0x9f, 0x20, 0x02, 0x01, + 0x9e, 0x0f, 0x07, 0x01, 0x9e, 0x1b, 0x0a, 0x01, 0x9f, 0x1c, 0x0a, 0x01, 0x9e, 0x20, 0x0a, 0xff, + 0x01, 0x9f, 0x01, 0x04, 0x01, 0x9f, 0x1e, 0x07, 0x01, 0x9f, 0x1e, 0x0a, 0xff, 0x01, 0x9e, 0x12, + 0x03, 0x01, 0x9f, 0x15, 0x03, 0x01, 0x9f, 0x07, 0x0a, 0xff, 0x01, 0x9e, 0x24, 0x04, 0x01, 0x9e, + 0x24, 0x07, 0x01, 0x9e, 0x24, 0x0a, 0xff, 0x01, 0xbf, 0x03, 0xff, 0x01, 0x9f, 0x09, 0x07, 0x01, + 0x9e, 0x1e, 0x07, 0x01, 0x9f, 0x09, 0x0a, 0x01, 0x9e, 0x1e, 0x0a, 0xff, 0x01, 0x9f, 0x13, 0x03, + 0x01, 0x9e, 0x15, 0x03, 0x01, 0x9e, 0x0e, 0x04, 0x01, 0x9f, 0x1a, 0x04, 0x01, 0x9e, 0x0d, 0x06, + 0x01, 0x9f, 0x1b, 0x06, 0xff, 0x01, 0x9e, 0x20, 0x04, 0x01, 0x9f, 0x05, 0x07, 0xff, 0x01, 0x9e, + 0x26, 0x0a, 0x01, 0x9e, 0x1f, 0x0b, 0xff, 0x01, 0x9e, 0x25, 0x0b, 0xff, 0x01, 0xbf, 0x03, 0xff, + 0x01, 0xbf, 0x03, 0xff, 0xbf, 0x07, 0xf4, 0x33, 0xf5, 0x33, 0xf4, 0x33, 0xfb, 0x33, 0x01, 0x34, + 0x27, 0x34, 0xf4, 0x33, 0x60, 0x34, 0x77, 0x34, 0x8e, 0x34, 0xf4, 0x33, 0xf4, 0x33, 0xbc, 0x34, + 0xc2, 0x34, 0x8c, 0x35, 0x92, 0x35, 0x9e, 0x35, 0xc3, 0x35, 0xf9, 0x35, 0x5e, 0x42, 0x41, 0x36, + 0x78, 0x36, 0xa5, 0x36, 0x01, 0x37, 0x5f, 0x37, 0xaa, 0x38, 0xa9, 0x39, 0xc2, 0x39, 0xd3, 0x3a, + 0xb1, 0x3b, 0x8f, 0x3c, 0xcf, 0x01, 0xbf, 0x3c, 0x4b, 0x3e, 0x7b, 0x3e, 0xcb, 0x3e, 0xe5, 0x3e, + 0x5a, 0x3f, 0x70, 0x3f, 0xdb, 0x3c, 0x71, 0x42, 0x02, 0xa0, 0x20, 0xa0, 0x4f, 0xa0, 0xcf, 0x03, + 0xcf, 0xa0, 0x20, 0x20, 0xa3, 0xa0, 0x20, 0x20, 0xa3, 0xa0, 0xcf, 0x03, 0x69, 0xa0, 0x64, 0x64, + 0xa0, 0x20, 0x20, 0xa3, 0xa0, 0x7a, 0x7a, 0xa0, 0x2a, 0x2a, 0x20, 0x43, 0x4f, 0x4e, 0x47, 0x52, + 0x41, 0x54, 0x55, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x20, 0x2a, 0x2a, 0xa0, 0xcf, 0x07, + 0x29, 0xa0, 0xa6, 0xa0, 0x44, 0x41, 0x54, 0x41, 0x53, 0x4f, 0xbf, 0x06, 0x53, 0x45, 0x4e, 0x54, + 0x53, 0xa0, 0x27, 0xa0, 0xae, 0xa0, 0xe6, 0x04, 0xd0, 0x02, 0xe6, 0x05, 0x60, 0xe6, 0x06, 0xd0, + 0x02, 0xe6, 0x07, 0x60, 0xe6, 0x08, 0xd0, 0x02, 0xe6, 0x09, 0x60, 0xf0, 0xfb, 0xf1, 0xfe, 0xf7, + 0xcf, 0x04, 0xfe, 0xcf, 0x03, 0xfc, 0xff, 0xfa, 0xfa, 0xf9, 0xfb, 0xf9, 0xfa, 0xf9, 0xfc, 0xf9, + 0xff, 0xfe, 0xff, 0xfb, 0xf1, 0xfe, 0xfb, 0xf2, 0xf1, 0xfc, 0xf2, 0xf1, 0xfb, 0xf2, 0xf1, 0x4e, + 0xa9, 0x07, 0xa0, 0x01, 0x20, 0xb4, 0x3a, 0xfb, 0xf1, 0xfe, 0xfb, 0xf2, 0xf1, 0xfc, 0xf2, 0xf1, + 0xf6, 0xfe, 0xf1, 0xf8, 0xf9, 0xf1, 0xf6, 0xfe, 0xfb, 0xfc, 0xfe, 0xfb, 0xf4, 0xfe, 0xfb, 0xfe, + 0xf6, 0xf1, 0xfe, 0xf6, 0xfb, 0xfc, 0xfe, 0xf1, 0xff, 0xf8, 0xfc, 0xfc, 0xf8, 0xfb, 0xf0, 0xfe, + 0xf4, 0xf6, 0xf2, 0xf1, 0x8a, 0x9a, 0xea, 0xfd, 0x78, 0x97, 0xfd, 0x78, 0x97, 0xfd, 0x78, 0x97, + 0xfd, 0x62, 0x97, 0xfd, 0xfd, 0x56, 0xfd, 0xb6, 0xc7, 0xfd, 0xc8, 0x47, 0xc8, 0x47, 0xc8, 0x47, + 0xc8, 0x47, 0xd1, 0x47, 0xd1, 0x47, 0xd1, 0x47, 0xd4, 0x47, 0xd4, 0x47, 0xd4, 0x47, 0xd7, 0x47, + 0xdd, 0xbf, 0x09, 0xd7, 0x47, 0xec, 0x47, 0xef, 0x47, 0xf2, 0x47, 0xf9, 0x47, 0xfc, 0x47, 0xff, + 0x47, 0x02, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x05, 0x48, 0x06, + 0x48, 0x05, 0x48, 0x06, 0x48, 0x05, 0x48, 0x06, 0x48, 0x08, 0x48, 0x06, 0x48, 0x05, 0x48, 0x05, + 0x48, 0x05, 0x48, 0x48, 0xc6, 0xf3, 0x10, 0x30, 0xa9, 0x27, 0x85, 0xf3, 0xa5, 0x04, 0x18, 0x69, + 0x28, 0x85, 0x04, 0x90, 0x02, 0xe6, 0x05, 0xa5, 0x08, 0x18, 0x69, 0x28, 0x85, 0x08, 0x90, 0x02, + 0xe6, 0x09, 0xa5, 0x10, 0x18, 0x69, 0x28, 0x85, 0x10, 0x90, 0x02, 0xe6, 0x11, 0xa5, 0x12, 0x18, + 0x69, 0x28, 0x85, 0x12, 0x90, 0x02, 0xe6, 0x13, 0x68, 0x60, 0xa0, 0x00, 0xa2, 0x03, 0xb1, 0x04, + 0x91, 0x06, 0x20, 0x8d, 0x47, 0x91, 0x06, 0x20, 0x8d, 0x47, 0x20, 0x86, 0x47, 0xca, 0x10, 0xee, + 0xa2, 0x03, 0xb1, 0x04, 0x91, 0x08, 0x20, 0x94, 0x47, 0x91, 0x08, 0x20, 0x94, 0x47, 0x20, 0x86, + 0x47, 0xca, 0x10, 0xee, 0xc6, 0xf3, 0x10, 0xd2, 0x60, 0xa9, 0x32, 0x8d, 0x18, 0xd0, 0xa9, 0xfc, + 0x8d, 0x21, 0xd0, 0xa9, 0x1e, 0x8d, 0x08, 0x04, 0xa9, 0x49, 0x8d, 0x09, 0x04, 0xa9, 0x01, 0x8d, + 0x1a, 0xd0, 0x8d, 0x19, 0xd0, 0xad, 0x11, 0xd0, 0x29, 0x7f, 0x8d, 0x11, 0xd0, 0xa9, 0x40, 0x8d, + 0x12, 0xd0, 0xa5, 0x29, 0x0a, 0xaa, 0xbd, 0x0b, 0x48, 0x85, 0x0a, 0xbd, 0x0c, 0x48, 0x85, 0x0b, + 0xbd, 0x33, 0x48, 0x85, 0x0c, 0xbd, 0x34, 0x48, 0x85, 0x0d, 0xa0, 0x0b, 0xb1, 0x0a, 0x99, 0x53, + 0x01, 0xc0, 0x04, 0xb0, 0x05, 0xb1, 0x0c, 0x99, 0xf5, 0x47, 0x88, 0x10, 0xef, 0x20, 0xa8, 0x15, + 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa9, 0x41, 0xcd, 0x12, 0xd0, 0xb0, 0xfb, 0xa2, 0x0a, 0xca, + 0xd0, 0xfd, 0xa5, 0x28, 0x50, 0x78, 0xa0, 0xc8, 0xf0, 0x18, 0x40, 0x68, 0x90, 0xb8, 0xe0, 0x08, + 0x30, 0x58, 0x80, 0xa8, 0xd0, 0xf8, 0x20, 0x48, 0x70, 0x98, 0xc0, 0xcf, 0x06, 0x8c, 0xcf, 0x06, + 0x8d, 0xcf, 0x07, 0x8e, 0xcf, 0x05, 0x8f, 0xcf, 0x06, 0xd8, 0xcf, 0x06, 0xd9, 0xcf, 0x07, 0xda, + 0xcf, 0x05, 0xdb, 0xad, 0x8f, 0xcf, 0x01, 0xcf, 0xc9, 0xb9, 0xd0, 0xf9, 0x4d, 0xaf, 0xcf, 0x01, + 0xcf, 0xd0, 0xf4, 0xa2, 0xd1, 0x86, 0x51, 0xbd, 0x39, 0x12, 0xf0, 0x06, 0x20, 0x7e, 0x51, 0x4c, + 0x54, 0x51, 0xa0, 0x5f, 0xa9, 0x00, 0x99, 0xe0, 0xca, 0x88, 0x10, 0xfa, 0xc6, 0x51, 0xa6, 0x51, + 0x20, 0x7e, 0x51, 0xa6, 0x51, 0xbd, 0x67, 0x11, 0x85, 0x06, 0xbd, 0x39, 0x12, 0x85, 0x07, 0xa0, + 0x5f, 0xb1, 0x06, 0x19, 0xe0, 0xca, 0x91, 0x06, 0x88, 0x10, 0xf6, 0xca, 0xe0, 0xff, 0xf0, 0x03, + 0x4c, 0x3d, 0x51, 0x4c, 0x80, 0x00, 0xbd, 0xbd, 0x59, 0x85, 0x04, 0xbd, 0x8f, 0x5a, 0x85, 0x05, + 0xbc, 0x61, 0x5b, 0xc8, 0x84, 0x1d, 0xbd, 0x39, 0x12, 0x85, 0x07, 0xbd, 0x67, 0x11, 0x85, 0x06, + 0x18, 0x69, 0x20, 0x85, 0x08, 0xa5, 0x07, 0x69, 0x00, 0x85, 0x09, 0xa5, 0x06, 0x18, 0x69, 0x40, + 0x85, 0x0a, 0xa5, 0x07, 0x69, 0x00, 0x85, 0x0b, 0xa0, 0x00, 0xbd, 0xcf, 0x01, 0xbf, 0x5c, 0xd0, + 0x23, 0xb1, 0x04, 0x85, 0x1f, 0x20, 0xff, 0x51, 0x91, 0x08, 0x20, 0xff, 0x51, 0x91, 0x06, 0xa9, + 0x00, 0x91, 0x0a, 0xc8, 0xc4, 0x1d, 0x90, 0xe9, 0x91, 0x06, 0x91, 0x08, 0x91, 0x0a, 0xc8, 0xc0, + 0x20, 0x90, 0xf5, 0x60, 0xb1, 0x04, 0x85, 0x1f, 0x20, 0xff, 0x51, 0x91, 0x08, 0x20, 0xff, 0x51, + 0x91, 0x06, 0x20, 0x86, 0x47, 0xb1, 0x04, 0xcf, 0x04, 0x4a, 0x20, 0xff, 0x51, 0x91, 0x0a, 0xc8, + 0xc4, 0x1d, 0x90, 0xdf, 0xa9, 0x00, 0xf0, 0xcf, 0x01, 0xcf, 0xa2, 0x03, 0xa9, 0x00, 0x46, 0x1f, + 0x90, 0x02, 0x09, 0xc0, 0xca, 0x30, 0x05, 0x4a, 0x4a, 0x4c, 0x03, 0x52, 0x60, 0xa2, 0x02, 0x86, + 0x50, 0xb5, 0x95, 0x29, 0x01, 0xd0, 0x03, 0x4c, 0xa4, 0x52, 0xb5, 0x9e, 0x38, 0xe9, 0x0c, 0x95, + 0xe6, 0x29, 0x03, 0x85, 0x1b, 0xb5, 0xa1, 0x38, 0xe9, 0x1d, 0x95, 0xe9, 0x29, 0x07, 0x85, 0x1c, + 0xbd, 0x4e, 0x4f, 0xaa, 0xbd, 0x67, 0x11, 0x8d, 0xcc, 0x52, 0xbd, 0x39, 0x12, 0x8d, 0xcd, 0x52, + 0x20, 0xad, 0x52, 0xa5, 0x1c, 0x18, 0x69, 0x15, 0x8d, 0x39, 0x4f, 0x38, 0xe9, 0x06, 0x8d, 0x38, + 0x4f, 0x20, 0xab, 0x55, 0xa6, 0x50, 0xb5, 0xe6, 0x4a, 0x4a, 0x95, 0xe6, 0xb5, 0xe9, 0xcf, 0x03, + 0x4a, 0x95, 0xe9, 0xa0, 0x00, 0x84, 0x52, 0xa9, 0x08, 0x8d, 0x3a, 0x4f, 0x20, 0x0a, 0x53, 0x20, + 0x7e, 0x53, 0xa6, 0x50, 0xf6, 0xe9, 0xa9, 0x10, 0x8d, 0x3a, 0x4f, 0x20, 0x0a, 0x53, 0x20, 0x7e, + 0x53, 0xa6, 0x50, 0xf6, 0xe9, 0xa9, 0x18, 0x8d, 0x3a, 0x4f, 0x20, 0x0a, 0x53, 0x20, 0x7e, 0x53, + 0xa6, 0x50, 0xf6, 0xe9, 0xa9, 0x20, 0x8d, 0x3a, 0x4f, 0x20, 0x0a, 0x53, 0x20, 0x7e, 0x53, 0xa6, + 0x50, 0xca, 0x30, 0x03, 0x4c, 0x14, 0x52, 0x60, 0xa9, 0x00, 0xa8, 0xc4, 0x1c, 0xf0, 0x06, 0x99, + 0xe0, 0xca, 0xc8, 0xd0, 0xf6, 0xa6, 0x1b, 0xe0, 0x03, 0xd0, 0x09, 0xa2, 0x1f, 0x99, 0xe0, 0xca, + 0xc8, 0xca, 0x10, 0xf9, 0xa2, 0x00, 0xbd, 0x00, 0xe0, 0x99, 0xe0, 0xca, 0xc8, 0xe8, 0xe0, 0x60, + 0x90, 0xf4, 0xa5, 0x1b, 0xf0, 0x17, 0xc9, 0x03, 0xf0, 0x14, 0x0a, 0xa8, 0xa2, 0x1f, 0x5e, 0xe0, + 0xca, 0x7e, 0x00, 0xcb, 0x7e, 0x20, 0xcb, 0xca, 0x10, 0xf4, 0x88, 0xd0, 0xef, 0x60, 0xa0, 0x02, + 0xa2, 0x1f, 0x1e, 0x40, 0xcb, 0x3e, 0x20, 0xcb, 0x3e, 0x00, 0xcb, 0x3e, 0xe0, 0xca, 0xca, 0x10, + 0xf1, 0x88, 0xd0, 0xec, 0x60, 0xa6, 0x50, 0xb5, 0xe9, 0xaa, 0x20, 0xc5, 0x55, 0xa6, 0x50, 0xb4, + 0xe6, 0x20, 0xd7, 0x55, 0xb1, 0x04, 0x8d, 0xbc, 0x43, 0x20, 0x9f, 0x19, 0xad, 0xbc, 0x43, 0x38, + 0xe5, 0x52, 0x8d, 0x81, 0x53, 0xad, 0xbb, 0x43, 0xe9, 0x00, 0x18, 0x65, 0x7c, 0x8d, 0x82, 0x53, + 0xc8, 0x20, 0x49, 0x56, 0xb1, 0x04, 0x8d, 0xbc, 0x43, 0x20, 0x9f, 0x19, 0xad, 0xbc, 0x43, 0x38, + 0xe5, 0x52, 0x8d, 0x9b, 0x53, 0xad, 0xbb, 0x43, 0xe9, 0x00, 0x18, 0x65, 0x7c, 0x8d, 0x9c, 0x53, + 0xc8, 0xc0, 0x28, 0x90, 0x04, 0xa9, 0x00, 0xf0, 0x05, 0x20, 0xbb, 0x56, 0xb1, 0x04, 0x8d, 0xbc, + 0x43, 0x20, 0x9f, 0x19, 0xad, 0xbc, 0x43, 0x38, 0xe5, 0x52, 0x8d, 0xb5, 0x53, 0xad, 0xbb, 0x43, + 0xe9, 0x00, 0x18, 0x65, 0x7c, 0x8d, 0xb6, 0x53, 0x60, 0xa4, 0x52, 0xb9, 0x00, 0xe0, 0x39, 0xe0, + 0xca, 0xf0, 0x12, 0x85, 0x4e, 0xcf, 0x04, 0x4a, 0xaa, 0x9d, 0xed, 0x4e, 0xa5, 0x4e, 0x29, 0x0f, + 0xaa, 0x9d, 0xed, 0x4e, 0xb9, 0x00, 0xe0, 0x39, 0x00, 0xcb, 0xf0, 0x12, 0x85, 0x4e, 0xcf, 0x04, + 0x4a, 0xaa, 0x9d, 0x04, 0x4f, 0xa5, 0x4e, 0x29, 0x0f, 0xaa, 0x9d, 0x04, 0x4f, 0xb9, 0x00, 0xe0, + 0x39, 0x20, 0xcb, 0xf0, 0x12, 0x85, 0x4e, 0xcf, 0x04, 0x4a, 0xaa, 0x9d, 0x1b, 0x4f, 0xa5, 0x4e, + 0x29, 0x0f, 0xaa, 0x9d, 0x1b, 0x4f, 0xc8, 0xcc, 0x38, 0x4f, 0xf0, 0x10, 0xcc, 0x39, 0x4f, 0xf0, + 0x50, 0xcc, 0x3a, 0x4f, 0xf0, 0x03, 0x4c, 0x80, 0x53, 0x84, 0x52, 0x60, 0xa2, 0x02, 0xbd, 0x32, + 0x4f, 0x9d, 0x35, 0x4f, 0xca, 0x10, 0xf7, 0x20, 0x31, 0x54, 0xb5, 0xb6, 0x95, 0xa7, 0xad, 0x32, + 0x4f, 0xcd, 0x35, 0x4f, 0xf0, 0x08, 0x49, 0x01, 0x8d, 0x32, 0x4f, 0x20, 0xe6, 0x55, 0xad, 0x33, + 0x4f, 0xcd, 0x36, 0x4f, 0xf0, 0x08, 0x49, 0x01, 0x8d, 0x33, 0x4f, 0x20, 0x58, 0x56, 0xad, 0x34, + 0x4f, 0xcd, 0x37, 0x4f, 0xf0, 0xb6, 0x49, 0x01, 0x8d, 0x34, 0x4f, 0x20, 0xca, 0x56, 0x4c, 0xd4, + 0x53, 0x20, 0x31, 0x54, 0x68, 0x68, 0x4c, 0xa4, 0x52, 0xa9, 0x00, 0xa2, 0x04, 0x9d, 0x3b, 0x4f, + 0xca, 0x10, 0xfa, 0xad, 0x32, 0x4f, 0xf0, 0x06, 0xce, 0x32, 0x4f, 0x20, 0xe6, 0x55, 0xad, 0x33, + 0x4f, 0xf0, 0x06, 0xce, 0x33, 0x4f, 0x20, 0x58, 0x56, 0xad, 0x34, 0x4f, 0xf0, 0x06, 0xce, 0x34, + 0x4f, 0x20, 0xca, 0x56, 0xad, 0xee, 0x4e, 0x0d, 0xf1, 0x4e, 0x0d, 0xf2, 0x4e, 0x0d, 0xf3, 0x4e, + 0x0d, 0xf4, 0x4e, 0x0d, 0xfe, 0x4e, 0x0d, 0xf6, 0x4e, 0x0d, 0xfa, 0x4e, 0x0d, 0x01, 0x4f, 0x0d, + 0x05, 0x4f, 0x0d, 0x08, 0x4f, 0x0d, 0x09, 0x4f, 0x0d, 0x0a, 0x4f, 0x0d, 0x0b, 0x4f, 0x0d, 0xfe, + 0x4e, 0x0d, 0x0d, 0x4f, 0x0d, 0x11, 0x4f, 0x0d, 0x18, 0x4f, 0x0d, 0x1c, 0x4f, 0x0d, 0x1f, 0x4f, + 0x0d, 0x20, 0x4f, 0x0d, 0x21, 0x4f, 0x0d, 0x22, 0x4f, 0x0d, 0x2c, 0x4f, 0x0d, 0x24, 0x4f, 0x0d, + 0x28, 0x4f, 0x0d, 0x2f, 0x4f, 0xf0, 0x03, 0xee, 0x3c, 0x4f, 0xad, 0xef, 0x4e, 0x0d, 0xf3, 0x4e, + 0x0d, 0xf5, 0x4e, 0x0d, 0xf6, 0x4e, 0x0d, 0xf7, 0x4e, 0x0d, 0xf8, 0x4e, 0x0d, 0xfb, 0x4e, 0x0d, + 0xff, 0x4e, 0x0d, 0x02, 0x4f, 0x0d, 0x06, 0x4f, 0x0d, 0x0a, 0x4f, 0x0d, 0x0c, 0x4f, 0x0d, 0x0d, + 0x4f, 0x0d, 0x0e, 0x4f, 0x0d, 0x0f, 0x4f, 0x0d, 0x12, 0x4f, 0x0d, 0x16, 0x4f, 0x0d, 0x19, 0x4f, + 0x0d, 0x1d, 0x4f, 0x0d, 0x21, 0x4f, 0x0d, 0x23, 0x4f, 0x0d, 0x24, 0x4f, 0x0d, 0x25, 0x4f, 0x0d, + 0x26, 0x4f, 0x0d, 0x29, 0x4f, 0x0d, 0x2d, 0x4f, 0x0d, 0x30, 0x4f, 0xf0, 0x03, 0xee, 0x3d, 0x4f, + 0xad, 0xfd, 0x4e, 0x0d, 0xfe, 0x4e, 0x0d, 0xff, 0x4e, 0x0d, 0x00, 0x4f, 0x0d, 0x01, 0x4f, 0x0d, + 0x02, 0x4f, 0x0d, 0x03, 0x4f, 0x0d, 0x14, 0x4f, 0x0d, 0x15, 0x4f, 0x0d, 0x16, 0x4f, 0x0d, 0x17, + 0x4f, 0x0d, 0x18, 0x4f, 0x0d, 0x19, 0x4f, 0x0d, 0x1a, 0x4f, 0x0d, 0x2b, 0x4f, 0x0d, 0x2c, 0x4f, + 0x0d, 0x2d, 0x4f, 0x0d, 0x2e, 0x4f, 0x0d, 0x2f, 0x4f, 0x0d, 0x30, 0x4f, 0x0d, 0x31, 0x4f, 0xf0, + 0x03, 0xee, 0x3e, 0x4f, 0xad, 0xf0, 0x4e, 0x0d, 0xf4, 0x4e, 0x0d, 0xf8, 0x4e, 0x0d, 0xf9, 0x4e, + 0x0d, 0xfa, 0x4e, 0x0d, 0xfb, 0x4e, 0x0d, 0xfc, 0x4e, 0x0d, 0x07, 0x4f, 0x0d, 0x0b, 0x4f, 0x0d, + 0x0f, 0x4f, 0x0d, 0x10, 0x4f, 0x0d, 0x11, 0x4f, 0x0d, 0x12, 0x4f, 0x0d, 0x13, 0x4f, 0x0d, 0x1e, + 0x4f, 0x0d, 0x22, 0x4f, 0x0d, 0x26, 0x4f, 0x0d, 0x27, 0x4f, 0x0d, 0x28, 0x4f, 0x0d, 0x29, 0x4f, + 0x0d, 0x2a, 0x4f, 0xf0, 0x03, 0xee, 0x3f, 0x4f, 0xa6, 0x50, 0xa9, 0x00, 0x95, 0xb6, 0x4e, 0x3f, + 0x4f, 0x36, 0xb6, 0x4e, 0x3e, 0x4f, 0x36, 0xb6, 0x4e, 0x3d, 0x4f, 0x36, 0xb6, 0x4e, 0x3c, 0x4f, + 0x36, 0xb6, 0x60, 0xa9, 0x00, 0xa2, 0x16, 0x9d, 0xed, 0x4e, 0x9d, 0x04, 0x4f, 0x9d, 0x1b, 0x4f, + 0xca, 0x10, 0xf4, 0x8d, 0x32, 0x4f, 0x8d, 0x33, 0x4f, 0x8d, 0x34, 0x4f, 0x60, 0xbd, 0xe7, 0x50, + 0x85, 0x04, 0x85, 0x12, 0xbd, 0xff, 0x50, 0x85, 0x05, 0xbd, 0x17, 0x51, 0x85, 0x13, 0x60, 0xb1, + 0x12, 0x29, 0x07, 0xf0, 0x60, 0xad, 0x32, 0x4f, 0xf0, 0x01, 0x60, 0xee, 0x32, 0x4f, 0xad, 0xf0, + 0x4e, 0xae, 0xfd, 0x4e, 0x8e, 0xf0, 0x4e, 0x8d, 0xfd, 0x4e, 0xad, 0xf4, 0x4e, 0xae, 0xfe, 0x4e, + 0x8e, 0xf4, 0x4e, 0x8d, 0xfe, 0x4e, 0xad, 0xf8, 0x4e, 0xae, 0xff, 0x4e, 0x8e, 0xf8, 0x4e, 0x8d, + 0xff, 0x4e, 0xad, 0xf9, 0x4e, 0xae, 0x00, 0x4f, 0x8e, 0xf9, 0x4e, 0x8d, 0x00, 0x4f, 0xad, 0xfa, + 0x4e, 0xae, 0x01, 0x4f, 0x8e, 0xfa, 0x4e, 0x8d, 0x01, 0x4f, 0xad, 0xfb, 0x4e, 0xae, 0x02, 0x4f, + 0x8e, 0xfb, 0x4e, 0x8d, 0x02, 0x4f, 0xad, 0xfc, 0x4e, 0xae, 0x03, 0x4f, 0x8e, 0xfc, 0x4e, 0x8d, + 0x03, 0x4f, 0xa6, 0x50, 0x60, 0xad, 0x32, 0x4f, 0xd0, 0x01, 0x60, 0xce, 0x32, 0x4f, 0x4c, 0xe6, + 0x55, 0xb1, 0x12, 0x29, 0x07, 0xf0, 0x60, 0xad, 0x33, 0x4f, 0xf0, 0x01, 0x60, 0xee, 0x33, 0x4f, + 0xad, 0x07, 0x4f, 0xae, 0x14, 0x4f, 0x8e, 0x07, 0x4f, 0x8d, 0x14, 0x4f, 0xad, 0x0b, 0x4f, 0xae, + 0x15, 0x4f, 0x8e, 0x0b, 0x4f, 0x8d, 0x15, 0x4f, 0xad, 0x0f, 0x4f, 0xae, 0x16, 0x4f, 0x8e, 0x0f, + 0x4f, 0x8d, 0x16, 0x4f, 0xad, 0x10, 0x4f, 0xae, 0x17, 0x4f, 0x8e, 0x10, 0x4f, 0x8d, 0x17, 0x4f, + 0xad, 0x11, 0x4f, 0xae, 0x18, 0x4f, 0x8e, 0x11, 0x4f, 0x8d, 0x18, 0x4f, 0xad, 0x12, 0x4f, 0xae, + 0x19, 0x4f, 0x8e, 0x12, 0x4f, 0x8d, 0x19, 0x4f, 0xad, 0x13, 0x4f, 0xae, 0x1a, 0x4f, 0x8e, 0x13, + 0x4f, 0x8d, 0x1a, 0x4f, 0xa6, 0x50, 0x60, 0xad, 0x33, 0x4f, 0xd0, 0x01, 0x60, 0xce, 0x33, 0x4f, + 0x4c, 0x58, 0x56, 0xb1, 0x12, 0x29, 0x07, 0xf0, 0x60, 0xad, 0x34, 0x4f, 0xf0, 0x01, 0x60, 0xee, + 0x34, 0x4f, 0xad, 0x1e, 0x4f, 0xae, 0x2b, 0x4f, 0x8e, 0x1e, 0x4f, 0x8d, 0x2b, 0x4f, 0xad, 0x22, + 0x4f, 0xae, 0x2c, 0x4f, 0x8e, 0x22, 0x4f, 0x8d, 0x2c, 0x4f, 0xad, 0x26, 0x4f, 0xae, 0x2d, 0x4f, + 0x8e, 0x26, 0x4f, 0x8d, 0x2d, 0x4f, 0xad, 0x27, 0x4f, 0xae, 0x2e, 0x4f, 0x8e, 0x27, 0x4f, 0x8d, + 0x2e, 0x4f, 0xad, 0x28, 0x4f, 0xae, 0x2f, 0x4f, 0x8e, 0x28, 0x4f, 0x8d, 0x2f, 0x4f, 0xad, 0x29, + 0x4f, 0xae, 0x30, 0x4f, 0x8e, 0x29, 0x4f, 0x8d, 0x30, 0x4f, 0xad, 0x2a, 0x4f, 0xae, 0x31, 0x4f, + 0x8e, 0x2a, 0x4f, 0x8d, 0x31, 0x4f, 0xa6, 0x50, 0x60, 0xad, 0x34, 0x4f, 0xd0, 0x01, 0x60, 0xce, + 0x34, 0x4f, 0x4c, 0xca, 0x56, 0xf8, 0x4d, 0x09, 0x4e, 0x1e, 0x4e, 0x2b, 0x4e, 0x38, 0x4e, 0x45, + 0x4e, 0x4a, 0x4e, 0x5b, 0x4e, 0x74, 0x4e, 0x7d, 0x4e, 0x86, 0x4e, 0x8b, 0x4e, 0x90, 0x4e, 0x01, + 0x9f, 0x1f, 0x07, 0x01, 0x92, 0x26, 0x07, 0x01, 0x9f, 0x02, 0x0a, 0x01, 0x9f, 0x19, 0x0a, 0x01, + 0x92, 0x1d, 0x0a, 0x01, 0x92, 0x26, 0x0a, 0xff, 0x01, 0x9e, 0x09, 0x07, 0x01, 0x9f, 0x1e, 0x07, + 0x01, 0x92, 0x06, 0x0a, 0x01, 0x9e, 0x0f, 0x0a, 0x01, 0x9f, 0x18, 0x0a, 0x01, 0x92, 0x20, 0x0a, + 0xff, 0x01, 0x92, 0x05, 0x07, 0x01, 0x9e, 0x09, 0x07, 0x01, 0x9f, 0x16, 0x07, 0x01, 0x9e, 0x1a, + 0x07, 0x01, 0x9f, 0x1e, 0x07, 0x01, 0x9e, 0x05, 0x0a, 0x01, 0x9f, 0x09, 0x0a, 0x01, 0x9e, 0x0f, + 0x0a, 0x01, 0x9f, 0x15, 0x0a, 0x01, 0x9e, 0x1b, 0x0a, 0xff, 0x01, 0x9e, 0x1d, 0x0a, 0x01, 0x9f, + 0x26, 0x0a, 0xff, 0x01, 0x9e, 0x0b, 0x04, 0x01, 0x9f, 0x1c, 0x04, 0xff, 0x01, 0x9e, 0x02, 0x03, + 0x01, 0x9e, 0x06, 0x03, 0x01, 0x9f, 0x1c, 0x03, 0x01, 0x9e, 0x20, 0x03, 0x01, 0x9f, 0x26, 0x03, + 0x01, 0x9f, 0x1e, 0x06, 0x01, 0x9e, 0x02, 0x0a, 0x01, 0x9f, 0x17, 0x0a, 0x01, 0x9f, 0x1a, 0x0a, + 0x01, 0x9e, 0x1e, 0x0a, 0xff, 0x01, 0x9f, 0x08, 0x05, 0x01, 0x9e, 0x0a, 0x05, 0x01, 0x9f, 0x0e, + 0x05, 0x01, 0x9f, 0x16, 0x05, 0x01, 0x9f, 0x1a, 0x05, 0x01, 0x9e, 0x1c, 0x05, 0x01, 0x9f, 0x06, + 0x09, 0x01, 0x9e, 0x1e, 0x09, 0xff, 0x01, 0x9e, 0x03, 0x02, 0x01, 0x9f, 0x0c, 0x02, 0x01, 0x9e, + 0x0d, 0x02, 0x01, 0x9f, 0x19, 0x02, 0x01, 0x9e, 0x1a, 0x02, 0x01, 0x9f, 0x05, 0x05, 0x01, 0x9e, + 0x06, 0x05, 0x01, 0x9f, 0x0c, 0x05, 0x01, 0x9e, 0x0d, 0x05, 0x01, 0x9f, 0x19, 0x05, 0x01, 0x9e, + 0x1a, 0x05, 0x01, 0x9f, 0x02, 0x09, 0x01, 0x9e, 0x03, 0x09, 0xff, 0x01, 0x9f, 0x0f, 0x03, 0x01, + 0x9f, 0x18, 0x03, 0x01, 0x9e, 0x06, 0x07, 0x01, 0x9f, 0x21, 0x07, 0xff, 0x01, 0x9f, 0x20, 0x02, + 0x01, 0x9e, 0x0f, 0x07, 0x01, 0x9e, 0x1b, 0x0a, 0x01, 0x9f, 0x1c, 0x0a, 0x01, 0x9e, 0x20, 0x0a, + 0xff, 0x01, 0x9f, 0x01, 0x04, 0x01, 0x9f, 0x1e, 0x07, 0x01, 0x9f, 0x1e, 0x0a, 0xff, 0x01, 0x9e, + 0x12, 0x03, 0x01, 0x9f, 0x15, 0x03, 0x01, 0x9f, 0x07, 0x0a, 0xff, 0x01, 0x9e, 0x24, 0x04, 0x01, + 0x9e, 0x24, 0x07, 0x01, 0x9e, 0x24, 0x0a, 0xff, 0x01, 0xbf, 0x03, 0xff, 0x01, 0x9f, 0x09, 0x07, + 0x01, 0x9e, 0x1e, 0x07, 0x01, 0x9f, 0x09, 0x0a, 0x01, 0x9e, 0x1e, 0x0a, 0xff, 0x01, 0x9f, 0x13, + 0x03, 0x01, 0x9e, 0x15, 0x03, 0x01, 0x9e, 0x0e, 0x04, 0x01, 0x9f, 0x1a, 0x04, 0x01, 0x9e, 0x0d, + 0x06, 0x01, 0x9f, 0x1b, 0x06, 0xff, 0x01, 0x9e, 0x20, 0x04, 0x01, 0x9f, 0x05, 0x07, 0xff, 0x01, + 0x9e, 0x26, 0x0a, 0x01, 0x9e, 0x1f, 0x0b, 0xff, 0x01, 0x9e, 0x25, 0x0b, 0xff, 0x01, 0xbf, 0x03, + 0xff, 0x01, 0xbf, 0x03, 0xff, 0xbf, 0x07, 0xf4, 0x33, 0xf5, 0x33, 0xf4, 0x33, 0xfb, 0x33, 0x01, + 0x34, 0x27, 0x34, 0xf4, 0x33, 0x60, 0x34, 0x77, 0x34, 0x8e, 0x34, 0xf4, 0x33, 0xf4, 0x33, 0xbc, + 0x34, 0xc2, 0x34, 0x8c, 0x35, 0x92, 0x35, 0x9e, 0x35, 0xc3, 0x35, 0xf9, 0x35, 0x5e, 0x42, 0x41, + 0xb0, 0xc6, 0xac, 0xa4, 0xb3, 0xb3, 0xac, 0xa4, 0xc6, 0xc6, 0xac, 0xa4, 0xc6, 0xc6, 0x8d, 0xa0, + 0xc4, 0xc6, 0xc2, 0xa0, 0xa4, 0xc6, 0xc6, 0xac, 0xa4, 0xb0, 0xc3, 0xac, 0xa4, 0xb0, 0xb3, 0xac, + 0xa4, 0xc3, 0xb3, 0x8d, 0xaa, 0x20, 0xc3, 0xc8, 0xc1, 0xd2, 0x20, 0xb9, 0xb7, 0x8d, 0xa0, 0xc4, + 0xc6, 0xc2, 0xa0, 0xa4, 0xc6, 0xb0, 0xac, 0xa4, 0xc3, 0xb0, 0xac, 0xa4, 0xb0, 0xb0, 0xac, 0xa4, + 0xb0, 0xb0, 0x8d, 0xa0, 0xc4, 0xc6, 0xc2, 0xa0, 0xa4, 0xb3, 0xc6, 0xac, 0xa4, 0xc6, 0xc3, 0xac, + 0xa4, 0xc6, 0xb0, 0xac, 0xa4, 0xb0, 0xb3, 0x8d, 0xaa, 0x20, 0xc3, 0xc8, 0xc1, 0xd2, 0x20, 0xb9, + 0xb8, 0x8d, 0xa0, 0xc4, 0xc6, 0xc2, 0xa0, 0xa4, 0xc6, 0xc1, 0xac, 0xa4, 0xc6, 0xc1, 0xac, 0xa4, + 0xc6, 0xc5, 0xac, 0xa4, 0xc6, 0xc5, 0x8d, 0xa0, 0xc4, 0xc6, 0xc2, 0xa0, 0xa4, 0xc6, 0xc1, 0xac, + 0xa4, 0xb3, 0xc1, 0xac, 0xa4, 0xc2, 0xc1, 0xac, 0xa4, 0xc1, 0xc1, 0x8d, 0xaa, 0x20, 0xc3, 0xc8, + 0xc1, 0xd2, 0x20, 0xb9, 0xb9, 0x8d, 0xa0, 0xc4, 0xc6, 0xc2, 0xa0, 0xa4, 0xc6, 0xc6, 0xac, 0xa4, + 0xc3, 0xc6, 0xac, 0xa4, 0xc6, 0x00, 0x8c, 0x46, 0x04, 0x03, 0x06, 0x05, 0x00, 0x07, 0x04, 0x00, + 0x01, 0x02, 0x03, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1e, 0x1d, 0x1b, 0x17, 0x0f, 0x3a, 0x52, 0x46, + 0x67, 0x7f, 0x25, 0x55, 0x10, 0x47, 0x7d, 0x3d, 0xa9, 0x49, 0xbe, 0x7c, 0xb4, 0x8a, 0xcb, 0x98, + 0xe2, 0xa6, 0xf9, 0x1f, 0xd7, 0x2e, 0xec, 0x10, 0xc2, 0x92, 0x9e, 0x2c, 0x53, 0x3b, 0x68, 0xa8, + 0xb4, 0xd5, 0x02, 0xc9, 0xed, 0xe1, 0x17, 0x3a, 0x52, 0x3a, 0x52, 0x3a, 0x52, 0x3a, 0x52, 0x3a, + 0x52, 0x3a, 0x52, 0x3a, 0x52, 0x6a, 0xac, 0x76, 0xd3, 0x8b, 0xeb, 0x97, 0x00, 0x69, 0x7e, 0x2a, + 0x3f, 0x3b, 0x68, 0x87, 0xc3, 0x24, 0x4e, 0x41, 0xed, 0x65, 0x17, 0x72, 0xb1, 0x3a, 0xb8, 0x4f, + 0xca, 0x11, 0x3b, 0x26, 0x4d, 0xe7, 0x5f, 0xfc, 0x71, 0x8d, 0xde, 0xfa, 0x91, 0xbb, 0x1e, 0x2d, + 0xd0, 0xec, 0x16, 0x01, 0x28, 0x64, 0xdc, 0x79, 0xee, 0x8e, 0x00, 0xa3, 0x12, 0x72, 0xb1, 0x39, + 0x60, 0x9c, 0xd5, 0x72, 0xb1, 0x72, 0xb1, 0x72, 0xb1, 0x72, 0xb1, 0x86, 0xc5, 0x9b, 0xd7, 0x4e, + 0xa2, 0xb4, 0x63, 0x72, 0xb1, 0x72, 0xb1, 0x72, 0xb1, 0xfd, 0x00, 0x83, 0x00, 0xfd, 0x00, 0xfd, + 0x00, 0xfd, 0x00, 0x98, 0x00, 0xad, 0x00, 0x12, 0x00, 0x27, 0x00, 0x3c, 0x00, 0x51, 0x00, 0xfd, + 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, + 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0x66, 0x00, 0x7b, 0x00, 0xa5, 0x00, 0xba, + 0x00, 0x16, 0x00, 0x40, 0x00, 0xc2, 0x00, 0xec, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0xe4, 0x00, 0xcf, + 0x04, 0x66, 0xcf, 0x04, 0x67, 0x65, 0x65, 0xcf, 0x04, 0x67, 0xcf, 0x09, 0x66, 0x65, 0x66, 0x65, + 0x66, 0xcf, 0x07, 0x65, 0xcf, 0x03, 0x64, 0x65, 0xcf, 0x03, 0x64, 0x65, 0xcf, 0x0e, 0x66, 0xcf, + 0x03, 0x63, 0x67, 0xcf, 0x03, 0x63, 0xcf, 0x05, 0x64, 0x65, 0x65, 0xcf, 0x04, 0x61, 0x5f, 0x5e, + 0x5f, 0x5f, 0x61, 0x61, 0xcf, 0x04, 0x60, 0xcf, 0x04, 0x62, 0x61, 0x62, 0x61, 0x62, 0x5e, 0x5e, + 0xcf, 0x03, 0x5d, 0x5e, 0x5e, 0x5d, 0x5f, 0xcf, 0x08, 0x60, 0x61, 0x60, 0xcf, 0x0f, 0x61, 0xcf, + 0x04, 0x5f, 0xcf, 0x04, 0x5e, 0xcf, 0x06, 0x61, 0x67, 0x00, 0x62, 0x00, 0x67, 0x00, 0x67, 0x00, + 0x67, 0x00, 0x62, 0x00, 0x62, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x67, 0x00, + 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, + 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x67, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, 0x68, 0x00, + 0x63, 0x00, 0x63, 0x00, 0x62, 0x00, 0x62, 0x00, 0x67, 0x00, 0x67, 0x00, 0x68, 0x00, 0x0b, 0x14, + 0x0b, 0x14, 0x14, 0x0c, 0x14, 0x0c, 0x0b, 0x14, 0x0c, 0x14, 0x0c, 0x14, 0x0c, 0x14, 0x0c, 0x14, + 0x0c, 0x14, 0x0c, 0x14, 0x0e, 0x12, 0x0b, 0x12, 0x0e, 0x12, 0x0b, 0x12, 0x0d, 0x13, 0x0b, 0x14, + 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, + 0x0b, 0x14, 0x0b, 0x14, 0x0b, 0x14, 0x0c, 0xcf, 0x03, 0x14, 0x0d, 0xcf, 0x07, 0x14, 0x0b, 0x14, + 0x14, 0x11, 0x14, 0x11, 0x10, 0x15, 0x10, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, + 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x10, 0x11, 0x14, 0x14, 0x10, 0x10, 0x14, 0x14, 0x11, + 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, + 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x15, 0x15, 0x14, 0x11, 0x15, 0x15, + 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, + 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, + 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, + 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, + 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0xf7, 0xf0, 0xf7, 0xf0, + 0xf0, 0xf7, 0xf0, 0xf7, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, + 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, + 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, + 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, 0xf7, 0xf0, + 0xf7, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf0, 0xf5, 0xf0, 0xf5, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, + 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf0, 0xf5, 0xf5, 0xf0, 0xf0, 0xf5, + 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, + 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, + 0xf0, 0xf5, 0xf5, 0xf0, 0xf5, 0xf0, 0xf5, 0xf0, 0xbf, 0x04, 0xcf, 0x04, 0x01, 0xbf, 0x11, 0x01, + 0xbf, 0x03, 0x01, 0xbf, 0x1d, 0x01, 0xbf, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0xbf, 0x06, 0xcf, + 0x04, 0x01, 0xbf, 0x10, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0xbf, 0x1c, 0x01, 0xbf, 0x03, 0x01, + 0x01, 0xbf, 0x38, 0x55, 0xbf, 0x03, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0xbf, + 0x08, 0x0c, 0x00, 0x18, 0x00, 0x34, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x26, + 0x03, 0xfe, 0x03, 0xff, 0x00, 0xff, 0x00, 0x3f, 0x00, 0x0d, 0x3f, 0xc1, 0x3f, 0xc2, 0x08, 0x06, + 0x00, 0x0e, 0x00, 0x4c, 0x01, 0xfc, 0x01, 0xfc, 0x00, 0x00, 0x30, 0x18, 0x3c, 0x2c, 0x38, 0x7c, + 0x67, 0x27, 0x7d, 0xfc, 0xfc, 0xf8, 0xb2, 0x03, 0x27, 0x33, 0x36, 0x1e, 0x3c, 0x0c, 0x1c, 0x30, + 0x00, 0x18, 0x00, 0x2c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7f, + 0xc0, 0xff, 0xc0, 0xff, 0x00, 0xfc, 0x00, 0xb0, 0x00, 0x83, 0xfc, 0x43, 0xfc, 0x60, 0x10, 0x70, + 0x00, 0x32, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0xbf, 0x03, 0x01, 0x00, 0x27, 0x00, 0x0b, 0x00, 0x02, + 0x00, 0x02, 0x00, 0x12, 0x00, 0x1a, 0x00, 0x18, 0x0c, 0x00, 0x0c, 0x00, 0x08, 0xbf, 0x04, 0x32, + 0x00, 0x3e, 0x00, 0x3d, 0x00, 0x19, 0x00, 0x01, 0x00, 0x00, 0x80, 0xe4, 0xc0, 0x50, 0x40, 0x00, + 0x18, 0x18, 0x00, 0x01, 0x01, 0x04, 0x0c, 0xbc, 0x98, 0x80, 0x00, 0xe4, 0x00, 0xd0, 0x00, 0x40, + 0x00, 0x40, 0x00, 0x48, 0x00, 0x58, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x10, 0x00, + 0x00, 0x4c, 0x00, 0x7c, 0x00, 0xbc, 0x00, 0x98, 0x00, 0x80, 0x00, 0x0c, 0x1e, 0x0a, 0x1e, 0x1e, + 0x1f, 0x03, 0x1f, 0x0d, 0x3d, 0x6d, 0x67, 0x40, 0x00, 0x11, 0x1b, 0x16, 0x14, 0x5c, 0x38, 0xbf, + 0x09, 0x30, 0x00, 0x60, 0x00, 0xd0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x30, 0x00, 0x10, 0x00, 0x98, + 0x00, 0xf8, 0x03, 0xfc, 0x03, 0xfc, 0x02, 0xfc, 0x02, 0xf4, 0x13, 0x34, 0x13, 0x0c, 0x1f, 0x0c, + 0x7c, 0xf0, 0x0c, 0x18, 0x3c, 0x34, 0x1c, 0x3e, 0xe6, 0xe4, 0xbe, 0x3f, 0x3f, 0x1f, 0x4d, 0xc0, + 0xe4, 0xcc, 0x6c, 0x78, 0x3c, 0x30, 0x38, 0x01, 0x03, 0x01, 0x15, 0x01, 0x01, 0x00, 0x1c, 0x00, + 0x02, 0x02, 0x12, 0x18, 0x9f, 0x9f, 0x8e, 0x04, 0xbf, 0x0a, 0x04, 0x00, 0x9c, 0x00, 0x2c, 0x00, + 0x08, 0x00, 0x08, 0x00, 0x48, 0x00, 0x68, 0x00, 0x60, 0xbf, 0x06, 0x01, 0x00, 0x01, 0x08, 0x00, + 0xc8, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0x08, 0x01, 0x27, 0x03, 0x0a, 0x02, 0x00, 0x18, 0x18, 0x00, + 0x80, 0x80, 0x20, 0x30, 0x3d, 0x19, 0x00, 0x18, 0x00, 0x30, 0x00, 0x68, 0x00, 0x78, 0x00, 0x78, + 0x00, 0x18, 0x00, 0x08, 0x00, 0x4c, 0x07, 0xfc, 0x07, 0xfe, 0x01, 0xfe, 0x00, 0x7e, 0x00, 0x7a, + 0x00, 0x0a, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x1e, 0x00, 0x1b, 0x00, 0x3b, + 0x18, 0x00, 0x0c, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x18, 0x00, 0x10, 0x00, 0x32, 0x00, + 0x3f, 0xe0, 0x7f, 0xe0, 0x7f, 0x80, 0x7e, 0x00, 0x5e, 0x00, 0x50, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x70, 0x00, 0x18, 0x00, 0x78, 0x00, 0xd8, 0x00, 0xdc, 0x00, 0x00, 0x02, 0x00, 0x4e, 0x00, 0x16, + 0x00, 0x04, 0x00, 0x04, 0x00, 0x24, 0x00, 0x34, 0x00, 0x30, 0x18, 0x00, 0x18, 0x00, 0x10, 0xbf, + 0x04, 0x04, 0x00, 0x74, 0x00, 0x7a, 0x00, 0x3a, 0x00, 0x12, 0x00, 0x00, 0x40, 0x00, 0x72, 0x00, + 0x68, 0x00, 0x20, 0x00, 0x20, 0x00, 0x24, 0x00, 0x2c, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x18, + 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x5e, 0x00, 0x5c, 0x00, 0x08, 0x00, 0x30, 0x78, + 0x50, 0x78, 0x78, 0xf8, 0xc0, 0xf8, 0xb0, 0xbc, 0xb6, 0xe6, 0x02, 0x00, 0x88, 0xd8, 0x68, 0x28, + 0x3a, 0x1c, 0xbf, 0x08, 0x30, 0x00, 0x18, 0x00, 0x2c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x30, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x7c, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfd, 0x00, 0xbd, 0x00, 0xb3, 0x20, + 0xc3, 0x20, 0x07, 0xe0, 0x3c, 0xf8, 0x80, 0xc0, 0x80, 0xa8, 0x80, 0x80, 0x00, 0x38, 0x00, 0x40, + 0x40, 0x48, 0x18, 0xf9, 0xf9, 0x71, 0xbf, 0x06, 0x80, 0xe4, 0xd0, 0x40, 0x40, 0x48, 0x58, 0x18, + 0xbf, 0x03, 0x02, 0x42, 0x4c, 0x3c, 0x78, 0x43, 0xbf, 0x04, 0x04, 0x08, 0x0c, 0x7c, 0x78, 0x7c, + 0x38, 0x7e, 0xff, 0x81, 0x00, 0x44, 0x6e, 0xe7, 0xc3, 0x66, 0xe7, 0x08, 0x08, 0x04, 0x04, 0x85, + 0x8d, 0x89, 0xff, 0xfe, 0x7e, 0x7c, 0x7c, 0x00, 0x00, 0x44, 0x6c, 0x6c, 0x44, 0x44, 0x6c, 0xc6, + 0x00, 0x60, 0x78, 0x3c, 0x78, 0x74, 0x70, 0x00, 0x04, 0xbf, 0x04, 0x7c, 0xfd, 0xb9, 0x81, 0x00, + 0xb1, 0xf5, 0xfb, 0xf9, 0x78, 0x70, 0x30, 0xbf, 0x05, 0x7c, 0x7c, 0x38, 0x10, 0xbf, 0x03, 0x10, + 0x12, 0x32, 0x20, 0x20, 0xa0, 0xb2, 0xbe, 0xdf, 0xff, 0x7e, 0x00, 0x00, 0x22, 0x36, 0x37, 0x33, + 0x16, 0x13, 0x30, 0x00, 0x08, 0x4c, 0x4c, 0x04, 0x04, 0x05, 0x4d, 0x7d, 0xfb, 0xff, 0x7e, 0x00, + 0x00, 0x44, 0x6c, 0xec, 0xcc, 0x68, 0xc8, 0x0c, 0x00, 0x60, 0x70, 0xd0, 0xf0, 0xf0, 0x78, 0x38, + 0x38, 0x6c, 0x6c, 0x2c, 0x78, 0x60, 0x04, 0x6c, 0xec, 0xce, 0x26, 0x62, 0x42, 0x00, 0x60, 0x70, + 0xd0, 0xf0, 0xf0, 0x78, 0x38, 0x7e, 0x7f, 0x3c, 0x7c, 0xf8, 0x80, 0x04, 0x04, 0x2c, 0x6c, 0x46, + 0xc7, 0x01, 0x00, 0x0c, 0x1c, 0x16, 0x1e, 0x1e, 0x3c, 0x38, 0x38, 0x6c, 0x6c, 0x68, 0x3c, 0x0c, + 0x40, 0x6c, 0x6e, 0xe6, 0xc8, 0x8c, 0x84, 0x00, 0x06, 0x0e, 0x0b, 0x0f, 0x0f, 0x1e, 0x1c, 0x7e, + 0xfe, 0x3c, 0x3e, 0x1f, 0x01, 0x20, 0x20, 0x34, 0x36, 0x62, 0xe3, 0x80, 0x0c, 0x0c, 0x8c, 0x8c, + 0xde, 0x9e, 0x1e, 0x0c, 0xbf, 0x03, 0x01, 0x3f, 0x3f, 0x1c, 0x08, 0x00, 0x00, 0x30, 0x30, 0x31, + 0x31, 0x7b, 0x79, 0x78, 0x30, 0xbf, 0x03, 0x80, 0xfc, 0xfc, 0x38, 0x10, 0x00, 0x00, 0x04, 0x1c, + 0x0c, 0x28, 0x08, 0x08, 0x00, 0x40, 0x40, 0xcf, 0x03, 0x10, 0x86, 0x9c, 0x38, 0x10, 0x00, 0x00, + 0x04, 0x1c, 0x0c, 0x28, 0x08, 0x08, 0x00, 0x40, 0x00, 0x00, 0x01, 0x01, 0x04, 0x3c, 0xb8, 0xb8, + 0x10, 0x00, 0x40, 0x70, 0x60, 0x28, 0x20, 0x20, 0x00, 0x04, 0x04, 0xcf, 0x03, 0x10, 0xc2, 0x72, + 0x38, 0x10, 0x00, 0x00, 0x20, 0x38, 0x30, 0x14, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x80, 0x80, + 0x20, 0x3c, 0x1d, 0x1d, 0x08, 0x00, 0x18, 0x3c, 0x28, 0x3c, 0x3c, 0x7c, 0x70, 0x7c, 0xd8, 0xce, + 0xce, 0x4e, 0x7c, 0x7c, 0x00, 0x44, 0x6c, 0x6c, 0x44, 0x44, 0x66, 0x18, 0x1c, 0x34, 0x3c, 0x3c, + 0x04, 0x06, 0x24, 0xbe, 0x9f, 0xfb, 0xf3, 0x72, 0x3e, 0x00, 0x22, 0x36, 0x36, 0x22, 0x22, 0x66, + 0xe0, 0xc0, 0x54, 0x40, 0x40, 0x00, 0x0c, 0x00, 0x21, 0xcf, 0x03, 0x31, 0x00, 0x00, 0x7c, 0x38, + 0x10, 0x00, 0x05, 0x23, 0x0b, 0x03, 0x82, 0x9a, 0xd8, 0x98, 0x00, 0x00, 0x04, 0x0c, 0x0c, 0x00, + 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x18, 0x3c, 0x28, 0x3c, 0x3c, 0x7c, 0x74, 0x7c, 0x78, 0xfe, 0xfe, + 0x82, 0x82, 0xc4, 0x2c, 0x6c, 0x6c, 0x28, 0x3c, 0x3e, 0x18, 0x3c, 0x14, 0x3c, 0x3c, 0x3e, 0x0e, + 0x3e, 0x1b, 0x73, 0x73, 0x72, 0x3e, 0x3e, 0x00, 0x22, 0x36, 0x36, 0x22, 0x22, 0x66, 0x18, 0x38, + 0x2c, 0x3c, 0x3c, 0x20, 0x60, 0x24, 0x7d, 0xf9, 0xdf, 0xcf, 0x01, 0xcf, 0x4e, 0x7c, 0x00, 0x44, + 0x6c, 0x6c, 0x44, 0x44, 0x66, 0x80, 0xe0, 0xc0, 0xd4, 0x40, 0x40, 0x00, 0x08, 0xbf, 0x04, 0x7c, + 0x7c, 0x3b, 0xd2, 0x82, 0x80, 0x07, 0x03, 0x2a, 0x02, 0x02, 0x00, 0x30, 0x00, 0x84, 0xcf, 0x03, + 0x8c, 0x00, 0x00, 0x3e, 0x1c, 0x08, 0x00, 0xa0, 0xc4, 0xd0, 0xc0, 0x41, 0x59, 0x1b, 0x19, 0x00, + 0x00, 0x20, 0x30, 0x30, 0x00, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x0c, 0x1c, 0x16, 0x1e, 0x1e, 0x3c, + 0x38, 0x38, 0x7c, 0x7c, 0x78, 0x38, 0x08, 0x40, 0x40, 0x60, 0x70, 0xc0, 0x80, 0xc0, 0x00, 0x06, + 0x0e, 0x0b, 0x0f, 0x0f, 0x1e, 0x1c, 0x7e, 0xfe, 0x3c, 0x3e, 0x13, 0x01, 0x20, 0x34, 0x3c, 0xfc, + 0x8c, 0x84, 0x06, 0x00, 0x60, 0x70, 0xd0, 0xf0, 0xf0, 0x78, 0x38, 0x38, 0x7c, 0x7c, 0x3c, 0x38, + 0x20, 0x04, 0x04, 0x0c, 0x1c, 0x06, 0x02, 0x06, 0x00, 0x60, 0x70, 0xd0, 0xf0, 0xf0, 0x78, 0x38, + 0x7e, 0x7f, 0x3c, 0x7c, 0xc8, 0x80, 0x04, 0x2c, 0x3c, 0x3f, 0x31, 0x21, 0x60, 0x04, 0x1c, 0x0c, + 0x28, 0x08, 0x08, 0x00, 0x40, 0x40, 0xbf, 0x03, 0x06, 0x1c, 0x38, 0x38, 0x10, 0x00, 0x04, 0x1c, + 0x0c, 0x28, 0x08, 0x08, 0x00, 0x40, 0x00, 0x00, 0x01, 0x01, 0x34, 0x3c, 0xb8, 0x90, 0x00, 0x00, + 0x40, 0x70, 0x60, 0x28, 0x20, 0x20, 0x00, 0x04, 0x04, 0xbf, 0x03, 0xc0, 0x70, 0x38, 0x38, 0x10, + 0x00, 0x20, 0x38, 0x30, 0x14, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x80, 0x80, 0x2c, 0x3c, 0x1d, + 0x09, 0xbf, 0x04, 0x80, 0x8c, 0x9c, 0x90, 0x9c, 0x9c, 0x98, 0xbc, 0xbe, 0xfe, 0xfe, 0xbd, 0x99, + 0xbc, 0x3c, 0x26, 0x62, 0x42, 0xc3, 0x00, 0x30, 0xcf, 0x03, 0x39, 0xb9, 0x99, 0xbd, 0x7d, 0x7d, + 0x3f, 0x3b, 0x19, 0x1d, 0x3c, 0x24, 0x26, 0x26, 0x20, 0x60, 0x60, 0x01, 0x0d, 0xcf, 0x04, 0x1d, + 0x19, 0x3d, 0x3f, 0x3f, 0x7d, 0xdd, 0x98, 0x38, 0x3c, 0x24, 0x64, 0x64, 0x04, 0x06, 0x06, 0x08, + 0x00, 0x08, 0x00, 0x10, 0x00, 0x1c, 0x00, 0x2e, 0x00, 0x26, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x27, + 0x00, 0x1f, 0x00, 0x0f, 0x00, 0x27, 0x80, 0x3f, 0x80, 0x03, 0x00, 0x07, 0x00, 0x06, 0x00, 0x0e, + 0x00, 0x0a, 0x00, 0x34, 0x00, 0x04, 0x00, 0x18, 0xbf, 0x17, 0x41, 0x00, 0x43, 0xf0, 0x41, 0x00, + 0xa2, 0x00, 0xb2, 0x00, 0x99, 0x50, 0x7f, 0x50, 0x3f, 0xf0, 0x0f, 0xf0, 0x3f, 0x60, 0x04, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x1d, 0x00, 0x19, 0x00, 0x1c, 0x80, 0x3c, 0x80, 0x39, 0x00, + 0x3e, 0x00, 0x3c, 0x00, 0x79, 0x00, 0x7f, 0x00, 0x30, 0x00, 0x38, 0x00, 0x18, 0x00, 0x1c, 0x00, + 0x14, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x06, 0xbf, 0x18, 0x82, 0x0f, 0xc2, 0x00, 0x82, 0x00, 0x45, + 0x00, 0x4d, 0x0a, 0x99, 0x0a, 0xfe, 0x0f, 0xfc, 0x0f, 0xf0, 0x06, 0xfc, 0x00, 0x20, 0x60, 0x50, + 0x70, 0x70, 0x60, 0xe0, 0xf0, 0xf8, 0xdc, 0x54, 0xbf, 0x08, 0x30, 0x60, 0x58, 0x78, 0x3c, 0x7e, + 0x73, 0xf6, 0xde, 0x9c, 0x88, 0xbf, 0x03, 0x04, 0x06, 0x0a, 0x0e, 0x0e, 0x06, 0x07, 0x0f, 0x1f, + 0x3b, 0x2a, 0xbf, 0x08, 0x0c, 0x06, 0x1a, 0x1e, 0x3c, 0x7e, 0xce, 0x6f, 0x7b, 0x39, 0x11, 0x00, + 0x00, 0x60, 0xc0, 0x90, 0xa0, 0x80, 0xbf, 0x05, 0x20, 0x22, 0x72, 0x70, 0x50, 0x38, 0x28, 0x1c, + 0x1f, 0x0e, 0x04, 0xbf, 0x0e, 0x30, 0x00, 0xc0, 0x00, 0x90, 0x00, 0xa0, 0xbf, 0x06, 0xc0, 0x0c, + 0xc0, 0x09, 0xc0, 0x01, 0xf0, 0x03, 0x30, 0x07, 0x30, 0xcf, 0x01, 0xcf, 0xfc, 0xcf, 0x01, 0xcf, + 0xfc, 0x06, 0x03, 0x09, 0x05, 0x01, 0xbf, 0x05, 0x04, 0x44, 0x4e, 0x0e, 0x0a, 0x1c, 0x14, 0x38, + 0xf8, 0x70, 0x20, 0xbf, 0x0f, 0x0c, 0x00, 0x03, 0x00, 0x09, 0x00, 0x05, 0xbf, 0x04, 0x03, 0x00, + 0x03, 0x30, 0x03, 0x90, 0x0f, 0x80, 0x0c, 0xc0, 0x0c, 0xe0, 0x3f, 0xf3, 0x3f, 0xf3, 0xbf, 0x0f, + 0x06, 0x0c, 0x0a, 0x3e, 0x4e, 0x4c, 0xbf, 0x1d, 0x06, 0xcf, 0x03, 0x18, 0x12, 0x79, 0x94, 0x7f, + 0xc0, 0x1f, 0xb1, 0x1f, 0xb3, 0xbf, 0x0f, 0x60, 0x30, 0x50, 0x7c, 0x70, 0x30, 0xbf, 0x1c, 0x60, + 0x00, 0x18, 0x18, 0x48, 0x18, 0x29, 0x9e, 0x03, 0xfe, 0x8f, 0xf8, 0xcf, 0x01, 0xcf, 0xf8, 0x00, + 0x60, 0x20, 0x60, 0x70, 0x70, 0x3c, 0x3e, 0x3a, 0x3a, 0x10, 0x00, 0x70, 0x18, 0x58, 0x18, 0x08, + 0xbf, 0x05, 0x0a, 0x1a, 0x18, 0x18, 0x08, 0x0e, 0x0f, 0x09, 0x05, 0x04, 0x0c, 0x00, 0x06, 0x04, + 0x06, 0x0e, 0x0e, 0x3c, 0x7c, 0x5c, 0x5c, 0x08, 0xbf, 0x03, 0x30, 0x10, 0x30, 0x38, 0x1c, 0x1e, + 0x1c, 0x18, 0x18, 0x10, 0x00, 0x00, 0x06, 0x04, 0x06, 0x0e, 0x1c, 0x3c, 0x1c, 0x0c, 0x0c, 0x04, + 0x0e, 0x18, 0x1a, 0x18, 0x10, 0xbf, 0x05, 0x50, 0x58, 0x18, 0x18, 0x10, 0x70, 0xf0, 0x90, 0xa0, + 0x20, 0x30, 0x00, 0x38, 0x0c, 0x2c, 0x4c, 0x44, 0x00, 0x20, 0x20, 0x00, 0x00, 0x08, 0x78, 0x78, + 0x4c, 0x2c, 0x24, 0x16, 0x12, 0x13, 0x01, 0x00, 0x0e, 0x18, 0x1a, 0x19, 0x11, 0x00, 0x02, 0x02, + 0x00, 0x00, 0x08, 0x0f, 0x0f, 0x19, 0x1a, 0x12, 0x34, 0x24, 0x64, 0x40, 0xbf, 0x08, 0x18, 0x7e, + 0x7e, 0xdb, 0x99, 0xbf, 0x06, 0x81, 0x81, 0xdb, 0x7e, 0x7e, 0x3c, 0x18, 0xbf, 0x03, 0x0c, 0x18, + 0x1c, 0x1c, 0x18, 0x3c, 0xcf, 0x03, 0x7e, 0x42, 0x00, 0x00, 0x18, 0xcf, 0x04, 0x3c, 0x18, 0xcf, + 0x03, 0x81, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xe7, 0xc3, 0x66, 0x24, 0x66, 0x99, 0xbd, 0xff, 0xbd, + 0x3c, 0x18, 0xbf, 0x05, 0xcf, 0x07, 0x18, 0x3c, 0x24, 0x42, 0x18, 0x3c, 0x30, 0x24, 0x20, 0x20, + 0xbf, 0x05, 0x99, 0x99, 0xcf, 0x06, 0x18, 0x3c, 0x3c, 0x00, 0x30, 0x68, 0x58, 0x7e, 0x3f, 0x7f, + 0xf9, 0xda, 0x9c, 0x88, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x90, 0x00, 0xa0, 0x00, 0x80, 0xbf, 0x05, + 0x06, 0x00, 0x04, 0x00, 0x03, 0xfe, 0x07, 0xfe, 0xcf, 0x01, 0xcf, 0x0c, 0xcc, 0x00, 0x0c, 0x00, + 0x0d, 0x00, 0x0f, 0xc0, 0x0f, 0xc0, 0x00, 0x00, 0x60, 0xc0, 0x90, 0xa0, 0x80, 0xbf, 0x03, 0x01, + 0x03, 0x04, 0x0e, 0x1f, 0x5f, 0x7b, 0x33, 0x36, 0x3e, 0x1e, 0x3c, 0x0c, 0x06, 0x03, 0x09, 0x05, + 0x01, 0xbf, 0x03, 0x80, 0xc0, 0x20, 0x70, 0xf8, 0xfa, 0xde, 0xcc, 0x6c, 0x7c, 0x78, 0x3c, 0x30, + 0x00, 0x0c, 0x00, 0x03, 0x00, 0x09, 0x00, 0x05, 0x00, 0x01, 0xbf, 0x05, 0x60, 0x00, 0x20, 0x7f, + 0xc0, 0x7f, 0xe0, 0x30, 0xf3, 0x00, 0x33, 0x00, 0x30, 0x00, 0xb0, 0x03, 0xf0, 0x03, 0xf0, 0xbf, + 0x03, 0x30, 0x68, 0x58, 0x78, 0x7f, 0x3f, 0x7d, 0x7c, 0x7c, 0x58, 0x50, 0x40, 0xbf, 0x03, 0x0c, + 0x16, 0x1a, 0x1e, 0xfe, 0xfc, 0xbe, 0x3e, 0x3e, 0x1a, 0x0a, 0x02, 0xbf, 0x03, 0x0c, 0x16, 0x1a, + 0x7e, 0xfc, 0xfe, 0x9f, 0x5b, 0x39, 0x11, 0x00, 0x00, 0x08, 0x0c, 0x14, 0x1c, 0x1c, 0x0c, 0x0e, + 0x1e, 0x36, 0x72, 0x1c, 0x00, 0x10, 0x30, 0x28, 0x38, 0x38, 0x30, 0x70, 0x78, 0x6c, 0x4e, 0x38, + 0x0c, 0x06, 0x12, 0x0a, 0x02, 0xbf, 0x04, 0x88, 0x8c, 0x00, 0x1c, 0x1c, 0x34, 0xcf, 0x04, 0x24, + 0x66, 0xe7, 0x30, 0x60, 0x48, 0x50, 0x40, 0xbf, 0x04, 0x11, 0x31, 0x00, 0x38, 0x38, 0x2c, 0xcf, + 0x04, 0x24, 0x66, 0xe7, 0xbf, 0x03, 0xc0, 0x40, 0xc0, 0xe0, 0x7e, 0x3e, 0x7a, 0x7a, 0x70, 0x40, + 0x40, 0xbf, 0x03, 0xc0, 0x40, 0xc0, 0xe0, 0x70, 0xcf, 0x04, 0x38, 0x10, 0xbf, 0x04, 0x06, 0x04, + 0x06, 0x0e, 0x1c, 0xcf, 0x04, 0x38, 0x10, 0xbf, 0x04, 0x03, 0x02, 0x03, 0x07, 0x7e, 0x7c, 0x5e, + 0x5e, 0x0e, 0x02, 0x02, 0x00, 0x00, 0xe0, 0x30, 0xb0, 0x30, 0x10, 0xbf, 0x04, 0x0a, 0x9a, 0x9e, + 0x1c, 0x28, 0x6c, 0x43, 0x41, 0x41, 0xc0, 0xbf, 0x04, 0xe0, 0x30, 0xb0, 0x30, 0x10, 0xbf, 0x04, + 0x04, 0x2e, 0x3c, 0x3c, 0x18, 0x18, 0x08, 0x0c, 0x04, 0x04, 0xbf, 0x04, 0x0e, 0x18, 0x1a, 0x18, + 0x10, 0xbf, 0x04, 0x40, 0xe8, 0x78, 0x78, 0x30, 0x30, 0x20, 0x60, 0x40, 0x40, 0xbf, 0x04, 0x07, + 0x0c, 0x0d, 0x0c, 0x08, 0xbf, 0x04, 0x50, 0x59, 0x79, 0x38, 0x14, 0x36, 0xc2, 0x82, 0x82, 0x03, + 0xbf, 0x08, 0x03, 0x00, 0x07, 0x00, 0x0f, 0xc0, 0x1c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x38, 0x00, + 0x30, 0xbf, 0x07, 0x60, 0x00, 0x70, 0x01, 0xf8, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, + 0x00, 0x06, 0xbf, 0x03, 0x20, 0x20, 0x30, 0xb0, 0x98, 0xfc, 0x7e, 0x3e, 0x1e, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x0c, 0x0d, 0x19, 0x3f, 0x7e, 0x7c, 0x78, 0x40, 0xbf, 0x03, 0x06, 0x00, 0x07, 0x00, + 0x0c, 0x00, 0x08, 0x00, 0x00, 0x30, 0x00, 0x10, 0xbf, 0x04, 0x06, 0x00, 0x02, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x70, 0x00, 0x70, 0x00, 0x50, 0x00, 0x50, 0x00, 0x90, 0x00, 0x98, 0x00, + 0x9c, 0xbf, 0x04, 0x60, 0x00, 0xe0, 0x00, 0x30, 0x00, 0x10, 0x0c, 0x00, 0x08, 0xbf, 0x06, 0x60, + 0x00, 0x40, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0a, 0x00, 0x0a, + 0x00, 0x09, 0x00, 0x19, 0x00, 0x39, 0x98, 0x9c, 0xdc, 0x8c, 0x0c, 0xbf, 0x04, 0x01, 0x19, 0x18, + 0x18, 0x24, 0x24, 0x64, 0x64, 0x04, 0x04, 0x06, 0x06, 0x19, 0x39, 0x3b, 0x31, 0x30, 0xbf, 0x04, + 0x80, 0x98, 0x18, 0x18, 0x24, 0x24, 0x26, 0x26, 0x20, 0x20, 0x60, 0x60, 0xbf, 0x0e, 0x30, 0x00, + 0xc0, 0x00, 0x90, 0x00, 0xa0, 0xbf, 0x06, 0xc0, 0x0c, 0xc0, 0x09, 0xc0, 0x01, 0xf0, 0x03, 0x30, + 0x07, 0x30, 0xcf, 0x01, 0xcf, 0xfc, 0xcf, 0x01, 0xcf, 0xfc, 0x00, 0x00, 0x01, 0x31, 0x39, 0x09, + 0x39, 0x39, 0x19, 0x3d, 0x7d, 0x7f, 0x7f, 0xbd, 0x99, 0x3d, 0x3c, 0x64, 0x46, 0x42, 0xc3, 0x08, + 0x04, 0x02, 0x01, 0x61, 0x72, 0x36, 0x7c, 0x7c, 0x38, 0xcf, 0x03, 0x78, 0x7c, 0xb8, 0x98, 0x18, + 0x1c, 0x0c, 0x04, 0x0c, 0x10, 0x08, 0x04, 0x02, 0x61, 0x73, 0x36, 0x7c, 0x7c, 0x38, 0x78, 0x78, + 0x7c, 0xb8, 0xbc, 0x2e, 0x22, 0x12, 0x18, 0x08, 0x18, 0x10, 0x20, 0x40, 0x80, 0x86, 0x4e, 0x6c, + 0x3e, 0x3e, 0x1c, 0xcf, 0x03, 0x1e, 0x3e, 0x1d, 0x19, 0x18, 0x38, 0x30, 0x20, 0x30, 0x08, 0x10, + 0x20, 0x40, 0x86, 0xce, 0x6c, 0x3e, 0x3e, 0x1c, 0x1e, 0x1e, 0x3e, 0x1d, 0x3d, 0x74, 0x44, 0x48, + 0x18, 0x10, 0x18, 0x01, 0x02, 0x1c, 0x1c, 0x0c, 0x3c, 0x5e, 0xce, 0x4e, 0x7e, 0x3e, 0x0f, 0x1f, + 0x36, 0x26, 0x64, 0x64, 0xc2, 0x03, 0x01, 0x03, 0xbf, 0x0e, 0x03, 0x80, 0x03, 0x80, 0x00, 0x80, + 0x03, 0xc0, 0x03, 0xf0, 0x00, 0xf0, 0x3f, 0xf0, 0x00, 0xf0, 0x03, 0xf0, 0x03, 0x3c, 0x03, 0xcc, + 0x00, 0xcf, 0x01, 0xcf, 0x00, 0x41, 0x00, 0xc3, 0x80, 0x40, 0x38, 0x38, 0x30, 0x3c, 0x7a, 0x73, + 0x72, 0x7e, 0x7c, 0xf0, 0xf8, 0x6c, 0x64, 0x26, 0x26, 0x43, 0xc0, 0x80, 0xc0, 0xbf, 0x0e, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x03, 0xc0, 0x0f, 0xc0, 0x0f, 0x00, 0x0f, 0xfc, 0x0f, 0x00, 0x0f, + 0xc0, 0x3c, 0xc0, 0x33, 0xc0, 0xf3, 0x00, 0x82, 0x00, 0xc3, 0x00, 0xff, 0x06, 0x32, 0x3a, 0x0a, + 0x3a, 0x3a, 0x1a, 0x7e, 0x7e, 0xfc, 0xf8, 0xb8, 0x10, 0x38, 0x78, 0x68, 0x4c, 0x74, 0x74, 0x14, + 0x16, 0x89, 0x8d, 0x8a, 0xa3, 0xb5, 0xb3, 0xb5, 0xb6, 0x8a, 0xa3, 0xb3, 0xb5, 0xa3, 0xb5, 0xb6, + 0x05, 0x89, 0x84, 0xa3, 0xb3, 0xb4, 0xb3, 0x02, 0xb4, 0x86, 0xb3, 0xb4, 0xb5, 0xb6, 0xa3, 0x8c, + 0x02, 0xb4, 0x88, 0xb5, 0xb6, 0x8a, 0xa3, 0xb5, 0xb6, 0x8a, 0x8e, 0x03, 0x00, 0x82, 0x07, 0x37, + 0x03, 0x00, 0x83, 0x07, 0x00, 0x07, 0x02, 0x00, 0x85, 0x8b, 0xb6, 0x89, 0x8a, 0x8e, 0x02, 0x00, + 0x83, 0x37, 0x00, 0x08, 0x02, 0x00, 0x81, 0x08, 0x03, 0x00, 0x83, 0x37, 0x00, 0x08, 0x1b, 0x00, + 0x83, 0xeb, 0xec, 0xed, 0x23, 0x00, 0x85, 0x85, 0x90, 0xee, 0xef, 0xf0, 0x02, 0xaa, 0x04, 0x90, + 0x03, 0xaa, 0x03, 0x90, 0x81, 0xaa, 0x05, 0x2a, 0x81, 0xaa, 0x02, 0x90, 0x81, 0x2a, 0x05, 0x00, + 0x81, 0xa6, 0x08, 0x8d, 0x12, 0x00, 0x02, 0x20, 0x81, 0x21, 0x0a, 0x00, 0x82, 0x94, 0x92, 0x04, + 0xa8, 0x83, 0x92, 0xb1, 0x92, 0x03, 0x8d, 0x81, 0xa5, 0x03, 0x00, 0x85, 0xc1, 0xc2, 0xc3, 0xc4, + 0xc5, 0x06, 0x00, 0x02, 0x20, 0x81, 0x21, 0x0c, 0x00, 0x81, 0x95, 0x02, 0x96, 0x81, 0x97, 0x02, + 0x00, 0x84, 0x82, 0xbb, 0x00, 0xc0, 0x04, 0x00, 0x86, 0xc6, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0x05, + 0x00, 0x02, 0x20, 0x81, 0x21, 0x04, 0x00, 0x81, 0xa6, 0x07, 0x8d, 0x04, 0xa9, 0x03, 0x8d, 0x83, + 0xb2, 0x00, 0x94, 0x05, 0x00, 0x81, 0x17, 0x02, 0x9c, 0x81, 0x15, 0x06, 0x00, 0x03, 0x2c, 0x04, + 0x00, 0x86, 0x94, 0x92, 0xa8, 0x92, 0xb1, 0x92, 0x06, 0xa8, 0x84, 0x92, 0xb1, 0xbb, 0xb2, 0x07, + 0x00, 0x04, 0x9c, 0x0f, 0x00, 0x81, 0x89, 0x03, 0x00, 0x86, 0x9c, 0x95, 0x97, 0x95, 0x97, 0x9c, + 0x02, 0x00, 0x82, 0xb2, 0xb9, 0x06, 0x91, 0x81, 0xcd, 0x04, 0xce, 0x81, 0xd2, 0x0e, 0x91, 0x81, + 0xad, 0x03, 0x91, 0x81, 0x99, 0x02, 0x9a, 0x02, 0x98, 0x81, 0x99, 0x02, 0x91, 0x81, 0xb9, 0x80, + 0x12, 0x89, 0x82, 0x8a, 0xa3, 0x02, 0xb3, 0x82, 0xb5, 0xb6, 0x10, 0x89, 0x88, 0x8a, 0xa3, 0xb3, + 0xb4, 0xb5, 0x33, 0x34, 0x35, 0x02, 0xb3, 0x82, 0xb5, 0xb6, 0x04, 0x89, 0x82, 0x8a, 0x8e, 0x02, + 0x00, 0x86, 0x37, 0x00, 0x37, 0x00, 0x8b, 0xb6, 0x04, 0x89, 0x81, 0xa3, 0x02, 0xb3, 0x02, 0xb4, + 0x82, 0xb5, 0xb6, 0x03, 0x89, 0x84, 0x00, 0x37, 0x07, 0x08, 0x02, 0x00, 0x84, 0x37, 0x00, 0x07, + 0x37, 0x02, 0x00, 0x84, 0x8b, 0xb6, 0x8a, 0x8e, 0x0b, 0x00, 0x88, 0x8b, 0xb6, 0x8e, 0x07, 0x00, + 0x37, 0x00, 0x07, 0x02, 0x00, 0x84, 0x8b, 0xb6, 0x8a, 0x84, 0x26, 0x00, 0x81, 0x85, 0x09, 0x8d, + 0x81, 0xa5, 0x04, 0x00, 0x81, 0x2a, 0x03, 0x90, 0x04, 0x2a, 0x03, 0x90, 0x81, 0x2a, 0x04, 0x00, + 0x81, 0xa6, 0x09, 0x8d, 0x02, 0x92, 0x03, 0xa8, 0x02, 0x92, 0x83, 0xa8, 0x92, 0x93, 0x09, 0x00, + 0x82, 0x3d, 0x2b, 0x09, 0x00, 0x84, 0x94, 0x92, 0xa8, 0x92, 0x03, 0xa8, 0x88, 0x92, 0xbb, 0x92, + 0x82, 0x00, 0x95, 0x96, 0x97, 0x02, 0x00, 0x81, 0x89, 0x0b, 0x00, 0x82, 0x24, 0x3a, 0x0b, 0x00, + 0x88, 0x89, 0x00, 0x9b, 0x96, 0x9d, 0x00, 0xb2, 0x00, 0x02, 0x8d, 0x03, 0xa9, 0x02, 0x8d, 0x81, + 0xa9, 0x07, 0x8d, 0x81, 0xa5, 0x03, 0x00, 0x82, 0x20, 0x21, 0x03, 0x00, 0x81, 0xa6, 0x07, 0x8d, + 0x82, 0xa9, 0x8d, 0x03, 0xa9, 0x85, 0x8d, 0xb8, 0x8d, 0xbb, 0x92, 0x03, 0xa8, 0x83, 0x92, 0xb1, + 0x92, 0x03, 0xa8, 0x02, 0x92, 0x83, 0xa8, 0x92, 0x93, 0x03, 0x00, 0x02, 0x2c, 0x03, 0x00, 0x84, + 0x94, 0x92, 0xa8, 0x92, 0x03, 0xa8, 0x83, 0x92, 0xb1, 0x92, 0x03, 0xa8, 0x88, 0x92, 0xbb, 0x92, + 0xb2, 0x00, 0x95, 0x96, 0x97, 0x03, 0x00, 0x83, 0x95, 0x96, 0x97, 0x02, 0x00, 0x81, 0x89, 0x0c, + 0x00, 0x85, 0x89, 0x00, 0x9b, 0x96, 0x9d, 0x03, 0x00, 0x8b, 0x9b, 0x96, 0x9d, 0x00, 0xb2, 0x00, + 0xb9, 0x91, 0x98, 0x99, 0x9a, 0x03, 0x91, 0x83, 0x98, 0x99, 0x9a, 0x02, 0x91, 0x81, 0xad, 0x05, + 0x91, 0x02, 0xa2, 0x05, 0x91, 0x85, 0xad, 0x91, 0x98, 0x99, 0x9a, 0x03, 0x91, 0x86, 0x98, 0x99, + 0x9a, 0x91, 0xb9, 0x91, 0x80, 0x28, 0x89, 0x8a, 0x33, 0x34, 0x35, 0x23, 0x35, 0x36, 0x23, 0x33, + 0x34, 0xb3, 0x02, 0xb4, 0x87, 0xb5, 0xb6, 0xa3, 0xb3, 0xb4, 0xb5, 0xa3, 0x02, 0xb3, 0x88, 0xb4, + 0xb5, 0x23, 0x33, 0x34, 0x35, 0x36, 0x23, 0x02, 0x33, 0x83, 0x34, 0x35, 0x36, 0x06, 0x89, 0x81, + 0x37, 0x02, 0x00, 0x81, 0x37, 0x03, 0x00, 0x83, 0xb7, 0x07, 0x37, 0x04, 0x00, 0x81, 0x07, 0x02, + 0x08, 0x03, 0x00, 0x82, 0x07, 0x08, 0x02, 0x00, 0x81, 0x37, 0x04, 0x00, 0x83, 0x37, 0x00, 0x37, + 0x02, 0x00, 0x87, 0x0b, 0xb6, 0x89, 0x8a, 0xb6, 0x8a, 0x84, 0x21, 0x00, 0x83, 0xeb, 0xec, 0xed, + 0x03, 0x00, 0x09, 0x8d, 0x81, 0xa5, 0x02, 0x91, 0x81, 0x11, 0x04, 0x80, 0x03, 0x11, 0x02, 0x80, + 0x81, 0xa6, 0x03, 0x8d, 0x81, 0xa5, 0x03, 0x80, 0x03, 0x91, 0x84, 0x11, 0xee, 0xef, 0xf0, 0x03, + 0x91, 0x82, 0xbb, 0x92, 0x02, 0xa8, 0x86, 0x92, 0xb1, 0x92, 0xa8, 0x92, 0x93, 0x07, 0x00, 0x8a, + 0x2c, 0x21, 0x20, 0x00, 0x80, 0x94, 0x92, 0xa8, 0x92, 0x93, 0x03, 0x80, 0x84, 0x94, 0xb2, 0xd1, + 0xd0, 0x03, 0x80, 0x82, 0xcf, 0x01, 0xcf, 0xd0, 0x02, 0xb2, 0x83, 0x00, 0x95, 0x97, 0x03, 0x00, + 0x81, 0x89, 0x09, 0x00, 0x02, 0x21, 0x81, 0x20, 0x04, 0x00, 0x81, 0x89, 0x02, 0x00, 0x81, 0x80, + 0x02, 0x00, 0x8c, 0x80, 0xb2, 0x80, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x80, 0xb2, 0xb8, 0x8d, 0x02, + 0xa9, 0x86, 0x8d, 0xa5, 0x00, 0x89, 0x00, 0xa6, 0x05, 0x8d, 0x82, 0xa5, 0x00, 0x02, 0x21, 0x83, + 0x20, 0x80, 0xa6, 0x02, 0x8d, 0x81, 0xa9, 0x02, 0x8d, 0x81, 0xa5, 0x03, 0x80, 0x8a, 0xb9, 0x80, + 0xc6, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xb9, 0xbb, 0x02, 0x92, 0x8e, 0xa8, 0x92, 0x93, 0x00, 0x89, + 0x00, 0x94, 0x92, 0xa8, 0x92, 0xa8, 0x92, 0x93, 0x00, 0x03, 0x2c, 0x88, 0x80, 0x94, 0x92, 0xa8, + 0x92, 0xa8, 0x92, 0x93, 0x03, 0x80, 0x81, 0x89, 0x02, 0x00, 0x82, 0x9c, 0x1c, 0x02, 0x9c, 0x81, + 0x80, 0x02, 0xb2, 0x02, 0x00, 0x81, 0x89, 0x03, 0x00, 0x81, 0x89, 0x03, 0x00, 0x83, 0x89, 0x00, + 0x89, 0x09, 0x00, 0x83, 0x89, 0x00, 0x89, 0x05, 0x00, 0x81, 0x89, 0x02, 0x00, 0x82, 0x9c, 0x1c, + 0x02, 0x9c, 0x83, 0x80, 0xb2, 0xb9, 0x02, 0x91, 0x81, 0xad, 0x03, 0x91, 0x81, 0xad, 0x03, 0x91, + 0x83, 0xad, 0x91, 0xad, 0x09, 0x91, 0x83, 0xad, 0x91, 0xad, 0x05, 0x91, 0x83, 0xad, 0x91, 0xcd, + 0x04, 0xce, 0x82, 0x91, 0xb9, 0x80, 0x84, 0xa3, 0xb3, 0xb5, 0xb6, 0x02, 0x89, 0x81, 0xa3, 0x02, + 0xb3, 0x89, 0xb5, 0xa3, 0xb3, 0xb5, 0xb3, 0xb5, 0xa3, 0xb5, 0xb6, 0x02, 0x89, 0x94, 0xa3, 0xb3, + 0xb5, 0xb6, 0xa3, 0xb3, 0xb5, 0xb3, 0xb5, 0xb6, 0xa3, 0xb5, 0xb3, 0xb5, 0xa3, 0xb5, 0xb3, 0xb5, + 0xb6, 0x89, 0x02, 0x07, 0x02, 0x00, 0x84, 0x8b, 0x8e, 0x00, 0x07, 0x02, 0x00, 0x81, 0x07, 0x07, + 0x00, 0x83, 0x8b, 0x8e, 0x07, 0x04, 0x00, 0x81, 0x07, 0x04, 0x00, 0x81, 0x07, 0x03, 0x00, 0x83, + 0x07, 0x00, 0x07, 0x02, 0x00, 0x81, 0x8b, 0x07, 0x00, 0x97, 0x68, 0x3c, 0x68, 0x3c, 0x6a, 0x3c, + 0x6a, 0x3c, 0x69, 0x3c, 0x69, 0x00, 0x68, 0x3c, 0x68, 0x3c, 0x6a, 0x3c, 0x6a, 0x3c, 0x69, 0x3c, + 0x69, 0x02, 0x00, 0x8d, 0x68, 0x3c, 0x68, 0x3c, 0x69, 0x3c, 0x69, 0x80, 0x68, 0x3c, 0x6a, 0x3c, + 0x69, 0x03, 0x00, 0x81, 0x36, 0x02, 0x09, 0x83, 0x96, 0x09, 0x96, 0x02, 0x09, 0x81, 0x0a, 0x03, + 0x00, 0x81, 0x36, 0x02, 0x09, 0x83, 0x96, 0x09, 0x96, 0x02, 0x09, 0x81, 0x0a, 0x04, 0x00, 0x81, + 0x36, 0x03, 0x09, 0x82, 0x0a, 0x00, 0x02, 0xaa, 0x03, 0x09, 0x04, 0x2a, 0x81, 0xaa, 0x07, 0x09, + 0x05, 0xaa, 0x07, 0x4b, 0x02, 0xaa, 0x04, 0x2a, 0x03, 0x09, 0x02, 0xaa, 0x8a, 0xb2, 0x00, 0x09, + 0x16, 0x09, 0x00, 0x21, 0x20, 0x00, 0xb2, 0x07, 0x00, 0x85, 0xb2, 0x97, 0x16, 0x95, 0xb2, 0x07, + 0x00, 0x81, 0xb2, 0x02, 0x00, 0x86, 0x21, 0x20, 0x00, 0x09, 0x16, 0x09, 0x02, 0x00, 0x8a, 0xb2, + 0x00, 0x09, 0x1c, 0x09, 0x00, 0x21, 0x20, 0x00, 0xb2, 0x07, 0x00, 0x85, 0xb2, 0x1c, 0x96, 0x1c, + 0xb2, 0x07, 0x00, 0x81, 0xb2, 0x02, 0x00, 0x86, 0x21, 0x20, 0x00, 0x09, 0x1c, 0x09, 0x02, 0x00, + 0x8a, 0xb2, 0x00, 0x09, 0x16, 0x09, 0x00, 0x21, 0x20, 0x00, 0xb2, 0x07, 0x00, 0x85, 0xb2, 0x1c, + 0x16, 0x1c, 0xb2, 0x07, 0x00, 0x95, 0xb2, 0xaa, 0x00, 0x21, 0x20, 0x00, 0x09, 0x16, 0x09, 0x00, + 0xaa, 0xb2, 0x00, 0x15, 0x16, 0x17, 0x00, 0x21, 0x20, 0x00, 0xb2, 0x07, 0x00, 0x85, 0xb2, 0x1c, + 0x16, 0x1c, 0xb2, 0x07, 0x00, 0x90, 0xb2, 0x93, 0x00, 0x21, 0x20, 0x00, 0x15, 0x16, 0x17, 0x00, + 0x94, 0xb2, 0x84, 0x1c, 0x16, 0x1c, 0x04, 0x00, 0x81, 0xb2, 0x07, 0x00, 0x85, 0xb2, 0x9c, 0x16, + 0x9c, 0xb2, 0x07, 0x00, 0x81, 0xb2, 0x05, 0x00, 0x83, 0x1c, 0x16, 0x1c, 0x02, 0x00, 0x86, 0xb2, + 0x91, 0xad, 0x91, 0xad, 0x91, 0x02, 0x22, 0x82, 0x91, 0xb9, 0x07, 0x8f, 0x81, 0xb9, 0x03, 0xad, + 0x81, 0xb9, 0x07, 0x8f, 0x81, 0xb9, 0x02, 0x91, 0x02, 0x22, 0x84, 0x91, 0xad, 0x91, 0xad, 0x02, + 0x91, 0x81, 0xb9, 0x80, 0x81, 0x99, 0x0f, 0xae, 0x02, 0xc0, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, + 0x02, 0xc0, 0x0f, 0xae, 0x84, 0x99, 0xb2, 0xd1, 0xd0, 0x04, 0xcf, 0x01, 0xcf, 0x85, 0x20, 0x21, + 0xd1, 0xb2, 0xd1, 0x02, 0xcf, 0x01, 0xcf, 0x82, 0xd0, 0xcf, 0x01, 0xcf, 0x02, 0x00, 0x81, 0x61, + 0x02, 0x62, 0x81, 0x63, 0x02, 0x00, 0x03, 0xcf, 0x01, 0xcf, 0x86, 0xd0, 0xd1, 0xb2, 0xd1, 0x20, + 0x21, 0x03, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x83, 0xcf, 0x01, 0xcf, 0xd0, 0xb2, 0x06, 0x00, 0x85, + 0x20, 0x21, 0x00, 0xb2, 0x93, 0x06, 0x00, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, 0x06, 0x00, 0x85, + 0x94, 0xb2, 0x00, 0x20, 0x21, 0x06, 0x00, 0x82, 0x82, 0xb2, 0x04, 0x00, 0x86, 0xaa, 0x00, 0x20, + 0x21, 0x00, 0xb2, 0x03, 0x00, 0x04, 0xaa, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, 0x04, 0xaa, 0x03, + 0x00, 0x86, 0xb2, 0x00, 0x20, 0x21, 0x00, 0xaa, 0x04, 0x00, 0x83, 0xaa, 0xb2, 0x9b, 0x02, 0x9c, + 0x87, 0x9d, 0xb2, 0x00, 0x20, 0x21, 0x00, 0xb2, 0x03, 0x00, 0x85, 0xb2, 0xd7, 0xb2, 0xc0, 0x61, + 0x02, 0x62, 0x85, 0x63, 0xc0, 0xb2, 0xd7, 0xb2, 0x03, 0x00, 0x87, 0xb2, 0x00, 0x20, 0x21, 0x00, + 0xb2, 0x9b, 0x02, 0x9c, 0x81, 0x9d, 0x02, 0xb2, 0x81, 0x95, 0x02, 0x96, 0x87, 0x97, 0xb2, 0x00, + 0x20, 0x21, 0x00, 0xb2, 0x03, 0x00, 0x85, 0xd1, 0xb2, 0xc0, 0x00, 0x61, 0x02, 0x62, 0x85, 0x63, + 0x00, 0xc0, 0xb2, 0xd1, 0x03, 0x00, 0x87, 0xb2, 0x00, 0x20, 0x21, 0x00, 0xb2, 0x95, 0x02, 0x96, + 0x81, 0x97, 0x02, 0xb2, 0x81, 0x95, 0x02, 0x96, 0x87, 0x97, 0xb2, 0x00, 0x20, 0x21, 0x00, 0xb2, + 0x04, 0xaa, 0x81, 0xb2, 0x02, 0x00, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, 0x02, 0x00, 0x81, 0xb2, + 0x04, 0xaa, 0x87, 0xb2, 0x00, 0x20, 0x21, 0x00, 0xb2, 0x95, 0x02, 0x96, 0x81, 0x97, 0x02, 0xb2, + 0x81, 0x9b, 0x02, 0x9c, 0x83, 0x9d, 0xb2, 0x00, 0x02, 0x2c, 0x87, 0x00, 0xcf, 0x01, 0xcf, 0xd0, + 0xd3, 0xcf, 0x01, 0xcf, 0xd1, 0xb2, 0x02, 0x00, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, 0x02, 0x00, + 0x02, 0xcf, 0x01, 0xcf, 0x82, 0xd0, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x81, 0x00, 0x02, 0x2c, 0x83, + 0x00, 0xcf, 0x01, 0xcf, 0x9b, 0x02, 0x9c, 0x81, 0x9d, 0x02, 0xb2, 0x04, 0x00, 0x81, 0xb2, 0x09, + 0x00, 0x81, 0xb2, 0x02, 0x00, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, 0x11, 0x00, 0x02, 0xb2, 0x04, + 0x00, 0x81, 0xb2, 0x09, 0x91, 0x81, 0xb9, 0x02, 0x91, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, 0x11, + 0x91, 0x82, 0xb9, 0xb2, 0x04, 0x83, 0x81, 0xb2, 0x0c, 0xd7, 0x04, 0x8f, 0x12, 0xd7, 0x02, 0x00, + 0x80, 0x82, 0x3e, 0xae, 0x03, 0x3e, 0x82, 0xae, 0xaf, 0x04, 0x00, 0x82, 0xb0, 0xae, 0x03, 0xa8, + 0x81, 0x3e, 0x03, 0xa8, 0x08, 0x3e, 0x81, 0xae, 0x03, 0x3e, 0x82, 0xae, 0xaf, 0x03, 0xc0, 0x8a, + 0xb0, 0xae, 0x3e, 0xb2, 0xa7, 0x93, 0xcf, 0x01, 0xcf, 0xd0, 0xa7, 0x93, 0x05, 0x00, 0x9d, 0xcf, + 0x01, 0xcf, 0x95, 0x96, 0x97, 0xcf, 0x01, 0xcf, 0x95, 0x96, 0x97, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, + 0x01, 0xcf, 0x00, 0xcf, 0x01, 0xcf, 0xd0, 0xd3, 0x00, 0x94, 0xa7, 0xb2, 0xa7, 0x93, 0x00, 0x61, + 0x62, 0x63, 0x00, 0x94, 0xa7, 0xb2, 0x0c, 0x00, 0x87, 0x95, 0x96, 0x97, 0x00, 0x95, 0x96, 0x97, + 0x0a, 0x00, 0x81, 0xb2, 0x03, 0x00, 0x83, 0x61, 0x62, 0x63, 0x02, 0x00, 0x82, 0x83, 0xb2, 0x03, + 0x00, 0x81, 0x90, 0x08, 0x3e, 0x03, 0xad, 0x81, 0x3e, 0x03, 0xad, 0x0a, 0x3e, 0x81, 0xae, 0x02, + 0x3e, 0x85, 0xaf, 0x61, 0x62, 0x63, 0xb0, 0x02, 0x3e, 0x81, 0xb2, 0x05, 0x00, 0x83, 0xd3, 0xd0, + 0xd3, 0x02, 0x00, 0x82, 0xd3, 0xcf, 0x01, 0xcf, 0x03, 0x9c, 0x81, 0xd0, 0x02, 0x9c, 0x86, 0x1c, + 0xd0, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, 0x01, 0xcf, 0x00, 0x02, 0xcf, 0x01, 0xcf, 0x8a, 0xd0, 0xd3, + 0xcf, 0x01, 0xcf, 0x94, 0xa7, 0xb2, 0x00, 0x61, 0x62, 0x63, 0x02, 0x00, 0x82, 0xd3, 0xb2, 0x0c, + 0x00, 0x87, 0x95, 0x96, 0x97, 0x00, 0x95, 0x96, 0x97, 0x0c, 0x00, 0x85, 0xb2, 0x00, 0x61, 0x62, + 0x63, 0x02, 0x00, 0x82, 0x84, 0xb2, 0x0c, 0x3e, 0x03, 0xad, 0x81, 0x3e, 0x03, 0xad, 0x06, 0x3e, + 0x81, 0xaf, 0x03, 0x00, 0x88, 0xb0, 0x3e, 0xae, 0xaf, 0x61, 0x62, 0x63, 0xb0, 0x02, 0x3e, 0x02, + 0xb2, 0x81, 0xd1, 0x02, 0xcf, 0x01, 0xcf, 0x85, 0xd1, 0xd0, 0xcf, 0x01, 0xcf, 0xd1, 0x00, 0x02, + 0xcf, 0x01, 0xcf, 0x81, 0xd1, 0x03, 0x9c, 0x81, 0xd0, 0x03, 0x9c, 0x84, 0xd0, 0xd1, 0xcf, 0x01, + 0xcf, 0xd1, 0x03, 0xb2, 0x03, 0x00, 0x02, 0xb2, 0x02, 0x00, 0x83, 0x61, 0x62, 0x63, 0x02, 0x00, + 0x02, 0xb2, 0x82, 0xa7, 0x93, 0x0a, 0x00, 0x87, 0x95, 0x96, 0x97, 0x00, 0x95, 0x96, 0x97, 0x03, + 0x00, 0x84, 0x94, 0xa7, 0xb2, 0x93, 0x03, 0x00, 0x89, 0x94, 0xb2, 0x00, 0x00, 0x61, 0x62, 0x63, + 0x00, 0x00, 0x02, 0xb2, 0x0c, 0x00, 0x87, 0x95, 0x96, 0x97, 0x00, 0x95, 0x96, 0x97, 0x05, 0x00, + 0x81, 0xb2, 0x05, 0x00, 0x81, 0xb2, 0x02, 0x00, 0x83, 0x61, 0x62, 0x63, 0x02, 0x00, 0x82, 0xb2, + 0xae, 0x0c, 0x3e, 0x03, 0xad, 0x81, 0x3e, 0x03, 0xad, 0x05, 0x3e, 0x81, 0xae, 0x05, 0x3e, 0x89, + 0xae, 0x3e, 0xaf, 0x61, 0x62, 0x63, 0xb0, 0x3e, 0xae, 0x80, 0x84, 0xd1, 0xcf, 0x01, 0xcf, 0xd0, + 0xcf, 0x01, 0xcf, 0x02, 0xd3, 0x81, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x84, 0xcf, 0x01, 0xcf, 0xd1, + 0xd0, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x81, 0xcf, 0x01, 0xcf, 0x02, 0xd1, 0x86, 0xd3, 0xcf, 0x01, + 0xcf, 0xd0, 0xcf, 0x01, 0xcf, 0xd3, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x84, 0xcf, 0x01, 0xcf, 0xd3, + 0xcf, 0x01, 0xcf, 0xd1, 0x03, 0xcf, 0x01, 0xcf, 0x82, 0xd0, 0xcf, 0x01, 0xcf, 0x04, 0xc0, 0x81, + 0xd7, 0x07, 0x00, 0x81, 0xa6, 0x15, 0x8d, 0x81, 0xa5, 0x05, 0x00, 0x81, 0x61, 0x02, 0x62, 0x83, + 0x63, 0xd7, 0xaa, 0x07, 0x00, 0x81, 0xeb, 0x02, 0xa6, 0x81, 0xa8, 0x02, 0x92, 0x81, 0xc0, 0x03, + 0x92, 0x81, 0xa8, 0x03, 0x92, 0x81, 0xc0, 0x02, 0x92, 0x81, 0xa8, 0x02, 0xa5, 0x81, 0xed, 0x06, + 0x00, 0x81, 0x61, 0x02, 0x62, 0x84, 0x63, 0xd7, 0xa7, 0xb2, 0x06, 0x00, 0x84, 0x94, 0x00, 0x93, + 0x89, 0x02, 0x00, 0x81, 0x94, 0x03, 0x00, 0x81, 0x89, 0x03, 0x00, 0x81, 0x94, 0x02, 0x00, 0x84, + 0x89, 0x94, 0x00, 0x93, 0x06, 0x00, 0x81, 0x61, 0x02, 0x62, 0x84, 0x63, 0xd7, 0x82, 0xb2, 0x09, + 0x00, 0x81, 0x89, 0x06, 0x00, 0x81, 0x89, 0x06, 0x00, 0x81, 0x89, 0x09, 0x00, 0x81, 0x61, 0x02, + 0x62, 0x84, 0x63, 0xd7, 0x91, 0xb2, 0x03, 0x11, 0x81, 0xa6, 0x05, 0x8d, 0x81, 0xa9, 0x06, 0x8d, + 0x81, 0xa9, 0x06, 0x8d, 0x81, 0xa9, 0x05, 0x8d, 0x81, 0xa5, 0x03, 0x00, 0x81, 0x61, 0x02, 0x62, + 0x82, 0x63, 0xd7, 0x02, 0xe2, 0x03, 0x28, 0x85, 0x00, 0xfe, 0x92, 0xa8, 0x92, 0x04, 0xa8, 0x09, + 0x92, 0x04, 0xa8, 0x84, 0x92, 0xa8, 0x92, 0xff, 0x04, 0x00, 0x81, 0x61, 0x02, 0x62, 0x82, 0x63, + 0xd7, 0x02, 0xe2, 0x03, 0x28, 0x86, 0x00, 0x94, 0x00, 0x89, 0x00, 0x9b, 0x02, 0x9c, 0x81, 0x9d, + 0x09, 0x00, 0x81, 0x9b, 0x02, 0x9c, 0x85, 0x9d, 0x00, 0x89, 0x00, 0x93, 0x04, 0x00, 0x81, 0x61, + 0x02, 0x62, 0x82, 0x63, 0xd7, 0x02, 0xe2, 0x03, 0x28, 0x03, 0x00, 0x83, 0x89, 0x00, 0x9b, 0x02, + 0x9c, 0x81, 0x9d, 0x09, 0x00, 0x81, 0x9b, 0x02, 0x9c, 0x83, 0x9d, 0x00, 0x89, 0x06, 0x00, 0x81, + 0x61, 0x02, 0x62, 0x82, 0x63, 0xd7, 0x02, 0xe2, 0x03, 0x28, 0x03, 0x91, 0x82, 0xad, 0x91, 0x04, + 0xad, 0x04, 0x91, 0x81, 0xe0, 0x04, 0x91, 0x04, 0xad, 0x82, 0x91, 0xad, 0x06, 0x91, 0x81, 0x61, + 0x02, 0x62, 0x81, 0x63, 0x24, 0xd7, 0x81, 0x61, 0x02, 0x62, 0x82, 0x63, 0xd7, 0x80, 0x02, 0xb2, + 0x82, 0xd1, 0x93, 0x04, 0x00, 0x88, 0xa7, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, 0x01, 0xcf, 0x94, 0x93, + 0xd3, 0xcf, 0x01, 0xcf, 0x07, 0xa8, 0x02, 0xd3, 0x8d, 0x94, 0x93, 0xcf, 0x01, 0xcf, 0xa7, 0xd0, + 0xcf, 0x01, 0xcf, 0xa7, 0xd0, 0xb2, 0xcf, 0x01, 0xcf, 0xa7, 0xcf, 0x01, 0xcf, 0xd1, 0x04, 0xb2, + 0x0e, 0x00, 0x87, 0x9b, 0x9c, 0x9d, 0x9c, 0x9b, 0x9c, 0x9d, 0x0a, 0x00, 0x81, 0xb2, 0x04, 0x00, + 0x04, 0xb2, 0x05, 0x91, 0x81, 0xe0, 0x08, 0x91, 0x85, 0x98, 0x99, 0x9a, 0x98, 0x99, 0x02, 0x9a, + 0x06, 0x91, 0x81, 0xe0, 0x03, 0x91, 0x81, 0xb2, 0x04, 0x00, 0x02, 0xb2, 0x88, 0xa7, 0xb2, 0xd1, + 0xd0, 0xd3, 0x94, 0x93, 0xcf, 0x01, 0xcf, 0x03, 0xa8, 0x85, 0xd3, 0x94, 0x93, 0xcf, 0x01, 0xcf, + 0xd0, 0x02, 0xa7, 0x03, 0xcf, 0x01, 0xcf, 0x82, 0xd0, 0xcf, 0x01, 0xcf, 0x02, 0xd3, 0x83, 0x94, + 0x93, 0xd3, 0x03, 0xa8, 0x02, 0xcf, 0x01, 0xcf, 0x81, 0xa7, 0x04, 0x00, 0x84, 0xb2, 0xa7, 0x00, + 0xb2, 0x06, 0x00, 0x83, 0x9b, 0x9c, 0x9d, 0x11, 0x00, 0x83, 0x9b, 0x9c, 0x9d, 0x07, 0x00, 0x86, + 0xb2, 0x83, 0x91, 0xb2, 0x91, 0xe0, 0x04, 0x91, 0x83, 0x98, 0x99, 0x9a, 0x06, 0x91, 0x81, 0xe0, + 0x03, 0x91, 0x81, 0xe0, 0x06, 0x91, 0x83, 0x98, 0x99, 0x9a, 0x07, 0x91, 0x82, 0xb2, 0x91, 0x29, + 0xd7, 0x88, 0xd1, 0x94, 0x93, 0xd3, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, 0x01, 0xcf, 0xd3, 0x02, 0x00, + 0x84, 0xd3, 0xd0, 0xcf, 0x01, 0xcf, 0xd0, 0x02, 0xcf, 0x01, 0xcf, 0x81, 0xd0, 0x02, 0x00, 0x02, + 0xd3, 0x82, 0xcf, 0x01, 0xcf, 0xd0, 0x03, 0xcf, 0x01, 0xcf, 0x83, 0xd0, 0xcf, 0x01, 0xcf, 0xd3, + 0x02, 0x00, 0x84, 0xcf, 0x01, 0xcf, 0xd3, 0xd0, 0xd3, 0x04, 0xcf, 0x01, 0xcf, 0x81, 0xd7, 0x26, + 0x00, 0x83, 0x84, 0xd7, 0xaa, 0x02, 0x22, 0x81, 0xaa, 0x1f, 0xe4, 0x04, 0xaa, 0x28, 0xd7, 0x02, + 0x00, 0x80, 0x82, 0xcf, 0x01, 0xcf, 0xd0, 0x02, 0xcf, 0x01, 0xcf, 0x83, 0xa7, 0xcf, 0x01, 0xcf, + 0xd3, 0x03, 0xcf, 0x01, 0xcf, 0x92, 0xd3, 0xcf, 0x01, 0xcf, 0xd0, 0xe1, 0xd1, 0xc0, 0x00, 0x61, + 0x62, 0x63, 0x61, 0x62, 0x63, 0x00, 0xc0, 0xd1, 0xe3, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x02, 0xcf, + 0x01, 0xcf, 0x82, 0xd3, 0xcf, 0x01, 0xcf, 0x02, 0xd3, 0x85, 0xcf, 0x01, 0xcf, 0xd3, 0xb2, 0xd0, + 0x82, 0x0c, 0x00, 0x8e, 0xe1, 0x00, 0x94, 0x00, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0x00, 0x94, + 0x00, 0xe3, 0x0b, 0x00, 0x82, 0xb2, 0x83, 0x02, 0xaa, 0x03, 0x2a, 0x81, 0xaa, 0x07, 0x00, 0x81, + 0xe1, 0x03, 0x00, 0x86, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0x03, 0x00, 0x81, 0xe3, 0x07, 0x00, + 0x81, 0xaa, 0x03, 0x2a, 0x88, 0xb2, 0xaa, 0xe2, 0xd7, 0x61, 0x62, 0x63, 0xe2, 0x07, 0x00, 0x81, + 0xe1, 0x03, 0xaa, 0x86, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0x03, 0xaa, 0x81, 0xe3, 0x07, 0x00, + 0x85, 0xe2, 0x61, 0x62, 0x63, 0xd7, 0x02, 0xe2, 0x86, 0xd7, 0x61, 0x62, 0x63, 0xe2, 0xaa, 0x06, + 0x00, 0x8e, 0xe1, 0xb2, 0xd0, 0xc0, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0xc0, 0xd0, 0xb2, 0xe3, + 0x06, 0x00, 0x86, 0xaa, 0xe2, 0x61, 0x62, 0x63, 0xd7, 0x02, 0xe2, 0x86, 0xd7, 0x61, 0x62, 0x63, + 0xe2, 0x93, 0x07, 0x00, 0x81, 0xb2, 0x02, 0x00, 0x86, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0x02, + 0x00, 0x81, 0xb2, 0x07, 0x00, 0x86, 0x94, 0xe2, 0x61, 0x62, 0x63, 0xd7, 0x02, 0xe2, 0x85, 0xd7, + 0x61, 0x62, 0x63, 0xe2, 0x08, 0x00, 0x81, 0xb2, 0x02, 0x00, 0x86, 0x61, 0x62, 0x63, 0x61, 0x62, + 0x63, 0x02, 0x00, 0x81, 0xb2, 0x08, 0x00, 0x8c, 0xe2, 0x61, 0x62, 0x63, 0xd7, 0xe2, 0xe1, 0xe2, + 0x61, 0x62, 0x63, 0xc0, 0x05, 0x00, 0x81, 0xb0, 0x02, 0xbe, 0x8c, 0xae, 0xaf, 0x00, 0x61, 0x62, + 0x63, 0x61, 0x62, 0x63, 0x00, 0xb0, 0xae, 0x02, 0xbe, 0x81, 0xaf, 0x05, 0x00, 0x8b, 0xc0, 0x61, + 0x62, 0x63, 0xe2, 0xe3, 0x00, 0xb2, 0x61, 0x62, 0x63, 0x07, 0x00, 0x83, 0xe1, 0xe2, 0xe3, 0x02, + 0x00, 0x86, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0x02, 0x00, 0x83, 0xe1, 0xe2, 0xe3, 0x07, 0x00, + 0x8a, 0x61, 0x62, 0x63, 0xb2, 0x00, 0x84, 0xb2, 0x61, 0x62, 0x63, 0x07, 0x00, 0x83, 0xe1, 0xe2, + 0xe3, 0x02, 0x00, 0x86, 0x61, 0x62, 0x63, 0x61, 0x62, 0x63, 0x02, 0x00, 0x83, 0xe1, 0xe2, 0xe3, + 0x07, 0x00, 0x8b, 0x61, 0x62, 0x63, 0xb2, 0x85, 0xbe, 0xb2, 0x61, 0x62, 0x63, 0xb0, 0x02, 0xbe, + 0x81, 0xaf, 0x02, 0x8f, 0x83, 0xb0, 0xbe, 0xe2, 0x02, 0xbe, 0x81, 0xaf, 0x06, 0x8f, 0x81, 0xb0, + 0x02, 0xbe, 0x83, 0xe2, 0xbe, 0xaf, 0x02, 0x8f, 0x81, 0xb0, 0x02, 0xbe, 0x86, 0xaf, 0x61, 0x62, + 0x63, 0xb2, 0xbe, 0x80, 0x82, 0xd1, 0xd0, 0x02, 0xcf, 0x01, 0xcf, 0x85, 0xd3, 0xd1, 0xd3, 0xcf, + 0x01, 0xcf, 0xd0, 0x0b, 0x00, 0x84, 0xd3, 0xd0, 0xe2, 0xd1, 0x02, 0xcf, 0x01, 0xcf, 0x82, 0xd0, + 0xd3, 0x04, 0x00, 0x83, 0x94, 0x92, 0xe2, 0x04, 0xc0, 0x81, 0xe2, 0x0a, 0x00, 0x06, 0x2a, 0x06, + 0x00, 0x81, 0xe2, 0x06, 0x00, 0x05, 0x2a, 0x82, 0xe2, 0x61, 0x02, 0x62, 0x83, 0x63, 0xe2, 0x82, + 0x08, 0x00, 0x81, 0x61, 0x04, 0x62, 0x81, 0x63, 0x07, 0x00, 0x81, 0xe2, 0x06, 0x00, 0x81, 0x61, + 0x03, 0x62, 0x83, 0x63, 0xe2, 0x61, 0x02, 0x62, 0x82, 0x63, 0xe2, 0x03, 0xaa, 0x04, 0x00, 0x81, + 0x61, 0x03, 0x62, 0x02, 0x63, 0x03, 0x8f, 0x06, 0x00, 0x81, 0xe2, 0x04, 0x00, 0x81, 0x61, 0x03, + 0x62, 0x02, 0x63, 0x83, 0x00, 0xe2, 0x61, 0x02, 0x62, 0x82, 0x63, 0xe2, 0x03, 0xb2, 0x02, 0x00, + 0x81, 0x61, 0x03, 0x62, 0x02, 0x63, 0x02, 0x8f, 0x03, 0xe2, 0x06, 0x00, 0x84, 0xe2, 0xb2, 0x00, + 0x61, 0x03, 0x62, 0x02, 0x63, 0x03, 0x00, 0x82, 0xc0, 0x61, 0x02, 0x62, 0x81, 0x63, 0x03, 0xe2, + 0x83, 0xb2, 0x00, 0x61, 0x02, 0x62, 0x02, 0x63, 0x02, 0x8f, 0x03, 0xe2, 0x82, 0xa7, 0x93, 0x07, + 0x00, 0x82, 0xb2, 0x61, 0x02, 0x62, 0x02, 0x63, 0x06, 0x00, 0x81, 0x61, 0x02, 0x62, 0x81, 0x63, + 0x03, 0xe2, 0x81, 0xb2, 0x02, 0x61, 0x02, 0x62, 0x82, 0x63, 0x8f, 0x03, 0xe2, 0x81, 0xa7, 0x0a, + 0x00, 0x82, 0xb2, 0x61, 0x02, 0x62, 0x82, 0x63, 0x8f, 0x06, 0x00, 0x81, 0x61, 0x02, 0x62, 0x81, + 0x63, 0x03, 0xe2, 0x81, 0xb2, 0x05, 0xcf, 0x01, 0xbf, 0x02, 0xe2, 0x81, 0xae, 0x05, 0xbe, 0x81, + 0xaf, 0x04, 0x00, 0x83, 0xb0, 0xbe, 0xae, 0x05, 0xcf, 0x01, 0xbf, 0x04, 0xbe, 0x83, 0xaf, 0x00, + 0x61, 0x02, 0x62, 0x82, 0x63, 0xe2, 0x03, 0xa7, 0x83, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, 0x01, 0xcf, + 0x02, 0xd0, 0x84, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, 0x01, 0xcf, 0xd0, 0x02, 0xcf, 0x01, 0xcf, 0x02, + 0xd0, 0x05, 0x00, 0x84, 0xd3, 0xcf, 0x01, 0xcf, 0xd0, 0xcf, 0x01, 0xcf, 0x02, 0xd0, 0x82, 0x93, + 0x94, 0x03, 0xe2, 0x81, 0x93, 0x02, 0x00, 0x81, 0x61, 0x02, 0x62, 0x83, 0x63, 0xe2, 0x83, 0x1d, + 0x00, 0x81, 0xe2, 0x04, 0x00, 0x81, 0x61, 0x02, 0x62, 0x82, 0x63, 0xe2, 0x04, 0xaa, 0x15, 0xe4, + 0x02, 0xaa, 0x02, 0xa2, 0x83, 0xaa, 0xe2, 0xaa, 0x02, 0xa2, 0x82, 0xaa, 0x61, 0x02, 0x62, 0x82, + 0x63, 0xe2, 0x80, 0x81, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, + 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, + 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x83, + 0x0a, 0x0b, 0x0c, 0x02, 0x43, 0x81, 0xc5, 0x02, 0x7f, 0x86, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, + 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x7f, 0x82, 0x48, 0x08, 0x02, + 0x7f, 0x82, 0x48, 0x08, 0x02, 0x7f, 0x82, 0x48, 0x08, 0x02, 0x00, 0x86, 0x48, 0x08, 0x2d, 0x2e, + 0x48, 0x08, 0x03, 0x0c, 0x82, 0xc5, 0x94, 0x02, 0x00, 0x8d, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, + 0x07, 0x09, 0x47, 0x46, 0x07, 0x35, 0x3d, 0x02, 0x00, 0x82, 0x35, 0x3d, 0x02, 0x00, 0x82, 0x35, + 0x3d, 0x02, 0x00, 0x8e, 0x35, 0x3d, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0xc5, + 0x01, 0xc5, 0x04, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, + 0x08, 0x0e, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x84, 0x46, 0xc5, + 0x83, 0xc5, 0x04, 0x00, 0x03, 0x8e, 0x03, 0x0e, 0x04, 0x8e, 0x04, 0x8d, 0x81, 0xe0, 0x04, 0x8d, + 0x81, 0xe0, 0x04, 0x8d, 0x0b, 0x8e, 0x81, 0xc5, 0x04, 0x00, 0x83, 0x46, 0x07, 0x00, 0x03, 0x44, + 0x02, 0x00, 0x85, 0x46, 0x07, 0x11, 0x46, 0x07, 0x07, 0x00, 0x86, 0x46, 0x07, 0x10, 0x46, 0x07, + 0x94, 0x07, 0x00, 0x83, 0x46, 0xc3, 0xc5, 0x04, 0x00, 0x82, 0x46, 0x07, 0x06, 0x00, 0x85, 0x46, + 0x07, 0x11, 0x46, 0x07, 0x07, 0x00, 0x85, 0x46, 0x07, 0x10, 0x46, 0x07, 0x08, 0x00, 0x83, 0x46, + 0xc3, 0xc5, 0x04, 0x8d, 0x02, 0x8e, 0x81, 0x8d, 0x03, 0x0d, 0x02, 0x8d, 0x05, 0x8e, 0x03, 0x8d, + 0x81, 0xe0, 0x03, 0x8d, 0x05, 0x8e, 0x04, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x88, 0x8e, 0xc3, 0x01, + 0x46, 0x07, 0x11, 0x46, 0x07, 0x02, 0x00, 0x03, 0x44, 0x02, 0x00, 0x85, 0x46, 0x07, 0x11, 0x46, + 0x07, 0x07, 0x00, 0x86, 0x46, 0x07, 0x10, 0x46, 0x07, 0x94, 0x07, 0x00, 0x88, 0x46, 0xc3, 0x82, + 0x46, 0x07, 0x11, 0x46, 0x07, 0x07, 0x00, 0x85, 0x46, 0x07, 0x11, 0x46, 0x07, 0x07, 0x00, 0x85, + 0x46, 0x07, 0x10, 0x46, 0x07, 0x08, 0x00, 0x82, 0x46, 0xc3, 0x06, 0x8e, 0x03, 0x8d, 0x81, 0xe0, + 0x03, 0x8d, 0x05, 0x8e, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x05, 0x8e, 0x04, 0x8d, 0x81, 0xe0, + 0x03, 0x8d, 0x02, 0x8e, 0x02, 0x00, 0x80, 0x83, 0x38, 0x39, 0xe2, 0x03, 0x62, 0x0d, 0xc0, 0x82, + 0x48, 0x08, 0x10, 0xc0, 0x86, 0xe2, 0x32, 0x33, 0x3b, 0x3c, 0xe2, 0x03, 0x62, 0x0c, 0x00, 0x84, + 0x93, 0x48, 0x08, 0x94, 0x0f, 0x00, 0x86, 0xe2, 0x36, 0x37, 0x10, 0x11, 0xe2, 0x03, 0x62, 0x1f, + 0x00, 0x86, 0xe2, 0x10, 0x11, 0x10, 0x11, 0xe2, 0x03, 0x62, 0x04, 0xf0, 0x81, 0xe0, 0x12, 0xf0, + 0x81, 0xe0, 0x04, 0xf0, 0x03, 0x00, 0x86, 0xe2, 0x10, 0x11, 0x10, 0x11, 0xe2, 0x03, 0x62, 0x81, + 0xe2, 0x02, 0x90, 0x04, 0x81, 0x05, 0x90, 0x04, 0x81, 0x05, 0x90, 0x04, 0x81, 0x02, 0x90, 0x81, + 0xe2, 0x03, 0x00, 0x86, 0xe2, 0x10, 0x11, 0x10, 0x11, 0xe2, 0x03, 0x62, 0x83, 0xe2, 0x10, 0x81, + 0x04, 0x83, 0x81, 0x81, 0x03, 0x10, 0x81, 0x81, 0x04, 0x84, 0x81, 0x81, 0x03, 0x10, 0x81, 0x81, + 0x04, 0x85, 0x83, 0x81, 0x10, 0xe2, 0x03, 0x00, 0x86, 0xe2, 0x10, 0x11, 0x10, 0x11, 0xe2, 0x03, + 0x62, 0x81, 0xe2, 0x02, 0x10, 0x04, 0x01, 0x05, 0x10, 0x04, 0x01, 0x05, 0x10, 0x04, 0x01, 0x02, + 0x10, 0x81, 0xe2, 0x03, 0x00, 0x83, 0xe2, 0x10, 0x11, 0x03, 0xc0, 0x03, 0x62, 0x81, 0xe2, 0x02, + 0xc0, 0x04, 0x62, 0x05, 0xc0, 0x04, 0x62, 0x05, 0xc0, 0x04, 0x62, 0x03, 0xc0, 0x03, 0x00, 0x83, + 0xe2, 0x10, 0x11, 0x03, 0x01, 0x03, 0x62, 0x82, 0xe2, 0x94, 0x02, 0x00, 0x02, 0x44, 0x07, 0x00, + 0x02, 0x44, 0x07, 0x00, 0x02, 0x44, 0x07, 0x00, 0x84, 0xe2, 0x10, 0x11, 0x82, 0x02, 0x01, 0x03, + 0x62, 0x81, 0xe2, 0x1e, 0x00, 0x83, 0xe2, 0x10, 0x11, 0x03, 0xca, 0x03, 0x62, 0x81, 0xe2, 0x08, + 0xf0, 0x81, 0xe0, 0x08, 0xf0, 0x81, 0xe0, 0x0c, 0xf0, 0x83, 0xe2, 0x10, 0x11, 0x80, 0x81, 0x0b, + 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, + 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, + 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, + 0x0a, 0xc5, 0x02, 0x0c, 0x82, 0x48, 0x08, 0x02, 0x0c, 0x9a, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, + 0x2d, 0x2e, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, + 0x2d, 0x2e, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0xc3, 0xc5, 0x02, 0x01, + 0x82, 0x48, 0x08, 0x02, 0x01, 0xa2, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x35, 0x3d, 0x09, 0x47, + 0x35, 0x3d, 0x09, 0x47, 0x35, 0x3d, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, + 0x46, 0x07, 0x09, 0x93, 0x46, 0x07, 0xc3, 0xc5, 0x02, 0x01, 0x82, 0x48, 0x08, 0x02, 0x01, 0x02, + 0x00, 0x82, 0x48, 0x08, 0x0e, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x46, 0x07, 0x02, 0x00, + 0x82, 0x48, 0x08, 0x02, 0x00, 0x86, 0x48, 0x08, 0xc3, 0xc5, 0xfe, 0x8e, 0x02, 0x8d, 0x82, 0x8e, + 0xfe, 0x02, 0x8d, 0x02, 0x8e, 0x04, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x88, + 0xfe, 0x12, 0x27, 0x41, 0x15, 0xfe, 0x46, 0x07, 0x02, 0x00, 0x83, 0x48, 0x08, 0xfe, 0x03, 0x8e, + 0x82, 0xfe, 0xc5, 0x0b, 0x10, 0x81, 0x3d, 0x09, 0x00, 0x89, 0x35, 0x11, 0x10, 0x17, 0x18, 0x19, + 0x11, 0x46, 0x07, 0x02, 0x00, 0x88, 0x48, 0x08, 0x00, 0x93, 0x46, 0xc5, 0x01, 0xc5, 0x0b, 0x10, + 0x0b, 0x00, 0x88, 0x30, 0x1a, 0x1b, 0x1c, 0x10, 0x11, 0x46, 0x07, 0x02, 0x00, 0x82, 0x48, 0x08, + 0x02, 0x00, 0x8a, 0x46, 0xc5, 0x83, 0xc5, 0xfe, 0x4b, 0x4c, 0x20, 0x21, 0xfe, 0x05, 0x8e, 0x03, + 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x81, 0xfe, 0x04, 0x8e, 0x83, 0xfe, 0x46, + 0x07, 0x02, 0x00, 0x83, 0x48, 0x08, 0xfe, 0x03, 0x8e, 0x87, 0xfe, 0xc5, 0x10, 0x23, 0x24, 0x25, + 0x26, 0x04, 0x10, 0x83, 0x46, 0x07, 0x3d, 0x09, 0x00, 0x89, 0x35, 0x46, 0x07, 0x10, 0x11, 0x10, + 0x11, 0x46, 0x07, 0x02, 0x00, 0x8e, 0x48, 0x08, 0x00, 0x93, 0x46, 0xc5, 0x01, 0xc5, 0x10, 0x11, + 0x29, 0x2a, 0x2b, 0x2c, 0x03, 0x10, 0x82, 0x46, 0x07, 0x0b, 0x00, 0x88, 0x46, 0x07, 0x10, 0x11, + 0x10, 0x11, 0x46, 0x07, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x84, 0x46, 0xc5, 0x84, 0xfe, + 0x0b, 0x8e, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x10, 0x8e, 0x81, 0xfe, + 0x80, 0xa2, 0xc5, 0xc3, 0x11, 0x10, 0x11, 0xc5, 0x00, 0x2d, 0x2e, 0x00, 0xc3, 0x10, 0x11, 0x10, + 0x11, 0xc5, 0x00, 0x2d, 0x2e, 0x00, 0xc3, 0x10, 0x11, 0x10, 0x11, 0xc5, 0x00, 0x2d, 0x2e, 0x00, + 0xc3, 0x10, 0x11, 0xc5, 0x04, 0x00, 0x84, 0xc5, 0xc3, 0x00, 0xc3, 0x24, 0x00, 0x81, 0xc5, 0x02, + 0x00, 0x81, 0xc3, 0x24, 0x00, 0x81, 0xc5, 0x02, 0x00, 0x81, 0xc3, 0x04, 0x00, 0x1c, 0xe7, 0x04, + 0xd0, 0x84, 0xc5, 0x00, 0xc5, 0xc3, 0x24, 0x00, 0x84, 0xc5, 0xc3, 0xc5, 0xc3, 0x04, 0xaf, 0x1c, + 0xe5, 0x04, 0x00, 0x84, 0xc5, 0xc3, 0x00, 0xc3, 0x24, 0x00, 0x84, 0xc5, 0x00, 0x81, 0xc3, 0x24, + 0x00, 0x84, 0xc5, 0x01, 0x81, 0xc3, 0x04, 0x00, 0x1c, 0xe7, 0x04, 0xd0, 0x84, 0xef, 0x01, 0x81, + 0xc3, 0x24, 0x00, 0x84, 0x01, 0x82, 0x81, 0xc3, 0x20, 0xe5, 0x04, 0xaf, 0x02, 0xca, 0x02, 0x00, + 0x80, 0x02, 0x45, 0x83, 0x0c, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, + 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, + 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x82, 0x0a, 0x0b, 0x02, 0x0c, 0x83, 0x0a, 0x0b, 0x0c, + 0x02, 0x43, 0x81, 0xc5, 0x02, 0x0c, 0x86, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, 0x02, 0x00, 0x82, + 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, + 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x87, 0x48, 0x08, 0x2d, 0x2e, 0x48, 0x08, 0x07, + 0x02, 0x0c, 0x81, 0xc5, 0x02, 0x01, 0xa6, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, + 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, + 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0x07, 0x09, 0x47, 0x46, 0xc5, 0x01, 0xc5, 0x02, 0x01, 0x02, + 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x7f, + 0x82, 0x48, 0x08, 0x02, 0x7f, 0x82, 0x48, 0x08, 0x02, 0x7f, 0x82, 0x48, 0x08, 0x02, 0x00, 0x82, + 0x48, 0x08, 0x02, 0x00, 0x82, 0x48, 0x08, 0x02, 0x00, 0x88, 0x46, 0xc5, 0x83, 0xfe, 0x4b, 0x4c, + 0x20, 0x21, 0x02, 0xfe, 0x08, 0x8e, 0x81, 0x09, 0x03, 0x00, 0x82, 0x46, 0x07, 0x03, 0x00, 0x81, + 0x47, 0x07, 0x8e, 0x02, 0xfe, 0x90, 0x12, 0x27, 0x41, 0x15, 0x8e, 0xfe, 0xc5, 0x23, 0x24, 0x25, + 0x26, 0x10, 0x11, 0x46, 0x07, 0x94, 0x09, 0x00, 0x82, 0x46, 0x07, 0x09, 0x00, 0x93, 0x93, 0x46, + 0x07, 0x11, 0x10, 0x17, 0x18, 0x19, 0x10, 0xc3, 0xc5, 0x10, 0x29, 0x2a, 0x2b, 0x2c, 0x11, 0x46, + 0x07, 0x0a, 0x00, 0x82, 0x46, 0x07, 0x0a, 0x00, 0x8a, 0x46, 0x07, 0x30, 0x1a, 0x1b, 0x1c, 0x1d, + 0x10, 0xc3, 0xfe, 0x08, 0x8e, 0x05, 0x8d, 0x81, 0xe0, 0x04, 0x8d, 0x02, 0x8e, 0x04, 0x8d, 0x81, + 0xe0, 0x05, 0x8d, 0x08, 0x8e, 0x84, 0xfe, 0x01, 0x46, 0x07, 0x04, 0x10, 0x83, 0x46, 0x07, 0x94, + 0x09, 0x00, 0x82, 0x46, 0x07, 0x09, 0x00, 0x83, 0x93, 0x46, 0x07, 0x04, 0x11, 0x86, 0x46, 0x07, + 0x01, 0x84, 0x46, 0x07, 0x04, 0x10, 0x82, 0x46, 0x07, 0x0a, 0x00, 0x82, 0x46, 0x07, 0x0a, 0x00, + 0x82, 0x46, 0x07, 0x04, 0x11, 0x84, 0x46, 0x07, 0x85, 0xfe, 0x08, 0x8e, 0x05, 0x8d, 0x81, 0xe0, + 0x04, 0x8d, 0x02, 0x8e, 0x04, 0x8d, 0x81, 0xe0, 0x05, 0x8d, 0x08, 0x8e, 0x81, 0xfe, 0x80, 0x0f, + 0x00, 0x82, 0x0c, 0x8a, 0x03, 0x99, 0x81, 0x8d, 0x03, 0xa3, 0x82, 0x8b, 0x0c, 0x1f, 0x00, 0x87, + 0xc5, 0x00, 0x93, 0x80, 0x94, 0x00, 0xc3, 0x1e, 0x00, 0x81, 0x93, 0x02, 0xaf, 0x81, 0xc5, 0x05, + 0x42, 0x81, 0xc3, 0x02, 0xaf, 0x81, 0x94, 0x1d, 0x00, 0x82, 0xa3, 0xc5, 0x02, 0x49, 0x03, 0x10, + 0x82, 0xc3, 0x99, 0x0f, 0x00, 0x03, 0x8c, 0x0a, 0x00, 0x81, 0x93, 0x03, 0xaf, 0x81, 0xc5, 0x02, + 0x49, 0x03, 0x10, 0x81, 0xc3, 0x03, 0xaf, 0x81, 0x94, 0x09, 0x00, 0x03, 0x8c, 0x83, 0xc3, 0x46, + 0x07, 0x0d, 0x00, 0x82, 0xa3, 0xc5, 0x02, 0x49, 0x03, 0x42, 0x82, 0xc3, 0x99, 0x0c, 0x00, 0x86, + 0x46, 0x07, 0xc5, 0xc3, 0x46, 0x07, 0x0e, 0x00, 0x81, 0xc5, 0x03, 0x10, 0x02, 0x49, 0x81, 0xc3, + 0x0d, 0x00, 0x84, 0x46, 0x07, 0xc5, 0xc3, 0x05, 0xc2, 0x81, 0x42, 0x03, 0x80, 0x81, 0x42, 0x06, + 0xc2, 0x81, 0xc5, 0x03, 0x42, 0x02, 0x49, 0x81, 0xc3, 0x05, 0xc2, 0x81, 0x42, 0x03, 0x00, 0x81, + 0x42, 0x05, 0xc2, 0x81, 0xc5, 0x12, 0x10, 0x02, 0x49, 0x13, 0x10, 0x82, 0xc5, 0x82, 0x26, 0x10, + 0x81, 0xc5, 0x27, 0xaf, 0x81, 0xc5, 0x80, 0x87, 0x0c, 0x0b, 0x0a, 0x45, 0x43, 0x0b, 0x0a, 0x1a, + 0x0c, 0x8a, 0x0b, 0x0a, 0x45, 0x43, 0x0b, 0x0a, 0x0c, 0xc5, 0x46, 0x07, 0x02, 0x0c, 0x82, 0x46, + 0x07, 0x07, 0x22, 0x82, 0x2d, 0x2e, 0x07, 0x22, 0x82, 0x2d, 0x2e, 0x08, 0x22, 0x82, 0x46, 0x07, + 0x02, 0x0c, 0x86, 0x46, 0x07, 0xc3, 0xc5, 0x46, 0x07, 0x02, 0x01, 0x82, 0x46, 0x07, 0x06, 0x00, + 0x8d, 0x47, 0x46, 0x07, 0x09, 0x46, 0x07, 0x00, 0x46, 0x07, 0xc7, 0x46, 0x07, 0x09, 0x06, 0x00, + 0x8b, 0x93, 0x46, 0x07, 0x10, 0x11, 0x46, 0x07, 0xc3, 0xc5, 0x46, 0x07, 0x02, 0x01, 0x82, 0x46, + 0x07, 0x07, 0x00, 0x8b, 0x46, 0x07, 0x00, 0x46, 0x07, 0x00, 0x46, 0x07, 0x00, 0x46, 0x07, 0x08, + 0x00, 0x88, 0x46, 0x07, 0x10, 0x11, 0x48, 0x08, 0xc3, 0xfe, 0x06, 0x8e, 0x03, 0x8d, 0x81, 0xe0, + 0x03, 0x8d, 0x0b, 0x8e, 0x03, 0x8d, 0x81, 0xe0, 0x04, 0x8d, 0x8d, 0x8e, 0xfe, 0x10, 0x11, 0x48, + 0x08, 0xc3, 0x01, 0xc5, 0x01, 0x48, 0x08, 0x94, 0x04, 0x00, 0x02, 0x46, 0x81, 0x07, 0x07, 0x00, + 0x82, 0x46, 0x07, 0x07, 0x00, 0x81, 0x46, 0x02, 0x07, 0x8d, 0x11, 0x48, 0x08, 0x10, 0x11, 0x48, + 0x08, 0xc3, 0x83, 0xc5, 0x01, 0x48, 0x08, 0x05, 0x00, 0x02, 0x46, 0x81, 0x07, 0x07, 0x00, 0x82, + 0x46, 0x07, 0x07, 0x00, 0x81, 0x46, 0x02, 0x07, 0x89, 0x11, 0x48, 0x08, 0x10, 0x11, 0x48, 0x08, + 0xc3, 0xfe, 0x04, 0x8e, 0x05, 0x8d, 0x03, 0x8e, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x02, 0x8e, + 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x0a, 0x8e, 0x84, 0xfe, 0x01, 0x46, 0x07, 0x07, 0x10, 0x02, + 0x46, 0x81, 0x07, 0x07, 0x00, 0x82, 0x46, 0x07, 0x07, 0x00, 0x81, 0x46, 0x02, 0x07, 0x03, 0x11, + 0x88, 0x00, 0x2d, 0x2e, 0x00, 0xc3, 0x84, 0x46, 0x07, 0x07, 0x10, 0x02, 0x46, 0x81, 0x07, 0x07, + 0x00, 0x82, 0x46, 0x07, 0x07, 0x00, 0x81, 0x46, 0x02, 0x07, 0x03, 0x11, 0x86, 0x00, 0x2d, 0x2e, + 0x00, 0xc3, 0xfe, 0x0c, 0x8e, 0x03, 0x8d, 0x81, 0xe0, 0x03, 0x8d, 0x02, 0x8e, 0x03, 0x8d, 0x81, + 0xe0, 0x03, 0x8d, 0x0a, 0x8e, 0x81, 0xfe, 0x80, 0x82, 0x00, 0xc5, 0x05, 0x4d, 0x81, 0x01, 0x05, + 0x4d, 0x81, 0x00, 0x04, 0x4d, 0x81, 0x00, 0x04, 0x4d, 0x81, 0x00, 0x04, 0x4d, 0x81, 0x00, 0x04, + 0x4d, 0x81, 0x00, 0x02, 0x4d, 0x03, 0xc5, 0x83, 0x00, 0xc5, 0xca, 0x05, 0x2f, 0x81, 0xca, 0x1d, + 0x00, 0x02, 0x01, 0x84, 0x83, 0xc5, 0x01, 0x00, 0x03, 0x44, 0x1a, 0x00, 0x81, 0x8f, 0x04, 0x00, + 0x02, 0x4a, 0x83, 0xca, 0xc5, 0xca, 0x09, 0xaf, 0x11, 0xe4, 0x04, 0x2f, 0x81, 0xc3, 0x04, 0x00, + 0x02, 0x49, 0x84, 0xc3, 0xc5, 0xc3, 0x4d, 0x03, 0x49, 0x82, 0x4d, 0x81, 0x05, 0x4d, 0x81, 0x00, + 0x04, 0x4d, 0x81, 0x00, 0x04, 0x4d, 0x81, 0x00, 0x04, 0x4d, 0x04, 0x44, 0x81, 0xc3, 0x04, 0x00, + 0x02, 0x49, 0x83, 0xc3, 0xc5, 0xc3, 0x05, 0x00, 0x81, 0x01, 0x1f, 0x00, 0x83, 0xc3, 0xc5, 0xc3, + 0x05, 0xaf, 0x81, 0xca, 0x05, 0x00, 0x02, 0xd1, 0x03, 0x51, 0x81, 0xd1, 0x04, 0x00, 0x81, 0xd1, + 0x03, 0x51, 0x02, 0xd1, 0x03, 0x00, 0x81, 0xc3, 0x04, 0x00, 0x02, 0x49, 0x81, 0xc3, 0x02, 0x01, + 0x05, 0x00, 0x81, 0x01, 0x1f, 0x00, 0x83, 0xc5, 0x82, 0x01, 0x05, 0x00, 0x81, 0x01, 0x06, 0x00, + 0x81, 0xc9, 0x03, 0x00, 0x81, 0xc9, 0x04, 0x00, 0x81, 0xc9, 0x03, 0x00, 0x81, 0xc9, 0x04, 0x00, + 0x81, 0xc3, 0x05, 0x00, 0x82, 0x93, 0xc3, 0x02, 0xca, 0x05, 0xaf, 0x81, 0xca, 0x06, 0x00, 0x81, + 0x01, 0x03, 0x00, 0x81, 0x01, 0x04, 0x00, 0x81, 0x01, 0x03, 0x00, 0x81, 0x01, 0x03, 0x00, 0x82, + 0x93, 0xc3, 0x06, 0xaf, 0x89, 0xc3, 0x00, 0xc3, 0x90, 0x91, 0x90, 0x91, 0x90, 0xc5, 0x06, 0xaf, + 0x81, 0xca, 0x03, 0xaf, 0x81, 0xca, 0x04, 0xaf, 0x81, 0xca, 0x03, 0xaf, 0x81, 0xca, 0x04, 0xaf, + 0x87, 0xc3, 0x91, 0x90, 0x91, 0x90, 0x91, 0xc5, 0x03, 0x00, 0x80, 0x8e, 0x00, 0x12, 0x13, 0x01, + 0x05, 0x12, 0x13, 0x01, 0x05, 0x12, 0x13, 0x01, 0x05, 0x04, 0x02, 0x00, 0x88, 0x87, 0x88, 0x89, + 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x02, 0x00, 0x8d, 0x4d, 0x12, 0x13, 0x01, 0x05, 0x12, 0x13, 0x01, + 0x05, 0x12, 0x13, 0x01, 0x05, 0x03, 0x00, 0x81, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, 0x00, 0x81, + 0x3c, 0x02, 0x00, 0x93, 0x3c, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0xed, 0x9d, 0xb3, 0xbd, 0xa0, 0xe1, + 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, + 0x00, 0x81, 0x3c, 0x03, 0x00, 0x81, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, + 0x00, 0x93, 0x3c, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xf3, 0xf2, 0xbe, 0xcf, 0x01, 0xcf, 0xb4, 0xb5, + 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, 0x00, 0x81, 0x3c, 0x02, + 0x00, 0x81, 0x3c, 0x02, 0x00, 0x82, 0x4e, 0x50, 0x02, 0x4e, 0x81, 0x50, 0x02, 0x4e, 0x81, 0x50, + 0x02, 0x4e, 0x90, 0x50, 0x4e, 0x40, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, + 0xcb, 0xcc, 0x4d, 0x02, 0x4e, 0x81, 0x50, 0x02, 0x4e, 0x81, 0x50, 0x02, 0x4e, 0x81, 0x50, 0x02, + 0x4e, 0x94, 0x50, 0x00, 0x7e, 0x5c, 0x51, 0x5e, 0x7e, 0x5c, 0x51, 0x5e, 0x7e, 0x5c, 0x51, 0x5e, + 0x7e, 0x5c, 0xd5, 0xd6, 0xd7, 0xd8, 0x04, 0x5c, 0x83, 0xe4, 0xd2, 0xe2, 0x02, 0x5c, 0x8d, 0x5f, + 0x7d, 0x5d, 0x5c, 0x5f, 0x7d, 0x5d, 0x5c, 0x5f, 0x7d, 0x5d, 0x5c, 0x5f, 0x14, 0x7e, 0x14, 0x5f, + 0x81, 0x00, 0x03, 0x5c, 0x02, 0x3c, 0x82, 0x5c, 0x04, 0x04, 0x3c, 0x82, 0x5c, 0x04, 0x03, 0x3c, + 0x06, 0x5c, 0x02, 0x3c, 0x82, 0x5c, 0x04, 0x04, 0x3c, 0x82, 0x5c, 0x04, 0x03, 0x3c, 0x04, 0x5c, + 0x81, 0x00, 0x02, 0x5c, 0x03, 0x00, 0x83, 0x5c, 0x04, 0x3c, 0x03, 0x00, 0x83, 0x5c, 0x04, 0x3c, + 0x03, 0x00, 0x04, 0x5c, 0x03, 0x00, 0x83, 0x5c, 0x04, 0x3c, 0x03, 0x00, 0x83, 0x5c, 0x04, 0x3c, + 0x04, 0x00, 0x02, 0x5c, 0x81, 0x00, 0x02, 0x5c, 0x10, 0x00, 0x02, 0x5c, 0x11, 0x00, 0x02, 0x5c, + 0x81, 0x82, 0x02, 0x5c, 0x10, 0x00, 0x02, 0x5c, 0x10, 0x00, 0x81, 0x93, 0x02, 0x5c, 0x81, 0x5a, + 0x02, 0x5b, 0x10, 0x5a, 0x02, 0x5b, 0x11, 0x5a, 0x02, 0x5b, 0x02, 0x00, 0x80, 0x83, 0x11, 0x10, + 0x11, 0x02, 0x86, 0x82, 0x8a, 0x8b, 0x06, 0x86, 0x82, 0x8a, 0x8b, 0x08, 0x86, 0x82, 0x8a, 0x8b, + 0x06, 0x86, 0x82, 0x8a, 0x8b, 0x04, 0x86, 0x84, 0x10, 0x11, 0x10, 0x11, 0x03, 0x86, 0x03, 0x11, + 0x84, 0x86, 0xe1, 0xe3, 0x86, 0x03, 0x11, 0x04, 0x10, 0x02, 0x86, 0x04, 0x11, 0x03, 0x10, 0x84, + 0x86, 0xe1, 0xe3, 0x86, 0x03, 0x10, 0x05, 0x86, 0x81, 0x10, 0x04, 0x86, 0x03, 0x11, 0x84, 0x86, + 0xe1, 0xe3, 0x86, 0x02, 0x11, 0x82, 0x2d, 0x2e, 0x03, 0x10, 0x02, 0x86, 0x03, 0x11, 0x82, 0x2d, + 0x2e, 0x02, 0x10, 0x84, 0x86, 0xe1, 0xe3, 0x86, 0x03, 0x10, 0x81, 0xed, 0x06, 0x86, 0x83, 0xe1, + 0xe3, 0x86, 0x02, 0x11, 0x81, 0xed, 0x04, 0x86, 0x81, 0xee, 0x02, 0x11, 0x03, 0x10, 0x04, 0x86, + 0x03, 0x11, 0x02, 0x10, 0x81, 0xed, 0x04, 0x86, 0x81, 0xee, 0x04, 0x10, 0x83, 0x86, 0xe1, 0xe3, + 0x02, 0x86, 0xa6, 0xe1, 0xe3, 0x86, 0x10, 0x11, 0x10, 0x86, 0x24, 0x18, 0x86, 0x11, 0x10, 0x9b, + 0xaa, 0x11, 0xed, 0x86, 0x8a, 0x8b, 0x86, 0xee, 0x10, 0x9b, 0xaa, 0x11, 0x10, 0x86, 0x24, 0x18, + 0x86, 0x11, 0x10, 0x11, 0x10, 0x11, 0x86, 0xe1, 0xe3, 0x04, 0x86, 0x85, 0xee, 0x10, 0x11, 0x10, + 0x1b, 0x02, 0xe7, 0x83, 0x2a, 0x11, 0x10, 0x02, 0x00, 0x88, 0x11, 0x10, 0x86, 0xa4, 0x98, 0x86, + 0x11, 0x10, 0x02, 0x00, 0x83, 0x11, 0x10, 0x1b, 0x02, 0xe7, 0x91, 0x2a, 0x11, 0x10, 0x11, 0x10, + 0x11, 0x86, 0xe1, 0xe3, 0x86, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x04, 0x00, 0x82, 0x11, + 0x10, 0x02, 0x00, 0x83, 0x11, 0x10, 0x1b, 0x02, 0xe7, 0x83, 0x2a, 0x11, 0x10, 0x02, 0x00, 0x82, + 0x11, 0x10, 0x04, 0x00, 0x89, 0x11, 0x10, 0x11, 0x10, 0x11, 0x86, 0xe1, 0xe3, 0x86, 0x04, 0xc2, + 0x83, 0x10, 0x11, 0x10, 0x04, 0x00, 0x88, 0x11, 0x10, 0x00, 0x5a, 0x11, 0x10, 0x00, 0x5a, 0x02, + 0x00, 0x82, 0x11, 0x10, 0x02, 0x00, 0x82, 0x11, 0x10, 0x04, 0x00, 0x88, 0x11, 0x10, 0x11, 0x10, + 0x11, 0x86, 0xe1, 0xe3, 0x05, 0x86, 0x9e, 0x10, 0x11, 0x10, 0x6a, 0x57, 0x58, 0x59, 0x11, 0x10, + 0x53, 0x5e, 0x11, 0x10, 0x5d, 0x6b, 0x5d, 0x59, 0x11, 0x10, 0x57, 0x5a, 0x11, 0x10, 0x5d, 0x58, + 0x59, 0x00, 0x11, 0x10, 0x11, 0x02, 0xc2, 0x04, 0x86, 0x82, 0x11, 0xed, 0x02, 0x86, 0x8c, 0x10, + 0x11, 0x5e, 0x5c, 0x5d, 0x5c, 0x5e, 0x11, 0x10, 0x5c, 0x5a, 0x11, 0x02, 0x5e, 0x90, 0x6a, 0x5e, + 0x5d, 0x11, 0x10, 0x53, 0x5e, 0x11, 0x10, 0x5a, 0x6b, 0x5c, 0x5d, 0x11, 0x10, 0xc2, 0x04, 0x86, + 0x87, 0xee, 0x10, 0x11, 0x10, 0x11, 0x86, 0xc2, 0x02, 0x5e, 0x94, 0x68, 0x69, 0x5e, 0x53, 0x5e, + 0xc2, 0x5e, 0x5f, 0xc2, 0x5e, 0x6b, 0x6c, 0x68, 0x69, 0xc2, 0x5e, 0x69, 0x5e, 0x69, 0xc2, 0x02, + 0x5e, 0x84, 0x6c, 0x68, 0x6a, 0xc2, 0x04, 0x86, 0x83, 0x10, 0x11, 0x10, 0x80, 0x10, 0x11, 0x86, + 0xc2, 0x02, 0x5e, 0x94, 0x68, 0x69, 0x5e, 0x53, 0x5e, 0xc2, 0x5e, 0x5f, 0xc2, 0x5e, 0x6b, 0x6c, + 0x68, 0x69, 0xc2, 0x5e, 0x69, 0x5e, 0x69, 0xc2, 0x02, 0x5e, 0x84, 0x6c, 0x68, 0x6a, 0xc2, 0x04, + 0x86, 0x83, 0x10, 0x11, 0x10, 0x80, 0xbf, 0x07, 0xaa, 0xaa, 0xaf, 0xfc, 0xf3, 0xcf, 0x02, 0xcf, + 0xf0, 0xa9, 0xad, 0xfd, 0x0c, 0xf3, 0x0c, 0x0c, 0xfc, 0x55, 0x56, 0x54, 0x57, 0xda, 0xfb, 0xfa, + 0xfe, 0xd0, 0xd8, 0xd8, 0xcf, 0x05, 0xda, 0x02, 0x2b, 0x02, 0x08, 0xbf, 0x04, 0xf8, 0xa0, 0xf8, + 0xc0, 0x20, 0xbf, 0x03, 0xcf, 0x08, 0x90, 0xf0, 0xc4, 0xd5, 0xf5, 0xd5, 0x01, 0x00, 0x10, 0x55, + 0x2a, 0x80, 0xaa, 0x00, 0x03, 0x3c, 0xf2, 0xc0, 0xc0, 0x00, 0x00, 0xff, 0xa9, 0xa1, 0x01, 0xa5, + 0xa5, 0xa4, 0xa8, 0xa7, 0xa7, 0xa6, 0xa9, 0xaf, 0x2a, 0x0b, 0x03, 0xff, 0xab, 0xbd, 0xc2, 0xfc, + 0x03, 0xf9, 0xa1, 0x01, 0x01, 0x03, 0x0f, 0xf0, 0x00, 0x05, 0x55, 0x35, 0xf5, 0xfd, 0xff, 0x02, + 0x50, 0x50, 0x41, 0x51, 0x50, 0x55, 0x5f, 0xab, 0xab, 0x2b, 0x2b, 0x0b, 0x00, 0x01, 0x01, 0xf2, + 0xbd, 0xab, 0xab, 0xaa, 0x0b, 0x01, 0x00, 0x8f, 0x3f, 0xeb, 0xab, 0xaa, 0xa9, 0x01, 0x00, 0xab, + 0xaa, 0xa8, 0xa9, 0xa0, 0x01, 0x00, 0x03, 0x41, 0x15, 0x05, 0x01, 0x05, 0x05, 0x15, 0xf7, 0x0f, + 0x40, 0x55, 0x55, 0x7d, 0x7f, 0xff, 0xff, 0x03, 0xfd, 0x01, 0x2a, 0x09, 0x01, 0x03, 0xcb, 0xfa, + 0xe8, 0xac, 0x83, 0x0a, 0xea, 0x3e, 0x83, 0xdb, 0x1b, 0xda, 0x1a, 0x1b, 0x1a, 0x1a, 0x6b, 0xcf, + 0x03, 0x01, 0x00, 0xff, 0xab, 0xab, 0x41, 0x55, 0xa9, 0x82, 0xab, 0x80, 0xc1, 0x3c, 0x8f, 0xcf, + 0x03, 0x91, 0xd3, 0xff, 0xff, 0xfb, 0x01, 0x0a, 0xab, 0xcf, 0x03, 0xaa, 0xaf, 0xf0, 0x0a, 0xff, + 0xff, 0x0f, 0x03, 0x81, 0xa1, 0xa9, 0xa9, 0xff, 0xf0, 0xfd, 0x75, 0x55, 0x55, 0x54, 0x05, 0x0f, + 0x4f, 0x57, 0x5f, 0x57, 0x04, 0x01, 0x10, 0x2a, 0x03, 0xaf, 0xfb, 0xa1, 0x0a, 0xab, 0xaa, 0xcf, + 0x01, 0xbf, 0xff, 0xc1, 0x01, 0xcf, 0x03, 0xab, 0xaa, 0xff, 0xfd, 0x01, 0x0a, 0xab, 0xaa, 0xab, + 0xab, 0xff, 0x03, 0x00, 0xab, 0xaa, 0xcf, 0x03, 0xab, 0x00, 0xcf, 0x03, 0x01, 0xab, 0xaa, 0xff, + 0xf5, 0x01, 0x01, 0xbf, 0x03, 0x01, 0x45, 0x55, 0xab, 0x01, 0xaa, 0xab, 0xab, 0xaa, 0x66, 0x55, + 0xaa, 0x01, 0xaa, 0xab, 0xab, 0xcf, 0x03, 0xaa, 0xa0, 0xcf, 0x04, 0xab, 0xfa, 0x0f, 0xa1, 0x0a, + 0xaa, 0xab, 0xaf, 0xf0, 0x0a, 0xaa, 0xaa, 0xa0, 0xfa, 0x0f, 0xa1, 0xba, 0xcf, 0x03, 0xaa, 0x0e, + 0x1a, 0x5e, 0xd4, 0x54, 0x0c, 0x08, 0x48, 0xf8, 0xc8, 0x08, 0x08, 0x2e, 0xa8, 0xa8, 0x08, 0xca, + 0xfa, 0xee, 0xfe, 0xfa, 0x3a, 0xba, 0xaa, 0xfe, 0xca, 0xec, 0xdc, 0x2c, 0xe8, 0xae, 0xec, 0xee, + 0x8a, 0x08, 0xa0, 0xcf, 0x04, 0xaa, 0x0c, 0xf8, 0x08, 0xaa, 0x08, 0x02, 0x2c, 0xfa, 0x54, 0x6a, + 0x2a, 0xaa, 0x0a, 0xc8, 0x3c, 0x8e, 0x08, 0x08, 0x0a, 0x0a, 0x08, 0x00, 0x08, 0x0a, 0x00, 0x08, + 0x00, 0xa8, 0xaa, 0x2a, 0x0e, 0x36, 0x08, 0x10, 0x00, 0x08, 0xbe, 0xfe, 0x5e, 0x5c, 0x08, 0x08, + 0x00, 0x08, 0xea, 0xba, 0xfe, 0x5e, 0x00, 0x10, 0x0a, 0xb8, 0xa8, 0x80, 0xfc, 0xfe, 0x28, 0x88, + 0x00, 0x00, 0x18, 0x08, 0x3c, 0xfc, 0x0e, 0x1a, 0x10, 0x0a, 0x0c, 0x0e, 0xfa, 0x8a, 0xf0, 0xcc, + 0x04, 0x4e, 0x5c, 0x10, 0x48, 0x50, 0xf0, 0xe8, 0xd4, 0xf4, 0xdc, 0x18, 0x08, 0x0c, 0xfe, 0x0e, + 0x7e, 0xcf, 0x03, 0x5c, 0x14, 0x5c, 0xfe, 0xea, 0x5a, 0x5e, 0x58, 0x6a, 0xea, 0x2a, 0xd0, 0x38, + 0x0c, 0x02, 0xa8, 0x08, 0x88, 0xaa, 0xae, 0xbc, 0x0e, 0x02, 0xaa, 0xf0, 0xfe, 0xea, 0x04, 0x1a, + 0x08, 0x2a, 0xa8, 0x08, 0x88, 0xaa, 0x5c, 0xa8, 0x88, 0xaa, 0x80, 0x02, 0x3c, 0xf2, 0x50, 0x42, + 0x0c, 0xaa, 0x08, 0xc8, 0x3c, 0x8e, 0xce, 0x0e, 0x0a, 0xaa, 0x08, 0x00, 0x02, 0xa2, 0x4c, 0xaa, + 0x22, 0xaa, 0x00, 0x02, 0x3c, 0xfa, 0x08, 0x18, 0x08, 0x10, 0xfe, 0xfe, 0xfc, 0x7c, 0x00, 0x08, + 0x00, 0x0a, 0xaa, 0xb8, 0xe8, 0xcc, 0x00, 0x30, 0xa8, 0x98, 0x00, 0x08, 0x00, 0xc8, 0x5c, 0xa8, + 0x28, 0xba, 0x00, 0xc0, 0x2c, 0x9e, 0xa8, 0xaa, 0xaa, 0xea, 0x0e, 0xa8, 0xaa, 0xba, 0x1a, 0xae, + 0xf8, 0x0a, 0xcf, 0x03, 0xaa, 0xba, 0x0e, 0x4e, 0x5e, 0x5e, 0x57, 0x04, 0x00, 0x10, 0xbf, 0x04, + 0x01, 0x05, 0x15, 0xcf, 0x03, 0x14, 0x15, 0x15, 0xcf, 0x04, 0x14, 0xbf, 0x04, 0x40, 0x50, 0x54, + 0xcf, 0x03, 0x14, 0x54, 0x54, 0xcf, 0x04, 0x14, 0xbf, 0x04, 0x15, 0x15, 0xcf, 0x03, 0x14, 0x15, + 0x15, 0xcf, 0x03, 0x14, 0x15, 0x15, 0xbf, 0x04, 0x50, 0x54, 0xcf, 0x03, 0x14, 0x50, 0x50, 0xcf, + 0x03, 0x14, 0x54, 0x50, 0xbf, 0x04, 0x05, 0x15, 0xcf, 0x08, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, + 0x54, 0x14, 0x14, 0xbf, 0x04, 0x14, 0x14, 0x54, 0x50, 0xbf, 0x04, 0x15, 0x15, 0xcf, 0x03, 0x14, + 0x15, 0x15, 0xcf, 0x03, 0x14, 0x15, 0x15, 0xbf, 0x04, 0x54, 0x54, 0xbf, 0x03, 0x40, 0x40, 0xbf, + 0x03, 0x54, 0x54, 0xbf, 0x04, 0x05, 0x15, 0xcf, 0x08, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, 0x54, + 0x14, 0x14, 0x00, 0x00, 0x54, 0x54, 0x14, 0x14, 0x54, 0x50, 0xbf, 0x04, 0xcf, 0x0a, 0x14, 0x15, + 0x15, 0xbf, 0x0e, 0x54, 0x54, 0xbf, 0x04, 0x14, 0x14, 0xcf, 0x04, 0x15, 0xcf, 0x06, 0x14, 0xbf, + 0x04, 0x05, 0x05, 0x15, 0x15, 0x55, 0x55, 0x45, 0x45, 0xcf, 0x04, 0x05, 0xbf, 0x04, 0x05, 0x15, + 0xcf, 0x08, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, 0x54, 0xcf, 0x08, 0x14, 0x54, 0x50, 0xbf, 0x04, + 0x15, 0x15, 0xcf, 0x03, 0x14, 0x15, 0x15, 0xcf, 0x05, 0x14, 0xbf, 0x04, 0x50, 0x54, 0xcf, 0x03, + 0x14, 0x54, 0x50, 0xbf, 0x09, 0x15, 0x15, 0xcf, 0x03, 0x14, 0x15, 0x15, 0xcf, 0x05, 0x14, 0xbf, + 0x04, 0x50, 0x54, 0xcf, 0x03, 0x14, 0x54, 0xcf, 0x03, 0x50, 0xcf, 0x03, 0x14, 0xbf, 0x04, 0xcf, + 0x0a, 0x14, 0x15, 0x05, 0xbf, 0x04, 0xcf, 0x0a, 0x14, 0x54, 0x50, 0xbf, 0x04, 0xcf, 0x08, 0x14, + 0x05, 0x05, 0x01, 0x01, 0xbf, 0x04, 0xcf, 0x08, 0x14, 0x50, 0x50, 0x40, 0x40, 0xbf, 0x04, 0xcf, + 0x04, 0x14, 0x05, 0x05, 0xcf, 0x06, 0x01, 0xbf, 0x04, 0xcf, 0x04, 0x14, 0x50, 0x50, 0xcf, 0x06, + 0x40, 0xbf, 0x04, 0x05, 0x15, 0xcf, 0x04, 0x14, 0x15, 0x15, 0x14, 0x14, 0x15, 0x05, 0xbf, 0x04, + 0x50, 0x54, 0x14, 0x14, 0x54, 0x54, 0xcf, 0x04, 0x14, 0x54, 0x50, 0xbf, 0x04, 0xcf, 0x03, 0x01, + 0x05, 0x05, 0xcf, 0x05, 0x01, 0x15, 0x15, 0xbf, 0x04, 0xcf, 0x0a, 0x40, 0x54, 0x54, 0xbf, 0x04, + 0x05, 0x15, 0x14, 0x14, 0x00, 0x00, 0x01, 0x05, 0x15, 0x14, 0x15, 0x15, 0xbf, 0x04, 0x50, 0x54, + 0xcf, 0x03, 0x14, 0x54, 0x50, 0x40, 0x00, 0x00, 0x54, 0x54, 0xbf, 0x04, 0x05, 0x15, 0x14, 0x14, + 0x00, 0x01, 0x01, 0x00, 0x14, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, 0x54, 0xcf, 0x03, 0x14, 0x50, + 0x50, 0xcf, 0x03, 0x14, 0x54, 0x50, 0xbf, 0x07, 0x01, 0x05, 0x14, 0x14, 0x15, 0x15, 0xbf, 0x07, + 0x14, 0xcf, 0x03, 0x54, 0xcf, 0x03, 0x14, 0x55, 0x55, 0xcf, 0x03, 0x14, 0xbf, 0x04, 0x15, 0x15, + 0x14, 0x14, 0x15, 0x15, 0x00, 0x00, 0x14, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x54, 0x54, 0x00, 0x00, + 0x50, 0x54, 0xcf, 0x04, 0x14, 0x54, 0x50, 0xbf, 0x04, 0x05, 0x15, 0xcf, 0x03, 0x14, 0x15, 0x15, + 0xcf, 0x03, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, 0x54, 0x14, 0x14, 0x00, 0x50, 0x54, 0xcf, 0x03, + 0x14, 0x54, 0x50, 0xbf, 0x04, 0x15, 0x15, 0x14, 0x14, 0x00, 0x00, 0xcf, 0x06, 0x01, 0xbf, 0x04, + 0x54, 0x54, 0x14, 0x14, 0x54, 0x50, 0x50, 0xcf, 0x05, 0x40, 0xbf, 0x04, 0x05, 0x15, 0xcf, 0x03, + 0x14, 0x05, 0x05, 0xcf, 0x03, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, 0x54, 0xcf, 0x03, 0x14, 0x50, + 0x50, 0xcf, 0x03, 0x14, 0x54, 0x50, 0xbf, 0x04, 0x05, 0x15, 0xcf, 0x03, 0x14, 0x15, 0x05, 0x00, + 0x00, 0x14, 0x15, 0x05, 0xbf, 0x04, 0x50, 0x54, 0xcf, 0x03, 0x14, 0x54, 0x54, 0xcf, 0x03, 0x14, + 0x54, 0x50, 0xbf, 0x0a, 0x01, 0x05, 0x14, 0x15, 0x14, 0x14, 0x00, 0x00, 0x40, 0x50, 0x14, 0x54, + 0x14, 0x14, 0x00, 0x00, 0x15, 0x14, 0x15, 0x14, 0x14, 0x15, 0x00, 0x00, 0x50, 0x14, 0x50, 0x14, + 0x14, 0x50, 0x00, 0x00, 0x15, 0xcf, 0x04, 0x14, 0x15, 0x00, 0x00, 0x40, 0x50, 0x14, 0x14, 0x50, + 0x40, 0x00, 0x00, 0x15, 0x14, 0x15, 0x14, 0x14, 0x15, 0x00, 0x00, 0x54, 0x00, 0x50, 0x00, 0x00, + 0x54, 0x00, 0x00, 0x15, 0x14, 0x15, 0xcf, 0x03, 0x14, 0x00, 0x00, 0x54, 0x00, 0x50, 0xbf, 0x05, + 0x15, 0xcf, 0x04, 0x01, 0x15, 0x00, 0x00, 0x54, 0xcf, 0x04, 0x40, 0x54, 0xbf, 0x06, 0x14, 0x05, + 0x00, 0x00, 0xcf, 0x05, 0x14, 0x50, 0x00, 0x00, 0x14, 0xcf, 0x03, 0x15, 0x14, 0x14, 0x00, 0x00, + 0x14, 0x14, 0xcf, 0x03, 0x54, 0x14, 0x00, 0x00, 0x05, 0xcf, 0x04, 0x14, 0x05, 0x00, 0x00, 0x50, + 0xcf, 0x04, 0x14, 0x50, 0x00, 0x00, 0x15, 0x14, 0x14, 0x15, 0x14, 0x14, 0x00, 0x00, 0x50, 0x14, + 0x14, 0x50, 0xbf, 0x04, 0x15, 0x14, 0x14, 0x15, 0x14, 0x14, 0x00, 0x00, 0x50, 0x14, 0x14, 0x50, + 0x50, 0x14, 0x00, 0x00, 0x05, 0x14, 0x05, 0x00, 0x00, 0x05, 0x00, 0x00, 0x50, 0x00, 0x50, 0x14, + 0x14, 0x50, 0x00, 0x00, 0x15, 0xcf, 0x05, 0x01, 0x00, 0x00, 0x54, 0xcf, 0x05, 0x40, 0x00, 0x00, + 0x14, 0x14, 0x05, 0xcf, 0x03, 0x01, 0x00, 0x00, 0x14, 0x14, 0x50, 0xcf, 0x03, 0x40, 0xba, 0xba, + 0xea, 0xfa, 0xfe, 0xca, 0x55, 0xcf, 0x05, 0xaa, 0x8f, 0xcf, 0x01, 0xbf, 0x55, 0xcf, 0x05, 0xaa, + 0x2a, 0xa8, 0x55, 0xaa, 0xcf, 0x03, 0x80, 0xbf, 0x03, 0x40, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x02, + 0x55, 0xaa, 0x3c, 0x02, 0x20, 0x22, 0x20, 0xaa, 0x55, 0xaa, 0x3c, 0xd3, 0xcf, 0x01, 0xcf, 0x30, + 0x03, 0xbf, 0x04, 0x05, 0xbf, 0xfb, 0xa5, 0x41, 0x85, 0x47, 0xb1, 0x46, 0x85, 0x48, 0xb1, 0x46, + 0xe6, 0x46, 0xd0, 0x02, 0xe6, 0x47, 0xc5, 0x48, 0xd0, 0x11, 0xe0, 0x7f, 0xf0, 0x0d, 0xe8, 0xa5, + 0x47, 0xc5, 0x43, 0xd0, 0xe9, 0xa5, 0x46, 0xc5, 0x42, 0xd0, 0xe3, 0x8a, 0x09, 0x80, 0x91, 0x44, + 0x20, 0xba, 0xc9, 0xa5, 0x48, 0x91, 0x44, 0x20, 0xba, 0xc9, 0x18, 0x8a, 0x65, 0x40, 0x85, 0x40, + 0x90, 0x02, 0xe6, 0x41, 0xa5, 0x40, 0x85, 0x3e, 0xa5, 0x41, 0x85, 0x3f, 0xe6, 0x3e, 0xd0, 0x02, + 0xe6, 0x3f, 0xa5, 0x41, 0xc5, 0x43, 0xd0, 0x06, 0xa5, 0x40, 0xc5, 0x42, 0xf0, 0x03, 0x4c, 0x96, + 0xc8, 0xa9, 0x00, 0xa8, 0x91, 0x44, 0x4c, 0x11, 0xc1, 0xa9, 0x00, 0x85, 0x80, 0xa9, 0x2e, 0x85, + 0x81, 0xa9, 0x20, 0x85, 0x82, 0xa9, 0xff, 0x20, 0xfc, 0xc0, 0xa9, 0x60, 0x85, 0x44, 0xa9, 0x21, + 0x85, 0x45, 0xa9, 0x40, 0x85, 0x4a, 0xa9, 0x30, 0x85, 0x4b, 0xa0, 0x00, 0x84, 0x77, 0x20, 0xb1, + 0xc9, 0x09, 0x00, 0xf0, 0xd1, 0x30, 0x11, 0xaa, 0x20, 0xb1, 0xc9, 0x91, 0x44, 0x20, 0xba, 0xc9, + 0x20, 0xc1, 0xc9, 0xca, 0xd0, 0xf2, 0xf0, 0xe6, 0x29, 0x7f, 0xaa, 0x20, 0xb1, 0xc9, 0x91, 0x44, + 0x20, 0xba, 0xc9, 0x20, 0xc1, 0xc9, 0xca, 0xd0, 0xf5, 0xf0, 0xd3, 0xb1, 0x4a, 0xe6, 0x4a, 0xd0, + 0x02, 0xe6, 0x4b, 0x60, 0xe6, 0x44, 0xd0, 0x02, 0xe6, 0x45, 0x60, 0x48, 0xe6, 0x77, 0xd0, 0x0d, + 0x18, 0xa9, 0x40, 0x65, 0x44, 0x85, 0x44, 0xa9, 0x00, 0x65, 0x45, 0x85, 0x45, 0x68, 0x60, 0xa9, + 0x10, 0x85, 0x74, 0xa9, 0x00, 0x85, 0x3c, 0xa9, 0x01, 0x85, 0x3d, 0xa9, 0x60, 0x85, 0x6a, 0xa9, + 0x21, 0x85, 0x6b, 0xa9, 0x68, 0x85, 0x80, 0xa9, 0x21, 0x85, 0x81, 0xa9, 0x0c, 0x85, 0x77, 0xa0, + 0x07, 0xb1, 0x6a, 0x91, 0x3c, 0x88, 0x10, 0xf9, 0xa2, 0x1f, 0xa0, 0x07, 0xb1, 0x80, 0x91, 0x6a, + 0x88, 0x10, 0xf9, 0x18, 0xa5, 0x80, 0x69, 0x08, 0x85, 0x80, 0x90, 0x02, 0xe6, 0x81, 0x18, 0xa5, + 0x6a, 0x69, 0x08, 0x85, 0x6a, 0x90, 0x02, 0xe6, 0x6b, 0xca, 0xd0, 0xde, 0xa0, 0x07, 0xb1, 0x3c, + 0x91, 0x6a, 0x88, 0x10, 0xf9, 0x18, 0xa5, 0x80, 0x69, 0x48, 0x85, 0x80, 0x90, 0x02, 0xe6, 0x81, + 0x18, 0xa5, 0x6a, 0x69, 0x48, 0x85, 0x6a, 0x90, 0x02, 0xe6, 0x6b, 0xc6, 0x77, 0xd0, 0xb0, 0xc6, + 0x74, 0xd0, 0x98, 0x4c, 0x15, 0xc1, 0xad, 0x80, 0xca, 0xd0, 0x10, 0xa0, 0x3f, 0xb9, 0x8d, 0xc5, + 0x99, 0x00, 0x08, 0x88, 0x10, 0xf7, 0x8c, 0x80, 0xca, 0x30, 0x19, 0xa9, 0x00, 0xa0, 0x3f, 0x99, + 0x00, 0x08, 0x88, 0x10, 0xfa, 0xa0, 0x12, 0xb9, 0x7a, 0xc5, 0x99, 0x00, 0x08, 0x88, 0x10, 0xf7, + 0xc8, 0x8c, 0x80, 0xca, 0x4c, 0x15, 0xc1, 0xbf, 0x04, 0x03, 0xbd, 0xc0, 0x91, 0x8d, 0xc1, 0x11, + 0x98, 0xc1, 0x9d, 0xa6, 0xc1, 0x1d, 0xb1, 0xc1, 0x85, 0xc6, 0xc1, 0x86, 0xca, 0xc1, 0x87, 0xce, + 0xc1, 0x88, 0xd2, 0xc1, 0x4f, 0xe8, 0xc1, 0x31, 0xf8, 0xc1, 0x32, 0x07, 0xc2, 0x33, 0x2a, 0xc2, + 0x34, 0x44, 0xc2, 0x01, 0xad, 0xc7, 0x04, 0x5f, 0xc9, 0x0d, 0xd5, 0xc9, 0x13, 0x26, 0xc8, 0x20, + 0x53, 0xc2, 0x52, 0xa7, 0xc4, 0x5e, 0x9f, 0xc1, 0x5f, 0xb8, 0xc1, 0x53, 0x4c, 0xca, 0x00, 0xa7, + 0xe6, 0x66, 0x2f, 0xa7, 0xe6, 0x66, 0x2f, 0xa7, 0x66, 0x26, 0x25, 0xaf, 0x66, 0x26, 0x25, 0xaf, + 0x66, 0x26, 0x25, 0xaf, 0x66, 0x26, 0x25, 0xaf, 0xe6, 0x66, 0x2f, 0xa7, 0xe6, 0x66, 0x2f, 0xa7, + 0xe6, 0x66, 0x2f, 0xa7, 0xe6, 0x66, 0x2f, 0xa7, 0x66, 0x26, 0x25, 0xaf, 0x66, 0x26, 0x25, 0xaf, + 0x66, 0x26, 0x25, 0xaf, 0x66, 0x26, 0x25, 0xaf, 0x44, 0x4e, 0xfb, 0x4a, 0x86, 0x4e, 0x4e, 0x54, + 0x48, 0x4c, 0x54, 0xfe, 0x4a, 0x86, 0x4e, 0x4e, 0x54, 0x48, 0x52, 0x54, 0x01, 0x4b, 0x86, 0x54, + 0x4e, 0x54, 0x48, 0x55, 0x50, 0x04, 0x4b, 0x86, 0x54, 0x4e, 0x54, 0x48, 0x44, 0x4e, 0x07, 0x4b, + 0x86, 0x54, 0x4e, 0x54, 0x48, 0x4c, 0x54, 0x0a, 0x4b, 0x86, 0x54, 0x4e, 0x54, 0x48, 0x52, 0x54, + 0x0d, 0x4b, 0x88, 0x52, 0x45, 0x4f, 0x52, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x4b, 0x86, 0x42, 0x53, + 0x48, 0x49, 0x55, 0x31, 0x13, 0x4b, 0x86, 0x42, 0x53, 0x48, 0x49, 0x55, 0x32, 0x14, 0x4b, 0x86, + 0x42, 0x53, 0x48, 0x49, 0x55, 0x33, 0x15, 0x4b, 0x86, 0x42, 0x53, 0x48, 0x58, 0x50, 0x31, 0x16, + 0x4b, 0x86, 0x42, 0x53, 0x48, 0x58, 0x50, 0x32, 0x17, 0x4b, 0x86, 0x42, 0x53, 0x48, 0x58, 0x50, + 0x33, 0x18, 0x4b, 0x86, 0x42, 0x53, 0x48, 0x59, 0x50, 0x31, 0x19, 0x4b, 0x86, 0x42, 0x53, 0x48, + 0x59, 0x50, 0x32, 0x1a, 0x4b, 0x86, 0x42, 0x53, 0x48, 0x59, 0x50, 0x33, 0x1b, 0x4b, 0x87, 0x4e, + 0x5a, 0x50, 0x5a, 0x45, 0x4e, 0x44, 0x1c, 0x4b, 0x85, 0x50, 0x4c, 0x4f, 0x46, 0x53, 0x1c, 0x4b, + 0x86, 0x50, 0x4c, 0x54, 0x42, 0x4c, 0x4c, 0x1f, 0x4b, 0x86, 0x50, 0x4c, 0x54, 0x42, 0x4c, 0x48, + 0x22, 0x4b, 0x86, 0x50, 0x4c, 0x4f, 0x46, 0x53, 0x54, 0x25, 0x4b, 0x86, 0x50, 0x4c, 0x41, 0x4e, + 0x54, 0x42, 0x2a, 0x4b, 0x87, 0x50, 0x4c, 0x45, 0x4f, 0x52, 0x54, 0x42, 0x2f, 0x4b, 0x84, 0x49, + 0x4d, 0x47, 0x4c, 0x34, 0x4b, 0x84, 0x49, 0x4d, 0x47, 0x48, 0x06, 0x4c, 0x83, 0x4e, 0x4f, 0x42, + 0xd8, 0x4c, 0x85, 0x50, 0x4c, 0x43, 0x4c, 0x52, 0xaa, 0x4d, 0x86, 0x50, 0x4c, 0x53, 0x49, 0x5a, + 0x45, 0x36, 0x4e, 0x88, 0x41, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x31, 0x31, 0x08, 0x4f, 0x88, 0x41, + 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x32, 0x31, 0x14, 0x4f, 0x88, 0x41, 0x44, 0x4f, 0x57, 0x4e, 0x52, + 0x31, 0x31, 0x29, 0x4f, 0x88, 0x41, 0x44, 0x4f, 0x57, 0x4e, 0x52, 0x32, 0x31, 0x35, 0x4f, 0x88, + 0x41, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x31, 0x32, 0x4a, 0x4f, 0x08, 0x41, 0x44, 0x57, 0x4f, 0x4e, + 0x4c, 0x32, 0x32, 0x5f, 0x4f, 0x88, 0x41, 0x44, 0x4f, 0x57, 0x4e, 0x52, 0x31, 0x32, 0x89, 0x4f, + 0x88, 0x41, 0x44, 0x4f, 0x57, 0x4e, 0x52, 0x32, 0x32, 0x9e, 0x4f, 0x87, 0x42, 0x44, 0x55, 0x43, + 0x4b, 0x52, 0x31, 0xc8, 0x4f, 0x87, 0x42, 0x44, 0x55, 0x43, 0x4b, 0x52, 0x32, 0xdd, 0x4f, 0x87, + 0x42, 0x44, 0x55, 0x43, 0x4b, 0x4c, 0x31, 0x07, 0x50, 0x87, 0x42, 0x44, 0x55, 0x43, 0x4b, 0x4c, + 0x32, 0x1c, 0x50, 0x88, 0x41, 0x4c, 0x45, 0x41, 0x50, 0x4c, 0x31, 0x31, 0x46, 0x50, 0x88, 0x41, + 0x4c, 0x45, 0x41, 0x50, 0x4c, 0x31, 0x32, 0x52, 0x50, 0x88, 0x41, 0x4c, 0x45, 0x41, 0x50, 0x52, + 0x31, 0x31, 0x67, 0x50, 0x88, 0x41, 0x4c, 0x45, 0x41, 0x50, 0x4c, 0x32, 0x31, 0x73, 0x50, 0x88, + 0x41, 0x4c, 0x45, 0x41, 0x50, 0x52, 0x32, 0x31, 0x7f, 0x50, 0x88, 0x41, 0x4c, 0x45, 0x41, 0x50, + 0x52, 0x31, 0x32, 0x8b, 0x50, 0x88, 0x41, 0x4c, 0x45, 0x41, 0x50, 0x4c, 0x32, 0x32, 0xa0, 0x50, + 0x88, 0x41, 0x4c, 0x45, 0x41, 0x50, 0x52, 0x32, 0x32, 0xb5, 0x50, 0x87, 0x41, 0x4a, 0x55, 0x4d, + 0x50, 0x31, 0x31, 0xca, 0x50, 0x87, 0x41, 0x4a, 0x55, 0x4d, 0x50, 0x32, 0x31, 0xd9, 0x50, 0x88, + 0x41, 0x43, 0x4c, 0x49, 0x4d, 0x42, 0x30, 0x31, 0xe5, 0x50, 0x87, 0x41, 0x4a, 0x55, 0x4d, 0x50, + 0x31, 0x32, 0xf1, 0x50, 0x87, 0x41, 0x4a, 0x55, 0x4d, 0x50, 0x32, 0x32, 0x06, 0x51, 0x88, 0x41, + 0x43, 0x4c, 0x49, 0x4d, 0x42, 0x30, 0x32, 0x1b, 0x51, 0x88, 0x41, 0x4b, 0x49, 0x43, 0x4b, 0x52, + 0x32, 0x31, 0x30, 0x51, 0x88, 0x41, 0x4b, 0x49, 0x43, 0x4b, 0x52, 0x32, 0x32, 0x3c, 0x51, 0x88, + 0x41, 0x4b, 0x49, 0x43, 0x4b, 0x52, 0x31, 0x32, 0x60, 0x51, 0x88, 0x41, 0x4b, 0x49, 0x43, 0x4b, + 0x4c, 0x31, 0x32, 0x75, 0x51, 0x88, 0x41, 0x4b, 0x49, 0x43, 0x4b, 0x4c, 0x32, 0x32, 0x8a, 0x51, + 0x88, 0x41, 0x4b, 0x49, 0x43, 0x4b, 0x52, 0x31, 0x31, 0xae, 0x51, 0x88, 0x41, 0x4b, 0x49, 0x43, + 0x4b, 0x4c, 0x31, 0x31, 0xbd, 0x51, 0x88, 0x41, 0x4b, 0x49, 0x43, 0x4b, 0x4c, 0x32, 0x31, 0xcc, + 0x51, 0x87, 0x41, 0x53, 0x54, 0x4f, 0x50, 0x4c, 0x31, 0xd8, 0x51, 0x87, 0x41, 0x53, 0x54, 0x4f, + 0x50, 0x52, 0x31, 0xe4, 0x51, 0x87, 0x41, 0x53, 0x54, 0x4f, 0x50, 0x4c, 0x32, 0xf0, 0x51, 0x87, + 0x41, 0x53, 0x54, 0x4f, 0x50, 0x52, 0x32, 0x05, 0x52, 0x87, 0x41, 0x52, 0x55, 0x4e, 0x4c, 0x31, + 0x31, 0x1a, 0x52, 0x87, 0x41, 0x52, 0x55, 0x4e, 0x4c, 0x32, 0x31, 0x28, 0x52, 0x87, 0x41, 0x52, + 0x55, 0x4e, 0x52, 0x31, 0x31, 0x36, 0x52, 0x87, 0x41, 0x52, 0x55, 0x4e, 0x52, 0x32, 0x31, 0x44, + 0x52, 0x87, 0x41, 0x52, 0x55, 0x4e, 0x4c, 0x31, 0x32, 0x52, 0x52, 0x87, 0x41, 0x52, 0x55, 0x4e, + 0x4c, 0x32, 0x32, 0x69, 0x52, 0x87, 0x41, 0x52, 0x55, 0x4e, 0x52, 0x31, 0x32, 0x80, 0x52, 0x87, + 0x41, 0x52, 0x55, 0x4e, 0x52, 0x32, 0x32, 0x97, 0x52, 0x88, 0x59, 0x4b, 0x49, 0x43, 0x4b, 0x4c, + 0x31, 0x31, 0xae, 0x52, 0x88, 0x59, 0x4b, 0x49, 0x43, 0x4b, 0x4c, 0x31, 0x32, 0xc6, 0x52, 0x88, + 0x59, 0x4b, 0x49, 0x43, 0x4b, 0x4c, 0x32, 0x31, 0xd7, 0x52, 0x88, 0x59, 0x4b, 0x49, 0x43, 0x4b, + 0x4c, 0x32, 0x32, 0xe9, 0x52, 0x88, 0x59, 0x4b, 0x49, 0x43, 0x4b, 0x52, 0x31, 0x31, 0xff, 0x52, + 0x88, 0x59, 0x4b, 0x49, 0x43, 0x4b, 0x52, 0x31, 0x32, 0x17, 0x53, 0x88, 0x59, 0x4b, 0x49, 0x43, + 0x4b, 0x52, 0x32, 0x31, 0x28, 0x53, 0x88, 0x59, 0x4b, 0x49, 0x43, 0x4b, 0x52, 0x32, 0x32, 0x39, + 0x53, 0x89, 0x41, 0x59, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x31, 0x31, 0x4e, 0x53, 0x89, 0x41, 0x59, + 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x31, 0x32, 0x66, 0x53, 0x89, 0x41, 0x59, 0x44, 0x4f, 0x57, 0x4e, + 0x4c, 0x32, 0x31, 0x7e, 0x53, 0x89, 0x41, 0x59, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x32, 0x32, 0x96, + 0x53, 0x89, 0x41, 0x59, 0x44, 0x4f, 0x57, 0x4e, 0x52, 0x31, 0x31, 0xae, 0x53, 0x89, 0x41, 0x59, + 0x44, 0x4f, 0x57, 0x4e, 0x52, 0x31, 0x32, 0xc6, 0xbf, 0x30, 0xcf, 0x08, 0xff, 0x01, 0xbf, 0x07, + 0x40, 0x40, 0xbf, 0x06, 0xcf, 0x0d, 0xaa, 0xa8, 0x80, 0x00, 0xaa, 0x2a, 0x0a, 0x02, 0xbf, 0x04, + 0xa5, 0x95, 0x95, 0xcf, 0x05, 0x55, 0xbf, 0x03, 0x14, 0x55, 0x55, 0xfe, 0xfa, 0xa8, 0xa0, 0xa0, + 0x80, 0x80, 0xbf, 0x03, 0xcf, 0x05, 0x08, 0x88, 0xa8, 0x59, 0xbf, 0x03, 0xcf, 0x04, 0x55, 0xff, + 0xbf, 0x05, 0x55, 0xaa, 0xff, 0xfa, 0xfa, 0xfb, 0xbf, 0x05, 0xc0, 0xf0, 0xf0, 0x20, 0xa8, 0xfc, + 0xa8, 0x20, 0x03, 0x0f, 0x0f, 0x08, 0x2a, 0x3f, 0x2a, 0x08, 0x80, 0xaa, 0xcf, 0x03, 0x80, 0xaa, + 0xcf, 0x03, 0x82, 0xaa, 0x82, 0x82, 0xaa, 0x82, 0x00, 0x00, 0x02, 0xaa, 0xcf, 0x03, 0x02, 0xaa, + 0x82, 0x82, 0xaa, 0xcf, 0x03, 0x80, 0xaa, 0x55, 0xaa, 0xfc, 0x82, 0xaa, 0x82, 0x82, 0xaa, 0x55, + 0xaa, 0xf3, 0xaa, 0xcf, 0x03, 0x02, 0xaa, 0x55, 0xaa, 0xcf, 0x01, 0xcf, 0xaa, 0xcf, 0x03, 0x80, + 0xaa, 0x88, 0xaa, 0x88, 0x82, 0xaa, 0x82, 0x82, 0xaa, 0x82, 0xaa, 0x82, 0xaa, 0xcf, 0x03, 0x02, + 0xaa, 0x22, 0xaa, 0x22, 0xc0, 0xf0, 0xf0, 0xbf, 0x05, 0x03, 0x0f, 0x0f, 0xbf, 0x05, 0x3f, 0xc0, + 0xfc, 0xc0, 0x3f, 0xc0, 0xfc, 0xc0, 0x3f, 0x03, 0xfc, 0x03, 0x3f, 0x03, 0xfc, 0x03, 0xbf, 0x03, + 0x55, 0x14, 0x55, 0x55, 0x00, 0xcf, 0x03, 0xaa, 0xa5, 0x95, 0x51, 0x01, 0x05, 0xbf, 0x06, 0x11, + 0x15, 0x00, 0x00, 0xa0, 0x50, 0x55, 0x55, 0x0c, 0x0c, 0x00, 0x00, 0x0a, 0x05, 0x55, 0x55, 0x30, + 0x30, 0xf3, 0xcf, 0x01, 0xcf, 0xff, 0xbf, 0x05, 0xfa, 0xfa, 0xfb, 0xff, 0xaa, 0xcf, 0x03, 0x82, + 0xaa, 0x82, 0xaa, 0x96, 0x55, 0x55, 0xfe, 0xfa, 0xbf, 0x06, 0x55, 0xff, 0xaa, 0x02, 0xa8, 0x02, + 0x28, 0xbf, 0x03, 0x3f, 0x03, 0xfc, 0x03, 0x3f, 0x03, 0xfc, 0x00, 0xaa, 0x82, 0xaa, 0x96, 0x55, + 0x55, 0xaa, 0xfc, 0xf3, 0xcf, 0x01, 0xcf, 0xf3, 0x77, 0x55, 0x77, 0x55, 0x11, 0x00, 0x00, 0x01, + 0x14, 0x50, 0x55, 0x50, 0x04, 0xbf, 0x30, 0xcf, 0x08, 0xff, 0x01, 0xbf, 0x07, 0x40, 0x40, 0xbf, + 0x06, 0xcf, 0x0d, 0xaa, 0xa8, 0x80, 0x00, 0xaa, 0x2a, 0x0a, 0x02, 0xbf, 0x04, 0xa5, 0x95, 0x95, + 0xcf, 0x05, 0x55, 0xbf, 0x03, 0x14, 0x55, 0x55, 0xfe, 0xfa, 0xa8, 0xa0, 0xa0, 0x80, 0x80, 0xbf, + 0x03, 0xcf, 0x05, 0x08, 0x88, 0xa8, 0x59, 0xbf, 0x03, 0xcf, 0x04, 0x55, 0xff, 0xbf, 0x05, 0x55, + 0xaa, 0xff, 0xfa, 0xfa, 0xfb, 0xbf, 0x05, 0xc0, 0xf0, 0xf0, 0x20, 0xa8, 0xfc, 0xa8, 0x20, 0x03, + 0x0f, 0x0f, 0x08, 0x2a, 0x3f, 0x2a, 0x08, 0x80, 0xaa, 0xcf, 0x03, 0x80, 0xaa, 0xcf, 0x03, 0x82, + 0xaa, 0x82, 0x82, 0xaa, 0x82, 0x00, 0x00, 0x02, 0xaa, 0xcf, 0x03, 0x02, 0xaa, 0x82, 0x82, 0xaa, + 0xcf, 0x03, 0x80, 0xaa, 0x55, 0xaa, 0xff, 0x82, 0xaa, 0x82, 0x82, 0xaa, 0x55, 0xaa, 0xff, 0xaa, + 0xcf, 0x03, 0x02, 0xaa, 0x55, 0xaa, 0xff, 0xaa, 0xcf, 0x03, 0x80, 0xaa, 0x88, 0xaa, 0x88, 0x82, + 0xaa, 0x82, 0x82, 0xaa, 0x82, 0xaa, 0x82, 0xaa, 0xcf, 0x03, 0x02, 0xaa, 0x22, 0xaa, 0x22, 0xc0, + 0xf0, 0xf0, 0xbf, 0x05, 0x03, 0x0f, 0x0f, 0xbf, 0x05, 0x3f, 0xc0, 0xfc, 0xc0, 0x3f, 0xc0, 0xfc, + 0xc0, 0x3f, 0x03, 0xfc, 0x03, 0x3f, 0x03, 0xfc, 0x03, 0xbf, 0x03, 0x55, 0x14, 0x55, 0x55, 0x00, + 0xcf, 0x03, 0xaa, 0xa5, 0x95, 0x51, 0x01, 0x05, 0xbf, 0x06, 0x11, 0x15, 0x00, 0x00, 0xa0, 0x50, + 0x55, 0x55, 0x0c, 0x0c, 0x00, 0x00, 0x0a, 0x05, 0x55, 0x55, 0x30, 0x30, 0xf3, 0xcf, 0x01, 0xcf, + 0xff, 0xbf, 0x05, 0xfa, 0xfa, 0xfb, 0xff, 0xaa, 0xcf, 0x03, 0x82, 0xaa, 0x82, 0xaa, 0x96, 0x55, + 0x55, 0xfe, 0xfa, 0xbf, 0x06, 0x55, 0xff, 0xaa, 0x02, 0xa8, 0x02, 0x28, 0xbf, 0x03, 0x3f, 0x03, + 0xfc, 0x03, 0x3f, 0x03, 0xfc, 0x00, 0xaa, 0x82, 0xaa, 0x96, 0x55, 0x55, 0xaa, 0xff, 0xf3, 0xcf, + 0x01, 0xcf, 0xf3, 0x77, 0x55, 0x77, 0x55, 0x11, 0x00, 0x00, 0x01, 0x14, 0x50, 0x55, 0x50, 0x04, + 0x00, 0x00, 0x40, 0x14, 0x05, 0x55, 0x05, 0x10, 0xfa, 0xfa, 0xfb, 0x20, 0xa8, 0xfc, 0xa8, 0x20, + 0xf3, 0xcf, 0x01, 0xcf, 0xf3, 0xcf, 0x01, 0xcf, 0xf3, 0xcf, 0x01, 0xcf, 0xf3, 0xcf, 0x01, 0xcf, + 0xaa, 0xa5, 0xcf, 0x04, 0x55, 0x45, 0x05, 0x5a, 0xcf, 0x05, 0x55, 0x54, 0x50, 0xaa, 0xaa, 0x6a, + 0x5a, 0x55, 0x55, 0x54, 0x10, 0xcf, 0x05, 0xaa, 0x2a, 0x02, 0x00, 0x14, 0x04, 0xbf, 0x06, 0xf3, + 0xcf, 0x01, 0xcf, 0xf3, 0xd7, 0x55, 0x55, 0xfe, 0xfa, 0xf3, 0xcf, 0x01, 0xcf, 0xf3, 0xcf, 0x01, + 0xcf, 0xd7, 0x55, 0xaa, 0xff, 0xbf, 0x06, 0x44, 0x54, 0xfa, 0xfa, 0xfb, 0xff, 0xff, 0xcf, 0x01, + 0xcf, 0xf3, 0xcf, 0x01, 0xcf, 0xbf, 0x04, 0x82, 0xaa, 0x82, 0xaa, 0xaa, 0x80, 0x28, 0x80, 0x2a, + 0xbf, 0x06, 0x44, 0x55, 0x44, 0x55, 0x11, 0xcf, 0x08, 0x55, 0x3f, 0x2a, 0xcf, 0x06, 0x08, 0x00, + 0x80, 0x80, 0x28, 0x02, 0x0a, 0x0f, 0x2a, 0xbf, 0x04, 0xc3, 0xaa, 0xbe, 0xaa, 0xbf, 0x03, 0x0a, + 0xa3, 0xba, 0xaa, 0xaa, 0x00, 0x80, 0x80, 0x00, 0xae, 0xcf, 0x03, 0xaa, 0xbf, 0x05, 0xe0, 0xa8, + 0xaa, 0xbb, 0xaa, 0x3f, 0xaa, 0x0a, 0x00, 0x15, 0x02, 0xbb, 0xaa, 0x3f, 0x3f, 0xaa, 0x0a, 0x15, + 0x02, 0xaa, 0xaa, 0xea, 0xaa, 0xab, 0x3f, 0x55, 0xaa, 0xba, 0xba, 0xea, 0xfa, 0xfe, 0xca, 0x55, + 0xcf, 0x05, 0xaa, 0x8f, 0xcf, 0x01, 0xbf, 0x55, 0xcf, 0x05, 0xaa, 0x2a, 0xa8, 0x55, 0xaa, 0xcf, + 0x03, 0x80, 0xbf, 0x03, 0x40, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x02, 0x55, 0xaa, 0xff, 0x02, 0x20, + 0x22, 0x20, 0xaa, 0x55, 0xaa, 0xff, 0xd3, 0xcf, 0x01, 0xcf, 0x30, 0x03, 0xbf, 0x04, 0xcc, 0x7f, + 0xd0, 0xcc, 0x30, 0xbf, 0x03, 0xf3, 0x3c, 0xcf, 0x01, 0xcf, 0x30, 0x3c, 0xcc, 0x00, 0xc0, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x55, 0xaa, 0xff, 0xcf, 0x01, 0xcf, 0x0c, 0x30, 0xbf, 0x07, 0x02, 0x04, + 0x19, 0x04, 0x02, 0xbf, 0x03, 0x4a, 0x04, 0x98, 0x04, 0x4a, 0x00, 0x00, 0x20, 0x80, 0x20, 0x00, + 0x20, 0x80, 0x20, 0x33, 0xcc, 0x30, 0xcc, 0x03, 0xcc, 0x30, 0xcc, 0xbf, 0x05, 0x06, 0x00, 0x06, + 0xbf, 0x05, 0x66, 0x00, 0x66, 0xbf, 0x05, 0x60, 0x00, 0x60, 0x03, 0x03, 0x0c, 0x0c, 0x30, 0x30, + 0xc0, 0xc0, 0xbf, 0x03, 0x05, 0x01, 0x55, 0xa5, 0x50, 0xbf, 0x03, 0x55, 0x41, 0x55, 0x55, 0xbf, + 0x04, 0x50, 0x40, 0x50, 0x50, 0xbf, 0x06, 0x05, 0x0a, 0x05, 0x00, 0x00, 0x20, 0x22, 0x2a, 0x55, + 0xaa, 0x3c, 0x0c, 0x33, 0x03, 0xcc, 0x03, 0x33, 0x0c, 0xc3, 0xcc, 0xff, 0x33, 0xff, 0x3c, 0xff, + 0xf3, 0x3f, 0x30, 0xcc, 0xc0, 0x33, 0xc0, 0xcc, 0x30, 0xc3, 0xbf, 0x03, 0x88, 0xcf, 0x03, 0x44, + 0x55, 0xbf, 0x04, 0xcf, 0x03, 0x44, 0x55, 0xc0, 0xf0, 0xf0, 0x30, 0xfc, 0xa8, 0xfc, 0x30, 0x03, + 0x0f, 0x0f, 0x0c, 0x3f, 0x2a, 0x3f, 0x0c, 0x00, 0x00, 0xcf, 0x03, 0xaa, 0x2a, 0x2a, 0x02, 0x00, + 0x00, 0xcf, 0x03, 0xaa, 0xa8, 0xa8, 0x80, 0x00, 0x00, 0x82, 0xcf, 0x05, 0xaa, 0x00, 0x00, 0x30, + 0x30, 0x33, 0x3f, 0x07, 0x01, 0xe3, 0xff, 0x14, 0x3c, 0xff, 0xff, 0x7d, 0xd7, 0x00, 0x00, 0x0c, + 0x0c, 0xcc, 0xfc, 0xd0, 0x40, 0x30, 0x33, 0x3f, 0x01, 0x17, 0x55, 0x50, 0x00, 0xbe, 0xff, 0xff, + 0xd7, 0xd7, 0x55, 0x69, 0x3c, 0x0c, 0xcc, 0xfc, 0x40, 0xd4, 0x55, 0x05, 0xbf, 0x07, 0x02, 0xbf, + 0x06, 0x20, 0x20, 0x82, 0xbf, 0x06, 0x80, 0x00, 0x20, 0x08, 0x02, 0x00, 0x00, 0x55, 0xaa, 0x3c, + 0x88, 0x88, 0xa4, 0x26, 0x9a, 0x59, 0x9a, 0x3c, 0x20, 0x28, 0x80, 0x00, 0x00, 0x55, 0xaa, 0x3c, + 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x22, 0x20, 0x22, 0x08, 0x08, 0x22, 0xa8, 0x20, 0x20, 0x82, + 0x00, 0x00, 0x20, 0x28, 0x80, 0x80, 0x88, 0x00, 0x08, 0x82, 0x22, 0x0a, 0x00, 0x55, 0xaa, 0x35, + 0x28, 0x20, 0xa4, 0x66, 0x9a, 0x59, 0x6a, 0x88, 0x22, 0x28, 0x80, 0x6a, 0x00, 0x55, 0x6a, 0x94, + 0xbf, 0x05, 0x55, 0xaa, 0xff, 0x03, 0x03, 0x33, 0x33, 0x3f, 0xcf, 0x03, 0x03, 0xc0, 0xc0, 0xcc, + 0xcc, 0xfc, 0xcf, 0x03, 0xc0, 0xbf, 0x08, 0xcf, 0x28, 0xaa, 0xcf, 0x08, 0xff, 0xcf, 0x03, 0x02, + 0xaa, 0xcf, 0x08, 0x02, 0xaa, 0xcf, 0x03, 0x02, 0x80, 0xbf, 0x0a, 0xcf, 0x03, 0x3f, 0xff, 0xcf, + 0x01, 0xbf, 0xbf, 0x03, 0xcf, 0x03, 0xfc, 0xff, 0xfe, 0xbf, 0x06, 0xff, 0xaa, 0x00, 0x41, 0x55, + 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0xaa, 0x69, 0x55, 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0xcf, 0x05, 0x08, + 0x89, 0xa9, 0x59, 0x20, 0x2a, 0xa8, 0x08, 0x08, 0xa8, 0x2a, 0x20, 0x08, 0xa8, 0x2a, 0x20, 0x20, + 0x2a, 0xa8, 0x08, 0xaa, 0x69, 0x55, 0x81, 0x80, 0xaa, 0x28, 0x28, 0x00, 0x00, 0xa0, 0x08, 0x08, + 0x38, 0x28, 0x28, 0x00, 0x00, 0x0a, 0x20, 0x20, 0x2c, 0x28, 0x28, 0xaa, 0x69, 0x55, 0x25, 0x55, + 0x96, 0x5a, 0x5a, 0x20, 0x2a, 0xa8, 0x08, 0x08, 0xa8, 0x29, 0x21, 0x15, 0x98, 0x15, 0x12, 0x55, + 0x48, 0x55, 0x22, 0x55, 0x88, 0x55, 0x21, 0x55, 0x85, 0x56, 0x1a, 0x5a, 0x5a, 0x6a, 0x6a, 0xa8, + 0xa8, 0xa0, 0xaa, 0x25, 0x24, 0x95, 0x91, 0x55, 0x5a, 0xaa, 0xa8, 0x55, 0x89, 0x56, 0x6a, 0xaa, + 0xaa, 0xa0, 0x80, 0x6a, 0xcf, 0x03, 0xaa, 0xcf, 0x04, 0x82, 0xa0, 0x20, 0x2a, 0xa8, 0x08, 0x08, + 0xa8, 0x2a, 0xbf, 0x03, 0x08, 0x08, 0xa8, 0x28, 0x28, 0xbf, 0x03, 0x20, 0x20, 0x2a, 0x28, 0x28, + 0xaa, 0x69, 0x55, 0x89, 0x55, 0x26, 0x54, 0x84, 0xaa, 0x69, 0x55, 0x42, 0x02, 0xaa, 0x28, 0x28, + 0x82, 0x28, 0xbf, 0x06, 0xa5, 0xa5, 0xa9, 0xa9, 0x2a, 0x2a, 0x0a, 0xaa, 0x55, 0x22, 0x55, 0x48, + 0x55, 0x52, 0x95, 0xa4, 0x54, 0x26, 0x54, 0x84, 0x55, 0x21, 0x55, 0x88, 0x08, 0xa8, 0x2a, 0x20, + 0x20, 0x2a, 0x68, 0x48, 0xaa, 0x69, 0x55, 0x62, 0x55, 0x98, 0x15, 0x12, 0x0a, 0x08, 0xa8, 0x2a, + 0x20, 0x20, 0x2a, 0xa8, 0xa9, 0xcf, 0x03, 0xaa, 0xcf, 0x04, 0x82, 0x55, 0x62, 0x95, 0xa9, 0xaa, + 0xaa, 0x0a, 0x02, 0x58, 0x18, 0x56, 0x46, 0x55, 0xa5, 0xaa, 0x2a, 0x20, 0x2a, 0xa8, 0x08, 0x08, + 0x58, 0x5a, 0xa5, 0x02, 0x2b, 0xaf, 0xab, 0xaa, 0xaf, 0x2a, 0x02, 0xc0, 0xfc, 0xaf, 0xff, 0xcf, + 0x01, 0xbf, 0xaf, 0xbc, 0xc0, 0xbf, 0x04, 0x44, 0x55, 0x55, 0xff, 0x08, 0xa8, 0x2a, 0x20, 0x20, + 0x25, 0xa5, 0x5a, 0x00, 0x02, 0xaa, 0x96, 0x95, 0x95, 0xaa, 0x00, 0x2a, 0xa5, 0x65, 0xcf, 0x04, + 0xa5, 0x25, 0xaa, 0x56, 0x56, 0xcf, 0x03, 0x96, 0xaa, 0x98, 0x0a, 0xbf, 0x07, 0xa8, 0x0a, 0xcf, + 0x04, 0x02, 0x00, 0x00, 0xcf, 0x03, 0x25, 0x2a, 0x08, 0xa8, 0x2a, 0x20, 0xa8, 0x60, 0x6a, 0xa2, + 0x22, 0x2a, 0xa8, 0x08, 0xaa, 0x95, 0x95, 0xcf, 0x03, 0x96, 0xaa, 0x26, 0xa8, 0x5a, 0x59, 0xcf, + 0x04, 0x5a, 0x58, 0x00, 0x80, 0xaa, 0x96, 0x56, 0x56, 0xaa, 0x00, 0x2a, 0x09, 0xa9, 0x8a, 0x88, + 0xa8, 0x2a, 0x20, 0xcf, 0x03, 0x58, 0xa8, 0x20, 0x2a, 0xa8, 0x08, 0x2a, 0xa0, 0xcf, 0x04, 0x80, + 0x00, 0x00, 0xa0, 0xbf, 0x07, 0x88, 0xaa, 0x88, 0xaa, 0x88, 0x48, 0x55, 0xff, 0xff, 0x2a, 0xcf, + 0x06, 0x08, 0xaa, 0x69, 0x55, 0x22, 0x55, 0x88, 0x55, 0x22, 0x20, 0x2a, 0xa8, 0x08, 0x08, 0x64, + 0x55, 0xff, 0xfc, 0xfc, 0xcc, 0xcf, 0x04, 0xcf, 0xff, 0xff, 0xc3, 0xff, 0xc3, 0xbf, 0x04, 0x3f, + 0x3f, 0x33, 0xcf, 0x04, 0xf3, 0xff, 0xcf, 0x03, 0x80, 0xaa, 0xcf, 0x04, 0x80, 0x02, 0xbf, 0x07, + 0xcf, 0x04, 0x80, 0xaa, 0xcf, 0x03, 0x80, 0x3c, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0x3c, 0xc3, 0xcf, + 0x05, 0xaa, 0x55, 0xff, 0xff, 0xaa, 0x69, 0x55, 0x58, 0x55, 0x96, 0x95, 0xa5, 0xaa, 0x69, 0x55, + 0x88, 0x55, 0x22, 0x55, 0x88, 0xaa, 0x04, 0xff, 0xbf, 0x05, 0xaa, 0x00, 0xff, 0xbf, 0x05, 0xaa, + 0x04, 0xff, 0x04, 0x04, 0xff, 0xbf, 0x04, 0x55, 0xff, 0xfc, 0xbf, 0x09, 0x55, 0xff, 0x00, 0x44, + 0x55, 0x77, 0xff, 0xcf, 0x03, 0xaa, 0x41, 0x1c, 0xfc, 0x7f, 0x31, 0xd0, 0xc4, 0x13, 0x00, 0x02, + 0xa8, 0x02, 0x2b, 0x02, 0xa8, 0x02, 0x00, 0x02, 0x88, 0x97, 0x75, 0x97, 0x88, 0x02, 0x00, 0x00, + 0x28, 0x80, 0x00, 0x80, 0x28, 0xbf, 0x07, 0x30, 0x01, 0xbf, 0x04, 0x03, 0x40, 0x40, 0x43, 0xbf, + 0x06, 0x13, 0x10, 0x0c, 0x0c, 0x0d, 0x30, 0x34, 0x41, 0x41, 0x3d, 0x44, 0x04, 0x3c, 0x30, 0x74, + 0x74, 0x4c, 0xcc, 0x70, 0x57, 0xdc, 0xd7, 0xd4, 0xdf, 0xd7, 0xd7, 0x30, 0x54, 0xdc, 0x44, 0x41, + 0xf0, 0xd4, 0xd5, 0x75, 0x05, 0x44, 0x30, 0x44, 0x51, 0x1d, 0xc4, 0xcc, 0x0c, 0xfc, 0xff, 0x3f, + 0x10, 0x34, 0x45, 0x82, 0x69, 0x55, 0x55, 0x41, 0xff, 0x3c, 0x3c, 0xc3, 0x30, 0x3f, 0x30, 0xc3, + 0x00, 0xff, 0x00, 0xc3, 0xff, 0x3c, 0xff, 0xc3, 0xff, 0x3c, 0xff, 0xc3, 0x0c, 0xfc, 0x0c, 0xc3, + 0x00, 0xff, 0xbf, 0x04, 0x88, 0x44, 0x55, 0x77, 0xff, 0xbf, 0x04, 0x44, 0x55, 0x77, 0xff, 0x88, + 0x44, 0x55, 0x77, 0xff, 0xbf, 0x04, 0x44, 0x55, 0x77, 0xff, 0xbf, 0x03, 0xdf, 0xdf, 0x4f, 0x1f, + 0xc3, 0x10, 0x41, 0x05, 0xf5, 0xf1, 0xf0, 0xf1, 0xc0, 0x07, 0xd0, 0x01, 0x41, 0x34, 0x3f, 0xfd, + 0x4c, 0x07, 0x13, 0xc4, 0x47, 0x3c, 0x75, 0xc7, 0xc5, 0x75, 0x3c, 0x47, 0xd1, 0x3c, 0x5d, 0x53, + 0xd3, 0x5d, 0x3c, 0xd1, 0xcf, 0x06, 0xff, 0x0f, 0x0f, 0xcf, 0x06, 0xff, 0xf0, 0xf0, 0x3f, 0x33, + 0x33, 0xf3, 0xff, 0xcf, 0x03, 0xaa, 0x00, 0x41, 0x55, 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0xbf, 0x04, + 0x02, 0x03, 0x2c, 0x03, 0x00, 0x00, 0x20, 0x30, 0x30, 0x33, 0x20, 0x33, 0xbf, 0x04, 0x80, 0x00, + 0xe0, 0x00, 0x00, 0x41, 0x55, 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0xf3, 0x3c, 0x55, 0xd7, 0x41, 0xdf, + 0x34, 0x3c, 0x20, 0x41, 0x55, 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0x00, 0x0c, 0xac, 0x00, 0x33, 0xa0, + 0x0c, 0x23, 0x8c, 0xc8, 0x30, 0x30, 0x80, 0x32, 0x20, 0x33, 0x00, 0xc0, 0xc8, 0xf0, 0xc2, 0x0c, + 0xf0, 0x00, 0x00, 0x41, 0x55, 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0xf3, 0x3c, 0x55, 0xd7, 0x41, 0xf7, + 0x14, 0x7d, 0x20, 0x41, 0x55, 0xff, 0xc3, 0xff, 0x3c, 0x3c, 0x00, 0x41, 0x55, 0xff, 0xc3, 0xff, + 0x3c, 0x3c, 0xaa, 0x69, 0x55, 0xcf, 0x05, 0xff, 0xbf, 0x07, 0xaa, 0xbf, 0x09, 0x43, 0xbc, 0x93, + 0xbc, 0x55, 0x6a, 0x40, 0xbf, 0x10, 0xa7, 0xa4, 0xa7, 0xcf, 0x04, 0xa4, 0xa5, 0xf2, 0x0e, 0x32, + 0xc2, 0x02, 0x56, 0xaa, 0x02, 0xbf, 0x08, 0x28, 0x0a, 0x02, 0xbf, 0x07, 0xa0, 0x2a, 0x02, 0x00, + 0x3c, 0xff, 0xbf, 0x03, 0x80, 0xaa, 0x2a, 0x3f, 0xfd, 0xbf, 0x04, 0xaf, 0xcf, 0x01, 0xbf, 0xfd, + 0x5d, 0xbf, 0x04, 0xfa, 0xfe, 0x7f, 0x75, 0xbf, 0x03, 0x02, 0xaa, 0xa8, 0xfc, 0x7f, 0x00, 0x00, + 0x0a, 0xa8, 0x80, 0x00, 0x3c, 0xff, 0x28, 0xa0, 0x80, 0xbf, 0x07, 0xa0, 0x2a, 0x0a, 0x02, 0x3f, + 0xff, 0xff, 0xc4, 0xd5, 0x57, 0x55, 0x11, 0x55, 0x15, 0xff, 0xf1, 0xd5, 0xf5, 0xd5, 0x04, 0x55, + 0x55, 0x8f, 0xb0, 0x8c, 0x83, 0x80, 0x00, 0x0a, 0xa0, 0x00, 0xc0, 0x3e, 0xc2, 0x3e, 0x02, 0xa8, + 0x00, 0xa0, 0xa0, 0xac, 0x80, 0x80, 0xbc, 0xa0, 0x90, 0x54, 0xa0, 0x20, 0xaa, 0x00, 0x00, 0x02, + 0xaa, 0x0a, 0x08, 0x20, 0x02, 0xa8, 0x00, 0x80, 0xaa, 0x01, 0x05, 0x15, 0x11, 0x05, 0x05, 0x01, + 0x00, 0x15, 0x10, 0x46, 0x46, 0x66, 0x56, 0x44, 0x04, 0x40, 0x50, 0x50, 0x5c, 0x74, 0x75, 0xd7, + 0xd7, 0xbf, 0x03, 0x02, 0xaa, 0x2a, 0x7e, 0x5e, 0xbf, 0x03, 0xab, 0xaa, 0xaa, 0xaf, 0xbc, 0xa9, + 0x88, 0x82, 0xaa, 0x00, 0x03, 0x3c, 0xf2, 0xff, 0xbc, 0x6d, 0x55, 0xd5, 0xf5, 0xc5, 0xc1, 0xff, + 0x13, 0x57, 0x5f, 0x57, 0x40, 0x04, 0x15, 0xff, 0xc4, 0xd5, 0xf5, 0xd5, 0x01, 0x10, 0x54, 0xff, + 0x3e, 0x79, 0x55, 0x57, 0x5f, 0x53, 0x43, 0x40, 0x0f, 0x00, 0xaa, 0x00, 0xc0, 0x3c, 0x8f, 0xbf, + 0x03, 0xea, 0xaa, 0xaa, 0xfa, 0x3e, 0xbf, 0x03, 0x80, 0xaa, 0xa8, 0xbd, 0xb5, 0x01, 0x05, 0x05, + 0x35, 0x1d, 0x5d, 0x54, 0x57, 0x55, 0x54, 0xc5, 0xc1, 0xc5, 0xc5, 0xc1, 0xd0, 0x40, 0x50, 0xcf, + 0x03, 0x54, 0x50, 0x40, 0x08, 0xbf, 0x06, 0x20, 0xc0, 0x08, 0x02, 0xbf, 0x04, 0x3c, 0x3c, 0xff, + 0x4f, 0x57, 0x5f, 0x57, 0x10, 0x55, 0x55, 0xff, 0x13, 0x57, 0xd5, 0x55, 0x44, 0x55, 0x55, 0xbf, + 0x05, 0xa8, 0x00, 0x00, 0x04, 0x24, 0xa4, 0xa7, 0xa4, 0xa6, 0xa4, 0xa7, 0x5f, 0xff, 0x0c, 0xc0, + 0xf3, 0xbc, 0xff, 0xcf, 0x01, 0xbf, 0x6a, 0x6a, 0x6b, 0xff, 0x03, 0xfc, 0x0f, 0x0f, 0xaa, 0xaa, + 0xea, 0xfc, 0xff, 0xff, 0x3f, 0x3f, 0xc1, 0x3c, 0x00, 0xaa, 0x00, 0x03, 0x3c, 0xf2, 0x6a, 0x22, + 0x82, 0xaa, 0x00, 0xc0, 0x3c, 0x8f, 0xa8, 0x20, 0x08, 0x2a, 0x00, 0x00, 0x02, 0xaa, 0x0f, 0x13, + 0x57, 0x5f, 0x57, 0x40, 0x00, 0x04, 0x0c, 0x30, 0x00, 0xaa, 0x00, 0x00, 0x02, 0xaa, 0xca, 0xf2, + 0x2a, 0x83, 0x3f, 0x3f, 0xff, 0xff, 0xaa, 0xaa, 0xaf, 0xfc, 0xf3, 0xcf, 0x02, 0xcf, 0xf0, 0xa9, + 0xad, 0xfd, 0x0c, 0xf3, 0x0c, 0x0c, 0xfc, 0x55, 0x56, 0x54, 0x57, 0xda, 0xfb, 0xfa, 0xfe, 0xd0, + 0xd8, 0xd8, 0xcf, 0x05, 0xda, 0x02, 0x2b, 0x02, 0x08, 0xbf, 0x04, 0xf8, 0xa0, 0xf8, 0xc0, 0x20, + 0xbf, 0x03, 0xcf, 0x08, 0x90, 0xf0, 0xc4, 0xd5, 0xf5, 0xd5, 0x01, 0x00, 0x10, 0x55, 0x2a, 0x80, + 0xaa, 0x00, 0x03, 0x3c, 0xf2, 0xc0, 0xc0, 0x00, 0x00, 0xff, 0xa8, 0xa0, 0x01, 0xcf, 0x03, 0xa4, + 0xa8, 0xa7, 0xa6, 0xa6, 0xa9, 0xaf, 0x2a, 0x0a, 0x02, 0xff, 0xab, 0xbc, 0xc2, 0xfc, 0x03, 0xf8, + 0xa0, 0x00, 0x00, 0x03, 0x0f, 0xf0, 0x00, 0x05, 0x55, 0x35, 0xf5, 0xfd, 0xff, 0x02, 0x50, 0x50, + 0x40, 0x50, 0x50, 0x54, 0x5f, 0xaa, 0xaa, 0x2a, 0x2a, 0x0a, 0xbf, 0x03, 0xf2, 0xbc, 0xab, 0xaa, + 0xaa, 0x0a, 0x00, 0x00, 0x8f, 0x3e, 0xea, 0xaa, 0xaa, 0xa8, 0x00, 0x00, 0xaa, 0xaa, 0xa8, 0xa8, + 0xa0, 0x00, 0x00, 0x03, 0x40, 0x15, 0x05, 0x01, 0x05, 0x05, 0x15, 0xf7, 0x0f, 0x40, 0x54, 0x55, + 0x7d, 0x7f, 0xff, 0xff, 0x03, 0xfc, 0x00, 0x2a, 0x08, 0x00, 0x02, 0xca, 0xfa, 0xe8, 0xac, 0x83, + 0x0a, 0xea, 0x3e, 0x83, 0xda, 0x1a, 0xda, 0xcf, 0x04, 0x1a, 0x6a, 0xbf, 0x04, 0xff, 0xaa, 0xaa, + 0x40, 0x55, 0xa8, 0x82, 0xaa, 0x80, 0xc0, 0x3c, 0x8f, 0xcf, 0x03, 0x90, 0xd3, 0xff, 0xff, 0xfa, + 0x00, 0x0a, 0xcf, 0x04, 0xaa, 0xaf, 0xf0, 0x0a, 0xff, 0xff, 0x0f, 0x03, 0x80, 0xa0, 0xa8, 0xa8, + 0xff, 0xf0, 0xfd, 0x75, 0x55, 0x55, 0x54, 0x05, 0x0f, 0x4f, 0x57, 0x5f, 0x57, 0x04, 0x00, 0x10, + 0x2a, 0x03, 0xaf, 0xfa, 0xa0, 0x0a, 0xaa, 0xaa, 0xcf, 0x01, 0xbf, 0xff, 0xc0, 0x00, 0xcf, 0x04, + 0xaa, 0xff, 0xfc, 0x00, 0x0a, 0xcf, 0x04, 0xaa, 0xff, 0x02, 0x00, 0xcf, 0x05, 0xaa, 0xbf, 0x04, + 0xab, 0xaa, 0xff, 0xf5, 0xbf, 0x06, 0x44, 0x55, 0xaa, 0x00, 0xcf, 0x04, 0xaa, 0x66, 0x55, 0xaa, + 0x00, 0xcf, 0x06, 0xaa, 0xa0, 0xcf, 0x04, 0xaa, 0xfa, 0x0f, 0xa0, 0x0a, 0xaa, 0xaa, 0xaf, 0xf0, + 0x0a, 0xaa, 0xaa, 0xa0, 0xfa, 0x0f, 0xa0, 0xcf, 0x04, 0xaa, 0x0f, 0x13, 0x57, 0xd5, 0x55, 0x04, + 0x01, 0x41, 0xf0, 0xc0, 0x00, 0x00, 0x3f, 0xa8, 0xa0, 0x01, 0xca, 0xfa, 0xfe, 0xfe, 0xfa, 0x3a, + 0xba, 0xaa, 0xff, 0xcb, 0xe5, 0xd5, 0x25, 0xe9, 0xaf, 0xec, 0xff, 0x83, 0x00, 0xa0, 0xcf, 0x04, + 0xaa, 0x05, 0xf1, 0x00, 0xaa, 0x00, 0x03, 0x3c, 0xf2, 0x55, 0x6a, 0x22, 0xaa, 0x02, 0xc0, 0x3c, + 0x8f, 0x00, 0x08, 0x0a, 0x02, 0xbf, 0x03, 0x03, 0xbf, 0x03, 0xa0, 0xaa, 0x2a, 0x0f, 0x37, 0xbf, + 0x04, 0xcf, 0x01, 0xbf, 0xff, 0x5f, 0x5d, 0xbf, 0x04, 0xea, 0xaa, 0xff, 0x5f, 0x00, 0x00, 0x0a, + 0xa8, 0xa0, 0x80, 0xfc, 0xff, 0x20, 0x80, 0xbf, 0x04, 0x3c, 0xfc, 0x0f, 0x03, 0x00, 0x03, 0x0c, + 0x0f, 0xfb, 0x8b, 0xf0, 0xc4, 0x15, 0x57, 0x55, 0x10, 0x40, 0x41, 0xf0, 0xf1, 0xd5, 0xf5, 0xd5, + 0x10, 0x00, 0x04, 0xff, 0x0f, 0x7f, 0x5d, 0x55, 0x55, 0x15, 0x54, 0xff, 0xeb, 0x5b, 0x57, 0x58, + 0x6b, 0xfa, 0x3b, 0xc0, 0x30, 0x0c, 0x02, 0xa8, 0x00, 0x80, 0xaa, 0xaf, 0xbc, 0x0f, 0x03, 0xaa, + 0xf0, 0xfe, 0xf2, 0x15, 0x0a, 0x08, 0x22, 0xa8, 0x00, 0x80, 0xaa, 0x55, 0xa9, 0x88, 0xaa, 0x80, + 0x03, 0x3c, 0xf2, 0x50, 0x43, 0x0c, 0xaa, 0x00, 0xc0, 0x3c, 0x8f, 0xcf, 0x01, 0xcf, 0x0f, 0x03, + 0xaa, 0x00, 0x00, 0x02, 0xaa, 0x55, 0xaa, 0x22, 0xaa, 0x00, 0x03, 0x3c, 0xf2, 0xbf, 0x04, 0xfe, + 0xff, 0xf5, 0x75, 0xbf, 0x03, 0x0a, 0xaa, 0xa8, 0xf0, 0xdc, 0x00, 0x20, 0xa0, 0x80, 0xbf, 0x03, + 0xc0, 0x55, 0xa8, 0x20, 0xaa, 0x00, 0xc0, 0x3c, 0x8f, 0xa0, 0xaa, 0xaa, 0xfa, 0x0f, 0xa0, 0xaa, + 0xaa, 0x0a, 0xaf, 0xf0, 0x0a, 0xcf, 0x04, 0xaa, 0x0f, 0x4f, 0x57, 0x5f, 0x57, 0x04, 0x00, 0x10, + 0xbf, 0x09, 0x43, 0xbc, 0x93, 0xbc, 0x55, 0x6a, 0x40, 0xbf, 0x10, 0xa7, 0xa4, 0xa7, 0xcf, 0x04, + 0xa4, 0xa5, 0xf2, 0x0e, 0x32, 0xc2, 0x02, 0x56, 0xaa, 0x02, 0xbf, 0x08, 0x3c, 0x0f, 0x03, 0xbf, + 0x07, 0xf0, 0x3f, 0x03, 0x00, 0x3c, 0xff, 0xbf, 0x03, 0xc0, 0xff, 0x3f, 0x3f, 0xff, 0xbf, 0x04, + 0xcf, 0x04, 0xff, 0xbf, 0x04, 0xcf, 0x04, 0xff, 0xbf, 0x03, 0x03, 0xff, 0xfc, 0xfc, 0xff, 0x00, + 0x00, 0x0f, 0xfc, 0xc0, 0x00, 0x3c, 0xff, 0x3c, 0xf0, 0xc0, 0xbf, 0x07, 0xf0, 0x3f, 0x0f, 0x0f, + 0x3f, 0xff, 0x0c, 0xcf, 0x06, 0x0f, 0x3f, 0xff, 0xff, 0x3f, 0x0f, 0x03, 0x83, 0xa3, 0xa2, 0x8f, + 0xb0, 0x8c, 0x83, 0x80, 0x00, 0x0a, 0xa0, 0x00, 0xc0, 0x3e, 0xc2, 0x3e, 0x02, 0xa8, 0x00, 0xa0, + 0xa0, 0xac, 0x80, 0x80, 0xbc, 0xa0, 0x90, 0xfc, 0xf0, 0x30, 0xff, 0x00, 0x00, 0x03, 0xff, 0xea, + 0xcf, 0x03, 0xfa, 0xea, 0xcf, 0x03, 0xaa, 0x32, 0x0e, 0xce, 0x32, 0x0f, 0xcf, 0x01, 0xcf, 0x3f, + 0x0f, 0xa4, 0xa4, 0xcf, 0x06, 0xa7, 0x0c, 0x3c, 0xfc, 0xcf, 0x04, 0xf0, 0xfc, 0xbf, 0x03, 0x03, + 0xff, 0x3f, 0xff, 0xff, 0xbf, 0x03, 0xcf, 0x04, 0xff, 0xfc, 0x02, 0xf2, 0x0e, 0x0e, 0xf2, 0x0f, + 0x0f, 0xff, 0xff, 0xfc, 0xcf, 0x04, 0xff, 0xcf, 0x01, 0xcf, 0xc3, 0x2a, 0x02, 0xaa, 0xaa, 0xab, + 0xaf, 0xae, 0xaa, 0xcf, 0x02, 0xbf, 0xff, 0xff, 0xf0, 0x80, 0x02, 0x2a, 0xff, 0x3f, 0xcf, 0x04, + 0xff, 0xf3, 0xc3, 0x80, 0x8f, 0xb0, 0xb0, 0x8f, 0xf0, 0xf0, 0xff, 0xbf, 0x03, 0xcf, 0x04, 0xff, + 0x3f, 0xbf, 0x03, 0xc0, 0xff, 0xfc, 0xff, 0xff, 0x30, 0x3c, 0x3f, 0xcf, 0x04, 0x0f, 0x3f, 0x1a, + 0x1a, 0xcf, 0x06, 0xda, 0x8c, 0xb0, 0xb3, 0x8c, 0xf0, 0xf3, 0xfc, 0x0c, 0xbf, 0x06, 0x30, 0xc0, + 0x0c, 0x03, 0xbf, 0x04, 0x3c, 0x3c, 0xff, 0x3f, 0xcf, 0x03, 0xff, 0x30, 0xcf, 0x03, 0xff, 0xc3, + 0xcf, 0x03, 0xff, 0xcc, 0xff, 0xff, 0xbf, 0x05, 0xfc, 0x00, 0x00, 0xa7, 0xa7, 0xcf, 0x05, 0xa4, + 0xa7, 0xcf, 0x04, 0xff, 0x3f, 0xff, 0x0c, 0xc0, 0xcf, 0x04, 0xff, 0x03, 0xfc, 0x0f, 0x0f, 0xcf, + 0x03, 0xff, 0xfc, 0xff, 0xff, 0x3f, 0x3f, 0xc3, 0x3c, 0x00, 0xff, 0x00, 0x03, 0x3c, 0xf3, 0xff, + 0x33, 0xc3, 0xff, 0x00, 0xc0, 0x3c, 0xcf, 0x01, 0xcf, 0xfc, 0x30, 0x0c, 0xff, 0x00, 0x00, 0x03, + 0xff, 0x0f, 0x33, 0xcf, 0x03, 0xff, 0xc0, 0x00, 0x0c, 0x0c, 0x30, 0x00, 0xff, 0x00, 0x00, 0x03, + 0xff, 0xcf, 0x01, 0xcf, 0xf3, 0x3f, 0xc3, 0x3f, 0x3f, 0xcf, 0x05, 0xff, 0xfc, 0xf3, 0xcf, 0x02, + 0xcf, 0xf0, 0xcf, 0x03, 0xff, 0x0c, 0xf3, 0x0c, 0x0c, 0xfc, 0xcf, 0x04, 0xff, 0xfc, 0xff, 0x30, + 0x03, 0xda, 0xda, 0xcf, 0x05, 0x1a, 0xda, 0x03, 0x3f, 0x03, 0x0c, 0xbf, 0x04, 0xfc, 0xf0, 0xfc, + 0xc0, 0x30, 0xbf, 0x03, 0xcf, 0x08, 0x90, 0xf0, 0xcc, 0xcf, 0x03, 0xff, 0x03, 0x00, 0x30, 0xff, + 0x3f, 0xc0, 0xff, 0x00, 0x03, 0x3c, 0xf3, 0xc0, 0xc0, 0x00, 0x00, 0xff, 0xfc, 0xf0, 0x03, 0xcf, + 0x03, 0xa4, 0xa8, 0xa7, 0xa6, 0xa6, 0xa9, 0xff, 0x3f, 0x0f, 0x03, 0xff, 0xff, 0xfc, 0xc3, 0xfc, + 0x03, 0xfc, 0xf0, 0x00, 0x00, 0x03, 0x0f, 0xfc, 0x00, 0x0f, 0xcf, 0x05, 0xff, 0x03, 0xf0, 0xf0, + 0xc0, 0xf0, 0xf0, 0xfc, 0xcf, 0x03, 0xff, 0x3f, 0x3f, 0x0f, 0xbf, 0x03, 0xf3, 0xfc, 0xcf, 0x03, + 0xff, 0x0f, 0x00, 0x00, 0xcf, 0x01, 0xcf, 0x3f, 0xcf, 0x03, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, + 0xfc, 0xfc, 0xf0, 0x00, 0x00, 0x03, 0xc0, 0x3f, 0x0f, 0x03, 0x0f, 0x0f, 0x3f, 0xff, 0x0f, 0xc0, + 0xfc, 0xcf, 0x05, 0xff, 0x03, 0xfc, 0x00, 0x3f, 0x0c, 0x00, 0x03, 0xcf, 0x01, 0xcf, 0xff, 0xfc, + 0xfc, 0xc3, 0x0f, 0xff, 0x3f, 0xc3, 0xda, 0x1a, 0xda, 0xcf, 0x05, 0x1a, 0xbf, 0x04, 0xff, 0xaa, + 0xaa, 0x40, 0xff, 0xfc, 0xc3, 0xff, 0xc0, 0xc0, 0x3c, 0xcf, 0x01, 0xcf, 0xcf, 0x03, 0x90, 0xd3, + 0xff, 0xff, 0xfa, 0x00, 0x0a, 0xcf, 0x04, 0xaa, 0xaf, 0xf0, 0x0a, 0xff, 0xff, 0x0f, 0x03, 0x80, + 0xa0, 0xa8, 0xa8, 0xff, 0xf0, 0xcf, 0x04, 0xff, 0xfc, 0x0f, 0x0f, 0xcf, 0x01, 0xcf, 0xcf, 0x03, + 0xff, 0x0c, 0x00, 0x30, 0x2a, 0x03, 0xaf, 0xfa, 0xa0, 0x0a, 0xaa, 0xaa, 0xcf, 0x01, 0xbf, 0xff, + 0xc0, 0x00, 0xcf, 0x04, 0xaa, 0xff, 0xfc, 0x00, 0x0a, 0xcf, 0x04, 0xaa, 0xff, 0x02, 0x00, 0xcf, + 0x05, 0xaa, 0xbf, 0x04, 0xcf, 0x04, 0xff, 0xbf, 0x06, 0x44, 0x55, 0xaa, 0x00, 0xcf, 0x04, 0xaa, + 0x66, 0x55, 0xaa, 0x00, 0xcf, 0x06, 0xaa, 0xa0, 0xcf, 0x04, 0xaa, 0xfa, 0x0f, 0xa0, 0x0a, 0xaa, + 0xaa, 0xaf, 0xf0, 0x0a, 0xaa, 0xaa, 0xa0, 0xfa, 0x0f, 0xa0, 0xcf, 0x04, 0xaa, 0x0f, 0x33, 0xcf, + 0x03, 0xff, 0x0c, 0x03, 0xc3, 0xf0, 0xc0, 0x00, 0x00, 0x3f, 0xfc, 0xf0, 0x03, 0xfa, 0xfa, 0xfe, + 0xfe, 0xfa, 0x3a, 0xba, 0xaa, 0xff, 0xcf, 0x01, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xfc, 0xff, + 0x83, 0x00, 0xa0, 0xcf, 0x04, 0xaa, 0x0f, 0xf3, 0x00, 0xff, 0x00, 0x03, 0x3c, 0xf3, 0xff, 0xff, + 0x33, 0xff, 0x03, 0xc0, 0x3c, 0xcf, 0x01, 0xcf, 0x00, 0x0c, 0x0f, 0x03, 0xbf, 0x03, 0x03, 0xbf, + 0x03, 0xf0, 0xff, 0x3f, 0x0f, 0x3f, 0xbf, 0x04, 0xcf, 0x04, 0xff, 0xbf, 0x04, 0xcf, 0x04, 0xff, + 0x00, 0x00, 0x0f, 0xfc, 0xf0, 0xc0, 0xfc, 0xff, 0x30, 0xc0, 0xbf, 0x04, 0x3c, 0xfc, 0x0f, 0x03, + 0x00, 0x03, 0x0c, 0x0f, 0xff, 0xcf, 0x01, 0xcf, 0xf0, 0xcc, 0xcf, 0x03, 0xff, 0x30, 0xc0, 0xc3, + 0xf0, 0xf3, 0xcf, 0x03, 0xff, 0x30, 0x00, 0x0c, 0xff, 0x0f, 0xcf, 0x04, 0xff, 0x3f, 0xfc, 0xcf, + 0x04, 0xff, 0xfc, 0xff, 0xff, 0x3f, 0xc0, 0x30, 0x0c, 0x03, 0xfc, 0x00, 0xc0, 0xff, 0xff, 0xfc, + 0x0f, 0x03, 0xff, 0xf0, 0xff, 0xf3, 0x3f, 0x0f, 0x0c, 0x33, 0xfc, 0x00, 0xc0, 0xcf, 0x03, 0xff, + 0xcc, 0xff, 0xc0, 0x03, 0x3c, 0xf3, 0xf0, 0xc3, 0x0c, 0xff, 0x00, 0xc0, 0x3c, 0xcf, 0x02, 0xcf, + 0x0f, 0x03, 0xff, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfc, 0xc0, 0x02, 0x2a, 0xcf, 0x03, 0xaa, 0xbf, + 0x04, 0xcf, 0x04, 0xff, 0xbf, 0x03, 0x0f, 0xff, 0xfc, 0xf0, 0xfc, 0x00, 0x30, 0xf0, 0xc0, 0xbf, + 0x03, 0xc0, 0x30, 0xcf, 0x06, 0xf0, 0xfc, 0xa0, 0xaa, 0xaa, 0xfa, 0x0f, 0xa0, 0xaa, 0xaa, 0x0a, + 0xaf, 0xf0, 0x0a, 0xcf, 0x04, 0xaa, 0x0f, 0xcf, 0x01, 0xcf, 0xcf, 0x03, 0xff, 0x0c, 0x00, 0x30, + 0xea, 0x80, 0xad, 0xad, 0x11, 0xd0, 0x80, 0xa9, 0x29, 0xef, 0x80, 0x49, 0x8d, 0x11, 0xd0, 0x80, + 0xb9, 0x20, 0x4d, 0xc0, 0x80, 0xc9, 0xa0, 0x00, 0x80, 0xe9, 0xa2, 0x00, 0x80, 0xad, 0xb9, 0x00, + 0x09, 0x80, 0xad, 0x99, 0x00, 0x04, 0x80, 0x59, 0xc8, 0x80, 0x59, 0xd0, 0xf1, 0x80, 0xde, 0xe8, + 0x80, 0x59, 0xe0, 0xa6, 0x80, 0x59, 0xf0, 0x10, 0x80, 0xad, 0xee, 0x20, 0xc0, 0x80, 0x59, 0xee, + 0x25, 0xc0, 0x80, 0xed, 0xd0, 0xd8, 0x80, 0xde, 0x6c, 0xb0, 0xc0, 0x80, 0xad, 0x78, 0x80, 0x59, + 0xa9, 0x36, 0x80, 0xde, 0x85, 0x01, 0x80, 0xad, 0xa9, 0x60, 0x85, 0x80, 0xa9, 0x32, 0x85, 0x02, + 0xa9, 0x00, 0x8d, 0xff, 0x03, 0xa9, 0xef, 0x85, 0x00, 0xa9, 0x40, 0x8d, 0x01, 0x03, 0x78, 0xa9, + 0x03, 0x8d, 0x19, 0x03, 0xa9, 0x01, 0x8d, 0x18, 0x03, 0x85, 0xba, 0xa9, 0x00, 0x85, 0xbb, 0xa9, + 0x01, 0x8d, 0x13, 0x03, 0xa9, 0x04, 0x8d, 0x03, 0x03, 0xa9, 0x00, 0x8d, 0x02, 0x03, 0x80, 0x60, + 0x80, 0x60, 0xa0, 0xff, 0x80, 0x59, 0xb9, 0x00, 0xc1, 0x80, 0xde, 0x99, 0x00, 0x03, 0x80, 0x59, + 0x88, 0x80, 0xed, 0xc0, 0x3b, 0x80, 0xad, 0xd0, 0xed, 0x80, 0xa9, 0x60, 0x4c, 0x00, 0x80, 0xff, + 0x00, 0x04, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x30, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xe1, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x9c, 0x35, 0x55, 0xd0, + 0x50, 0xf9, 0xf9, 0x7c, 0x87, 0x2e, 0x2a, 0xaf, 0x53, 0xfa, 0xfa, 0x7f, 0x82, 0x2b, 0x0b, 0x8e, + 0x70, 0xd2, 0x4f, 0xef, 0xef, 0xbe, 0x45, 0x14, 0xe9, 0x70, 0x70, 0x74, 0xbc, 0x6c, 0x9a, 0x7c, + 0x82, 0x62, 0xff, 0x0f, 0x0d, 0xeb, 0x17, 0xf9, 0xa3, 0xa0, 0x6a, 0xba, 0x52, 0x72, 0x72, 0x76, + 0xcb, 0xcb, 0xca, 0x57, 0x56, 0x57, 0xcf, 0x01, 0xbf, 0x6f, 0x98, 0x3a, 0x74, 0x29, 0x12, 0x11, + 0xdb, 0x0b, 0xf1, 0x59, 0xf4, 0x16, 0x13, 0x8e, 0xb2, 0xb1, 0x59, 0x89, 0x73, 0xbf, 0x75, 0xcf, + 0x01, 0xbf, 0xcf, 0x05, 0xff, 0xc0, 0xcf, 0x08, 0xff, 0xf5, 0xcf, 0x07, 0xff, 0xee, 0xcf, 0x07, + 0xff, 0xc6, 0xbf, 0x03, 0xa7, 0x00, 0xa7, 0x07, 0xbf, 0x03, 0x02, 0xbf, 0x03, 0xff, 0xbf, 0x0f, + 0xff, 0xb7, 0xcf, 0x07, 0xff, 0xf6, 0xcf, 0x03, 0xff, 0xee, 0xcf, 0x0e, 0xff, 0xf5, 0xcf, 0x05, + 0xff, 0xbf, 0x06, 0xb7, 0xbf, 0x03, 0x02, 0xff, 0xbf, 0x0d, 0x91, 0x51, 0x91, 0x46, 0x31, 0x1a, + 0x11, 0x45, 0x44, 0xb4, 0xa2, 0x91, 0xac, 0x88, 0x88, 0x89, 0xe6, 0x7c, 0xc9, 0xf4, 0x52, 0xda, + 0xb9, 0xb4, 0xb4, 0x26, 0xef, 0xa7, 0x9e, 0x6c, 0x9a, 0xb3, 0x18, 0x55, 0xa5, 0x28, 0x4a, 0xc4, + 0x2a, 0x22, 0x22, 0x2a, 0xa2, 0x22, 0x22, 0x8a, 0x89, 0x88, 0xe6, 0x7c, 0xc9, 0xf4, 0x52, 0xda, + 0xb9, 0xb4, 0xb4, 0x26, 0xef, 0xa7, 0x9e, 0x6c, 0x9a, 0xb3, 0xbf, 0x07, 0xcf, 0x07, 0xff, 0xd2, + 0xf9, 0xff, 0xff, 0x12, 0xcf, 0x03, 0xff, 0xfb, 0xff, 0xff, 0xf3, 0xcf, 0x07, 0xff, 0xd0, 0xcf, + 0x05, 0xff, 0xbf, 0x06, 0x33, 0xbf, 0x03, 0x02, 0xff, 0xbf, 0x12, 0xff, 0x12, 0x4c, 0x00, 0xe3, + 0x4c, 0x06, 0xe3, 0x4c, 0x9e, 0xe4, 0x26, 0xd7, 0xaa, 0xe6, 0x26, 0xd7, 0xaa, 0xcf, 0x02, 0xbf, + 0xb3, 0xb2, 0xcf, 0x02, 0xbf, 0xb3, 0xb2, 0xcf, 0x02, 0xbf, 0xf3, 0xb2, 0xcf, 0x02, 0xbf, 0xf3, + 0xb2, 0xee, 0x26, 0x93, 0xaa, 0xee, 0x26, 0x93, 0xaa, 0xe6, 0x26, 0xd3, 0xaa, 0xe6, 0x26, 0xd3, + 0xaa, 0xcf, 0x02, 0xbf, 0xb3, 0xb2, 0xcf, 0x02, 0xbf, 0xb3, 0xb2, 0xcf, 0x02, 0xbf, 0xf3, 0xb2, + 0xcf, 0x02, 0xbf, 0xf3, 0xb2, 0x7b, 0xa6, 0x32, 0xbe, 0x6b, 0x26, 0x32, 0xbe, 0x73, 0xa6, 0x32, + 0xbe, 0x73, 0xa6, 0x32, 0xbe, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, + 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x6b, 0xa6, 0x32, 0xbe, 0x6b, 0xa6, 0x32, 0xbe, 0x73, 0xa6, 0x32, + 0xbe, 0x73, 0xa6, 0x32, 0xbe, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, + 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x6e, 0x26, 0x93, 0x2a, 0xee, 0x26, 0x13, 0x2a, 0xe6, 0x26, 0xf7, + 0xaa, 0xe6, 0x26, 0xf7, 0xaa, 0x3f, 0xcf, 0x01, 0xbf, 0x33, 0x32, 0x3f, 0xcf, 0x01, 0xbf, 0x33, + 0x32, 0xcf, 0x02, 0xbf, 0xf3, 0xb2, 0xcf, 0x02, 0xbf, 0xf3, 0xb2, 0xee, 0x26, 0x93, 0xaa, 0xee, + 0x26, 0x93, 0xaa, 0xe6, 0x26, 0xd3, 0xaa, 0xe6, 0x26, 0xd7, 0xaa, 0xcf, 0x02, 0xbf, 0xb3, 0x32, + 0xcf, 0x02, 0xbf, 0xb3, 0x32, 0xcf, 0x02, 0xbf, 0xf3, 0xb2, 0xcf, 0x02, 0xbf, 0xf3, 0xb2, 0x7b, + 0xa6, 0x32, 0xbe, 0x7b, 0xa6, 0x32, 0xbe, 0x73, 0xa6, 0x32, 0xbe, 0x73, 0xa6, 0x32, 0xbe, 0x0e, + 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x7b, + 0xa6, 0x32, 0xbe, 0x7b, 0xa6, 0x32, 0xbe, 0x73, 0xa6, 0x32, 0xbe, 0x73, 0xa6, 0x32, 0xbe, 0x0e, + 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0x0e, 0x1e, 0x9b, 0xae, 0xc2, + 0x7e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb7, 0xaf, 0xc2, 0x7e, 0xb7, 0xaf, 0x3f, + 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x8b, 0xb7, 0x3f, 0xf6, 0x8f, 0xb7, 0xc2, + 0x7e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb3, 0xaf, 0x3f, + 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x8b, 0xb7, 0x3f, 0xf6, 0x89, 0xb7, 0x96, + 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x36, 0x0f, 0x52, + 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0xb2, 0x17, 0x52, 0x1e, 0xb2, 0x17, 0x96, + 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x52, + 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0xb2, 0x17, 0x42, + 0x3e, 0xb3, 0x2f, 0x42, 0x3e, 0xb3, 0x2f, 0xc2, 0x7e, 0xb7, 0xaf, 0xc2, 0x7e, 0xb7, 0xaf, 0x3f, + 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x8b, 0xb7, 0x3f, 0xf6, 0x8f, 0xb7, 0x42, + 0x3e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb3, 0xaf, 0xc2, 0x7e, 0xb7, 0xaf, 0xc2, 0x7e, 0xb7, 0xaf, 0x3f, + 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x89, 0xb7, 0x3f, 0xf6, 0x8b, 0xb7, 0x3f, 0xf6, 0x8b, 0xb7, 0x96, + 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x36, 0x0f, 0x52, + 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x96, + 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x96, 0xbe, 0x32, 0x0f, 0x52, + 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0x52, 0x1e, 0x92, 0x17, 0xf8, + 0x16, 0x37, 0x59, 0x7d, 0xa3, 0xcb, 0xf4, 0x21, 0x53, 0x85, 0xb8, 0xf1, 0x2d, 0x6e, 0xb2, 0xf9, + 0x45, 0x95, 0xe9, 0x44, 0xa3, 0x08, 0x73, 0xe5, 0x5e, 0xdc, 0x63, 0xf2, 0x89, 0x29, 0xd3, 0x89, + 0x47, 0x11, 0xe7, 0xc9, 0xba, 0xb7, 0xc7, 0xe5, 0x14, 0x53, 0xa5, 0x0d, 0x8a, 0x21, 0xcd, 0x95, + 0x75, 0x6d, 0x8e, 0xc8, 0x29, 0xab, 0x4a, 0x1c, 0x14, 0x3d, 0x95, 0x21, 0xef, 0xda, 0x1c, 0x8c, + 0x52, 0x56, 0x94, 0x38, 0x28, 0x7a, 0x2a, 0x42, 0xde, 0xb4, 0x38, 0x2c, 0xa4, 0xac, 0x28, 0x70, + 0x50, 0xf4, 0x54, 0x01, 0xcf, 0x07, 0x02, 0xcf, 0x05, 0x03, 0xcf, 0x04, 0x04, 0xcf, 0x03, 0x05, + 0x06, 0x06, 0xcf, 0x03, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0b, 0x0c, 0x0d, 0x0e, 0x0e, + 0x0f, 0x10, 0x11, 0x12, 0x13, 0x15, 0x16, 0x17, 0x19, 0x1a, 0x1c, 0x1d, 0x1f, 0x21, 0x23, 0x25, + 0x27, 0x2a, 0x2c, 0x2f, 0x32, 0x35, 0x38, 0x3b, 0x3f, 0x42, 0x46, 0x4b, 0x4f, 0x54, 0x59, 0x5e, + 0x64, 0x6a, 0x70, 0x77, 0x7e, 0x85, 0x8d, 0x96, 0x9f, 0xa8, 0xb2, 0xbd, 0xc8, 0xd4, 0xe0, 0xee, + 0xbf, 0x07, 0xcf, 0x03, 0xff, 0xcf, 0x03, 0x07, 0xcf, 0x03, 0xff, 0xcf, 0x03, 0x11, 0xcf, 0x03, + 0x97, 0xcf, 0x03, 0x21, 0xbf, 0x03, 0x11, 0x97, 0x22, 0x9b, 0x00, 0x93, 0x11, 0x97, 0x22, 0x9b, + 0x00, 0x93, 0x11, 0x97, 0x22, 0x9b, 0x00, 0x93, 0x00, 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15, + 0x18, 0x1b, 0x1e, 0x21, 0x24, 0x27, 0x2a, 0x2d, 0x30, 0xb7, 0xde, 0xea, 0x2e, 0xb7, 0xde, 0x0f, + 0x2e, 0xb7, 0x2f, 0x0e, 0xaf, 0xae, 0x2f, 0x0e, 0xaf, 0xae, 0x2f, 0x0e, 0xaf, 0xae, 0x2f, 0x0e, + 0xaf, 0xae, 0x4c, 0x34, 0xe4, 0x4c, 0x52, 0xe3, 0x4c, 0x79, 0xe4, 0x00, 0xa7, 0xcf, 0x01, 0xbf, + 0xb6, 0x02, 0xa7, 0xcf, 0x01, 0xbf, 0x1f, 0xbe, 0x16, 0x00, 0x1f, 0x20, 0x4d, 0x49, 0x43, 0x52, + 0x4f, 0x50, 0x45, 0x41, 0x52, 0x4c, 0x20, 0x4d, 0x55, 0x53, 0x49, 0x43, 0x20, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x20, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x31, + 0x39, 0x38, 0x33, 0x20, 0x4a, 0x4f, 0x48, 0x4e, 0x20, 0x41, 0x2e, 0x20, 0x46, 0x49, 0x54, 0x5a, + 0x50, 0x41, 0x54, 0x52, 0x49, 0x43, 0x4b, 0x20, 0xa9, 0x00, 0x8d, 0x0c, 0xe3, 0x20, 0x8c, 0xe3, + 0xa9, 0x01, 0x8d, 0x0c, 0xe3, 0x60, 0xad, 0x09, 0xe3, 0xcd, 0x6b, 0xe8, 0x90, 0x03, 0xad, 0x6b, + 0xe8, 0xcf, 0x03, 0x0a, 0xa8, 0xa2, 0xfe, 0xe8, 0xe8, 0xb9, 0xc0, 0xe8, 0x9d, 0xdf, 0xe3, 0xc8, + 0xe8, 0xb9, 0xc0, 0xe8, 0x9d, 0xdf, 0xe3, 0xc8, 0xe8, 0xe0, 0x0a, 0x90, 0xea, 0x60, 0xb9, 0xc0, + 0xe8, 0x60, 0x20, 0x60, 0xe3, 0x20, 0xa8, 0xe3, 0xa2, 0x00, 0x8e, 0x2e, 0xe1, 0xa9, 0xff, 0x8d, + 0x30, 0xe1, 0x20, 0xbb, 0xe5, 0xae, 0x2e, 0xe1, 0xe8, 0xe0, 0x03, 0xd0, 0xed, 0x60, 0xa9, 0x00, + 0x8d, 0x0f, 0xe3, 0x8d, 0xe8, 0xe2, 0xa2, 0x2e, 0xbd, 0xa7, 0xe2, 0x9d, 0xff, 0xe0, 0xca, 0xd0, + 0xf7, 0xad, 0x0d, 0xe3, 0x8d, 0x2f, 0xe1, 0x8a, 0x8d, 0x0b, 0xe3, 0x8d, 0x0a, 0xe3, 0x8d, 0x0e, + 0xe3, 0x8d, 0x0c, 0xe3, 0x8d, 0x00, 0xe1, 0xa2, 0x17, 0x9d, 0x00, 0xd4, 0xca, 0x10, 0xfa, 0x60, + 0xa9, 0x00, 0xf0, 0xe7, 0xad, 0x34, 0x12, 0x60, 0xad, 0x34, 0x12, 0x60, 0xad, 0x34, 0x12, 0x60, + 0xad, 0x2e, 0xe1, 0xf0, 0x19, 0x4a, 0xb0, 0x2c, 0x20, 0xe6, 0xe3, 0x08, 0xee, 0xe7, 0xe3, 0xd0, + 0x03, 0xee, 0xe8, 0xe3, 0x48, 0x20, 0xe6, 0xe3, 0x8d, 0x30, 0xe1, 0x68, 0x28, 0x60, 0x20, 0xde, + 0xe3, 0x08, 0xee, 0xdf, 0xe3, 0xd0, 0x03, 0xee, 0xe0, 0xe3, 0x48, 0x20, 0xde, 0xe3, 0x8d, 0x30, + 0xe1, 0x68, 0x28, 0x60, 0x20, 0xe2, 0xe3, 0x08, 0xee, 0xe3, 0xe3, 0xd0, 0x03, 0xee, 0xe4, 0xe3, + 0x48, 0x20, 0xe2, 0xe3, 0x8d, 0x30, 0xe1, 0x68, 0x28, 0x60, 0x20, 0xda, 0xe3, 0x60, 0x98, 0x10, + 0x06, 0x29, 0x7f, 0xaa, 0x4c, 0x55, 0xe4, 0x29, 0x02, 0xd0, 0x16, 0xae, 0x09, 0xe3, 0xec, 0x6b, + 0xe8, 0x90, 0x07, 0xa2, 0xff, 0x98, 0x29, 0x01, 0xf0, 0x32, 0xe8, 0x8e, 0x09, 0xe3, 0x4c, 0x03, + 0xe3, 0xae, 0x6c, 0xe8, 0xbd, 0x70, 0xe8, 0x30, 0x18, 0x0a, 0x10, 0x0a, 0x0a, 0x4a, 0x4a, 0x8d, + 0x00, 0xe1, 0xe8, 0x4c, 0x5e, 0xe4, 0x4a, 0xe8, 0x8e, 0x6c, 0xe8, 0xaa, 0x4c, 0x55, 0xe4, 0xa0, + 0x01, 0xae, 0x6d, 0xe8, 0x8e, 0x6c, 0xe8, 0x98, 0x29, 0x01, 0xd0, 0xd8, 0x4c, 0xda, 0xe3, 0xad, + 0x0f, 0xe3, 0x0d, 0x11, 0xe3, 0x8d, 0x18, 0xd4, 0xad, 0xe8, 0xe2, 0x8d, 0x17, 0xd4, 0xa9, 0x00, + 0x8d, 0x10, 0xe3, 0x60, 0xad, 0x0a, 0xe3, 0xd0, 0x18, 0xad, 0x0c, 0xe3, 0xd0, 0x01, 0x60, 0xae, + 0x0e, 0xe3, 0xe0, 0xff, 0xd0, 0x0e, 0xac, 0x14, 0xe3, 0xf0, 0x06, 0x20, 0x38, 0xe4, 0x4c, 0x9e, + 0xe4, 0x4c, 0xda, 0xe3, 0xce, 0x2f, 0xe1, 0xd0, 0xe5, 0xad, 0x0d, 0xe3, 0x8d, 0x2f, 0xe1, 0xce, + 0x04, 0xe1, 0x10, 0x26, 0xad, 0x04, 0xe1, 0xcd, 0x07, 0xe1, 0xd0, 0x2d, 0xad, 0x0a, 0xe1, 0x8d, + 0x04, 0xe1, 0xad, 0x0d, 0xe1, 0x8d, 0x07, 0xe1, 0xad, 0x10, 0xe3, 0xc9, 0x01, 0xd0, 0x03, 0x20, + 0x89, 0xe4, 0xa2, 0x00, 0x20, 0x78, 0xe5, 0x4c, 0x03, 0xe5, 0xd0, 0x0d, 0xad, 0x01, 0xe1, 0xd0, + 0x08, 0xad, 0x16, 0xe1, 0x29, 0xfe, 0x8d, 0x04, 0xd4, 0xce, 0x05, 0xe1, 0x10, 0x26, 0xad, 0x05, + 0xe1, 0xcd, 0x08, 0xe1, 0xd0, 0x2d, 0xad, 0x0b, 0xe1, 0x8d, 0x05, 0xe1, 0xad, 0x0e, 0xe1, 0x8d, + 0x08, 0xe1, 0xad, 0x10, 0xe3, 0xc9, 0x02, 0xd0, 0x03, 0x20, 0x89, 0xe4, 0xa2, 0x01, 0x20, 0x78, + 0xe5, 0x4c, 0x3d, 0xe5, 0xd0, 0x0d, 0xad, 0x02, 0xe1, 0xd0, 0x08, 0xad, 0x17, 0xe1, 0x29, 0xfe, + 0x8d, 0x0b, 0xd4, 0xce, 0x06, 0xe1, 0x10, 0x26, 0xad, 0x06, 0xe1, 0xcd, 0x09, 0xe1, 0xd0, 0x2d, + 0xad, 0x0c, 0xe1, 0x8d, 0x06, 0xe1, 0xad, 0x0f, 0xe1, 0x8d, 0x09, 0xe1, 0xad, 0x10, 0xe3, 0xc9, + 0x03, 0xd0, 0x03, 0x20, 0x89, 0xe4, 0xa2, 0x02, 0x20, 0x78, 0xe5, 0x4c, 0x77, 0xe5, 0xd0, 0x0d, + 0xad, 0x03, 0xe1, 0xd0, 0x08, 0xad, 0x18, 0xe1, 0x29, 0xfe, 0x8d, 0x12, 0xd4, 0x60, 0x8e, 0x2e, + 0xe1, 0x20, 0xea, 0xe3, 0xae, 0x2e, 0xe1, 0xbc, 0x19, 0xe7, 0xaa, 0xd0, 0x09, 0x99, 0x00, 0xd4, + 0x99, 0x01, 0xd4, 0x4c, 0xbb, 0xe5, 0x18, 0x6d, 0x00, 0xe1, 0xaa, 0xbd, 0x54, 0xe2, 0x99, 0x01, + 0xd4, 0xbd, 0x00, 0xe2, 0x99, 0x00, 0xd4, 0xae, 0x2e, 0xe1, 0xbd, 0x01, 0xe1, 0xd0, 0x12, 0xbd, + 0x10, 0xe1, 0x99, 0x05, 0xd4, 0xbd, 0x13, 0xe1, 0x99, 0x06, 0xd4, 0xbd, 0x16, 0xe1, 0x99, 0x04, + 0xd4, 0xad, 0x30, 0xe1, 0x30, 0x03, 0x4c, 0xb5, 0xe6, 0x20, 0xea, 0xe3, 0xc9, 0xff, 0xd0, 0x0d, + 0xa9, 0x01, 0x8d, 0x0b, 0xe3, 0xa9, 0xff, 0x8d, 0x0e, 0xe3, 0x4c, 0xb5, 0xe6, 0xa8, 0xcf, 0x04, + 0x4a, 0x29, 0x07, 0xaa, 0xbd, 0xd6, 0xe2, 0x8d, 0xe7, 0xe5, 0x18, 0x90, 0xfe, 0x4c, 0xfd, 0xe5, + 0x4c, 0x17, 0xe6, 0x4c, 0x30, 0xe6, 0x4c, 0x20, 0xe7, 0x4c, 0x5e, 0xe7, 0x4c, 0x79, 0xe7, 0x4c, + 0xb2, 0xe7, 0x98, 0x29, 0x0f, 0xae, 0x2e, 0xe1, 0xbc, 0x19, 0xe1, 0x20, 0xb6, 0xe6, 0x8a, 0xae, + 0x2e, 0xe1, 0x9d, 0x0a, 0xe1, 0x98, 0x9d, 0x0d, 0xe1, 0x4c, 0xbb, 0xe5, 0x98, 0x29, 0x0f, 0x8d, + 0x11, 0xe3, 0xae, 0x2e, 0xe1, 0xe8, 0x8e, 0x10, 0xe3, 0x4c, 0xbb, 0xe5, 0x98, 0x29, 0x01, 0x8d, + 0xe7, 0xe2, 0x4c, 0xbb, 0xe5, 0xc0, 0xac, 0xb0, 0xf3, 0xa9, 0x51, 0xc0, 0xab, 0xf0, 0x0b, 0x98, + 0x29, 0x0f, 0xc9, 0x04, 0xb0, 0x0d, 0xaa, 0xbd, 0x1c, 0xe7, 0xae, 0x2e, 0xe1, 0x9d, 0x16, 0xe1, + 0x4c, 0xbb, 0xe5, 0xc9, 0x07, 0xb0, 0x3c, 0x29, 0x03, 0xae, 0x2e, 0xe1, 0x9d, 0x19, 0xe1, 0xa8, + 0x88, 0x08, 0xbd, 0x8b, 0xe6, 0xa8, 0x28, 0x30, 0x1d, 0xf0, 0x11, 0xb9, 0x20, 0xe1, 0x48, 0xb9, + 0x21, 0xe1, 0x9d, 0x13, 0xe1, 0x68, 0x9d, 0x10, 0xe1, 0x4c, 0xbb, 0xe5, 0xb9, 0x1e, 0xe1, 0x48, + 0xb9, 0x1f, 0xe1, 0x4c, 0x6d, 0xe6, 0xb9, 0x1c, 0xe1, 0x48, 0xb9, 0x1d, 0xe1, 0x4c, 0x6d, 0xe6, + 0x00, 0x06, 0x0c, 0xc9, 0x09, 0xb0, 0x0b, 0x29, 0x01, 0xae, 0x2e, 0xe1, 0x9d, 0x01, 0xe1, 0x4c, + 0xbb, 0xe5, 0x29, 0x01, 0x0a, 0x0a, 0x8d, 0x12, 0xe3, 0xae, 0x2e, 0xe1, 0xbd, 0x16, 0xe1, 0x29, + 0xfb, 0x0d, 0x12, 0xe3, 0x9d, 0x16, 0xe1, 0x4c, 0x9a, 0xe6, 0x60, 0xae, 0xe7, 0xe2, 0xf0, 0x03, + 0x18, 0x69, 0x10, 0xaa, 0x88, 0xf0, 0x27, 0x30, 0x08, 0xbd, 0xf9, 0xe6, 0xaa, 0xa0, 0xff, 0xca, + 0x60, 0xbd, 0xf9, 0xe6, 0xcf, 0x03, 0x4a, 0xd0, 0x02, 0xa9, 0x01, 0x8d, 0x12, 0xe3, 0xbd, 0xf9, + 0xe6, 0x38, 0xed, 0x12, 0xe3, 0xaa, 0xa9, 0x00, 0x38, 0xed, 0x12, 0xe3, 0xa8, 0x60, 0xbd, 0xf9, + 0xe6, 0x4a, 0x8d, 0x12, 0xe3, 0xaa, 0xa9, 0x00, 0x38, 0xed, 0x12, 0xe3, 0xa8, 0x60, 0x20, 0x10, + 0x08, 0x04, 0x02, 0x01, 0x08, 0x08, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x02, 0x08, 0x08, 0x40, 0x20, + 0x10, 0x08, 0x04, 0x02, 0x08, 0x08, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x04, 0x08, 0x08, 0x00, 0x07, + 0x0e, 0x11, 0x21, 0x41, 0x81, 0x98, 0x29, 0x07, 0xcf, 0x03, 0x0a, 0xa8, 0xa2, 0x00, 0xad, 0x2e, + 0xe1, 0xf0, 0x12, 0x4a, 0xb0, 0x1e, 0xb9, 0x0a, 0xe8, 0x9d, 0x28, 0xe1, 0xc8, 0xe8, 0xe0, 0x06, + 0xd0, 0xf4, 0x4c, 0x9a, 0xe6, 0xb9, 0x0a, 0xe8, 0x9d, 0x1c, 0xe1, 0xc8, 0xe8, 0xe0, 0x06, 0xd0, + 0xf4, 0x4c, 0x9a, 0xe6, 0xb9, 0x0a, 0xe8, 0x9d, 0x22, 0xe1, 0xc8, 0xe8, 0xe0, 0x06, 0xd0, 0xf4, + 0x4c, 0x9a, 0xe6, 0x20, 0xea, 0xe3, 0xae, 0x2e, 0xe1, 0xbc, 0x19, 0xe7, 0x99, 0x02, 0xd4, 0x20, + 0xea, 0xe3, 0xae, 0x2e, 0xe1, 0xbc, 0x19, 0xe7, 0x99, 0x03, 0xd4, 0x4c, 0x9a, 0xe6, 0x98, 0x29, + 0x07, 0x0a, 0x0a, 0x18, 0x69, 0x40, 0xa8, 0xb9, 0x0a, 0xe8, 0x8d, 0x15, 0xd4, 0xc8, 0xb9, 0x0a, + 0xe8, 0x8d, 0x16, 0xd4, 0xc8, 0xb9, 0x0a, 0xe8, 0x48, 0xc8, 0xb9, 0x0a, 0xe8, 0x8d, 0x0f, 0xe3, + 0xae, 0x2e, 0xe1, 0xe8, 0x8e, 0x10, 0xe3, 0x20, 0xea, 0xe3, 0x8d, 0x12, 0xe3, 0x68, 0x0d, 0x12, + 0xe3, 0x8d, 0xe8, 0xe2, 0x4c, 0x9a, 0xe6, 0x20, 0xea, 0xe3, 0x8d, 0x0d, 0xe3, 0x8d, 0x2f, 0xe1, + 0x4c, 0x9a, 0xe6, 0xea, 0xb7, 0x25, 0x3e, 0xae, 0x26, 0x25, 0x3e, 0xae, 0x26, 0x27, 0x3e, 0xae, + 0x26, 0x27, 0x3e, 0xae, 0x26, 0x3e, 0xd7, 0xb7, 0x57, 0x3e, 0xd7, 0xb7, 0x57, 0x3e, 0xd7, 0xb7, + 0x57, 0x3e, 0xd7, 0xb7, 0x57, 0x25, 0x3e, 0xae, 0x26, 0x25, 0x3e, 0xae, 0x26, 0x25, 0x3e, 0xae, + 0x26, 0x25, 0x3e, 0xae, 0x26, 0x3e, 0xd7, 0xb7, 0x57, 0x3e, 0xd7, 0xb7, 0x57, 0x3e, 0xd7, 0xb7, + 0x57, 0x3e, 0xd7, 0xb7, 0x57, 0x6a, 0x40, 0x7d, 0x41, 0x31, 0x42, 0xad, 0x42, 0x90, 0x44, 0x11, + 0x97, 0x00, 0x93, 0x22, 0x9b, 0x00, 0x00, 0x22, 0x97, 0x11, 0x95, 0x33, 0x9b, 0x00, 0x00, 0x11, + 0x93, 0x11, 0x92, 0x11, 0x97, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0x00, 0x70, 0x00, 0x00, 0x60, + 0x00, 0x60, 0x00, 0x60, 0xbf, 0x04, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x66, 0x00, 0x66, + 0x00, 0x66, 0xbf, 0x03, 0x88, 0x98, 0x55, 0x95, 0xbb, 0x9b, 0xbf, 0x03, 0x11, 0xf0, 0x10, 0x01, + 0x44, 0xf0, 0x20, 0x02, 0x77, 0xf0, 0x40, 0x00, 0x22, 0x70, 0x10, 0x01, 0x44, 0x70, 0x20, 0x02, + 0x55, 0x70, 0x40, 0x01, 0x44, 0x30, 0x30, 0x00, 0x22, 0x30, 0x60, 0x7f, 0x01, 0x00, 0x00, 0xc0, + 0x02, 0x00, 0xff, 0xe0, 0x02, 0xa8, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, + 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, + 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, + 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, + 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, + 0x83, 0xd0, 0xe8, 0x7d, 0xe9, 0x31, 0xea, 0x0a, 0xe8, 0xb3, 0xea, 0x60, 0xeb, 0x14, 0xec, 0x0a, + 0xe8, 0x9c, 0xa2, 0xb3, 0xa6, 0xc0, 0x02, 0x08, 0xad, 0xe0, 0x02, 0xa8, 0x83, 0x18, 0x83, 0x24, + 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, + 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, + 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x1d, 0x83, 0x29, + 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x18, 0x83, 0x24, + 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, + 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x1d, 0x83, 0x29, + 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x84, 0x26, 0x84, 0x26, + 0x84, 0x26, 0x84, 0x26, 0x83, 0x24, 0x83, 0x26, 0x84, 0x26, 0x84, 0x26, 0x84, 0x26, 0x84, 0x26, + 0x83, 0x24, 0x83, 0x26, 0x84, 0x26, 0x84, 0x26, 0x84, 0x26, 0x84, 0x26, 0x83, 0x24, 0x83, 0x26, + 0x84, 0x1f, 0x84, 0x1f, 0x84, 0x1f, 0x84, 0x1f, 0x84, 0x1f, 0x8b, 0x00, 0x00, 0xff, 0x9f, 0xa2, + 0xb5, 0xa4, 0xc0, 0xce, 0x04, 0xa8, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x85, 0x50, 0x85, 0x4d, + 0x85, 0x48, 0x85, 0x44, 0x85, 0x41, 0x85, 0x3c, 0x85, 0x38, 0x85, 0x35, 0x82, 0x00, 0x85, 0x50, + 0x85, 0x4d, 0x85, 0x48, 0x85, 0x44, 0x85, 0x41, 0x85, 0x3c, 0x85, 0x38, 0x85, 0x35, 0x82, 0x00, + 0x84, 0x3c, 0x84, 0x33, 0x84, 0x37, 0x84, 0x38, 0x84, 0x37, 0x84, 0x33, 0x84, 0x3e, 0x84, 0x3c, + 0x81, 0x00, 0x84, 0x3c, 0x84, 0x33, 0x84, 0x37, 0x84, 0x38, 0x84, 0x37, 0x84, 0x33, 0x84, 0x3e, + 0x84, 0x3c, 0x81, 0x00, 0x85, 0x50, 0x85, 0x4d, 0x85, 0x48, 0x85, 0x44, 0x85, 0x41, 0x85, 0x3c, + 0x85, 0x38, 0x85, 0x35, 0x82, 0x00, 0x85, 0x50, 0x85, 0x4d, 0x85, 0x48, 0x85, 0x44, 0x85, 0x41, + 0x85, 0x3c, 0x85, 0x38, 0x85, 0x35, 0x82, 0x00, 0x84, 0x2b, 0x84, 0x2b, 0x84, 0x2b, 0x84, 0x2b, + 0x83, 0x29, 0x83, 0x2b, 0x84, 0x2b, 0x84, 0x2b, 0x84, 0x2b, 0x84, 0x2b, 0x83, 0x29, 0x83, 0x2b, + 0x84, 0x2b, 0x84, 0x2b, 0x84, 0x2b, 0x84, 0x2b, 0x83, 0x29, 0x83, 0x2b, 0x85, 0x4f, 0x85, 0x4a, + 0x85, 0x47, 0x85, 0x43, 0x85, 0x3e, 0x85, 0x3b, 0x85, 0x37, 0x85, 0x32, 0x84, 0x37, 0x8b, 0x00, + 0x00, 0xff, 0x9f, 0xa2, 0xb0, 0xa4, 0xc0, 0xce, 0x04, 0xa8, 0x80, 0x00, 0x83, 0x30, 0x83, 0x2e, + 0x82, 0x30, 0x81, 0x00, 0x83, 0x30, 0x83, 0x2e, 0x82, 0x30, 0x81, 0x00, 0xb5, 0xa4, 0x84, 0x35, + 0x84, 0x35, 0x84, 0x35, 0x84, 0x35, 0x83, 0x33, 0x83, 0x35, 0x84, 0x35, 0x84, 0x35, 0x84, 0x35, + 0x84, 0x35, 0x83, 0x33, 0x83, 0x35, 0x83, 0x30, 0x83, 0x2e, 0x82, 0x30, 0x81, 0x00, 0x83, 0x30, + 0x83, 0x2e, 0x82, 0x30, 0x81, 0x00, 0x84, 0x35, 0x84, 0x35, 0x84, 0x35, 0x84, 0x35, 0x83, 0x33, + 0x83, 0x35, 0x84, 0x35, 0x84, 0x35, 0x84, 0x35, 0x84, 0x35, 0x83, 0x33, 0x83, 0x35, 0x82, 0x2b, + 0x83, 0x29, 0x83, 0x2b, 0x82, 0x32, 0x83, 0x29, 0x83, 0x2b, 0x8a, 0x37, 0x83, 0x00, 0x85, 0x3c, + 0x85, 0x30, 0x83, 0x00, 0x85, 0x3c, 0x85, 0x30, 0x83, 0x00, 0x83, 0x00, 0x00, 0xff, 0x9f, 0xa1, + 0xb0, 0xa4, 0x00, 0xff, 0x9c, 0xa2, 0xb3, 0xa6, 0xc0, 0x02, 0x08, 0xad, 0xe0, 0x02, 0xa8, 0x83, + 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, + 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, + 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, 0x18, 0x83, 0x24, 0x83, 0x1f, 0x83, 0x20, 0x83, + 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, 0x1d, 0x83, 0x29, 0x83, + 0x18, 0xbf, 0x03, 0xad, 0x00, 0xeb, 0xd0, 0x01, 0x60, 0x10, 0x1b, 0x0a, 0xaa, 0xbd, 0xe5, 0xeb, + 0x85, 0xf6, 0xbd, 0xe6, 0xeb, 0x85, 0xf7, 0xa0, 0x01, 0x8c, 0x02, 0xeb, 0x8c, 0x00, 0xeb, 0x88, + 0x8c, 0x04, 0xd4, 0x8c, 0x01, 0xeb, 0xce, 0x02, 0xeb, 0xd0, 0xdd, 0xac, 0x01, 0xeb, 0xb1, 0xf6, + 0xaa, 0xbd, 0x03, 0xec, 0x8d, 0x39, 0xeb, 0x18, 0x90, 0xfe, 0x4c, 0x82, 0xeb, 0x4c, 0xa2, 0xeb, + 0x4c, 0xa9, 0xeb, 0x4c, 0xb3, 0xeb, 0x4c, 0xc0, 0xeb, 0x4c, 0xd0, 0xeb, 0x4c, 0xd0, 0xeb, 0x4c, + 0xdd, 0xeb, 0xc8, 0xb1, 0xf6, 0x8d, 0x02, 0xeb, 0xc8, 0xb1, 0xf6, 0xaa, 0xbd, 0x00, 0xe2, 0x8d, + 0x00, 0xd4, 0xbd, 0x54, 0xe2, 0x8d, 0x01, 0xd4, 0xc8, 0x60, 0xb1, 0xf6, 0xaa, 0xbd, 0x11, 0xec, + 0x8d, 0x05, 0xd4, 0xbd, 0x12, 0xec, 0x8d, 0x06, 0xd4, 0xc8, 0x60, 0xb1, 0xf6, 0x8d, 0x04, 0xd4, + 0xc8, 0x60, 0xa9, 0x00, 0x8d, 0x00, 0xd4, 0x8d, 0x01, 0xd4, 0x8d, 0x00, 0xeb, 0x8d, 0x01, 0xeb, + 0x60, 0xb1, 0xf6, 0xc8, 0xaa, 0xbd, 0x1b, 0xec, 0x8d, 0x02, 0xd4, 0xbd, 0x1c, 0xec, 0x8d, 0x03, + 0xd4, 0x60, 0x20, 0x52, 0xeb, 0x8c, 0x01, 0xeb, 0x60, 0x20, 0x52, 0xeb, 0x20, 0x7b, 0xeb, 0x8c, + 0x01, 0xeb, 0x60, 0x20, 0x52, 0xeb, 0x20, 0x6a, 0xeb, 0x20, 0x7b, 0xeb, 0x8c, 0x01, 0xeb, 0x60, + 0x20, 0x52, 0xeb, 0x20, 0x6a, 0xeb, 0x20, 0x91, 0xeb, 0x20, 0x7b, 0xeb, 0x8c, 0x01, 0xeb, 0x60, + 0x20, 0x52, 0xeb, 0x20, 0x91, 0xeb, 0x20, 0x7b, 0xeb, 0x8c, 0x01, 0xeb, 0x60, 0xc8, 0x20, 0x7b, + 0xeb, 0x8c, 0x01, 0xeb, 0x60, 0x31, 0xec, 0x37, 0xec, 0x47, 0xec, 0x7a, 0xec, 0x90, 0xec, 0xbe, + 0xec, 0xd8, 0xcf, 0x03, 0xec, 0x0e, 0xed, 0x59, 0xed, 0x60, 0xed, 0x8e, 0xed, 0xc8, 0xed, 0x07, + 0xee, 0x19, 0xee, 0x00, 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x1b, 0x1e, 0x21, 0x24, + 0x27, 0x11, 0x97, 0x00, 0xf0, 0x89, 0x00, 0x09, 0x40, 0x08, 0x00, 0x0c, 0x07, 0x02, 0x08, 0xce, + 0x04, 0x9a, 0x01, 0x34, 0x03, 0xec, 0x01, 0x1f, 0x01, 0xcd, 0x00, 0x52, 0x00, 0x7b, 0x00, 0x68, + 0x06, 0x03, 0x01, 0x3d, 0x02, 0x81, 0x00, 0x04, 0x08, 0x0b, 0x04, 0x00, 0x41, 0x01, 0x10, 0x0d, + 0x01, 0x04, 0x0c, 0x01, 0x04, 0x0b, 0x00, 0x04, 0x01, 0x3d, 0x00, 0x02, 0x41, 0x02, 0x01, 0x46, + 0x41, 0x02, 0x01, 0x3e, 0x41, 0x02, 0x01, 0x4a, 0x41, 0x02, 0x01, 0x44, 0x41, 0x02, 0x01, 0x4d, + 0x41, 0x02, 0x01, 0x46, 0x41, 0x02, 0x01, 0x49, 0x41, 0x02, 0x01, 0x3d, 0x41, 0x02, 0x01, 0x4d, + 0x41, 0x02, 0x01, 0x46, 0x41, 0x02, 0x01, 0x44, 0x41, 0x00, 0x03, 0x01, 0x49, 0x06, 0x81, 0x01, + 0x01, 0x55, 0x01, 0x01, 0x54, 0x01, 0x01, 0x55, 0x01, 0x01, 0x31, 0x02, 0x01, 0x0d, 0x81, 0x00, + 0x03, 0x05, 0x26, 0x00, 0x81, 0x02, 0x04, 0x2b, 0x81, 0x02, 0x04, 0x2e, 0x81, 0x02, 0x01, 0x31, + 0x81, 0x02, 0x01, 0x35, 0x81, 0x02, 0x01, 0x39, 0x81, 0x02, 0x01, 0x3d, 0x81, 0x02, 0x01, 0x41, + 0x81, 0x02, 0x01, 0x44, 0x81, 0x02, 0x01, 0x49, 0x81, 0x02, 0x01, 0x55, 0x81, 0x00, 0x03, 0x01, + 0x2e, 0x00, 0x81, 0x02, 0x01, 0x2e, 0x81, 0x02, 0x01, 0x31, 0x81, 0x02, 0x01, 0x35, 0x81, 0x02, + 0x01, 0x39, 0x81, 0x02, 0x01, 0x3d, 0x81, 0x00, 0x03, 0x01, 0x55, 0x02, 0x81, 0x01, 0x01, 0x31, + 0x01, 0x01, 0x14, 0x02, 0x01, 0x0d, 0x81, 0x02, 0x01, 0x01, 0x81, 0x00, 0x03, 0x01, 0x25, 0x00, + 0x11, 0x02, 0x01, 0x29, 0x11, 0x02, 0x01, 0x2c, 0x11, 0x02, 0x01, 0x31, 0x11, 0x02, 0x01, 0x38, + 0x11, 0x02, 0x01, 0x3d, 0x11, 0x02, 0x01, 0x49, 0x11, 0x02, 0x01, 0x50, 0x11, 0x00, 0x04, 0x01, + 0x4f, 0x02, 0x04, 0x41, 0x02, 0x01, 0x4f, 0x40, 0x02, 0x01, 0x4a, 0x41, 0x02, 0x01, 0x4a, 0x40, + 0x02, 0x01, 0x47, 0x41, 0x02, 0x01, 0x47, 0x40, 0x02, 0x01, 0x43, 0x41, 0x02, 0x01, 0x43, 0x40, + 0x02, 0x01, 0x3e, 0x41, 0x02, 0x01, 0x3e, 0x40, 0x02, 0x01, 0x3b, 0x41, 0x02, 0x01, 0x3b, 0x40, + 0x02, 0x01, 0x37, 0x41, 0x02, 0x01, 0x37, 0x40, 0x02, 0x01, 0x32, 0x41, 0x02, 0x01, 0x32, 0x40, + 0x02, 0x02, 0x38, 0x41, 0x02, 0x02, 0x38, 0x40, 0x00, 0x04, 0x01, 0x3d, 0x0c, 0x12, 0x41, 0x00, + 0x03, 0x10, 0x00, 0x02, 0x00, 0x03, 0x02, 0x00, 0x02, 0x51, 0x01, 0x02, 0x00, 0x01, 0x02, 0x0c, + 0x01, 0x02, 0x0c, 0x01, 0x02, 0x0c, 0x01, 0x02, 0x0c, 0x01, 0x01, 0x0d, 0x01, 0x01, 0x0e, 0x02, + 0x01, 0x00, 0x51, 0x04, 0x2f, 0x48, 0x08, 0x08, 0x41, 0x02, 0x01, 0x48, 0x40, 0x00, 0x03, 0x01, + 0x52, 0x00, 0x81, 0x02, 0x01, 0x52, 0x51, 0x02, 0x01, 0x52, 0x81, 0x02, 0x01, 0x52, 0x51, 0x02, + 0x01, 0x52, 0x81, 0x02, 0x01, 0x52, 0x51, 0x02, 0x01, 0x52, 0x81, 0x02, 0x01, 0x52, 0x51, 0x02, + 0x01, 0x52, 0x81, 0x02, 0x01, 0x52, 0x51, 0x02, 0x01, 0x52, 0x81, 0x02, 0x01, 0x52, 0x51, 0x02, + 0x01, 0x29, 0x81, 0x02, 0x01, 0x22, 0x81, 0x00, 0x04, 0x01, 0x26, 0x00, 0x0a, 0x41, 0x06, 0x01, + 0x25, 0x0c, 0x41, 0x02, 0x01, 0x26, 0x51, 0x06, 0x01, 0x25, 0x0e, 0x41, 0x02, 0x01, 0x26, 0x51, + 0x06, 0x01, 0x25, 0x10, 0x41, 0x02, 0x01, 0x26, 0x51, 0x06, 0x01, 0x25, 0x10, 0x41, 0x02, 0x01, + 0x26, 0x51, 0x02, 0x01, 0x25, 0x51, 0x02, 0x01, 0x24, 0x51, 0x02, 0x01, 0x22, 0x51, 0x02, 0x01, + 0x20, 0x51, 0x02, 0x01, 0x1d, 0x51, 0x00, 0x03, 0x04, 0x10, 0x0a, 0x81, 0x01, 0x01, 0x34, 0x01, + 0x01, 0x4c, 0x01, 0x01, 0x28, 0x01, 0x60, 0x10, 0x00, 0x03, 0x01, 0x3c, 0x00, 0x21, 0x02, 0x01, + 0x2b, 0x21, 0x02, 0x01, 0x30, 0x21, 0x02, 0x01, 0x27, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, 0x01, + 0x3c, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, 0x01, 0x30, 0x21, 0x02, 0x01, 0x27, 0x21, 0x02, 0x01, + 0x2b, 0x21, 0x02, 0x01, 0x3a, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, 0x2e, 0x21, 0x02, 0x01, + 0x25, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, 0x3a, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, + 0x2e, 0x21, 0x02, 0x01, 0x25, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, 0x3c, 0x21, 0x02, 0x01, + 0x2b, 0x21, 0x02, 0x01, 0x30, 0x21, 0x02, 0x01, 0x27, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, 0x01, + 0x3c, 0x21, 0x00, 0x02, 0x01, 0x38, 0x81, 0x02, 0x01, 0x25, 0x51, 0x06, 0x01, 0x3d, 0x06, 0x41, + 0x02, 0x01, 0x25, 0x81, 0x02, 0x01, 0x31, 0x51, 0x06, 0x01, 0x22, 0x08, 0x41, 0x02, 0x01, 0x35, + 0x81, 0x02, 0x01, 0x1e, 0x51, 0x06, 0x01, 0x38, 0x04, 0x41, 0x02, 0x01, 0x3f, 0x81, 0x02, 0x01, + 0x3d, 0x51, 0x06, 0x01, 0x20, 0x14, 0x41, 0x02, 0x01, 0x38, 0x81, 0x02, 0x01, 0x24, 0x51, 0x06, + 0x01, 0x3f, 0x04, 0x41, 0x02, 0x01, 0x3d, 0x81, 0x02, 0x01, 0x40, 0x51, 0x06, 0x01, 0x2c, 0x08, + 0x41, 0x02, 0x01, 0x2e, 0x81, 0x00, 0x03, 0x01, 0x3c, 0x00, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, + 0x01, 0x30, 0x21, 0x02, 0x01, 0x27, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, 0x01, 0x3c, 0x21, 0x02, + 0x01, 0x2b, 0x21, 0x02, 0x01, 0x30, 0x21, 0x02, 0x01, 0x27, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, + 0x01, 0x3a, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, 0x2e, 0x21, 0x02, 0x01, 0x25, 0x21, 0x02, + 0x01, 0x29, 0x21, 0x02, 0x01, 0x3a, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, 0x2e, 0x21, 0x02, + 0x01, 0x25, 0x21, 0x02, 0x01, 0x29, 0x21, 0x02, 0x01, 0x3c, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, + 0x01, 0x30, 0x21, 0x02, 0x01, 0x27, 0x21, 0x02, 0x01, 0x2b, 0x21, 0x02, 0x01, 0x3c, 0x21, 0x00, + 0xc9, 0x1a, 0xf0, 0xe9, 0xc9, 0x0f, 0xf0, 0xe5, 0xc9, 0x13, 0xf0, 0xe1, 0xc9, 0x19, 0xf0, 0xdd, + 0xc9, 0x1b, 0xf0, 0xd9, 0xb9, 0xe2, 0x4d, 0x30, 0x18, 0xa8, 0xb9, 0xbc, 0x00, 0xc9, 0x16, 0xf0, + 0x15, 0xc9, 0x11, 0xf0, 0x3b, 0xc9, 0x0d, 0xf0, 0x56, 0xc9, 0x0c, 0xf0, 0x52, 0xc9, 0x0e, 0xf0, + 0xbf, 0x03, 0xad, 0x70, 0xef, 0xd0, 0x01, 0x60, 0x10, 0x1b, 0x0a, 0xaa, 0xbd, 0xe5, 0xeb, 0x85, + 0xf8, 0xbd, 0xe6, 0xeb, 0x85, 0xf9, 0xa0, 0x01, 0x8c, 0x72, 0xef, 0x8c, 0x70, 0xef, 0x88, 0x8c, + 0x0b, 0xd4, 0x8c, 0x71, 0xef, 0xce, 0x72, 0xef, 0xd0, 0xdd, 0xac, 0x71, 0xef, 0xb1, 0xf8, 0xaa, + 0xbd, 0x03, 0xec, 0x8d, 0xa9, 0xef, 0x18, 0x90, 0xfe, 0x4c, 0xf2, 0xef, 0x4c, 0x12, 0xf0, 0x4c, + 0x19, 0xf0, 0x4c, 0x23, 0xf0, 0x4c, 0x30, 0xf0, 0x4c, 0x40, 0xf0, 0x4c, 0x40, 0xf0, 0x4c, 0x4d, + 0xf0, 0xc8, 0xb1, 0xf8, 0x8d, 0x72, 0xef, 0xc8, 0xb1, 0xf8, 0xaa, 0xbd, 0x00, 0xe2, 0x8d, 0x07, + 0xd4, 0xbd, 0x54, 0xe2, 0x8d, 0x08, 0xd4, 0xc8, 0x60, 0xb1, 0xf8, 0xaa, 0xbd, 0x11, 0xec, 0x8d, + 0x0c, 0xd4, 0xbd, 0x12, 0xec, 0x8d, 0x0d, 0xd4, 0xc8, 0x60, 0xb1, 0xf8, 0x8d, 0x0b, 0xd4, 0xc8, + 0x60, 0xa9, 0x00, 0x8d, 0x07, 0xd4, 0x8d, 0x08, 0xd4, 0x8d, 0x70, 0xef, 0x8d, 0x71, 0xef, 0x60, + 0xb1, 0xf8, 0xc8, 0xaa, 0xbd, 0x1b, 0xec, 0x8d, 0x09, 0xd4, 0xbd, 0x1c, 0xec, 0x8d, 0x0a, 0xd4, + 0x60, 0x20, 0xc2, 0xef, 0x8c, 0x71, 0xef, 0x60, 0x20, 0xc2, 0xef, 0x20, 0xeb, 0xef, 0x8c, 0x71, + 0xef, 0x60, 0x20, 0xc2, 0xef, 0x20, 0xda, 0xef, 0x20, 0xeb, 0xef, 0x8c, 0x71, 0xef, 0x60, 0x20, + 0xc2, 0xef, 0x20, 0xda, 0xef, 0x20, 0x01, 0xf0, 0x20, 0xeb, 0xef, 0x8c, 0x71, 0xef, 0x60, 0x20, + 0xc2, 0xef, 0x20, 0x01, 0xf0, 0x20, 0xeb, 0xef, 0x8c, 0x71, 0xef, 0x60, 0xc8, 0x20, 0xeb, 0xef, + 0x8c, 0x71, 0xef, 0x60, 0x01, 0x31, 0x81, 0x02, 0x01, 0x35, 0x81, 0x02, 0x01, 0x39, 0x81, 0xcb, + 0xd0, 0x0a, 0xa9, 0x08, 0x95, 0xcb, 0xd0, 0x04, 0xa9, 0x0a, 0x95, 0xcb, 0xb5, 0xb9, 0x29, 0xbf, + 0x03, 0xad, 0x70, 0xf0, 0xd0, 0x01, 0x60, 0x10, 0x1b, 0x0a, 0xaa, 0xbd, 0xe5, 0xeb, 0x85, 0xfa, + 0xbd, 0xe6, 0xeb, 0x85, 0xfb, 0xa0, 0x01, 0x8c, 0x72, 0xf0, 0x8c, 0x70, 0xf0, 0x88, 0x8c, 0x12, + 0xd4, 0x8c, 0x71, 0xf0, 0xce, 0x72, 0xf0, 0xd0, 0xdd, 0xac, 0x71, 0xf0, 0xb1, 0xfa, 0xaa, 0xbd, + 0x03, 0xec, 0x8d, 0xa9, 0xf0, 0x18, 0x90, 0xfe, 0x4c, 0xf2, 0xf0, 0x4c, 0x12, 0xf1, 0x4c, 0x19, + 0xf1, 0x4c, 0x23, 0xf1, 0x4c, 0x30, 0xf1, 0x4c, 0x40, 0xf1, 0x4c, 0x40, 0xf1, 0x4c, 0x4d, 0xf1, + 0xc8, 0xb1, 0xfa, 0x8d, 0x72, 0xf0, 0xc8, 0xb1, 0xfa, 0xaa, 0xbd, 0x00, 0xe2, 0x8d, 0x0e, 0xd4, + 0xbd, 0x54, 0xe2, 0x8d, 0x0f, 0xd4, 0xc8, 0x60, 0xb1, 0xfa, 0xaa, 0xbd, 0x11, 0xec, 0x8d, 0x13, + 0xd4, 0xbd, 0x12, 0xec, 0x8d, 0x14, 0xd4, 0xc8, 0x60, 0xb1, 0xfa, 0x8d, 0x12, 0xd4, 0xc8, 0x60, + 0xa9, 0x00, 0x8d, 0x0e, 0xd4, 0x8d, 0x0f, 0xd4, 0x8d, 0x70, 0xf0, 0x8d, 0x71, 0xf0, 0x60, 0xb1, + 0xfa, 0xc8, 0xaa, 0xbd, 0x1b, 0xec, 0x8d, 0x10, 0xd4, 0xbd, 0x1c, 0xec, 0x8d, 0x11, 0xd4, 0x60, + 0x20, 0xc2, 0xf0, 0x8c, 0x71, 0xf0, 0x60, 0x20, 0xc2, 0xf0, 0x20, 0xeb, 0xf0, 0x8c, 0x71, 0xf0, + 0x60, 0x20, 0xc2, 0xf0, 0x20, 0xda, 0xf0, 0x20, 0xeb, 0xf0, 0x8c, 0x71, 0xf0, 0x60, 0x20, 0xc2, + 0xf0, 0x20, 0xda, 0xf0, 0x20, 0x01, 0xf1, 0x20, 0xeb, 0xf0, 0x8c, 0x71, 0xf0, 0x60, 0x20, 0xc2, + 0xf0, 0x20, 0x01, 0xf1, 0x20, 0xeb, 0xf0, 0x8c, 0x71, 0xf0, 0x60, 0xc8, 0x20, 0xeb, 0xf0, 0x8c, + 0x71, 0xf0, 0x60, 0x02, 0x01, 0x00, 0x51, 0x04, 0x2f, 0x4a, 0x08, 0x08, 0x41, 0x02, 0xc6, 0x63, + 0x30, 0x2b, 0x60, 0xa9, 0xa0, 0x85, 0x79, 0xa9, 0x73, 0x85, 0x7a, 0xa9, 0x41, 0x85, 0x7b, 0xa5, + 0x26, 0xc9, 0x0a, 0x90, 0x0c, 0xa9, 0xa8, 0x85, 0x79, 0xa9, 0x8b, 0x85, 0x7a, 0xa9, 0x41, 0x85, + 0x7b, 0xae, 0xa3, 0x41, 0xbd, 0x55, 0x4b, 0x85, 0x5d, 0xc6, 0x63, 0x10, 0x1c, 0xce, 0xa3, 0x41, + 0x10, 0x0b, 0xa2, 0x07, 0x8e, 0xa3, 0x41, 0xa5, 0x62, 0x49, 0x01, 0x85, 0x62, 0xae, 0xa3, 0x41, + 0xbd, 0x55, 0x4b, 0x85, 0x5d, 0xa9, 0x10, 0x85, 0x63, 0xa5, 0x62, 0xd0, 0x0a, 0xe6, 0x61, 0xa5, + 0x61, 0xc9, 0x08, 0x90, 0x0d, 0xb0, 0x07, 0xc6, 0x61, 0x10, 0x07, 0xa9, 0x07, 0x2c, 0xa9, 0x00, + 0x85, 0x61, 0xa2, 0x02, 0x86, 0x4e, 0x8a, 0xcf, 0x03, 0x0a, 0x18, 0x65, 0x7a, 0x8d, 0xff, 0x2b, + 0xa5, 0x7b, 0x69, 0x00, 0x8d, 0x00, 0x2c, 0x8a, 0x18, 0x69, 0x61, 0x8d, 0x3e, 0x42, 0x20, 0x22, + 0x19, 0xad, 0x3e, 0x42, 0x85, 0x05, 0x38, 0xe9, 0x04, 0x85, 0x07, 0xad, 0x3d, 0x42, 0x18, 0x65, + 0x79, 0x85, 0x06, 0x18, 0x69, 0x04, 0x85, 0x08, 0xa0, 0x00, 0xa6, 0x61, 0xbd, 0x00, 0x04, 0x2c, + 0x02, 0x2a, 0x08, 0x21, 0x04, 0x17, 0x04, 0x21, 0x04, 0x17, 0x04, 0x28, 0x03, 0x08, 0x04, 0x00, + 0x04, 0x28, 0x01, 0x2a, 0x02, 0x1c, 0x04, 0x18, 0x04, 0x2c, 0x02, 0x31, 0x02, 0x11, 0x04, 0x25, + 0x04, 0x25, 0x02, 0x25, 0x02, 0x21, 0x04, 0x18, 0x04, 0x25, 0x02, 0x23, 0x02, 0x08, 0x04, 0x00, + 0x04, 0x28, 0x02, 0x28, 0x02, 0x1c, 0x04, 0x18, 0x04, 0x2a, 0x02, 0x2c, 0x08, 0x1c, 0x04, 0x18, + 0x04, 0x1c, 0x04, 0x18, 0x04, 0x2a, 0x04, 0x11, 0x04, 0x00, 0x04, 0x2a, 0x03, 0x21, 0x04, 0x1a, + 0x04, 0x2a, 0x01, 0x2a, 0x02, 0x13, 0x04, 0x00, 0x04, 0x2a, 0x02, 0x2a, 0x04, 0x21, 0x04, 0x1a, + 0x04, 0x28, 0x06, 0x1c, 0x04, 0x18, 0x04, 0x13, 0x04, 0x00, 0x04, 0x2c, 0x01, 0xaa, 0x01, 0xa8, + 0x04, 0x08, 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0xfe, 0x00, 0xd4, 0x19, 0x00, + 0x00, 0x09, 0x02, 0x40, 0x49, 0x50, 0x00, 0x00, 0x09, 0x02, 0x40, 0x49, 0x50, 0x00, 0x00, 0x09, + 0x02, 0x40, 0x49, 0x50, 0xbf, 0x03, 0x0f, 0x2c, 0x02, 0x33, 0x06, 0x2c, 0x06, 0x08, 0x04, 0x1c, + 0x04, 0x2c, 0x02, 0x28, 0x02, 0x33, 0x06, 0x2c, 0x06, 0x1c, 0x04, 0x1c, 0x04, 0x2c, 0x02, 0x00, + 0x02, 0x28, 0x03, 0x11, 0x04, 0x00, 0x04, 0x28, 0x01, 0x28, 0x02, 0x21, 0x04, 0x18, 0x04, 0x25, + 0x02, 0x28, 0x06, 0x08, 0x04, 0x00, 0x06, 0x1c, 0x04, 0x2c, 0x02, 0x28, 0x02, 0x33, 0x06, 0x2c, + 0x06, 0x08, 0x04, 0x1c, 0x04, 0x2c, 0x02, 0x28, 0x02, 0x33, 0x06, 0x2c, 0x06, 0x08, 0x04, 0x1c, + 0x04, 0x2c, 0x02, 0x00, 0x02, 0x2a, 0x03, 0x13, 0x04, 0x00, 0x04, 0x2a, 0x01, 0x2a, 0x02, 0x21, + 0x04, 0x17, 0x04, 0x2c, 0x02, 0x2a, 0x08, 0x21, 0x04, 0x17, 0x04, 0x21, 0x04, 0x17, 0x04, 0x28, + 0x03, 0x08, 0x04, 0x00, 0x04, 0x28, 0x01, 0x2a, 0x02, 0x1c, 0x04, 0x18, 0x04, 0x2c, 0x02, 0x31, + 0x02, 0x11, 0x04, 0x25, 0x04, 0x25, 0x02, 0x25, 0x02, 0x21, 0x04, 0x18, 0x04, 0x25, 0x02, 0x23, + 0x02, 0x08, 0x04, 0x00, 0x04, 0x28, 0x02, 0x28, 0x02, 0x1c, 0x04, 0x18, 0x04, 0x2a, 0x02, 0x2c, + 0x08, 0x1c, 0x04, 0x18, 0x04, 0x1c, 0x04, 0x18, 0x04, 0x2a, 0x04, 0x11, 0x04, 0x00, 0x04, 0x2a, + 0x03, 0x21, 0x04, 0x1a, 0x04, 0x2a, 0x01, 0x2a, 0x02, 0x13, 0x04, 0x00, 0x04, 0x2a, 0x02, 0x2a, + 0x04, 0x21, 0x04, 0x1a, 0x04, 0x28, 0x06, 0x1c, 0x04, 0x18, 0x04, 0x13, 0x04, 0x00, 0x04, 0x2c, + 0x01, 0xaa, 0x01, 0xa8, 0x04, 0x08, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0xfe, + 0x03, 0xe0, 0x05, 0xcf, 0x03, 0x41, 0x07, 0x02, 0xfe, 0x00, 0xd4, 0x19, 0xbf, 0x03, 0x04, 0x40, + 0x09, 0xd0, 0xbf, 0x03, 0x04, 0x40, 0x09, 0xd0, 0xbf, 0x03, 0x04, 0x40, 0x09, 0xd0, 0xbf, 0x03, + 0x0f, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x26, 0x02, 0x00, 0x02, 0x00, 0x02, 0x2b, 0x02, 0x00, + 0x02, 0x0b, 0x02, 0x2b, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x31, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x33, + 0x02, 0x1b, 0x02, 0x16, 0x02, 0x2b, 0x02, 0x00, 0x02, 0x11, 0x02, 0x2b, 0x02, 0x1a, 0x02, 0x16, + 0x02, 0x2a, 0x02, 0x1a, 0x02, 0x16, 0x02, 0x26, 0x02, 0x1a, 0x02, 0x16, 0x02, 0x2b, 0x02, 0x00, + 0x02, 0x13, 0x02, 0x2b, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x31, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x33, + 0x02, 0x1b, 0x02, 0x16, 0x02, 0x2b, 0x04, 0x00, 0x02, 0x11, 0x02, 0x00, 0x02, 0x13, 0x02, 0x2a, + 0x02, 0x00, 0x02, 0x14, 0x02, 0x26, 0x02, 0x00, 0x02, 0x11, 0x02, 0x2b, 0x02, 0x00, 0x02, 0x13, + 0x02, 0x2b, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x31, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x33, 0x02, 0x1b, + 0x02, 0x16, 0x02, 0x34, 0x02, 0x14, 0x02, 0x00, 0x02, 0x33, 0x02, 0x1b, 0x02, 0x18, 0x02, 0x31, + 0x02, 0x1b, 0x02, 0x18, 0x02, 0x2b, 0x02, 0x1b, 0x02, 0x18, 0x02, 0x2a, 0x02, 0x16, 0x02, 0x00, + 0x02, 0x26, 0x02, 0x24, 0x02, 0x1a, 0x02, 0x28, 0x02, 0x24, 0x02, 0x1a, 0x02, 0x2a, 0x02, 0x24, + 0x02, 0x1a, 0x02, 0x2b, 0x04, 0x23, 0x02, 0x1b, 0x02, 0x00, 0x02, 0x00, 0x02, 0x2b, 0x04, 0x1b, + 0x04, 0x0b, 0x04, 0x28, 0x03, 0x14, 0x02, 0x00, 0x02, 0x1b, 0x02, 0x18, 0x02, 0x2a, 0x01, 0x28, + 0x02, 0x1b, 0x02, 0x18, 0x02, 0x26, 0x02, 0x1b, 0x02, 0x18, 0x02, 0x28, 0x02, 0x14, 0x02, 0x00, + 0x02, 0x2a, 0x02, 0x14, 0x02, 0x18, 0x02, 0x2b, 0x04, 0x1b, 0x02, 0x18, 0x02, 0x1b, 0x02, 0x18, + 0x02, 0x26, 0x03, 0x13, 0x02, 0x00, 0x02, 0x1b, 0x02, 0x16, 0x02, 0x28, 0x01, 0x26, 0x02, 0x11, + 0x02, 0x00, 0x02, 0x24, 0x02, 0x1a, 0x02, 0x16, 0x02, 0x23, 0x04, 0x0b, 0x02, 0x00, 0x02, 0x16, + 0x02, 0x00, 0x02, 0x26, 0x04, 0x1b, 0x02, 0x00, 0x02, 0x16, 0x02, 0x00, 0x02, 0x28, 0x02, 0x14, + 0x02, 0x00, 0x02, 0x2a, 0x02, 0x1b, 0x02, 0x18, 0x02, 0x28, 0x02, 0x1b, 0x02, 0x18, 0x02, 0x26, + 0x02, 0x1b, 0x02, 0x18, 0x02, 0x28, 0x02, 0x14, 0x02, 0x00, 0x02, 0x2a, 0x02, 0x1b, 0x02, 0x18, + 0x02, 0x2b, 0x02, 0x15, 0x02, 0x00, 0x02, 0xb1, 0x02, 0x21, 0x02, 0x18, 0x02, 0x33, 0x02, 0x1b, + 0x02, 0x16, 0x02, 0x34, 0x02, 0x00, 0x02, 0x00, 0x02, 0x31, 0x02, 0x1a, 0x02, 0x16, 0x02, 0x33, + 0x02, 0x00, 0x02, 0x00, 0x02, 0x2b, 0x04, 0x1b, 0x02, 0x18, 0x02, 0x00, 0x02, 0x00, 0x02, 0x2b, + 0x02, 0x1b, 0x04, 0x0b, 0x04, 0x00, 0x02, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0xff, 0xb7, 0xef, + 0xcf, 0x07, 0xff, 0x00, 0xcf, 0x08, 0xff, 0x00, 0xcf, 0x07, 0xff, 0x00, 0xcf, 0x0b, 0xff, 0x67, + 0xff, 0xbf, 0x44, 0x5b, 0x07, 0xbf, 0x03, 0xff, 0xbf, 0x03, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, + 0xcf, 0x03, 0xff, 0x00, 0x00, 0xcf, 0x09, 0xff, 0x00, 0xcf, 0x08, 0xff, 0x00, 0xcf, 0x07, 0xff, + 0x00, 0xcf, 0x0b, 0xff, 0x67, 0xff, 0xbf, 0x43, 0xa0, 0xcc, 0xc0, 0x5a, 0xb0, 0x06, 0xb9, 0x8d, + 0xff, 0x99, 0xa6, 0x02, 0xb9, 0x2b, 0xfe, 0x99, 0x33, 0x03, 0x88, 0xd0, 0xed, 0xa9, 0xa7, 0x8d, + 0x30, 0x03, 0xa9, 0x02, 0x8d, 0x31, 0x03, 0xa9, 0x08, 0x85, 0x7a, 0xa9, 0x01, 0x85, 0x7b, 0x68, + 0x68, 0x4c, 0x00, 0x01, 0x48, 0x98, 0x48, 0xad, 0x05, 0xdc, 0xa0, 0x11, 0x8c, 0x0e, 0xdc, 0xee, + 0x20, 0xd0, 0x49, 0x02, 0x4a, 0x4a, 0x66, 0xa9, 0xb0, 0x2c, 0xa5, 0xaa, 0x85, 0xa8, 0x65, 0xa9, + 0x85, 0xaa, 0xa4, 0xb4, 0xa5, 0xa9, 0x38, 0xb0, 0x77, 0xc9, 0x80, 0xd0, 0x19, 0xa9, 0x08, 0xd0, + 0x0c, 0xe9, 0xaa, 0xf0, 0x04, 0xa9, 0x00, 0xf0, 0x70, 0x85, 0xaa, 0xa9, 0x24, 0x8d, 0x58, 0x03, + 0xa9, 0x7f, 0x85, 0xa9, 0x84, 0xb4, 0xad, 0x0d, 0xdc, 0x68, 0xa8, 0x68, 0x40, 0x85, 0xb5, 0xc5, + 0xb7, 0xf0, 0x08, 0xa5, 0xb7, 0xd0, 0xde, 0xa9, 0x40, 0xd0, 0xe2, 0xa9, 0x3c, 0xc4, 0xb5, 0xd0, + 0xdc, 0xa9, 0x44, 0xd0, 0xd8, 0xd1, 0xbb, 0xd0, 0xcc, 0xa9, 0x44, 0xd0, 0x37, 0x99, 0xac, 0x00, + 0xa9, 0x52, 0xc8, 0x84, 0xb4, 0xc0, 0x06, 0xd0, 0xc7, 0xf0, 0x2e, 0xc5, 0xa8, 0xd0, 0x1d, 0xa5, + 0xb1, 0xf0, 0x10, 0xe6, 0xad, 0xc6, 0xb1, 0xd0, 0x06, 0xa5, 0xb0, 0xf0, 0x06, 0x85, 0xb5, 0xa9, + 0x77, 0xd0, 0xaa, 0x85, 0xab, 0xa9, 0x1f, 0x8d, 0x0d, 0xdc, 0xd0, 0xaa, 0xa9, 0x80, 0xd0, 0xf3, + 0x91, 0xac, 0xa9, 0x52, 0xc8, 0xc4, 0xb5, 0xd0, 0x97, 0xa0, 0x00, 0x84, 0xb5, 0xf0, 0x8e, 0x8d, + 0x58, 0x03, 0x85, 0x90, 0xa9, 0xf4, 0x8d, 0x04, 0xdc, 0xa9, 0x03, 0x8d, 0x05, 0xdc, 0xa9, 0x90, + 0x8d, 0x0d, 0xdc, 0xa9, 0x34, 0x8d, 0xfe, 0xff, 0xa9, 0x03, 0x8d, 0xff, 0xff, 0x58, 0x60, 0xbf, + 0x07, 0x07, 0xcc, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x9e, 0x32, 0x30, 0x36, 0x31, 0xbf, 0x03, 0xa0, + 0x00, 0x84, 0xa5, 0x84, 0xae, 0xa9, 0x08, 0x85, 0xa6, 0xa9, 0xf9, 0x85, 0xaf, 0xa2, 0x07, 0xb1, + 0xa5, 0x91, 0xae, 0xc8, 0xd0, 0xf9, 0xe6, 0xa6, 0xe6, 0xaf, 0xca, 0xd0, 0xf2, 0xa2, 0xbb, 0xbd, + 0x3b, 0x08, 0x9d, 0x3b, 0x03, 0xca, 0xd0, 0xf7, 0x60, 0xc9, 0x24, 0xd0, 0x07, 0xc8, 0x78, 0xa9, + 0x35, 0x85, 0x01, 0xa0, 0x00, 0x84, 0xa5, 0x84, 0xae, 0xa9, 0xca, 0x85, 0xa6, 0xa9, 0xf9, 0x85, + 0xaf, 0xa2, 0x06, 0xb1, 0xa5, 0x48, 0xb1, 0xae, 0x91, 0xa5, 0x68, 0x91, 0xae, 0xc8, 0xd0, 0xf3, + 0xe6, 0xa6, 0xe6, 0xaf, 0xca, 0xd0, 0xec, 0xa9, 0x37, 0x85, 0x01, 0x58, 0x60, 0xa2, 0xbb, 0xbd, + 0x3b, 0xca, 0x9d, 0x3b, 0x03, 0xca, 0xd0, 0xf7, 0x4c, 0x3c, 0x03, 0x2e, 0xc8, 0x20, 0xe4, 0xc4, + 0xb0, 0x3c, 0xa0, 0x0b, 0xb9, 0xed, 0x03, 0x99, 0xff, 0x00, 0x88, 0xd0, 0xf7, 0x4c, 0x00, 0xfe, + 0xa6, 0xba, 0xe0, 0x01, 0xf0, 0x03, 0x4c, 0xa5, 0xf4, 0x20, 0x17, 0xf8, 0xd8, 0xa5, 0x01, 0x09, + 0x20, 0x48, 0x20, 0xe4, 0x02, 0xa5, 0xab, 0xf0, 0x06, 0x10, 0xfa, 0xa9, 0x30, 0x85, 0x90, 0xa0, + 0x06, 0xe9, 0x01, 0xd0, 0xfc, 0xca, 0xd0, 0xf9, 0x88, 0xd0, 0xf6, 0xa9, 0x37, 0x85, 0x01, 0x85, + 0xc0, 0x20, 0x84, 0xff, 0x68, 0x85, 0x01, 0xa6, 0xae, 0xa4, 0xaf, 0x18, 0x60, 0x78, 0xa9, 0x05, + 0x85, 0x01, 0xa9, 0x1f, 0x8d, 0x0d, 0xdc, 0x8d, 0x0d, 0xdd, 0x85, 0xab, 0xad, 0x0d, 0xdc, 0xad, + 0x0d, 0xdd, 0xa9, 0x00, 0x85, 0xb4, 0x4c, 0xdf, 0x03, 0x9d, 0xd8, 0x20, 0x3c, 0x03, 0x4c, 0x00, + 0xcb, 0x04, 0xc4, 0x58, 0xb0, 0xee, 0xa2, 0x04, 0xbd, 0x17, 0x08, 0x85, 0x16, 0x11, 0x16, 0x11, + 0x03, 0x11, 0xcf, 0x00, 0xaa, 0xcf, 0x41, 0xaa, 0xa5, 0xcf, 0x03, 0x95, 0xcf, 0x00, 0x55, 0xcf, + 0x16, 0x55, 0x5d, 0xcf, 0x04, 0x5f, 0xcf, 0x04, 0x55, 0xd5, 0xf5, 0xfd, 0xf5, 0xcf, 0x06, 0x55, + 0x54, 0x54, 0xcf, 0x07, 0x55, 0x15, 0xaa, 0x5a, 0xcf, 0x03, 0x56, 0xcf, 0x19, 0x55, 0x57, 0x7f, + 0xcf, 0x03, 0x55, 0x5f, 0x5f, 0xcf, 0x03, 0xff, 0xcf, 0x03, 0x55, 0xf5, 0xfd, 0xcf, 0x03, 0xff, + 0xcf, 0x0f, 0x55, 0x57, 0xcf, 0x07, 0x55, 0xf5, 0xcf, 0x15, 0x55, 0xcf, 0x03, 0xf5, 0xcf, 0x05, + 0x55, 0x5f, 0x7f, 0x7d, 0xcf, 0x05, 0x55, 0xf5, 0xff, 0x5f, 0xcf, 0x07, 0x55, 0xd5, 0xcf, 0x05, + 0x55, 0x57, 0x5f, 0xff, 0xcf, 0x04, 0x55, 0xcf, 0x04, 0xff, 0xcf, 0x04, 0x55, 0xf5, 0xcf, 0x03, + 0xff, 0x55, 0x55, 0x40, 0x51, 0x51, 0xd5, 0xcf, 0x04, 0x55, 0x44, 0x40, 0x44, 0xcf, 0x12, 0x55, + 0x54, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0x40, 0x00, 0x55, 0x51, 0x50, 0x51, 0xbf, 0x04, 0xcf, 0x03, + 0x55, 0x95, 0x65, 0x11, 0x00, 0x00, 0x55, 0x56, 0x56, 0xcf, 0x03, 0x55, 0x01, 0x00, 0xcf, 0x03, + 0x55, 0x95, 0x95, 0x45, 0x45, 0x41, 0xcf, 0x0f, 0x55, 0x50, 0xcf, 0x06, 0x55, 0x00, 0x00, 0xcf, + 0x06, 0x55, 0x01, 0x01, 0xcf, 0x13, 0x55, 0x54, 0xcf, 0x07, 0x55, 0x00, 0xcf, 0x06, 0x55, 0xff, + 0xcf, 0x04, 0x57, 0xcf, 0x03, 0x5f, 0xff, 0xdf, 0xcf, 0x03, 0xff, 0x7f, 0xd5, 0xd0, 0xf5, 0xd5, + 0xf5, 0xf5, 0xd1, 0x51, 0x50, 0x00, 0xcf, 0x06, 0x55, 0x15, 0x05, 0xcf, 0x17, 0x55, 0xcf, 0x05, + 0x57, 0x55, 0x55, 0x7d, 0xfd, 0xf5, 0xf5, 0x55, 0xcf, 0x03, 0x75, 0xcf, 0x05, 0x55, 0x57, 0x57, + 0xcf, 0x04, 0x7f, 0xff, 0xcf, 0x03, 0xfd, 0xf5, 0xcf, 0x03, 0x55, 0x57, 0x57, 0x7f, 0x75, 0x75, + 0x5f, 0x7f, 0xf5, 0xd5, 0xcf, 0x04, 0x55, 0xfd, 0xff, 0xff, 0xcf, 0x03, 0x7f, 0xfd, 0xfd, 0x55, + 0xcf, 0x06, 0x75, 0xf5, 0xcf, 0x08, 0x55, 0xf5, 0xf5, 0xd7, 0xd7, 0xcf, 0x04, 0xdf, 0xf5, 0xcf, + 0x05, 0xd5, 0x57, 0x55, 0x57, 0x55, 0x75, 0x75, 0xf5, 0xf5, 0xff, 0xff, 0xdf, 0xff, 0xcf, 0x03, + 0xf7, 0xd7, 0xd7, 0x57, 0xff, 0xcf, 0x07, 0x55, 0xff, 0x5f, 0x57, 0xcf, 0x05, 0x55, 0xff, 0xf5, + 0xf5, 0xcf, 0x18, 0x55, 0x54, 0x54, 0x51, 0x50, 0x44, 0x40, 0xbf, 0x27, 0x51, 0x10, 0x14, 0xbf, + 0x05, 0x55, 0x50, 0xbf, 0x0f, 0x01, 0xbf, 0x06, 0x01, 0x55, 0x05, 0xbf, 0x05, 0xcf, 0x05, 0x55, + 0x15, 0x15, 0x05, 0xcf, 0x14, 0x55, 0x54, 0x51, 0x51, 0x45, 0x7f, 0x7d, 0x75, 0x15, 0xcf, 0x04, + 0x55, 0xcf, 0x05, 0x7f, 0xcf, 0x03, 0x7d, 0xcf, 0x03, 0x54, 0xcf, 0x04, 0x55, 0x56, 0x15, 0x01, + 0xbf, 0x03, 0x40, 0x41, 0xcf, 0x03, 0x55, 0x15, 0x05, 0x15, 0xcf, 0x1b, 0x55, 0x75, 0x77, 0x7f, + 0x7f, 0xff, 0xfd, 0xf5, 0xcf, 0x05, 0xff, 0xcf, 0x04, 0x55, 0xf5, 0xfd, 0xfd, 0xff, 0xcf, 0x03, + 0x5f, 0x7f, 0x75, 0x5d, 0x5d, 0xcf, 0x05, 0x5f, 0x57, 0x5f, 0x7f, 0xcf, 0x04, 0xff, 0x5f, 0xf5, + 0xcf, 0x03, 0xd5, 0x55, 0x55, 0xd5, 0xd5, 0xcf, 0x05, 0xf5, 0xfd, 0xfd, 0xff, 0xcf, 0x06, 0x55, + 0x5f, 0xcf, 0x08, 0xff, 0xd7, 0xcf, 0x03, 0x55, 0xd5, 0xd5, 0xf5, 0xfd, 0xff, 0x7d, 0xcf, 0x07, + 0x55, 0x57, 0x57, 0x5f, 0x7f, 0xff, 0xcf, 0x03, 0x57, 0x55, 0x7f, 0xff, 0xff, 0x5f, 0xcf, 0x04, + 0x55, 0xd5, 0xcf, 0x04, 0xff, 0x5d, 0x55, 0x55, 0xcf, 0x04, 0xd5, 0xcf, 0x12, 0x55, 0x54, 0x40, + 0x50, 0x50, 0x40, 0x40, 0xbf, 0x53, 0x05, 0xcf, 0x03, 0x01, 0xbf, 0x04, 0xcf, 0x09, 0x55, 0x54, + 0xcf, 0x06, 0x55, 0x15, 0x55, 0x5a, 0xcf, 0x06, 0x55, 0x5f, 0xa5, 0xcf, 0x05, 0x55, 0x75, 0xff, + 0x55, 0x55, 0x65, 0xcf, 0x03, 0x6a, 0xaa, 0x5a, 0x6a, 0xaa, 0xa9, 0xa5, 0x95, 0xa5, 0x55, 0x95, + 0x95, 0xcf, 0x1d, 0x55, 0xcf, 0x03, 0x57, 0x5f, 0x5f, 0x7d, 0x55, 0x57, 0xff, 0xff, 0xfd, 0xf5, + 0x55, 0x57, 0x5f, 0xff, 0xcf, 0x03, 0x55, 0x5f, 0x7f, 0xcf, 0x03, 0xff, 0x7d, 0x7d, 0xcf, 0x03, + 0xf5, 0xd5, 0xd5, 0x55, 0x5f, 0x5d, 0x7d, 0x7d, 0xcf, 0x04, 0xff, 0xcf, 0x03, 0x57, 0xcf, 0x05, + 0x55, 0xf5, 0xf5, 0xcf, 0x03, 0xfd, 0xff, 0xcf, 0x06, 0x7f, 0x5f, 0x5f, 0xd7, 0xd5, 0xcf, 0x05, + 0xff, 0xfd, 0xd5, 0x55, 0xcf, 0x03, 0xd5, 0xcf, 0x05, 0x55, 0xff, 0xff, 0x7f, 0x5f, 0x57, 0xcf, + 0x03, 0x55, 0xd5, 0xfd, 0xcf, 0x04, 0xff, 0x5f, 0x57, 0x57, 0x5f, 0xdf, 0xdf, 0xcf, 0x04, 0x5f, + 0xcf, 0x03, 0xd5, 0xcf, 0x03, 0xf5, 0xfd, 0xff, 0xcf, 0x06, 0x55, 0x57, 0xff, 0xcf, 0x06, 0x55, + 0xd5, 0xf5, 0xcf, 0x08, 0x55, 0x54, 0x50, 0x50, 0x40, 0x44, 0xbf, 0x63, 0xcf, 0x04, 0x15, 0xcf, + 0x04, 0x05, 0xcf, 0x05, 0x55, 0x56, 0xcf, 0x07, 0x55, 0xaa, 0xcf, 0x07, 0x55, 0xaa, 0x55, 0x55, + 0xcf, 0x05, 0x6a, 0xaa, 0x5a, 0x5a, 0xa5, 0xcf, 0x03, 0x95, 0xaa, 0xcf, 0x03, 0x95, 0xcf, 0x03, + 0x55, 0x56, 0xaa, 0xcf, 0x04, 0x55, 0x95, 0x95, 0xa5, 0xa5, 0xcf, 0x1b, 0x55, 0xff, 0x7f, 0xcf, + 0x05, 0x55, 0x9d, 0xfd, 0xd5, 0xcf, 0x05, 0x55, 0xd5, 0xcf, 0x08, 0x55, 0x7f, 0x5f, 0x57, 0x57, + 0x55, 0x75, 0x75, 0xf5, 0xcf, 0x08, 0x55, 0x5f, 0x5f, 0x57, 0x57, 0xcf, 0x04, 0x55, 0xf5, 0xcf, + 0x04, 0xff, 0x5f, 0xcf, 0x04, 0x55, 0xff, 0xfd, 0xf5, 0xd5, 0x57, 0x7f, 0xcf, 0x04, 0x55, 0x7f, + 0xcf, 0x03, 0xff, 0xcf, 0x04, 0x55, 0xfd, 0xcf, 0x03, 0xff, 0xcf, 0x05, 0x55, 0xf5, 0xd5, 0xd5, + 0xcf, 0x05, 0x55, 0x57, 0x5f, 0xff, 0xff, 0x7f, 0x57, 0x55, 0xcf, 0x07, 0xff, 0x57, 0xf5, 0xcf, + 0x03, 0xff, 0xfd, 0xfd, 0xff, 0xf5, 0x55, 0xd5, 0xcf, 0x04, 0x55, 0x54, 0x54, 0x55, 0x55, 0x54, + 0x55, 0xbf, 0x68, 0xcf, 0x04, 0x01, 0x00, 0x00, 0x01, 0x00, 0xcf, 0x15, 0x55, 0x56, 0x55, 0x55, + 0xcf, 0x05, 0x5a, 0xaa, 0xaa, 0x6a, 0xcf, 0x07, 0x95, 0xcf, 0x29, 0x55, 0xcf, 0x08, 0x9d, 0xcf, + 0x08, 0xd5, 0xcf, 0x08, 0x55, 0xcf, 0x05, 0xf5, 0xcf, 0x03, 0xfd, 0xcf, 0x10, 0x55, 0x57, 0x57, + 0x59, 0xcf, 0x05, 0x55, 0xff, 0xcf, 0x07, 0xd5, 0xff, 0x57, 0xcf, 0x06, 0x55, 0xff, 0xfd, 0xfd, + 0xcf, 0x05, 0x55, 0xdf, 0x5f, 0x67, 0xcf, 0x05, 0x57, 0xff, 0xcf, 0x07, 0x55, 0xff, 0x5f, 0x57, + 0xcf, 0x05, 0x55, 0xff, 0xf5, 0xf5, 0xcf, 0x0c, 0x55, 0x54, 0x54, 0x50, 0xcf, 0x03, 0x40, 0xbf, + 0x73, 0x55, 0x55, 0xcf, 0x06, 0x15, 0xcf, 0x10, 0x55, 0x6a, 0x59, 0xcf, 0x05, 0x55, 0x69, 0xcf, + 0x30, 0x55, 0xcf, 0x08, 0x9d, 0xcf, 0x08, 0xd5, 0xcf, 0x03, 0x55, 0xcf, 0x05, 0x57, 0xcf, 0x08, + 0xfd, 0xcf, 0x0c, 0x55, 0x57, 0xcf, 0x05, 0x55, 0x57, 0x7f, 0xff, 0xcf, 0x03, 0x55, 0xd5, 0xdf, + 0xff, 0xff, 0xd7, 0xcf, 0x03, 0xd5, 0x55, 0xf5, 0xcf, 0x03, 0xff, 0x7f, 0x57, 0x55, 0x55, 0x75, + 0xf5, 0xf5, 0xf7, 0xd5, 0x55, 0x55, 0x57, 0x57, 0x5f, 0x7f, 0xff, 0xcf, 0x03, 0x57, 0x55, 0x7f, + 0xff, 0xff, 0x5f, 0xcf, 0x04, 0x55, 0xd5, 0xcf, 0x04, 0xff, 0x5d, 0x55, 0x55, 0xcf, 0x04, 0xd5, + 0xcf, 0x03, 0x55, 0xcf, 0x04, 0x54, 0xcf, 0x04, 0x55, 0xbf, 0x07, 0x50, 0xbf, 0x27, 0x0c, 0xbf, + 0x48, 0xcf, 0x07, 0x15, 0x05, 0xcf, 0x10, 0x55, 0xcf, 0x08, 0x6a, 0x95, 0xa9, 0xa5, 0xa5, 0xcf, + 0x04, 0x95, 0xcf, 0x28, 0x55, 0xcf, 0x08, 0x9d, 0xcf, 0x08, 0xd5, 0xcf, 0x07, 0x57, 0x5f, 0xcf, + 0x03, 0xfd, 0xcf, 0x05, 0xff, 0xcf, 0x06, 0x55, 0xd5, 0xff, 0xcf, 0x05, 0x55, 0x57, 0x7f, 0xff, + 0x55, 0xcf, 0x04, 0x57, 0xcf, 0x03, 0xd7, 0xcf, 0x03, 0xf5, 0xcf, 0x03, 0xfd, 0xff, 0xff, 0xcf, + 0x07, 0x55, 0xff, 0xcf, 0x06, 0x55, 0xf5, 0xfd, 0x57, 0xcf, 0x07, 0x5f, 0xcf, 0x03, 0xd5, 0xcf, + 0x03, 0xf5, 0xfd, 0xff, 0xcf, 0x06, 0x55, 0x57, 0xff, 0xcf, 0x06, 0x55, 0xd5, 0xf5, 0xcf, 0x08, + 0x55, 0x40, 0x00, 0x00, 0xcf, 0x04, 0x40, 0xbf, 0x0f, 0x0f, 0x0f, 0x00, 0x30, 0x30, 0x3c, 0xcf, + 0x04, 0xff, 0x00, 0x00, 0xcf, 0x04, 0xc0, 0xf0, 0xff, 0x0c, 0x0c, 0x3c, 0x3c, 0x3f, 0xcf, 0x03, + 0xff, 0xbf, 0x04, 0x30, 0x3f, 0x3f, 0xff, 0xbf, 0x04, 0x0c, 0x0f, 0xcf, 0x01, 0xcf, 0xff, 0xbf, + 0x07, 0xff, 0xbf, 0x0e, 0xc0, 0xc0, 0xbf, 0x1f, 0x01, 0xcf, 0x08, 0x05, 0xcf, 0x09, 0x55, 0xd5, + 0xd5, 0xf5, 0xf5, 0xfd, 0xfd, 0xff, 0xcf, 0x08, 0x6a, 0xcf, 0x05, 0x95, 0x96, 0x96, 0x95, 0xcf, + 0x06, 0x55, 0x95, 0x95, 0xcf, 0x20, 0x55, 0xcf, 0x08, 0x9d, 0xcf, 0x08, 0xd5, 0xcf, 0x08, 0x55, + 0x7f, 0x57, 0xcf, 0x06, 0x55, 0xff, 0xff, 0x7f, 0xcf, 0x05, 0x55, 0xcf, 0x03, 0xff, 0x7f, 0xcf, + 0x04, 0x55, 0xf5, 0xfd, 0xff, 0xcf, 0x05, 0x55, 0x7f, 0x5f, 0xcf, 0x06, 0x55, 0xcf, 0x03, 0xff, + 0xcf, 0x05, 0x55, 0xcf, 0x03, 0xff, 0xfd, 0xcf, 0x06, 0x55, 0xd5, 0xcf, 0x05, 0x55, 0xff, 0x7f, + 0x57, 0xcf, 0x05, 0x55, 0xcf, 0x03, 0xff, 0x57, 0xcf, 0x04, 0x55, 0xfd, 0xfd, 0xff, 0xf5, 0xcf, + 0x09, 0x55, 0x54, 0x54, 0x55, 0xbf, 0x0b, 0xcf, 0x03, 0x03, 0x3c, 0x30, 0x3f, 0x3f, 0xcf, 0x03, + 0xff, 0x0f, 0x00, 0x00, 0xcf, 0x07, 0xff, 0x3f, 0xcf, 0x1f, 0xff, 0xfc, 0xcf, 0x06, 0xff, 0x0f, + 0x00, 0x00, 0xc0, 0xcf, 0x05, 0xff, 0x3f, 0xf0, 0xfc, 0xcf, 0x06, 0xff, 0xbf, 0x03, 0xcf, 0x05, + 0xc0, 0xbf, 0x18, 0x05, 0x45, 0x45, 0xcf, 0x04, 0x55, 0x15, 0x55, 0x55, 0xcf, 0x03, 0x57, 0x5f, + 0x5f, 0x7f, 0xff, 0xfd, 0xfd, 0xf5, 0xd5, 0xd5, 0x55, 0x55, 0x6a, 0x6a, 0xcf, 0x06, 0x5a, 0xcf, + 0x08, 0x95, 0xa5, 0xa5, 0x69, 0x69, 0xcf, 0x03, 0x5a, 0x56, 0xcf, 0x06, 0x55, 0x95, 0x95, 0xcf, + 0x18, 0x55, 0xcf, 0x08, 0x9d, 0xd5, 0xd5, 0xcf, 0x04, 0xd4, 0xd5, 0xd5, 0x55, 0x55, 0x04, 0x44, + 0x04, 0x54, 0xcf, 0x04, 0x55, 0x04, 0x44, 0x14, 0x44, 0xcf, 0x04, 0x55, 0x04, 0x44, 0x44, 0x04, + 0xcf, 0x04, 0x55, 0x04, 0x54, 0x44, 0x04, 0xcf, 0x04, 0x55, 0x04, 0x44, 0x14, 0x44, 0xcf, 0x04, + 0x55, 0x04, 0x44, 0x04, 0x44, 0xcf, 0x04, 0x55, 0x51, 0x01, 0x51, 0x51, 0xcf, 0x04, 0x55, 0x14, + 0x00, 0x14, 0x14, 0xcf, 0x04, 0x55, 0x40, 0x45, 0x41, 0x40, 0xcf, 0x04, 0x55, 0x41, 0x44, 0x44, + 0x41, 0xcf, 0x0c, 0x55, 0x05, 0x11, 0x05, 0x01, 0xcf, 0x04, 0x55, 0x11, 0x11, 0x45, 0x45, 0x55, + 0x55, 0x00, 0xcf, 0x03, 0x40, 0x50, 0xcf, 0x03, 0x40, 0xbf, 0x04, 0x03, 0x0c, 0xbf, 0x07, 0x30, + 0xf3, 0xc0, 0x03, 0xbf, 0x04, 0xc0, 0xfc, 0x0f, 0xff, 0xff, 0x3f, 0x03, 0x03, 0xbf, 0x03, 0xcf, + 0x03, 0xff, 0xfc, 0xfc, 0xcf, 0x03, 0xf0, 0xff, 0xf3, 0xbf, 0x06, 0xc0, 0xbf, 0x0d, 0x0f, 0xff, + 0x0f, 0x03, 0xbf, 0x03, 0x03, 0xcf, 0x05, 0xff, 0x3f, 0xcf, 0x04, 0xff, 0xcf, 0x08, 0xf0, 0xbf, + 0x18, 0xcf, 0x03, 0x15, 0x17, 0x15, 0x15, 0x55, 0x55, 0x7d, 0xf5, 0xd5, 0xcf, 0x0d, 0x55, 0xcf, + 0x08, 0x5a, 0xcf, 0x08, 0x95, 0x56, 0x56, 0xcf, 0x06, 0x55, 0xa5, 0xa5, 0xa9, 0xa9, 0xaa, 0xaa, + 0x69, 0x69, 0xcf, 0x18, 0x55, 0xcf, 0x08, 0x9d, 0xd5, 0xd5, 0xcf, 0x06, 0xd7, 0x55, 0x55, 0xf5, + 0x5d, 0x5d, 0xf5, 0x5d, 0x5d, 0x55, 0x55, 0xff, 0xcf, 0x04, 0xd7, 0xff, 0x55, 0x55, 0x75, 0x75, + 0x7d, 0x77, 0x75, 0x75, 0x55, 0x55, 0xcf, 0x04, 0xd5, 0xd7, 0xd5, 0x55, 0x55, 0xcf, 0x05, 0x5d, + 0xf5, 0x55, 0x55, 0x7f, 0x75, 0x75, 0x7d, 0x75, 0x75, 0x55, 0x55, 0xdf, 0xcf, 0x04, 0x5d, 0x5f, + 0x55, 0x55, 0xf7, 0xcf, 0x04, 0x77, 0xf7, 0x55, 0x55, 0xf5, 0x5d, 0x5d, 0xf5, 0x5d, 0x5d, 0x55, + 0x55, 0xfd, 0xcf, 0x05, 0x75, 0x55, 0x55, 0xdf, 0xdd, 0xdd, 0xdf, 0xdd, 0xdf, 0x55, 0x55, 0xf7, + 0xcf, 0x04, 0x57, 0xf7, 0x55, 0x55, 0xf5, 0x5d, 0x5d, 0xf5, 0x5d, 0x5d, 0x40, 0x50, 0x40, 0x50, + 0x50, 0x51, 0x51, 0x55, 0xbf, 0x05, 0xcf, 0x03, 0x0c, 0xbf, 0x03, 0x0c, 0x3c, 0x0c, 0xff, 0x3f, + 0x03, 0xbf, 0x03, 0xc0, 0x00, 0x00, 0xc3, 0xbf, 0x04, 0x03, 0x03, 0xf3, 0xff, 0x30, 0x30, 0xfc, + 0xfc, 0xcf, 0x04, 0xff, 0xbf, 0x06, 0xc0, 0xfc, 0x0c, 0xbf, 0x03, 0x0c, 0x0c, 0x3c, 0x0f, 0xbf, + 0x04, 0xc0, 0x00, 0x03, 0x03, 0x3f, 0x0f, 0x03, 0x03, 0xcf, 0x0c, 0xff, 0xcf, 0x04, 0xfc, 0xcf, + 0x04, 0xf0, 0xbf, 0x16, 0x01, 0x01, 0xcf, 0x15, 0x55, 0x5a, 0x56, 0x56, 0xcf, 0x05, 0x5a, 0x6a, + 0xaa, 0xaa, 0xcf, 0x08, 0x95, 0xcf, 0x08, 0x55, 0x69, 0x65, 0x65, 0xcf, 0x1d, 0x55, 0xcf, 0x08, + 0x9d, 0xcf, 0x04, 0xd5, 0xcf, 0x04, 0xd4, 0xcf, 0x04, 0x55, 0x04, 0x54, 0x44, 0x04, 0xcf, 0x04, + 0x55, 0x04, 0x44, 0x14, 0x44, 0xcf, 0x04, 0x55, 0x04, 0x44, 0x04, 0x44, 0xcf, 0x04, 0x55, 0x04, + 0x44, 0x04, 0x54, 0xcf, 0x04, 0x55, 0x44, 0x44, 0x04, 0x44, 0xcf, 0x04, 0x55, 0x40, 0x45, 0x45, + 0x40, 0xcf, 0x04, 0x55, 0xcf, 0x04, 0x54, 0xcf, 0x04, 0x55, 0x04, 0x44, 0x04, 0x44, 0xcf, 0x04, + 0x55, 0x04, 0x45, 0x15, 0x45, 0xcf, 0x04, 0x55, 0x05, 0xcf, 0x03, 0x15, 0xcf, 0x0c, 0x55, 0x41, + 0x44, 0x41, 0x40, 0xcf, 0x04, 0x55, 0x44, 0x44, 0x51, 0x51, 0xcf, 0x08, 0x55, 0x0c, 0x0f, 0x40, + 0x43, 0x43, 0x53, 0x53, 0x50, 0xcf, 0x04, 0xff, 0x3f, 0x3f, 0x3b, 0x3b, 0xff, 0xfb, 0xff, 0xfb, + 0xcf, 0x05, 0xff, 0xf3, 0xf3, 0xcf, 0x03, 0xc3, 0xcf, 0x13, 0xff, 0xfe, 0xcf, 0x07, 0xff, 0xaf, + 0xcf, 0x16, 0xff, 0xf0, 0xc0, 0xc0, 0xcf, 0x03, 0xc3, 0x03, 0x03, 0x00, 0x00, 0x3f, 0xcf, 0x04, + 0xff, 0xfc, 0x00, 0xcf, 0x05, 0xc0, 0x00, 0x00, 0xcf, 0x08, 0x01, 0xcf, 0x18, 0x55, 0xaa, 0x6a, + 0x6a, 0x59, 0x55, 0x55, 0x56, 0x56, 0x95, 0xcf, 0x06, 0x55, 0xa5, 0xcf, 0x28, 0x55, 0xcf, 0x08, + 0x9d, 0xcf, 0x04, 0xd5, 0xcf, 0x04, 0xd7, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0x5d, 0xf5, 0xcf, 0x04, + 0x55, 0xff, 0xd5, 0xd5, 0xfd, 0xcf, 0x04, 0x55, 0xcf, 0x04, 0x75, 0xcf, 0x04, 0x55, 0xcf, 0x04, + 0x5d, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0x75, 0x7f, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0x75, 0xf5, 0xcf, + 0x04, 0x55, 0x5f, 0xcf, 0x03, 0x5d, 0xcf, 0x04, 0x55, 0xf5, 0xcf, 0x03, 0x5d, 0xcf, 0x04, 0x55, + 0xff, 0xd5, 0xd5, 0xff, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0xdd, 0xdf, 0xcf, 0x04, 0x55, 0xcf, 0x03, + 0x5d, 0xfd, 0xcf, 0x0f, 0x55, 0x51, 0xcf, 0x06, 0x55, 0x45, 0x45, 0xcf, 0x06, 0x54, 0x55, 0x55, + 0xff, 0xef, 0xef, 0xff, 0xff, 0xcf, 0x03, 0x3f, 0xcf, 0x04, 0xff, 0xfc, 0xfc, 0xf0, 0xf0, 0xcf, + 0x02, 0xcf, 0x0f, 0xcf, 0x03, 0x3f, 0xcf, 0x0e, 0xff, 0xcf, 0x03, 0xfc, 0xcf, 0x07, 0xff, 0x3f, + 0x3f, 0xcf, 0x10, 0xff, 0xcf, 0x05, 0xfc, 0xcf, 0x03, 0xf0, 0xcf, 0x03, 0x0f, 0xcf, 0x03, 0x3f, + 0xff, 0xff, 0xcf, 0x08, 0xc0, 0xbf, 0x08, 0xcf, 0x08, 0x01, 0xcf, 0x09, 0x55, 0x5a, 0xaa, 0xcf, + 0x06, 0x5a, 0xaa, 0xaa, 0xa9, 0xa9, 0xa5, 0xa5, 0x96, 0x96, 0xcf, 0x04, 0x56, 0x66, 0xa6, 0xcf, + 0x03, 0xaa, 0xa9, 0xa9, 0xaa, 0xcf, 0x03, 0xa5, 0x55, 0x56, 0x5a, 0xaa, 0xaa, 0xcf, 0x03, 0x55, + 0x95, 0x95, 0xa5, 0xa5, 0xa9, 0xcf, 0x1b, 0x55, 0xcf, 0x08, 0x9d, 0xd7, 0xd7, 0xcf, 0x06, 0xd5, + 0x5d, 0x5d, 0xcf, 0x06, 0x55, 0xd5, 0xff, 0xcf, 0x06, 0x55, 0x75, 0x7f, 0xcf, 0x04, 0x55, 0x45, + 0x45, 0x5d, 0xdf, 0xcf, 0x04, 0x55, 0x51, 0x51, 0x57, 0xf7, 0xcf, 0x04, 0x55, 0x45, 0x45, 0xcf, + 0x06, 0x55, 0x51, 0x51, 0x5d, 0x5f, 0xcf, 0x04, 0x55, 0x45, 0x45, 0x5d, 0xf5, 0xcf, 0x04, 0x55, + 0x51, 0x51, 0xd5, 0xd5, 0xcf, 0x04, 0x55, 0x45, 0x45, 0xd5, 0xd5, 0xcf, 0x04, 0x55, 0x51, 0x51, + 0xd5, 0xd5, 0xcf, 0x04, 0x55, 0x4a, 0x4a, 0x55, 0x55, 0x50, 0x52, 0xcf, 0x04, 0xa2, 0x51, 0x51, + 0x01, 0x80, 0xcf, 0x04, 0x8a, 0x45, 0x45, 0x40, 0x02, 0xcf, 0x04, 0xa2, 0x55, 0x55, 0x05, 0xcf, + 0x05, 0x85, 0xcf, 0x03, 0x3f, 0x0f, 0x4f, 0x4c, 0x4c, 0x40, 0xf0, 0xf0, 0xc3, 0xc0, 0xc0, 0xcf, + 0x03, 0xfc, 0xff, 0xff, 0x3f, 0x0f, 0x03, 0xbf, 0x03, 0xcf, 0x03, 0xff, 0xfc, 0xc0, 0xbf, 0x03, + 0xff, 0xff, 0xfc, 0x3f, 0xcf, 0x03, 0x03, 0x0f, 0x3f, 0xcf, 0x03, 0x0f, 0xfb, 0xfb, 0xcf, 0x12, + 0xff, 0xfc, 0xcf, 0x0f, 0xff, 0xcf, 0x04, 0xc0, 0xcf, 0x04, 0xf0, 0xbf, 0x08, 0xcf, 0x05, 0x01, + 0xcf, 0x03, 0x05, 0x5a, 0xcf, 0x07, 0x55, 0xaa, 0x95, 0x45, 0x45, 0xcf, 0x03, 0x51, 0x41, 0xaa, + 0x56, 0x56, 0x5a, 0x5a, 0x59, 0x59, 0x45, 0x56, 0x56, 0x96, 0xa6, 0xcf, 0x04, 0x56, 0xcf, 0x03, + 0xa5, 0xaa, 0xa5, 0x95, 0x95, 0x55, 0xcf, 0x03, 0x56, 0xaa, 0x6a, 0xcf, 0x03, 0x69, 0xcf, 0x20, + 0x55, 0xcf, 0x08, 0x9d, 0xcf, 0x08, 0xd5, 0xcf, 0x10, 0x55, 0x40, 0x02, 0xcf, 0x04, 0x52, 0x02, + 0x40, 0x01, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, 0x02, 0x40, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, + 0x80, 0x01, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, 0x02, 0x40, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, + 0x80, 0x01, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, 0x02, 0x40, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, + 0x80, 0x01, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, 0x02, 0x40, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, + 0x80, 0x02, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, 0x05, 0x80, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, + 0x50, 0x02, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, 0x01, 0x85, 0x01, 0x31, 0xc1, 0x31, 0xc1, 0x01, + 0x55, 0x50, 0x53, 0x50, 0x50, 0x53, 0x54, 0x54, 0x55, 0xcf, 0x03, 0x30, 0x00, 0x00, 0x30, 0x03, + 0xbf, 0x04, 0x0c, 0x3f, 0x33, 0xc0, 0xbf, 0x03, 0x03, 0x0f, 0x3f, 0xf3, 0xc0, 0x00, 0x0f, 0xcf, + 0x06, 0xff, 0x3f, 0xcf, 0x1d, 0xff, 0xfc, 0xfc, 0xf0, 0xcf, 0x03, 0xff, 0xcf, 0x02, 0xbf, 0xcf, + 0x03, 0xff, 0xcf, 0x03, 0xf0, 0xc0, 0xc0, 0xcc, 0xff, 0xff, 0xbf, 0x06, 0x01, 0x01, 0x05, 0xcf, + 0x03, 0x15, 0xcf, 0x07, 0x55, 0x50, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0x40, 0x00, 0x55, 0xf5, 0xff, + 0xf5, 0x45, 0x15, 0x10, 0x00, 0x55, 0x5d, 0xfd, 0x5f, 0x46, 0x05, 0x01, 0x01, 0xcf, 0x08, 0x55, + 0xcf, 0x03, 0xd5, 0xf5, 0x69, 0xa9, 0xa9, 0xa5, 0x95, 0xcf, 0x23, 0x55, 0xcf, 0x08, 0x9d, 0xcf, + 0x08, 0xd5, 0x55, 0x55, 0x45, 0x45, 0x40, 0x02, 0x52, 0x52, 0x55, 0x55, 0x51, 0x51, 0x01, 0x80, + 0x83, 0x8c, 0xcf, 0x04, 0x4a, 0x40, 0x02, 0x32, 0xc2, 0xcf, 0x04, 0xa2, 0x02, 0x80, 0x83, 0x8c, + 0xcf, 0x04, 0x8a, 0x80, 0x02, 0x32, 0xc2, 0xcf, 0x04, 0xa2, 0x02, 0x80, 0x83, 0x8c, 0xcf, 0x04, + 0x8a, 0x80, 0x02, 0x32, 0xc2, 0xcf, 0x04, 0xa2, 0x02, 0x80, 0x83, 0x8c, 0xcf, 0x04, 0x8a, 0x80, + 0x02, 0x32, 0xc2, 0xcf, 0x04, 0xa2, 0x02, 0x80, 0x83, 0x8c, 0xcf, 0x04, 0x85, 0x80, 0x01, 0x31, + 0xc1, 0xcf, 0x10, 0x55, 0xcf, 0x05, 0x51, 0xcf, 0x0b, 0x55, 0xcf, 0x03, 0x54, 0xcf, 0x05, 0x55, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x4c, 0x40, 0xbf, 0x04, 0x0c, 0x0f, 0x03, 0x03, 0xbf, 0x03, + 0x03, 0x0f, 0xff, 0xff, 0xfc, 0x0f, 0xbf, 0x03, 0xff, 0xff, 0x0f, 0x0f, 0xff, 0xcf, 0x01, 0xcf, + 0x0f, 0x0f, 0xcf, 0x01, 0xcf, 0xcf, 0x10, 0xff, 0xfc, 0xfc, 0xf0, 0xf3, 0xc3, 0xc3, 0x33, 0x0f, + 0x0f, 0xcf, 0x01, 0xcf, 0x0f, 0xcf, 0x10, 0xff, 0x01, 0x01, 0xc1, 0xf1, 0xf0, 0xfc, 0xfc, 0xff, + 0xcf, 0x05, 0x55, 0x15, 0x15, 0x05, 0xcf, 0x08, 0x55, 0xf5, 0xff, 0xcf, 0x03, 0xfd, 0xff, 0xfd, + 0xfd, 0x5f, 0xff, 0xcf, 0x03, 0x7f, 0xff, 0x7f, 0x7f, 0x55, 0x55, 0xd5, 0xd5, 0x55, 0x55, 0x57, + 0x57, 0xf5, 0xf5, 0xff, 0xcf, 0x03, 0xf5, 0xff, 0xf5, 0x55, 0x57, 0xff, 0x55, 0x54, 0x00, 0xcf, + 0x04, 0x55, 0xd5, 0x55, 0x55, 0x15, 0xcf, 0x1a, 0x55, 0xcf, 0x05, 0x9d, 0xcf, 0x03, 0x55, 0xcf, + 0x05, 0xd5, 0xcf, 0x03, 0x55, 0x52, 0x52, 0x02, 0x40, 0xcf, 0x04, 0x4a, 0x83, 0x8c, 0x80, 0x02, + 0xcf, 0x04, 0xa2, 0x32, 0xc2, 0x02, 0x80, 0xcf, 0x04, 0x8a, 0x83, 0x8c, 0x80, 0x02, 0xcf, 0x04, + 0xa2, 0x32, 0xc2, 0x02, 0x80, 0xcf, 0x04, 0x8a, 0x83, 0x8c, 0x80, 0x02, 0xcf, 0x04, 0xa2, 0x32, + 0xc2, 0x02, 0x80, 0xcf, 0x04, 0x85, 0x83, 0x8c, 0x80, 0x01, 0x51, 0x51, 0x55, 0x55, 0x32, 0xc2, + 0x02, 0x40, 0x45, 0x45, 0x55, 0x55, 0x83, 0x8c, 0x80, 0x01, 0x51, 0x51, 0x55, 0x55, 0x31, 0xc1, + 0x01, 0x40, 0x45, 0x45, 0xcf, 0x2a, 0x55, 0x4c, 0x40, 0x50, 0xcf, 0x03, 0x53, 0x50, 0x54, 0xc0, + 0x00, 0x30, 0x30, 0x00, 0x03, 0x0f, 0x0f, 0xbf, 0x05, 0xcf, 0x03, 0xff, 0x0f, 0xcf, 0x03, 0x03, + 0x0f, 0x0f, 0xcf, 0x0f, 0xff, 0xfc, 0xf0, 0xc0, 0xf0, 0xc0, 0xc0, 0xbf, 0x03, 0x0c, 0x0c, 0xcf, + 0x06, 0x3f, 0xcf, 0x1a, 0xff, 0xc1, 0xc1, 0xf0, 0xfc, 0xfc, 0xcf, 0x03, 0xff, 0x55, 0x55, 0x57, + 0x57, 0x17, 0x07, 0x07, 0xc3, 0xfd, 0xcf, 0x07, 0xf5, 0x7f, 0x7f, 0xcf, 0x06, 0x7d, 0xcf, 0x08, + 0x57, 0xf5, 0xf5, 0xff, 0xcf, 0x04, 0xf5, 0xff, 0x54, 0x50, 0xf5, 0xcf, 0x03, 0x57, 0x5f, 0x5f, + 0x55, 0x15, 0xcf, 0x04, 0x55, 0xd5, 0xd5, 0xcf, 0x11, 0x55, 0x40, 0x43, 0x4c, 0x43, 0x4c, 0x40, + 0x55, 0x50, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, 0x40, 0x05, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, + 0x02, 0x40, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, 0x80, 0x02, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, + 0x01, 0x80, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, 0x40, 0x02, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, + 0x01, 0x80, 0x02, 0x32, 0xc2, 0x32, 0xc2, 0x02, 0x40, 0x02, 0x80, 0x83, 0x8c, 0x83, 0x8c, 0x80, + 0x01, 0x80, 0x01, 0x31, 0xc1, 0x31, 0xc1, 0x01, 0x40, 0xcf, 0x48, 0x55, 0xcf, 0x03, 0x54, 0xcf, + 0x05, 0x55, 0xcf, 0x01, 0xcf, 0x0f, 0x33, 0x00, 0x33, 0x40, 0x50, 0x54, 0xcf, 0x03, 0xff, 0x3f, + 0x00, 0x00, 0xc0, 0x0c, 0xcf, 0x04, 0xff, 0x03, 0x0c, 0x00, 0x00, 0xff, 0xfc, 0xfc, 0xcc, 0xbf, + 0x03, 0x0c, 0xcc, 0xcc, 0xc0, 0xc0, 0x00, 0xc0, 0x00, 0xcf, 0x03, 0x0c, 0xcc, 0xc0, 0xcf, 0x03, + 0xc3, 0x0f, 0xcf, 0x15, 0xff, 0xdf, 0xcf, 0x09, 0xff, 0xfd, 0xcf, 0x08, 0xff, 0xf3, 0xf0, 0xfc, + 0xfc, 0xcf, 0x04, 0xff, 0xd5, 0xd7, 0x15, 0x05, 0x01, 0xc0, 0xf0, 0xfc, 0x7d, 0xfd, 0xf5, 0x75, + 0x55, 0x55, 0x15, 0x05, 0xcf, 0x03, 0x57, 0xcf, 0x05, 0x55, 0xcf, 0x06, 0xff, 0x55, 0x55, 0xcf, + 0x05, 0xff, 0xd5, 0x55, 0x55, 0xd5, 0xd5, 0xcf, 0x03, 0xf5, 0xcf, 0x1b, 0x55, 0xcf, 0x04, 0x4a, + 0x40, 0x42, 0x52, 0x52, 0xcf, 0x04, 0xa2, 0x02, 0x80, 0x83, 0x8c, 0xcf, 0x04, 0x8a, 0x80, 0x01, + 0x31, 0xc1, 0xcf, 0x04, 0xa1, 0x01, 0xcf, 0x03, 0x55, 0x45, 0x45, 0xcf, 0x06, 0x55, 0x51, 0x51, + 0xcf, 0x06, 0x55, 0x45, 0x45, 0xcf, 0x06, 0x55, 0x51, 0x51, 0xcf, 0x06, 0x55, 0x45, 0x45, 0xcf, + 0x44, 0x55, 0x54, 0x54, 0xcf, 0x04, 0x55, 0x54, 0x40, 0x00, 0x0d, 0xcf, 0x03, 0x55, 0x40, 0x00, + 0x0f, 0x3f, 0xdf, 0xcf, 0x03, 0x55, 0x15, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x50, 0x50, 0x00, 0x03, + 0x3f, 0xff, 0xff, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0xc0, 0xc0, 0xbf, 0x05, 0x0c, 0x0c, 0x00, + 0xcf, 0x03, 0x0c, 0xcc, 0xf0, 0xcc, 0xc0, 0xc3, 0x0f, 0xff, 0x3f, 0x3f, 0xcf, 0x07, 0xff, 0xf7, + 0xff, 0x7d, 0xdd, 0xcf, 0x04, 0xff, 0xfd, 0x5f, 0xf7, 0x55, 0x5d, 0xdf, 0x7f, 0xf7, 0xff, 0xdf, + 0x5d, 0x55, 0x55, 0xff, 0xff, 0x77, 0xfd, 0xf7, 0xdf, 0x55, 0x55, 0xff, 0xff, 0xdd, 0xff, 0xdf, + 0xfd, 0xf5, 0x55, 0xcf, 0x03, 0xff, 0xfd, 0xdf, 0x77, 0x55, 0x55, 0xcf, 0x05, 0xff, 0x77, 0xd5, + 0x57, 0x05, 0xc1, 0xf0, 0xfc, 0x7f, 0xdf, 0x57, 0xcf, 0x04, 0x55, 0x15, 0x05, 0x45, 0x75, 0xd5, + 0xcf, 0x0a, 0x55, 0xcf, 0x06, 0x5d, 0x55, 0x55, 0xcf, 0x06, 0xd9, 0xcf, 0x18, 0x55, 0xcf, 0x03, + 0x52, 0x50, 0xcf, 0x03, 0x55, 0x9d, 0x83, 0x8c, 0x80, 0x05, 0xcf, 0x03, 0x55, 0xd5, 0x31, 0xc1, + 0x01, 0xcf, 0x05, 0x55, 0x50, 0xcf, 0x03, 0x51, 0x50, 0xcf, 0x03, 0x55, 0x10, 0x51, 0x50, 0x51, + 0x11, 0xcf, 0x03, 0x55, 0x50, 0x11, 0x50, 0x11, 0x11, 0xcf, 0x03, 0x55, 0x10, 0xcf, 0x03, 0x11, + 0x10, 0xcf, 0x03, 0x55, 0x11, 0x51, 0x50, 0x51, 0x11, 0xcf, 0x03, 0x55, 0x10, 0x11, 0x50, 0x11, + 0x10, 0xcf, 0x03, 0x55, 0x10, 0x51, 0x11, 0x51, 0x10, 0xcf, 0x04, 0x55, 0xcf, 0x03, 0x15, 0xcf, + 0x04, 0x55, 0x05, 0x11, 0x05, 0x11, 0x05, 0xcf, 0x03, 0x55, 0x11, 0x11, 0xcf, 0x03, 0x45, 0xcf, + 0x03, 0x55, 0x50, 0xcf, 0x04, 0x54, 0xcf, 0x03, 0x55, 0x10, 0x51, 0x50, 0x51, 0x50, 0xcf, 0x03, + 0x55, 0x50, 0x11, 0x51, 0x11, 0x50, 0xcf, 0x03, 0x55, 0x15, 0xcf, 0x03, 0x55, 0x15, 0xcf, 0x03, + 0x55, 0x75, 0xcf, 0x07, 0x55, 0xf7, 0xcf, 0x07, 0x55, 0xdf, 0xff, 0x7d, 0xff, 0x7f, 0x77, 0xff, + 0x5f, 0xcf, 0x08, 0xff, 0xc0, 0xf0, 0xf0, 0xfc, 0xf0, 0xf0, 0xc0, 0xc0, 0xcc, 0xcc, 0xc0, 0x0c, + 0xcf, 0x01, 0xcf, 0xcc, 0xc0, 0xcc, 0xc3, 0xc3, 0x0f, 0xce, 0x0e, 0xcf, 0x01, 0xcf, 0x00, 0xc0, + 0xcf, 0x06, 0xff, 0x3f, 0x0f, 0xfd, 0xd5, 0xf7, 0x75, 0xfd, 0xdd, 0xf5, 0xfd, 0xcf, 0x03, 0x55, + 0x7f, 0xcf, 0x04, 0x75, 0xcf, 0x04, 0x55, 0xd5, 0xd5, 0xdf, 0xd7, 0xcf, 0x04, 0x55, 0xd5, 0xd5, + 0xf7, 0xd5, 0xcf, 0x06, 0x55, 0xfd, 0xf5, 0xcf, 0x06, 0x55, 0xff, 0xd7, 0xcf, 0x03, 0x55, 0x75, + 0xd7, 0xd7, 0xff, 0xd7, 0xcf, 0x04, 0x55, 0x57, 0x57, 0xd7, 0x57, 0x5d, 0xcf, 0x05, 0x55, 0xff, + 0xdd, 0xcf, 0x04, 0x55, 0x5f, 0x5f, 0xdd, 0x55, 0xcf, 0x06, 0x5d, 0xdd, 0x5d, 0xcf, 0x08, 0xd9, + 0xcf, 0x17, 0x55, 0x5f, 0xcf, 0x07, 0x9d, 0xff, 0xcf, 0x07, 0xd5, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0x77, 0x5f, 0xd7, 0xcf, 0x04, 0x55, 0xff, 0xff, 0xdd, 0x75, 0xcf, 0x04, 0x56, 0xf5, 0xc4, 0xcc, + 0xcc, 0x4d, 0x4c, 0xcc, 0xc4, 0xcc, 0xcc, 0xcf, 0x01, 0xcf, 0x0f, 0x3d, 0x3f, 0x37, 0x15, 0x1f, + 0x3c, 0xff, 0xff, 0xf7, 0x7f, 0x5d, 0x55, 0xff, 0x03, 0xf0, 0xff, 0xdf, 0xff, 0xdf, 0x55, 0xff, + 0xf5, 0xdf, 0xfd, 0xd5, 0xdd, 0x75, 0x55, 0xff, 0x75, 0x75, 0x7f, 0xcf, 0x04, 0x55, 0xff, 0xff, + 0xf7, 0x7f, 0xcf, 0x04, 0x55, 0xff, 0xdf, 0xdd, 0xff, 0xcf, 0x04, 0x55, 0xff, 0xff, 0xcf, 0x03, + 0xd7, 0xff, 0x55, 0x55, 0xff, 0xd7, 0xd7, 0xff, 0xcf, 0x04, 0x55, 0xff, 0xcf, 0x03, 0xd7, 0xcf, + 0x04, 0x55, 0xff, 0x57, 0x57, 0xd7, 0xcf, 0x04, 0x55, 0xff, 0xdd, 0xdd, 0xdf, 0xcf, 0x04, 0x55, + 0xff, 0x55, 0x55, 0xdd, 0xcf, 0x04, 0x55, 0xff, 0xcf, 0x07, 0x5d, 0xff, 0xcf, 0x07, 0xd9, 0xff, + 0xcf, 0x07, 0x55, 0xd5, 0xcf, 0x08, 0x55, 0xcf, 0x08, 0x5d, 0x9d, 0x9d, 0x9f, 0x95, 0x95, 0xaa, + 0x55, 0x55, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xea, 0xd5, 0xd5, 0x55, 0x55, 0xff, 0x55, 0x55, 0xaa, + 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, + 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, + 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, + 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, + 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, + 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, + 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, + 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0x55, 0x55, + 0x4c, 0x4c, 0x47, 0x45, 0x45, 0x46, 0x45, 0xcf, 0x03, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, + 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, + 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, + 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, + 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, + 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, 0x55, 0xaa, 0xcf, 0x04, 0x55, 0xff, 0x55, + 0x55, 0xaa, 0x55, 0x55, 0x5d, 0x5d, 0xff, 0x5d, 0x5d, 0xae, 0x5d, 0x5d, 0xcf, 0x03, 0xd9, 0x59, + 0x59, 0xa9, 0x55, 0x55, 0xcf, 0x08, 0xd5, 0xcf, 0x03, 0x55, 0xcf, 0x03, 0x95, 0xa5, 0xaa, 0x5f, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xd5, 0xcf, 0x00, 0x55, 0xcf, 0x0f, 0x55, 0x5f, 0xcf, + 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xd5, 0x55, 0x55, 0xcf, 0x03, 0x56, 0x5a, 0xaa, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, + 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0xcf, 0x07, 0x55, 0xff, 0x77, 0x5f, 0xd7, 0xcf, + 0x04, 0x55, 0xff, 0xff, 0xdd, 0x75, 0xcf, 0x04, 0x56, 0xf5, 0xc4, 0xcc, 0xcc, 0x4d, 0x4c, 0xcc, + 0xc4, 0xcc, 0xcc, 0xcf, 0x01, 0xcf, 0x0f, 0x3d, 0x3f, 0x37, 0x15, 0x1f, 0x3c, 0xff, 0xff, 0xf7, + 0x7f, 0x5d, 0x55, 0xff, 0x03, 0xf0, 0xff, 0xdf, 0xff, 0xdf, +}; + +#endif diff --git a/Src/Basic_ROM.h b/Src/Basic_ROM.h new file mode 100644 index 0000000..472dd57 --- /dev/null +++ b/Src/Basic_ROM.h @@ -0,0 +1,1033 @@ +/* + * Basic_ROM.h - C64 BASIC ROM + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * C64/1541 ROMs (C) Commodore Business Machines + */ + +static const uint8 builtin_basic_rom[BASIC_ROM_SIZE] = { + 0x94, 0xe3, 0x7b, 0xe3, 0x43, 0x42, 0x4d, 0x42, + 0x41, 0x53, 0x49, 0x43, 0x30, 0xa8, 0x41, 0xa7, + 0x1d, 0xad, 0xf7, 0xa8, 0xa4, 0xab, 0xbe, 0xab, + 0x80, 0xb0, 0x05, 0xac, 0xa4, 0xa9, 0x9f, 0xa8, + 0x70, 0xa8, 0x27, 0xa9, 0x1c, 0xa8, 0x82, 0xa8, + 0xd1, 0xa8, 0x3a, 0xa9, 0x2e, 0xa8, 0x4a, 0xa9, + 0x2c, 0xb8, 0x67, 0xe1, 0x55, 0xe1, 0x64, 0xe1, + 0xb2, 0xb3, 0x23, 0xb8, 0x7f, 0xaa, 0x9f, 0xaa, + 0x56, 0xa8, 0x9b, 0xa6, 0x5d, 0xa6, 0x85, 0xaa, + 0x29, 0xe1, 0xbd, 0xe1, 0xc6, 0xe1, 0x7a, 0xab, + 0x41, 0xa6, 0x39, 0xbc, 0xcc, 0xbc, 0x58, 0xbc, + 0x10, 0x03, 0x7d, 0xb3, 0x9e, 0xb3, 0x71, 0xbf, + 0x97, 0xe0, 0xea, 0xb9, 0xed, 0xbf, 0x64, 0xe2, + 0x6b, 0xe2, 0xb4, 0xe2, 0x0e, 0xe3, 0x0d, 0xb8, + 0x7c, 0xb7, 0x65, 0xb4, 0xad, 0xb7, 0x8b, 0xb7, + 0xec, 0xb6, 0x00, 0xb7, 0x2c, 0xb7, 0x37, 0xb7, + 0x79, 0x69, 0xb8, 0x79, 0x52, 0xb8, 0x7b, 0x2a, + 0xba, 0x7b, 0x11, 0xbb, 0x7f, 0x7a, 0xbf, 0x50, + 0xe8, 0xaf, 0x46, 0xe5, 0xaf, 0x7d, 0xb3, 0xbf, + 0x5a, 0xd3, 0xae, 0x64, 0x15, 0xb0, 0x45, 0x4e, + 0xc4, 0x46, 0x4f, 0xd2, 0x4e, 0x45, 0x58, 0xd4, + 0x44, 0x41, 0x54, 0xc1, 0x49, 0x4e, 0x50, 0x55, + 0x54, 0xa3, 0x49, 0x4e, 0x50, 0x55, 0xd4, 0x44, + 0x49, 0xcd, 0x52, 0x45, 0x41, 0xc4, 0x4c, 0x45, + 0xd4, 0x47, 0x4f, 0x54, 0xcf, 0x52, 0x55, 0xce, + 0x49, 0xc6, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, + 0xc5, 0x47, 0x4f, 0x53, 0x55, 0xc2, 0x52, 0x45, + 0x54, 0x55, 0x52, 0xce, 0x52, 0x45, 0xcd, 0x53, + 0x54, 0x4f, 0xd0, 0x4f, 0xce, 0x57, 0x41, 0x49, + 0xd4, 0x4c, 0x4f, 0x41, 0xc4, 0x53, 0x41, 0x56, + 0xc5, 0x56, 0x45, 0x52, 0x49, 0x46, 0xd9, 0x44, + 0x45, 0xc6, 0x50, 0x4f, 0x4b, 0xc5, 0x50, 0x52, + 0x49, 0x4e, 0x54, 0xa3, 0x50, 0x52, 0x49, 0x4e, + 0xd4, 0x43, 0x4f, 0x4e, 0xd4, 0x4c, 0x49, 0x53, + 0xd4, 0x43, 0x4c, 0xd2, 0x43, 0x4d, 0xc4, 0x53, + 0x59, 0xd3, 0x4f, 0x50, 0x45, 0xce, 0x43, 0x4c, + 0x4f, 0x53, 0xc5, 0x47, 0x45, 0xd4, 0x4e, 0x45, + 0xd7, 0x54, 0x41, 0x42, 0xa8, 0x54, 0xcf, 0x46, + 0xce, 0x53, 0x50, 0x43, 0xa8, 0x54, 0x48, 0x45, + 0xce, 0x4e, 0x4f, 0xd4, 0x53, 0x54, 0x45, 0xd0, + 0xab, 0xad, 0xaa, 0xaf, 0xde, 0x41, 0x4e, 0xc4, + 0x4f, 0xd2, 0xbe, 0xbd, 0xbc, 0x53, 0x47, 0xce, + 0x49, 0x4e, 0xd4, 0x41, 0x42, 0xd3, 0x55, 0x53, + 0xd2, 0x46, 0x52, 0xc5, 0x50, 0x4f, 0xd3, 0x53, + 0x51, 0xd2, 0x52, 0x4e, 0xc4, 0x4c, 0x4f, 0xc7, + 0x45, 0x58, 0xd0, 0x43, 0x4f, 0xd3, 0x53, 0x49, + 0xce, 0x54, 0x41, 0xce, 0x41, 0x54, 0xce, 0x50, + 0x45, 0x45, 0xcb, 0x4c, 0x45, 0xce, 0x53, 0x54, + 0x52, 0xa4, 0x56, 0x41, 0xcc, 0x41, 0x53, 0xc3, + 0x43, 0x48, 0x52, 0xa4, 0x4c, 0x45, 0x46, 0x54, + 0xa4, 0x52, 0x49, 0x47, 0x48, 0x54, 0xa4, 0x4d, + 0x49, 0x44, 0xa4, 0x47, 0xcf, 0x00, 0x54, 0x4f, + 0x4f, 0x20, 0x4d, 0x41, 0x4e, 0x59, 0x20, 0x46, + 0x49, 0x4c, 0x45, 0xd3, 0x46, 0x49, 0x4c, 0x45, + 0x20, 0x4f, 0x50, 0x45, 0xce, 0x46, 0x49, 0x4c, + 0x45, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4f, 0x50, + 0x45, 0xce, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x4e, + 0x4f, 0x54, 0x20, 0x46, 0x4f, 0x55, 0x4e, 0xc4, + 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x20, 0x4e, + 0x4f, 0x54, 0x20, 0x50, 0x52, 0x45, 0x53, 0x45, + 0x4e, 0xd4, 0x4e, 0x4f, 0x54, 0x20, 0x49, 0x4e, + 0x50, 0x55, 0x54, 0x20, 0x46, 0x49, 0x4c, 0xc5, + 0x4e, 0x4f, 0x54, 0x20, 0x4f, 0x55, 0x54, 0x50, + 0x55, 0x54, 0x20, 0x46, 0x49, 0x4c, 0xc5, 0x4d, + 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x20, 0x46, + 0x49, 0x4c, 0x45, 0x20, 0x4e, 0x41, 0x4d, 0xc5, + 0x49, 0x4c, 0x4c, 0x45, 0x47, 0x41, 0x4c, 0x20, + 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x20, 0x4e, + 0x55, 0x4d, 0x42, 0x45, 0xd2, 0x4e, 0x45, 0x58, + 0x54, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, + 0x54, 0x20, 0x46, 0x4f, 0xd2, 0x53, 0x59, 0x4e, + 0x54, 0x41, 0xd8, 0x52, 0x45, 0x54, 0x55, 0x52, + 0x4e, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, + 0x54, 0x20, 0x47, 0x4f, 0x53, 0x55, 0xc2, 0x4f, + 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x44, 0x41, + 0x54, 0xc1, 0x49, 0x4c, 0x4c, 0x45, 0x47, 0x41, + 0x4c, 0x20, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, + 0x54, 0xd9, 0x4f, 0x56, 0x45, 0x52, 0x46, 0x4c, + 0x4f, 0xd7, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, + 0x20, 0x4d, 0x45, 0x4d, 0x4f, 0x52, 0xd9, 0x55, + 0x4e, 0x44, 0x45, 0x46, 0x27, 0x44, 0x20, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x4d, 0x45, 0x4e, 0xd4, + 0x42, 0x41, 0x44, 0x20, 0x53, 0x55, 0x42, 0x53, + 0x43, 0x52, 0x49, 0x50, 0xd4, 0x52, 0x45, 0x44, + 0x49, 0x4d, 0x27, 0x44, 0x20, 0x41, 0x52, 0x52, + 0x41, 0xd9, 0x44, 0x49, 0x56, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x20, 0x42, 0x59, 0x20, 0x5a, 0x45, + 0x52, 0xcf, 0x49, 0x4c, 0x4c, 0x45, 0x47, 0x41, + 0x4c, 0x20, 0x44, 0x49, 0x52, 0x45, 0x43, 0xd4, + 0x54, 0x59, 0x50, 0x45, 0x20, 0x4d, 0x49, 0x53, + 0x4d, 0x41, 0x54, 0x43, 0xc8, 0x53, 0x54, 0x52, + 0x49, 0x4e, 0x47, 0x20, 0x54, 0x4f, 0x4f, 0x20, + 0x4c, 0x4f, 0x4e, 0xc7, 0x46, 0x49, 0x4c, 0x45, + 0x20, 0x44, 0x41, 0x54, 0xc1, 0x46, 0x4f, 0x52, + 0x4d, 0x55, 0x4c, 0x41, 0x20, 0x54, 0x4f, 0x4f, + 0x20, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0xd8, + 0x43, 0x41, 0x4e, 0x27, 0x54, 0x20, 0x43, 0x4f, + 0x4e, 0x54, 0x49, 0x4e, 0x55, 0xc5, 0x55, 0x4e, + 0x44, 0x45, 0x46, 0x27, 0x44, 0x20, 0x46, 0x55, + 0x4e, 0x43, 0x54, 0x49, 0x4f, 0xce, 0x56, 0x45, + 0x52, 0x49, 0x46, 0xd9, 0x4c, 0x4f, 0x41, 0xc4, + 0x9e, 0xa1, 0xac, 0xa1, 0xb5, 0xa1, 0xc2, 0xa1, + 0xd0, 0xa1, 0xe2, 0xa1, 0xf0, 0xa1, 0xff, 0xa1, + 0x10, 0xa2, 0x25, 0xa2, 0x35, 0xa2, 0x3b, 0xa2, + 0x4f, 0xa2, 0x5a, 0xa2, 0x6a, 0xa2, 0x72, 0xa2, + 0x7f, 0xa2, 0x90, 0xa2, 0x9d, 0xa2, 0xaa, 0xa2, + 0xba, 0xa2, 0xc8, 0xa2, 0xd5, 0xa2, 0xe4, 0xa2, + 0xed, 0xa2, 0x00, 0xa3, 0x0e, 0xa3, 0x1e, 0xa3, + 0x24, 0xa3, 0x83, 0xa3, 0x0d, 0x4f, 0x4b, 0x0d, + 0x00, 0x20, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x00, 0x20, 0x49, 0x4e, 0x20, 0x00, 0x0d, 0x0a, + 0x52, 0x45, 0x41, 0x44, 0x59, 0x2e, 0x0d, 0x0a, + 0x00, 0x0d, 0x0a, 0x42, 0x52, 0x45, 0x41, 0x4b, + 0x00, 0xa0, 0xba, 0xe8, 0xe8, 0xe8, 0xe8, 0xbd, + 0x01, 0x01, 0xc9, 0x81, 0xd0, 0x21, 0xa5, 0x4a, + 0xd0, 0x0a, 0xbd, 0x02, 0x01, 0x85, 0x49, 0xbd, + 0x03, 0x01, 0x85, 0x4a, 0xdd, 0x03, 0x01, 0xd0, + 0x07, 0xa5, 0x49, 0xdd, 0x02, 0x01, 0xf0, 0x07, + 0x8a, 0x18, 0x69, 0x12, 0xaa, 0xd0, 0xd8, 0x60, + 0x20, 0x08, 0xa4, 0x85, 0x31, 0x84, 0x32, 0x38, + 0xa5, 0x5a, 0xe5, 0x5f, 0x85, 0x22, 0xa8, 0xa5, + 0x5b, 0xe5, 0x60, 0xaa, 0xe8, 0x98, 0xf0, 0x23, + 0xa5, 0x5a, 0x38, 0xe5, 0x22, 0x85, 0x5a, 0xb0, + 0x03, 0xc6, 0x5b, 0x38, 0xa5, 0x58, 0xe5, 0x22, + 0x85, 0x58, 0xb0, 0x08, 0xc6, 0x59, 0x90, 0x04, + 0xb1, 0x5a, 0x91, 0x58, 0x88, 0xd0, 0xf9, 0xb1, + 0x5a, 0x91, 0x58, 0xc6, 0x5b, 0xc6, 0x59, 0xca, + 0xd0, 0xf2, 0x60, 0x0a, 0x69, 0x3e, 0xb0, 0x35, + 0x85, 0x22, 0xba, 0xe4, 0x22, 0x90, 0x2e, 0x60, + 0xc4, 0x34, 0x90, 0x28, 0xd0, 0x04, 0xc5, 0x33, + 0x90, 0x22, 0x48, 0xa2, 0x09, 0x98, 0x48, 0xb5, + 0x57, 0xca, 0x10, 0xfa, 0x20, 0x26, 0xb5, 0xa2, + 0xf7, 0x68, 0x95, 0x61, 0xe8, 0x30, 0xfa, 0x68, + 0xa8, 0x68, 0xc4, 0x34, 0x90, 0x06, 0xd0, 0x05, + 0xc5, 0x33, 0xb0, 0x01, 0x60, 0xa2, 0x10, 0x6c, + 0x00, 0x03, 0x8a, 0x0a, 0xaa, 0xbd, 0x26, 0xa3, + 0x85, 0x22, 0xbd, 0x27, 0xa3, 0x85, 0x23, 0x20, + 0xcc, 0xff, 0xa9, 0x00, 0x85, 0x13, 0x20, 0xd7, + 0xaa, 0x20, 0x45, 0xab, 0xa0, 0x00, 0xb1, 0x22, + 0x48, 0x29, 0x7f, 0x20, 0x47, 0xab, 0xc8, 0x68, + 0x10, 0xf4, 0x20, 0x7a, 0xa6, 0xa9, 0x69, 0xa0, + 0xa3, 0x20, 0x1e, 0xab, 0xa4, 0x3a, 0xc8, 0xf0, + 0x03, 0x20, 0xc2, 0xbd, 0xa9, 0x76, 0xa0, 0xa3, + 0x20, 0x1e, 0xab, 0xa9, 0x80, 0x20, 0x90, 0xff, + 0x6c, 0x02, 0x03, 0x20, 0x60, 0xa5, 0x86, 0x7a, + 0x84, 0x7b, 0x20, 0x73, 0x00, 0xaa, 0xf0, 0xf0, + 0xa2, 0xff, 0x86, 0x3a, 0x90, 0x06, 0x20, 0x79, + 0xa5, 0x4c, 0xe1, 0xa7, 0x20, 0x6b, 0xa9, 0x20, + 0x79, 0xa5, 0x84, 0x0b, 0x20, 0x13, 0xa6, 0x90, + 0x44, 0xa0, 0x01, 0xb1, 0x5f, 0x85, 0x23, 0xa5, + 0x2d, 0x85, 0x22, 0xa5, 0x60, 0x85, 0x25, 0xa5, + 0x5f, 0x88, 0xf1, 0x5f, 0x18, 0x65, 0x2d, 0x85, + 0x2d, 0x85, 0x24, 0xa5, 0x2e, 0x69, 0xff, 0x85, + 0x2e, 0xe5, 0x60, 0xaa, 0x38, 0xa5, 0x5f, 0xe5, + 0x2d, 0xa8, 0xb0, 0x03, 0xe8, 0xc6, 0x25, 0x18, + 0x65, 0x22, 0x90, 0x03, 0xc6, 0x23, 0x18, 0xb1, + 0x22, 0x91, 0x24, 0xc8, 0xd0, 0xf9, 0xe6, 0x23, + 0xe6, 0x25, 0xca, 0xd0, 0xf2, 0x20, 0x59, 0xa6, + 0x20, 0x33, 0xa5, 0xad, 0x00, 0x02, 0xf0, 0x88, + 0x18, 0xa5, 0x2d, 0x85, 0x5a, 0x65, 0x0b, 0x85, + 0x58, 0xa4, 0x2e, 0x84, 0x5b, 0x90, 0x01, 0xc8, + 0x84, 0x59, 0x20, 0xb8, 0xa3, 0xa5, 0x14, 0xa4, + 0x15, 0x8d, 0xfe, 0x01, 0x8c, 0xff, 0x01, 0xa5, + 0x31, 0xa4, 0x32, 0x85, 0x2d, 0x84, 0x2e, 0xa4, + 0x0b, 0x88, 0xb9, 0xfc, 0x01, 0x91, 0x5f, 0x88, + 0x10, 0xf8, 0x20, 0x59, 0xa6, 0x20, 0x33, 0xa5, + 0x4c, 0x80, 0xa4, 0xa5, 0x2b, 0xa4, 0x2c, 0x85, + 0x22, 0x84, 0x23, 0x18, 0xa0, 0x01, 0xb1, 0x22, + 0xf0, 0x1d, 0xa0, 0x04, 0xc8, 0xb1, 0x22, 0xd0, + 0xfb, 0xc8, 0x98, 0x65, 0x22, 0xaa, 0xa0, 0x00, + 0x91, 0x22, 0xa5, 0x23, 0x69, 0x00, 0xc8, 0x91, + 0x22, 0x86, 0x22, 0x85, 0x23, 0x90, 0xdd, 0x60, + 0xa2, 0x00, 0x20, 0x12, 0xe1, 0xc9, 0x0d, 0xf0, + 0x0d, 0x9d, 0x00, 0x02, 0xe8, 0xe0, 0x59, 0x90, + 0xf1, 0xa2, 0x17, 0x4c, 0x37, 0xa4, 0x4c, 0xca, + 0xaa, 0x6c, 0x04, 0x03, 0xa6, 0x7a, 0xa0, 0x04, + 0x84, 0x0f, 0xbd, 0x00, 0x02, 0x10, 0x07, 0xc9, + 0xff, 0xf0, 0x3e, 0xe8, 0xd0, 0xf4, 0xc9, 0x20, + 0xf0, 0x37, 0x85, 0x08, 0xc9, 0x22, 0xf0, 0x56, + 0x24, 0x0f, 0x70, 0x2d, 0xc9, 0x3f, 0xd0, 0x04, + 0xa9, 0x99, 0xd0, 0x25, 0xc9, 0x30, 0x90, 0x04, + 0xc9, 0x3c, 0x90, 0x1d, 0x84, 0x71, 0xa0, 0x00, + 0x84, 0x0b, 0x88, 0x86, 0x7a, 0xca, 0xc8, 0xe8, + 0xbd, 0x00, 0x02, 0x38, 0xf9, 0x9e, 0xa0, 0xf0, + 0xf5, 0xc9, 0x80, 0xd0, 0x30, 0x05, 0x0b, 0xa4, + 0x71, 0xe8, 0xc8, 0x99, 0xfb, 0x01, 0xb9, 0xfb, + 0x01, 0xf0, 0x36, 0x38, 0xe9, 0x3a, 0xf0, 0x04, + 0xc9, 0x49, 0xd0, 0x02, 0x85, 0x0f, 0x38, 0xe9, + 0x55, 0xd0, 0x9f, 0x85, 0x08, 0xbd, 0x00, 0x02, + 0xf0, 0xdf, 0xc5, 0x08, 0xf0, 0xdb, 0xc8, 0x99, + 0xfb, 0x01, 0xe8, 0xd0, 0xf0, 0xa6, 0x7a, 0xe6, + 0x0b, 0xc8, 0xb9, 0x9d, 0xa0, 0x10, 0xfa, 0xb9, + 0x9e, 0xa0, 0xd0, 0xb4, 0xbd, 0x00, 0x02, 0x10, + 0xbe, 0x99, 0xfd, 0x01, 0xc6, 0x7b, 0xa9, 0xff, + 0x85, 0x7a, 0x60, 0xa5, 0x2b, 0xa6, 0x2c, 0xa0, + 0x01, 0x85, 0x5f, 0x86, 0x60, 0xb1, 0x5f, 0xf0, + 0x1f, 0xc8, 0xc8, 0xa5, 0x15, 0xd1, 0x5f, 0x90, + 0x18, 0xf0, 0x03, 0x88, 0xd0, 0x09, 0xa5, 0x14, + 0x88, 0xd1, 0x5f, 0x90, 0x0c, 0xf0, 0x0a, 0x88, + 0xb1, 0x5f, 0xaa, 0x88, 0xb1, 0x5f, 0xb0, 0xd7, + 0x18, 0x60, 0xd0, 0xfd, 0xa9, 0x00, 0xa8, 0x91, + 0x2b, 0xc8, 0x91, 0x2b, 0xa5, 0x2b, 0x18, 0x69, + 0x02, 0x85, 0x2d, 0xa5, 0x2c, 0x69, 0x00, 0x85, + 0x2e, 0x20, 0x8e, 0xa6, 0xa9, 0x00, 0xd0, 0x2d, + 0x20, 0xe7, 0xff, 0xa5, 0x37, 0xa4, 0x38, 0x85, + 0x33, 0x84, 0x34, 0xa5, 0x2d, 0xa4, 0x2e, 0x85, + 0x2f, 0x84, 0x30, 0x85, 0x31, 0x84, 0x32, 0x20, + 0x1d, 0xa8, 0xa2, 0x19, 0x86, 0x16, 0x68, 0xa8, + 0x68, 0xa2, 0xfa, 0x9a, 0x48, 0x98, 0x48, 0xa9, + 0x00, 0x85, 0x3e, 0x85, 0x10, 0x60, 0x18, 0xa5, + 0x2b, 0x69, 0xff, 0x85, 0x7a, 0xa5, 0x2c, 0x69, + 0xff, 0x85, 0x7b, 0x60, 0x90, 0x06, 0xf0, 0x04, + 0xc9, 0xab, 0xd0, 0xe9, 0x20, 0x6b, 0xa9, 0x20, + 0x13, 0xa6, 0x20, 0x79, 0x00, 0xf0, 0x0c, 0xc9, + 0xab, 0xd0, 0x8e, 0x20, 0x73, 0x00, 0x20, 0x6b, + 0xa9, 0xd0, 0x86, 0x68, 0x68, 0xa5, 0x14, 0x05, + 0x15, 0xd0, 0x06, 0xa9, 0xff, 0x85, 0x14, 0x85, + 0x15, 0xa0, 0x01, 0x84, 0x0f, 0xb1, 0x5f, 0xf0, + 0x43, 0x20, 0x2c, 0xa8, 0x20, 0xd7, 0xaa, 0xc8, + 0xb1, 0x5f, 0xaa, 0xc8, 0xb1, 0x5f, 0xc5, 0x15, + 0xd0, 0x04, 0xe4, 0x14, 0xf0, 0x02, 0xb0, 0x2c, + 0x84, 0x49, 0x20, 0xcd, 0xbd, 0xa9, 0x20, 0xa4, + 0x49, 0x29, 0x7f, 0x20, 0x47, 0xab, 0xc9, 0x22, + 0xd0, 0x06, 0xa5, 0x0f, 0x49, 0xff, 0x85, 0x0f, + 0xc8, 0xf0, 0x11, 0xb1, 0x5f, 0xd0, 0x10, 0xa8, + 0xb1, 0x5f, 0xaa, 0xc8, 0xb1, 0x5f, 0x86, 0x5f, + 0x85, 0x60, 0xd0, 0xb5, 0x4c, 0x86, 0xe3, 0x6c, + 0x06, 0x03, 0x10, 0xd7, 0xc9, 0xff, 0xf0, 0xd3, + 0x24, 0x0f, 0x30, 0xcf, 0x38, 0xe9, 0x7f, 0xaa, + 0x84, 0x49, 0xa0, 0xff, 0xca, 0xf0, 0x08, 0xc8, + 0xb9, 0x9e, 0xa0, 0x10, 0xfa, 0x30, 0xf5, 0xc8, + 0xb9, 0x9e, 0xa0, 0x30, 0xb2, 0x20, 0x47, 0xab, + 0xd0, 0xf5, 0xa9, 0x80, 0x85, 0x10, 0x20, 0xa5, + 0xa9, 0x20, 0x8a, 0xa3, 0xd0, 0x05, 0x8a, 0x69, + 0x0f, 0xaa, 0x9a, 0x68, 0x68, 0xa9, 0x09, 0x20, + 0xfb, 0xa3, 0x20, 0x06, 0xa9, 0x18, 0x98, 0x65, + 0x7a, 0x48, 0xa5, 0x7b, 0x69, 0x00, 0x48, 0xa5, + 0x3a, 0x48, 0xa5, 0x39, 0x48, 0xa9, 0xa4, 0x20, + 0xff, 0xae, 0x20, 0x8d, 0xad, 0x20, 0x8a, 0xad, + 0xa5, 0x66, 0x09, 0x7f, 0x25, 0x62, 0x85, 0x62, + 0xa9, 0x8b, 0xa0, 0xa7, 0x85, 0x22, 0x84, 0x23, + 0x4c, 0x43, 0xae, 0xa9, 0xbc, 0xa0, 0xb9, 0x20, + 0xa2, 0xbb, 0x20, 0x79, 0x00, 0xc9, 0xa9, 0xd0, + 0x06, 0x20, 0x73, 0x00, 0x20, 0x8a, 0xad, 0x20, + 0x2b, 0xbc, 0x20, 0x38, 0xae, 0xa5, 0x4a, 0x48, + 0xa5, 0x49, 0x48, 0xa9, 0x81, 0x48, 0x20, 0x2c, + 0xa8, 0xa5, 0x7a, 0xa4, 0x7b, 0xc0, 0x02, 0xea, + 0xf0, 0x04, 0x85, 0x3d, 0x84, 0x3e, 0xa0, 0x00, + 0xb1, 0x7a, 0xd0, 0x43, 0xa0, 0x02, 0xb1, 0x7a, + 0x18, 0xd0, 0x03, 0x4c, 0x4b, 0xa8, 0xc8, 0xb1, + 0x7a, 0x85, 0x39, 0xc8, 0xb1, 0x7a, 0x85, 0x3a, + 0x98, 0x65, 0x7a, 0x85, 0x7a, 0x90, 0x02, 0xe6, + 0x7b, 0x6c, 0x08, 0x03, 0x20, 0x73, 0x00, 0x20, + 0xed, 0xa7, 0x4c, 0xae, 0xa7, 0xf0, 0x3c, 0xe9, + 0x80, 0x90, 0x11, 0xc9, 0x23, 0xb0, 0x17, 0x0a, + 0xa8, 0xb9, 0x0d, 0xa0, 0x48, 0xb9, 0x0c, 0xa0, + 0x48, 0x4c, 0x73, 0x00, 0x4c, 0xa5, 0xa9, 0xc9, + 0x3a, 0xf0, 0xd6, 0x4c, 0x08, 0xaf, 0xc9, 0x4b, + 0xd0, 0xf9, 0x20, 0x73, 0x00, 0xa9, 0xa4, 0x20, + 0xff, 0xae, 0x4c, 0xa0, 0xa8, 0x38, 0xa5, 0x2b, + 0xe9, 0x01, 0xa4, 0x2c, 0xb0, 0x01, 0x88, 0x85, + 0x41, 0x84, 0x42, 0x60, 0x20, 0xe1, 0xff, 0xb0, + 0x01, 0x18, 0xd0, 0x3c, 0xa5, 0x7a, 0xa4, 0x7b, + 0xa6, 0x3a, 0xe8, 0xf0, 0x0c, 0x85, 0x3d, 0x84, + 0x3e, 0xa5, 0x39, 0xa4, 0x3a, 0x85, 0x3b, 0x84, + 0x3c, 0x68, 0x68, 0xa9, 0x81, 0xa0, 0xa3, 0x90, + 0x03, 0x4c, 0x69, 0xa4, 0x4c, 0x86, 0xe3, 0xd0, + 0x17, 0xa2, 0x1a, 0xa4, 0x3e, 0xd0, 0x03, 0x4c, + 0x37, 0xa4, 0xa5, 0x3d, 0x85, 0x7a, 0x84, 0x7b, + 0xa5, 0x3b, 0xa4, 0x3c, 0x85, 0x39, 0x84, 0x3a, + 0x60, 0x08, 0xa9, 0x00, 0x20, 0x90, 0xff, 0x28, + 0xd0, 0x03, 0x4c, 0x59, 0xa6, 0x20, 0x60, 0xa6, + 0x4c, 0x97, 0xa8, 0xa9, 0x03, 0x20, 0xfb, 0xa3, + 0xa5, 0x7b, 0x48, 0xa5, 0x7a, 0x48, 0xa5, 0x3a, + 0x48, 0xa5, 0x39, 0x48, 0xa9, 0x8d, 0x48, 0x20, + 0x79, 0x00, 0x20, 0xa0, 0xa8, 0x4c, 0xae, 0xa7, + 0x20, 0x6b, 0xa9, 0x20, 0x09, 0xa9, 0x38, 0xa5, + 0x39, 0xe5, 0x14, 0xa5, 0x3a, 0xe5, 0x15, 0xb0, + 0x0b, 0x98, 0x38, 0x65, 0x7a, 0xa6, 0x7b, 0x90, + 0x07, 0xe8, 0xb0, 0x04, 0xa5, 0x2b, 0xa6, 0x2c, + 0x20, 0x17, 0xa6, 0x90, 0x1e, 0xa5, 0x5f, 0xe9, + 0x01, 0x85, 0x7a, 0xa5, 0x60, 0xe9, 0x00, 0x85, + 0x7b, 0x60, 0xd0, 0xfd, 0xa9, 0xff, 0x85, 0x4a, + 0x20, 0x8a, 0xa3, 0x9a, 0xc9, 0x8d, 0xf0, 0x0b, + 0xa2, 0x0c, 0x2c, 0xa2, 0x11, 0x4c, 0x37, 0xa4, + 0x4c, 0x08, 0xaf, 0x68, 0x68, 0x85, 0x39, 0x68, + 0x85, 0x3a, 0x68, 0x85, 0x7a, 0x68, 0x85, 0x7b, + 0x20, 0x06, 0xa9, 0x98, 0x18, 0x65, 0x7a, 0x85, + 0x7a, 0x90, 0x02, 0xe6, 0x7b, 0x60, 0xa2, 0x3a, + 0x2c, 0xa2, 0x00, 0x86, 0x07, 0xa0, 0x00, 0x84, + 0x08, 0xa5, 0x08, 0xa6, 0x07, 0x85, 0x07, 0x86, + 0x08, 0xb1, 0x7a, 0xf0, 0xe8, 0xc5, 0x08, 0xf0, + 0xe4, 0xc8, 0xc9, 0x22, 0xd0, 0xf3, 0xf0, 0xe9, + 0x20, 0x9e, 0xad, 0x20, 0x79, 0x00, 0xc9, 0x89, + 0xf0, 0x05, 0xa9, 0xa7, 0x20, 0xff, 0xae, 0xa5, + 0x61, 0xd0, 0x05, 0x20, 0x09, 0xa9, 0xf0, 0xbb, + 0x20, 0x79, 0x00, 0xb0, 0x03, 0x4c, 0xa0, 0xa8, + 0x4c, 0xed, 0xa7, 0x20, 0x9e, 0xb7, 0x48, 0xc9, + 0x8d, 0xf0, 0x04, 0xc9, 0x89, 0xd0, 0x91, 0xc6, + 0x65, 0xd0, 0x04, 0x68, 0x4c, 0xef, 0xa7, 0x20, + 0x73, 0x00, 0x20, 0x6b, 0xa9, 0xc9, 0x2c, 0xf0, + 0xee, 0x68, 0x60, 0xa2, 0x00, 0x86, 0x14, 0x86, + 0x15, 0xb0, 0xf7, 0xe9, 0x2f, 0x85, 0x07, 0xa5, + 0x15, 0x85, 0x22, 0xc9, 0x19, 0xb0, 0xd4, 0xa5, + 0x14, 0x0a, 0x26, 0x22, 0x0a, 0x26, 0x22, 0x65, + 0x14, 0x85, 0x14, 0xa5, 0x22, 0x65, 0x15, 0x85, + 0x15, 0x06, 0x14, 0x26, 0x15, 0xa5, 0x14, 0x65, + 0x07, 0x85, 0x14, 0x90, 0x02, 0xe6, 0x15, 0x20, + 0x73, 0x00, 0x4c, 0x71, 0xa9, 0x20, 0x8b, 0xb0, + 0x85, 0x49, 0x84, 0x4a, 0xa9, 0xb2, 0x20, 0xff, + 0xae, 0xa5, 0x0e, 0x48, 0xa5, 0x0d, 0x48, 0x20, + 0x9e, 0xad, 0x68, 0x2a, 0x20, 0x90, 0xad, 0xd0, + 0x18, 0x68, 0x10, 0x12, 0x20, 0x1b, 0xbc, 0x20, + 0xbf, 0xb1, 0xa0, 0x00, 0xa5, 0x64, 0x91, 0x49, + 0xc8, 0xa5, 0x65, 0x91, 0x49, 0x60, 0x4c, 0xd0, + 0xbb, 0x68, 0xa4, 0x4a, 0xc0, 0xbf, 0xd0, 0x4c, + 0x20, 0xa6, 0xb6, 0xc9, 0x06, 0xd0, 0x3d, 0xa0, + 0x00, 0x84, 0x61, 0x84, 0x66, 0x84, 0x71, 0x20, + 0x1d, 0xaa, 0x20, 0xe2, 0xba, 0xe6, 0x71, 0xa4, + 0x71, 0x20, 0x1d, 0xaa, 0x20, 0x0c, 0xbc, 0xaa, + 0xf0, 0x05, 0xe8, 0x8a, 0x20, 0xed, 0xba, 0xa4, + 0x71, 0xc8, 0xc0, 0x06, 0xd0, 0xdf, 0x20, 0xe2, + 0xba, 0x20, 0x9b, 0xbc, 0xa6, 0x64, 0xa4, 0x63, + 0xa5, 0x65, 0x4c, 0xdb, 0xff, 0xb1, 0x22, 0x20, + 0x80, 0x00, 0x90, 0x03, 0x4c, 0x48, 0xb2, 0xe9, + 0x2f, 0x4c, 0x7e, 0xbd, 0xa0, 0x02, 0xb1, 0x64, + 0xc5, 0x34, 0x90, 0x17, 0xd0, 0x07, 0x88, 0xb1, + 0x64, 0xc5, 0x33, 0x90, 0x0e, 0xa4, 0x65, 0xc4, + 0x2e, 0x90, 0x08, 0xd0, 0x0d, 0xa5, 0x64, 0xc5, + 0x2d, 0xb0, 0x07, 0xa5, 0x64, 0xa4, 0x65, 0x4c, + 0x68, 0xaa, 0xa0, 0x00, 0xb1, 0x64, 0x20, 0x75, + 0xb4, 0xa5, 0x50, 0xa4, 0x51, 0x85, 0x6f, 0x84, + 0x70, 0x20, 0x7a, 0xb6, 0xa9, 0x61, 0xa0, 0x00, + 0x85, 0x50, 0x84, 0x51, 0x20, 0xdb, 0xb6, 0xa0, + 0x00, 0xb1, 0x50, 0x91, 0x49, 0xc8, 0xb1, 0x50, + 0x91, 0x49, 0xc8, 0xb1, 0x50, 0x91, 0x49, 0x60, + 0x20, 0x86, 0xaa, 0x4c, 0xb5, 0xab, 0x20, 0x9e, + 0xb7, 0xf0, 0x05, 0xa9, 0x2c, 0x20, 0xff, 0xae, + 0x08, 0x86, 0x13, 0x20, 0x18, 0xe1, 0x28, 0x4c, + 0xa0, 0xaa, 0x20, 0x21, 0xab, 0x20, 0x79, 0x00, + 0xf0, 0x35, 0xf0, 0x43, 0xc9, 0xa3, 0xf0, 0x50, + 0xc9, 0xa6, 0x18, 0xf0, 0x4b, 0xc9, 0x2c, 0xf0, + 0x37, 0xc9, 0x3b, 0xf0, 0x5e, 0x20, 0x9e, 0xad, + 0x24, 0x0d, 0x30, 0xde, 0x20, 0xdd, 0xbd, 0x20, + 0x87, 0xb4, 0x20, 0x21, 0xab, 0x20, 0x3b, 0xab, + 0xd0, 0xd3, 0xa9, 0x00, 0x9d, 0x00, 0x02, 0xa2, + 0xff, 0xa0, 0x01, 0xa5, 0x13, 0xd0, 0x10, 0xa9, + 0x0d, 0x20, 0x47, 0xab, 0x24, 0x13, 0x10, 0x05, + 0xa9, 0x0a, 0x20, 0x47, 0xab, 0x49, 0xff, 0x60, + 0x38, 0x20, 0xf0, 0xff, 0x98, 0x38, 0xe9, 0x0a, + 0xb0, 0xfc, 0x49, 0xff, 0x69, 0x01, 0xd0, 0x16, + 0x08, 0x38, 0x20, 0xf0, 0xff, 0x84, 0x09, 0x20, + 0x9b, 0xb7, 0xc9, 0x29, 0xd0, 0x59, 0x28, 0x90, + 0x06, 0x8a, 0xe5, 0x09, 0x90, 0x05, 0xaa, 0xe8, + 0xca, 0xd0, 0x06, 0x20, 0x73, 0x00, 0x4c, 0xa2, + 0xaa, 0x20, 0x3b, 0xab, 0xd0, 0xf2, 0x20, 0x87, + 0xb4, 0x20, 0xa6, 0xb6, 0xaa, 0xa0, 0x00, 0xe8, + 0xca, 0xf0, 0xbc, 0xb1, 0x22, 0x20, 0x47, 0xab, + 0xc8, 0xc9, 0x0d, 0xd0, 0xf3, 0x20, 0xe5, 0xaa, + 0x4c, 0x28, 0xab, 0xa5, 0x13, 0xf0, 0x03, 0xa9, + 0x20, 0x2c, 0xa9, 0x1d, 0x2c, 0xa9, 0x3f, 0x20, + 0x0c, 0xe1, 0x29, 0xff, 0x60, 0xa5, 0x11, 0xf0, + 0x11, 0x30, 0x04, 0xa0, 0xff, 0xd0, 0x04, 0xa5, + 0x3f, 0xa4, 0x40, 0x85, 0x39, 0x84, 0x3a, 0x4c, + 0x08, 0xaf, 0xa5, 0x13, 0xf0, 0x05, 0xa2, 0x18, + 0x4c, 0x37, 0xa4, 0xa9, 0x0c, 0xa0, 0xad, 0x20, + 0x1e, 0xab, 0xa5, 0x3d, 0xa4, 0x3e, 0x85, 0x7a, + 0x84, 0x7b, 0x60, 0x20, 0xa6, 0xb3, 0xc9, 0x23, + 0xd0, 0x10, 0x20, 0x73, 0x00, 0x20, 0x9e, 0xb7, + 0xa9, 0x2c, 0x20, 0xff, 0xae, 0x86, 0x13, 0x20, + 0x1e, 0xe1, 0xa2, 0x01, 0xa0, 0x02, 0xa9, 0x00, + 0x8d, 0x01, 0x02, 0xa9, 0x40, 0x20, 0x0f, 0xac, + 0xa6, 0x13, 0xd0, 0x13, 0x60, 0x20, 0x9e, 0xb7, + 0xa9, 0x2c, 0x20, 0xff, 0xae, 0x86, 0x13, 0x20, + 0x1e, 0xe1, 0x20, 0xce, 0xab, 0xa5, 0x13, 0x20, + 0xcc, 0xff, 0xa2, 0x00, 0x86, 0x13, 0x60, 0xc9, + 0x22, 0xd0, 0x0b, 0x20, 0xbd, 0xae, 0xa9, 0x3b, + 0x20, 0xff, 0xae, 0x20, 0x21, 0xab, 0x20, 0xa6, + 0xb3, 0xa9, 0x2c, 0x8d, 0xff, 0x01, 0x20, 0xf9, + 0xab, 0xa5, 0x13, 0xf0, 0x0d, 0x20, 0xb7, 0xff, + 0x29, 0x02, 0xf0, 0x06, 0x20, 0xb5, 0xab, 0x4c, + 0xf8, 0xa8, 0xad, 0x00, 0x02, 0xd0, 0x1e, 0xa5, + 0x13, 0xd0, 0xe3, 0x20, 0x06, 0xa9, 0x4c, 0xfb, + 0xa8, 0xa5, 0x13, 0xd0, 0x06, 0x20, 0x45, 0xab, + 0x20, 0x3b, 0xab, 0x4c, 0x60, 0xa5, 0xa6, 0x41, + 0xa4, 0x42, 0xa9, 0x98, 0x2c, 0xa9, 0x00, 0x85, + 0x11, 0x86, 0x43, 0x84, 0x44, 0x20, 0x8b, 0xb0, + 0x85, 0x49, 0x84, 0x4a, 0xa5, 0x7a, 0xa4, 0x7b, + 0x85, 0x4b, 0x84, 0x4c, 0xa6, 0x43, 0xa4, 0x44, + 0x86, 0x7a, 0x84, 0x7b, 0x20, 0x79, 0x00, 0xd0, + 0x20, 0x24, 0x11, 0x50, 0x0c, 0x20, 0x24, 0xe1, + 0x8d, 0x00, 0x02, 0xa2, 0xff, 0xa0, 0x01, 0xd0, + 0x0c, 0x30, 0x75, 0xa5, 0x13, 0xd0, 0x03, 0x20, + 0x45, 0xab, 0x20, 0xf9, 0xab, 0x86, 0x7a, 0x84, + 0x7b, 0x20, 0x73, 0x00, 0x24, 0x0d, 0x10, 0x31, + 0x24, 0x11, 0x50, 0x09, 0xe8, 0x86, 0x7a, 0xa9, + 0x00, 0x85, 0x07, 0xf0, 0x0c, 0x85, 0x07, 0xc9, + 0x22, 0xf0, 0x07, 0xa9, 0x3a, 0x85, 0x07, 0xa9, + 0x2c, 0x18, 0x85, 0x08, 0xa5, 0x7a, 0xa4, 0x7b, + 0x69, 0x00, 0x90, 0x01, 0xc8, 0x20, 0x8d, 0xb4, + 0x20, 0xe2, 0xb7, 0x20, 0xda, 0xa9, 0x4c, 0x91, + 0xac, 0x20, 0xf3, 0xbc, 0xa5, 0x0e, 0x20, 0xc2, + 0xa9, 0x20, 0x79, 0x00, 0xf0, 0x07, 0xc9, 0x2c, + 0xf0, 0x03, 0x4c, 0x4d, 0xab, 0xa5, 0x7a, 0xa4, + 0x7b, 0x85, 0x43, 0x84, 0x44, 0xa5, 0x4b, 0xa4, + 0x4c, 0x85, 0x7a, 0x84, 0x7b, 0x20, 0x79, 0x00, + 0xf0, 0x2d, 0x20, 0xfd, 0xae, 0x4c, 0x15, 0xac, + 0x20, 0x06, 0xa9, 0xc8, 0xaa, 0xd0, 0x12, 0xa2, + 0x0d, 0xc8, 0xb1, 0x7a, 0xf0, 0x6c, 0xc8, 0xb1, + 0x7a, 0x85, 0x3f, 0xc8, 0xb1, 0x7a, 0xc8, 0x85, + 0x40, 0x20, 0xfb, 0xa8, 0x20, 0x79, 0x00, 0xaa, + 0xe0, 0x83, 0xd0, 0xdc, 0x4c, 0x51, 0xac, 0xa5, + 0x43, 0xa4, 0x44, 0xa6, 0x11, 0x10, 0x03, 0x4c, + 0x27, 0xa8, 0xa0, 0x00, 0xb1, 0x43, 0xf0, 0x0b, + 0xa5, 0x13, 0xd0, 0x07, 0xa9, 0xfc, 0xa0, 0xac, + 0x4c, 0x1e, 0xab, 0x60, 0x3f, 0x45, 0x58, 0x54, + 0x52, 0x41, 0x20, 0x49, 0x47, 0x4e, 0x4f, 0x52, + 0x45, 0x44, 0x0d, 0x00, 0x3f, 0x52, 0x45, 0x44, + 0x4f, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x20, 0x53, + 0x54, 0x41, 0x52, 0x54, 0x0d, 0x00, 0xd0, 0x04, + 0xa0, 0x00, 0xf0, 0x03, 0x20, 0x8b, 0xb0, 0x85, + 0x49, 0x84, 0x4a, 0x20, 0x8a, 0xa3, 0xf0, 0x05, + 0xa2, 0x0a, 0x4c, 0x37, 0xa4, 0x9a, 0x8a, 0x18, + 0x69, 0x04, 0x48, 0x69, 0x06, 0x85, 0x24, 0x68, + 0xa0, 0x01, 0x20, 0xa2, 0xbb, 0xba, 0xbd, 0x09, + 0x01, 0x85, 0x66, 0xa5, 0x49, 0xa4, 0x4a, 0x20, + 0x67, 0xb8, 0x20, 0xd0, 0xbb, 0xa0, 0x01, 0x20, + 0x5d, 0xbc, 0xba, 0x38, 0xfd, 0x09, 0x01, 0xf0, + 0x17, 0xbd, 0x0f, 0x01, 0x85, 0x39, 0xbd, 0x10, + 0x01, 0x85, 0x3a, 0xbd, 0x12, 0x01, 0x85, 0x7a, + 0xbd, 0x11, 0x01, 0x85, 0x7b, 0x4c, 0xae, 0xa7, + 0x8a, 0x69, 0x11, 0xaa, 0x9a, 0x20, 0x79, 0x00, + 0xc9, 0x2c, 0xd0, 0xf1, 0x20, 0x73, 0x00, 0x20, + 0x24, 0xad, 0x20, 0x9e, 0xad, 0x18, 0x24, 0x38, + 0x24, 0x0d, 0x30, 0x03, 0xb0, 0x03, 0x60, 0xb0, + 0xfd, 0xa2, 0x16, 0x4c, 0x37, 0xa4, 0xa6, 0x7a, + 0xd0, 0x02, 0xc6, 0x7b, 0xc6, 0x7a, 0xa2, 0x00, + 0x24, 0x48, 0x8a, 0x48, 0xa9, 0x01, 0x20, 0xfb, + 0xa3, 0x20, 0x83, 0xae, 0xa9, 0x00, 0x85, 0x4d, + 0x20, 0x79, 0x00, 0x38, 0xe9, 0xb1, 0x90, 0x17, + 0xc9, 0x03, 0xb0, 0x13, 0xc9, 0x01, 0x2a, 0x49, + 0x01, 0x45, 0x4d, 0xc5, 0x4d, 0x90, 0x61, 0x85, + 0x4d, 0x20, 0x73, 0x00, 0x4c, 0xbb, 0xad, 0xa6, + 0x4d, 0xd0, 0x2c, 0xb0, 0x7b, 0x69, 0x07, 0x90, + 0x77, 0x65, 0x0d, 0xd0, 0x03, 0x4c, 0x3d, 0xb6, + 0x69, 0xff, 0x85, 0x22, 0x0a, 0x65, 0x22, 0xa8, + 0x68, 0xd9, 0x80, 0xa0, 0xb0, 0x67, 0x20, 0x8d, + 0xad, 0x48, 0x20, 0x20, 0xae, 0x68, 0xa4, 0x4b, + 0x10, 0x17, 0xaa, 0xf0, 0x56, 0xd0, 0x5f, 0x46, + 0x0d, 0x8a, 0x2a, 0xa6, 0x7a, 0xd0, 0x02, 0xc6, + 0x7b, 0xc6, 0x7a, 0xa0, 0x1b, 0x85, 0x4d, 0xd0, + 0xd7, 0xd9, 0x80, 0xa0, 0xb0, 0x48, 0x90, 0xd9, + 0xb9, 0x82, 0xa0, 0x48, 0xb9, 0x81, 0xa0, 0x48, + 0x20, 0x33, 0xae, 0xa5, 0x4d, 0x4c, 0xa9, 0xad, + 0x4c, 0x08, 0xaf, 0xa5, 0x66, 0xbe, 0x80, 0xa0, + 0xa8, 0x68, 0x85, 0x22, 0xe6, 0x22, 0x68, 0x85, + 0x23, 0x98, 0x48, 0x20, 0x1b, 0xbc, 0xa5, 0x65, + 0x48, 0xa5, 0x64, 0x48, 0xa5, 0x63, 0x48, 0xa5, + 0x62, 0x48, 0xa5, 0x61, 0x48, 0x6c, 0x22, 0x00, + 0xa0, 0xff, 0x68, 0xf0, 0x23, 0xc9, 0x64, 0xf0, + 0x03, 0x20, 0x8d, 0xad, 0x84, 0x4b, 0x68, 0x4a, + 0x85, 0x12, 0x68, 0x85, 0x69, 0x68, 0x85, 0x6a, + 0x68, 0x85, 0x6b, 0x68, 0x85, 0x6c, 0x68, 0x85, + 0x6d, 0x68, 0x85, 0x6e, 0x45, 0x66, 0x85, 0x6f, + 0xa5, 0x61, 0x60, 0x6c, 0x0a, 0x03, 0xa9, 0x00, + 0x85, 0x0d, 0x20, 0x73, 0x00, 0xb0, 0x03, 0x4c, + 0xf3, 0xbc, 0x20, 0x13, 0xb1, 0x90, 0x03, 0x4c, + 0x28, 0xaf, 0xc9, 0xff, 0xd0, 0x0f, 0xa9, 0xa8, + 0xa0, 0xae, 0x20, 0xa2, 0xbb, 0x4c, 0x73, 0x00, + 0x82, 0x49, 0x0f, 0xda, 0xa1, 0xc9, 0x2e, 0xf0, + 0xde, 0xc9, 0xab, 0xf0, 0x58, 0xc9, 0xaa, 0xf0, + 0xd1, 0xc9, 0x22, 0xd0, 0x0f, 0xa5, 0x7a, 0xa4, + 0x7b, 0x69, 0x00, 0x90, 0x01, 0xc8, 0x20, 0x87, + 0xb4, 0x4c, 0xe2, 0xb7, 0xc9, 0xa8, 0xd0, 0x13, + 0xa0, 0x18, 0xd0, 0x3b, 0x20, 0xbf, 0xb1, 0xa5, + 0x65, 0x49, 0xff, 0xa8, 0xa5, 0x64, 0x49, 0xff, + 0x4c, 0x91, 0xb3, 0xc9, 0xa5, 0xd0, 0x03, 0x4c, + 0xf4, 0xb3, 0xc9, 0xb4, 0x90, 0x03, 0x4c, 0xa7, + 0xaf, 0x20, 0xfa, 0xae, 0x20, 0x9e, 0xad, 0xa9, + 0x29, 0x2c, 0xa9, 0x28, 0x2c, 0xa9, 0x2c, 0xa0, + 0x00, 0xd1, 0x7a, 0xd0, 0x03, 0x4c, 0x73, 0x00, + 0xa2, 0x0b, 0x4c, 0x37, 0xa4, 0xa0, 0x15, 0x68, + 0x68, 0x4c, 0xfa, 0xad, 0x38, 0xa5, 0x64, 0xe9, + 0x00, 0xa5, 0x65, 0xe9, 0xa0, 0x90, 0x08, 0xa9, + 0xa2, 0xe5, 0x64, 0xa9, 0xe3, 0xe5, 0x65, 0x60, + 0x20, 0x8b, 0xb0, 0x85, 0x64, 0x84, 0x65, 0xa6, + 0x45, 0xa4, 0x46, 0xa5, 0x0d, 0xf0, 0x26, 0xa9, + 0x00, 0x85, 0x70, 0x20, 0x14, 0xaf, 0x90, 0x1c, + 0xe0, 0x54, 0xd0, 0x18, 0xc0, 0xc9, 0xd0, 0x14, + 0x20, 0x84, 0xaf, 0x84, 0x5e, 0x88, 0x84, 0x71, + 0xa0, 0x06, 0x84, 0x5d, 0xa0, 0x24, 0x20, 0x68, + 0xbe, 0x4c, 0x6f, 0xb4, 0x60, 0x24, 0x0e, 0x10, + 0x0d, 0xa0, 0x00, 0xb1, 0x64, 0xaa, 0xc8, 0xb1, + 0x64, 0xa8, 0x8a, 0x4c, 0x91, 0xb3, 0x20, 0x14, + 0xaf, 0x90, 0x2d, 0xe0, 0x54, 0xd0, 0x1b, 0xc0, + 0x49, 0xd0, 0x25, 0x20, 0x84, 0xaf, 0x98, 0xa2, + 0xa0, 0x4c, 0x4f, 0xbc, 0x20, 0xde, 0xff, 0x86, + 0x64, 0x84, 0x63, 0x85, 0x65, 0xa0, 0x00, 0x84, + 0x62, 0x60, 0xe0, 0x53, 0xd0, 0x0a, 0xc0, 0x54, + 0xd0, 0x06, 0x20, 0xb7, 0xff, 0x4c, 0x3c, 0xbc, + 0xa5, 0x64, 0xa4, 0x65, 0x4c, 0xa2, 0xbb, 0x0a, + 0x48, 0xaa, 0x20, 0x73, 0x00, 0xe0, 0x8f, 0x90, + 0x20, 0x20, 0xfa, 0xae, 0x20, 0x9e, 0xad, 0x20, + 0xfd, 0xae, 0x20, 0x8f, 0xad, 0x68, 0xaa, 0xa5, + 0x65, 0x48, 0xa5, 0x64, 0x48, 0x8a, 0x48, 0x20, + 0x9e, 0xb7, 0x68, 0xa8, 0x8a, 0x48, 0x4c, 0xd6, + 0xaf, 0x20, 0xf1, 0xae, 0x68, 0xa8, 0xb9, 0xea, + 0x9f, 0x85, 0x55, 0xb9, 0xeb, 0x9f, 0x85, 0x56, + 0x20, 0x54, 0x00, 0x4c, 0x8d, 0xad, 0xa0, 0xff, + 0x2c, 0xa0, 0x00, 0x84, 0x0b, 0x20, 0xbf, 0xb1, + 0xa5, 0x64, 0x45, 0x0b, 0x85, 0x07, 0xa5, 0x65, + 0x45, 0x0b, 0x85, 0x08, 0x20, 0xfc, 0xbb, 0x20, + 0xbf, 0xb1, 0xa5, 0x65, 0x45, 0x0b, 0x25, 0x08, + 0x45, 0x0b, 0xa8, 0xa5, 0x64, 0x45, 0x0b, 0x25, + 0x07, 0x45, 0x0b, 0x4c, 0x91, 0xb3, 0x20, 0x90, + 0xad, 0xb0, 0x13, 0xa5, 0x6e, 0x09, 0x7f, 0x25, + 0x6a, 0x85, 0x6a, 0xa9, 0x69, 0xa0, 0x00, 0x20, + 0x5b, 0xbc, 0xaa, 0x4c, 0x61, 0xb0, 0xa9, 0x00, + 0x85, 0x0d, 0xc6, 0x4d, 0x20, 0xa6, 0xb6, 0x85, + 0x61, 0x86, 0x62, 0x84, 0x63, 0xa5, 0x6c, 0xa4, + 0x6d, 0x20, 0xaa, 0xb6, 0x86, 0x6c, 0x84, 0x6d, + 0xaa, 0x38, 0xe5, 0x61, 0xf0, 0x08, 0xa9, 0x01, + 0x90, 0x04, 0xa6, 0x61, 0xa9, 0xff, 0x85, 0x66, + 0xa0, 0xff, 0xe8, 0xc8, 0xca, 0xd0, 0x07, 0xa6, + 0x66, 0x30, 0x0f, 0x18, 0x90, 0x0c, 0xb1, 0x6c, + 0xd1, 0x62, 0xf0, 0xef, 0xa2, 0xff, 0xb0, 0x02, + 0xa2, 0x01, 0xe8, 0x8a, 0x2a, 0x25, 0x12, 0xf0, + 0x02, 0xa9, 0xff, 0x4c, 0x3c, 0xbc, 0x20, 0xfd, + 0xae, 0xaa, 0x20, 0x90, 0xb0, 0x20, 0x79, 0x00, + 0xd0, 0xf4, 0x60, 0xa2, 0x00, 0x20, 0x79, 0x00, + 0x86, 0x0c, 0x85, 0x45, 0x20, 0x79, 0x00, 0x20, + 0x13, 0xb1, 0xb0, 0x03, 0x4c, 0x08, 0xaf, 0xa2, + 0x00, 0x86, 0x0d, 0x86, 0x0e, 0x20, 0x73, 0x00, + 0x90, 0x05, 0x20, 0x13, 0xb1, 0x90, 0x0b, 0xaa, + 0x20, 0x73, 0x00, 0x90, 0xfb, 0x20, 0x13, 0xb1, + 0xb0, 0xf6, 0xc9, 0x24, 0xd0, 0x06, 0xa9, 0xff, + 0x85, 0x0d, 0xd0, 0x10, 0xc9, 0x25, 0xd0, 0x13, + 0xa5, 0x10, 0xd0, 0xd0, 0xa9, 0x80, 0x85, 0x0e, + 0x05, 0x45, 0x85, 0x45, 0x8a, 0x09, 0x80, 0xaa, + 0x20, 0x73, 0x00, 0x86, 0x46, 0x38, 0x05, 0x10, + 0xe9, 0x28, 0xd0, 0x03, 0x4c, 0xd1, 0xb1, 0xa0, + 0x00, 0x84, 0x10, 0xa5, 0x2d, 0xa6, 0x2e, 0x86, + 0x60, 0x85, 0x5f, 0xe4, 0x30, 0xd0, 0x04, 0xc5, + 0x2f, 0xf0, 0x22, 0xa5, 0x45, 0xd1, 0x5f, 0xd0, + 0x08, 0xa5, 0x46, 0xc8, 0xd1, 0x5f, 0xf0, 0x7d, + 0x88, 0x18, 0xa5, 0x5f, 0x69, 0x07, 0x90, 0xe1, + 0xe8, 0xd0, 0xdc, 0xc9, 0x41, 0x90, 0x05, 0xe9, + 0x5b, 0x38, 0xe9, 0xa5, 0x60, 0x68, 0x48, 0xc9, + 0x2a, 0xd0, 0x05, 0xa9, 0x13, 0xa0, 0xbf, 0x60, + 0xa5, 0x45, 0xa4, 0x46, 0xc9, 0x54, 0xd0, 0x0b, + 0xc0, 0xc9, 0xf0, 0xef, 0xc0, 0x49, 0xd0, 0x03, + 0x4c, 0x08, 0xaf, 0xc9, 0x53, 0xd0, 0x04, 0xc0, + 0x54, 0xf0, 0xf5, 0xa5, 0x2f, 0xa4, 0x30, 0x85, + 0x5f, 0x84, 0x60, 0xa5, 0x31, 0xa4, 0x32, 0x85, + 0x5a, 0x84, 0x5b, 0x18, 0x69, 0x07, 0x90, 0x01, + 0xc8, 0x85, 0x58, 0x84, 0x59, 0x20, 0xb8, 0xa3, + 0xa5, 0x58, 0xa4, 0x59, 0xc8, 0x85, 0x2f, 0x84, + 0x30, 0xa0, 0x00, 0xa5, 0x45, 0x91, 0x5f, 0xc8, + 0xa5, 0x46, 0x91, 0x5f, 0xa9, 0x00, 0xc8, 0x91, + 0x5f, 0xc8, 0x91, 0x5f, 0xc8, 0x91, 0x5f, 0xc8, + 0x91, 0x5f, 0xc8, 0x91, 0x5f, 0xa5, 0x5f, 0x18, + 0x69, 0x02, 0xa4, 0x60, 0x90, 0x01, 0xc8, 0x85, + 0x47, 0x84, 0x48, 0x60, 0xa5, 0x0b, 0x0a, 0x69, + 0x05, 0x65, 0x5f, 0xa4, 0x60, 0x90, 0x01, 0xc8, + 0x85, 0x58, 0x84, 0x59, 0x60, 0x90, 0x80, 0x00, + 0x00, 0x00, 0x20, 0xbf, 0xb1, 0xa5, 0x64, 0xa4, + 0x65, 0x60, 0x20, 0x73, 0x00, 0x20, 0x9e, 0xad, + 0x20, 0x8d, 0xad, 0xa5, 0x66, 0x30, 0x0d, 0xa5, + 0x61, 0xc9, 0x90, 0x90, 0x09, 0xa9, 0xa5, 0xa0, + 0xb1, 0x20, 0x5b, 0xbc, 0xd0, 0x7a, 0x4c, 0x9b, + 0xbc, 0xa5, 0x0c, 0x05, 0x0e, 0x48, 0xa5, 0x0d, + 0x48, 0xa0, 0x00, 0x98, 0x48, 0xa5, 0x46, 0x48, + 0xa5, 0x45, 0x48, 0x20, 0xb2, 0xb1, 0x68, 0x85, + 0x45, 0x68, 0x85, 0x46, 0x68, 0xa8, 0xba, 0xbd, + 0x02, 0x01, 0x48, 0xbd, 0x01, 0x01, 0x48, 0xa5, + 0x64, 0x9d, 0x02, 0x01, 0xa5, 0x65, 0x9d, 0x01, + 0x01, 0xc8, 0x20, 0x79, 0x00, 0xc9, 0x2c, 0xf0, + 0xd2, 0x84, 0x0b, 0x20, 0xf7, 0xae, 0x68, 0x85, + 0x0d, 0x68, 0x85, 0x0e, 0x29, 0x7f, 0x85, 0x0c, + 0xa6, 0x2f, 0xa5, 0x30, 0x86, 0x5f, 0x85, 0x60, + 0xc5, 0x32, 0xd0, 0x04, 0xe4, 0x31, 0xf0, 0x39, + 0xa0, 0x00, 0xb1, 0x5f, 0xc8, 0xc5, 0x45, 0xd0, + 0x06, 0xa5, 0x46, 0xd1, 0x5f, 0xf0, 0x16, 0xc8, + 0xb1, 0x5f, 0x18, 0x65, 0x5f, 0xaa, 0xc8, 0xb1, + 0x5f, 0x65, 0x60, 0x90, 0xd7, 0xa2, 0x12, 0x2c, + 0xa2, 0x0e, 0x4c, 0x37, 0xa4, 0xa2, 0x13, 0xa5, + 0x0c, 0xd0, 0xf7, 0x20, 0x94, 0xb1, 0xa5, 0x0b, + 0xa0, 0x04, 0xd1, 0x5f, 0xd0, 0xe7, 0x4c, 0xea, + 0xb2, 0x20, 0x94, 0xb1, 0x20, 0x08, 0xa4, 0xa0, + 0x00, 0x84, 0x72, 0xa2, 0x05, 0xa5, 0x45, 0x91, + 0x5f, 0x10, 0x01, 0xca, 0xc8, 0xa5, 0x46, 0x91, + 0x5f, 0x10, 0x02, 0xca, 0xca, 0x86, 0x71, 0xa5, + 0x0b, 0xc8, 0xc8, 0xc8, 0x91, 0x5f, 0xa2, 0x0b, + 0xa9, 0x00, 0x24, 0x0c, 0x50, 0x08, 0x68, 0x18, + 0x69, 0x01, 0xaa, 0x68, 0x69, 0x00, 0xc8, 0x91, + 0x5f, 0xc8, 0x8a, 0x91, 0x5f, 0x20, 0x4c, 0xb3, + 0x86, 0x71, 0x85, 0x72, 0xa4, 0x22, 0xc6, 0x0b, + 0xd0, 0xdc, 0x65, 0x59, 0xb0, 0x5d, 0x85, 0x59, + 0xa8, 0x8a, 0x65, 0x58, 0x90, 0x03, 0xc8, 0xf0, + 0x52, 0x20, 0x08, 0xa4, 0x85, 0x31, 0x84, 0x32, + 0xa9, 0x00, 0xe6, 0x72, 0xa4, 0x71, 0xf0, 0x05, + 0x88, 0x91, 0x58, 0xd0, 0xfb, 0xc6, 0x59, 0xc6, + 0x72, 0xd0, 0xf5, 0xe6, 0x59, 0x38, 0xa5, 0x31, + 0xe5, 0x5f, 0xa0, 0x02, 0x91, 0x5f, 0xa5, 0x32, + 0xc8, 0xe5, 0x60, 0x91, 0x5f, 0xa5, 0x0c, 0xd0, + 0x62, 0xc8, 0xb1, 0x5f, 0x85, 0x0b, 0xa9, 0x00, + 0x85, 0x71, 0x85, 0x72, 0xc8, 0x68, 0xaa, 0x85, + 0x64, 0x68, 0x85, 0x65, 0xd1, 0x5f, 0x90, 0x0e, + 0xd0, 0x06, 0xc8, 0x8a, 0xd1, 0x5f, 0x90, 0x07, + 0x4c, 0x45, 0xb2, 0x4c, 0x35, 0xa4, 0xc8, 0xa5, + 0x72, 0x05, 0x71, 0x18, 0xf0, 0x0a, 0x20, 0x4c, + 0xb3, 0x8a, 0x65, 0x64, 0xaa, 0x98, 0xa4, 0x22, + 0x65, 0x65, 0x86, 0x71, 0xc6, 0x0b, 0xd0, 0xca, + 0x85, 0x72, 0xa2, 0x05, 0xa5, 0x45, 0x10, 0x01, + 0xca, 0xa5, 0x46, 0x10, 0x02, 0xca, 0xca, 0x86, + 0x28, 0xa9, 0x00, 0x20, 0x55, 0xb3, 0x8a, 0x65, + 0x58, 0x85, 0x47, 0x98, 0x65, 0x59, 0x85, 0x48, + 0xa8, 0xa5, 0x47, 0x60, 0x84, 0x22, 0xb1, 0x5f, + 0x85, 0x28, 0x88, 0xb1, 0x5f, 0x85, 0x29, 0xa9, + 0x10, 0x85, 0x5d, 0xa2, 0x00, 0xa0, 0x00, 0x8a, + 0x0a, 0xaa, 0x98, 0x2a, 0xa8, 0xb0, 0xa4, 0x06, + 0x71, 0x26, 0x72, 0x90, 0x0b, 0x18, 0x8a, 0x65, + 0x28, 0xaa, 0x98, 0x65, 0x29, 0xa8, 0xb0, 0x93, + 0xc6, 0x5d, 0xd0, 0xe3, 0x60, 0xa5, 0x0d, 0xf0, + 0x03, 0x20, 0xa6, 0xb6, 0x20, 0x26, 0xb5, 0x38, + 0xa5, 0x33, 0xe5, 0x31, 0xa8, 0xa5, 0x34, 0xe5, + 0x32, 0xa2, 0x00, 0x86, 0x0d, 0x85, 0x62, 0x84, + 0x63, 0xa2, 0x90, 0x4c, 0x44, 0xbc, 0x38, 0x20, + 0xf0, 0xff, 0xa9, 0x00, 0xf0, 0xeb, 0xa6, 0x3a, + 0xe8, 0xd0, 0xa0, 0xa2, 0x15, 0x2c, 0xa2, 0x1b, + 0x4c, 0x37, 0xa4, 0x20, 0xe1, 0xb3, 0x20, 0xa6, + 0xb3, 0x20, 0xfa, 0xae, 0xa9, 0x80, 0x85, 0x10, + 0x20, 0x8b, 0xb0, 0x20, 0x8d, 0xad, 0x20, 0xf7, + 0xae, 0xa9, 0xb2, 0x20, 0xff, 0xae, 0x48, 0xa5, + 0x48, 0x48, 0xa5, 0x47, 0x48, 0xa5, 0x7b, 0x48, + 0xa5, 0x7a, 0x48, 0x20, 0xf8, 0xa8, 0x4c, 0x4f, + 0xb4, 0xa9, 0xa5, 0x20, 0xff, 0xae, 0x09, 0x80, + 0x85, 0x10, 0x20, 0x92, 0xb0, 0x85, 0x4e, 0x84, + 0x4f, 0x4c, 0x8d, 0xad, 0x20, 0xe1, 0xb3, 0xa5, + 0x4f, 0x48, 0xa5, 0x4e, 0x48, 0x20, 0xf1, 0xae, + 0x20, 0x8d, 0xad, 0x68, 0x85, 0x4e, 0x68, 0x85, + 0x4f, 0xa0, 0x02, 0xb1, 0x4e, 0x85, 0x47, 0xaa, + 0xc8, 0xb1, 0x4e, 0xf0, 0x99, 0x85, 0x48, 0xc8, + 0xb1, 0x47, 0x48, 0x88, 0x10, 0xfa, 0xa4, 0x48, + 0x20, 0xd4, 0xbb, 0xa5, 0x7b, 0x48, 0xa5, 0x7a, + 0x48, 0xb1, 0x4e, 0x85, 0x7a, 0xc8, 0xb1, 0x4e, + 0x85, 0x7b, 0xa5, 0x48, 0x48, 0xa5, 0x47, 0x48, + 0x20, 0x8a, 0xad, 0x68, 0x85, 0x4e, 0x68, 0x85, + 0x4f, 0x20, 0x79, 0x00, 0xf0, 0x03, 0x4c, 0x08, + 0xaf, 0x68, 0x85, 0x7a, 0x68, 0x85, 0x7b, 0xa0, + 0x00, 0x68, 0x91, 0x4e, 0x68, 0xc8, 0x91, 0x4e, + 0x68, 0xc8, 0x91, 0x4e, 0x68, 0xc8, 0x91, 0x4e, + 0x68, 0xc8, 0x91, 0x4e, 0x60, 0x20, 0x8d, 0xad, + 0xa0, 0x00, 0x20, 0xdf, 0xbd, 0x68, 0x68, 0xa9, + 0xff, 0xa0, 0x00, 0xf0, 0x12, 0xa6, 0x64, 0xa4, + 0x65, 0x86, 0x50, 0x84, 0x51, 0x20, 0xf4, 0xb4, + 0x86, 0x62, 0x84, 0x63, 0x85, 0x61, 0x60, 0xa2, + 0x22, 0x86, 0x07, 0x86, 0x08, 0x85, 0x6f, 0x84, + 0x70, 0x85, 0x62, 0x84, 0x63, 0xa0, 0xff, 0xc8, + 0xb1, 0x6f, 0xf0, 0x0c, 0xc5, 0x07, 0xf0, 0x04, + 0xc5, 0x08, 0xd0, 0xf3, 0xc9, 0x22, 0xf0, 0x01, + 0x18, 0x84, 0x61, 0x98, 0x65, 0x6f, 0x85, 0x71, + 0xa6, 0x70, 0x90, 0x01, 0xe8, 0x86, 0x72, 0xa5, + 0x70, 0xf0, 0x04, 0xc9, 0x02, 0xd0, 0x0b, 0x98, + 0x20, 0x75, 0xb4, 0xa6, 0x6f, 0xa4, 0x70, 0x20, + 0x88, 0xb6, 0xa6, 0x16, 0xe0, 0x22, 0xd0, 0x05, + 0xa2, 0x19, 0x4c, 0x37, 0xa4, 0xa5, 0x61, 0x95, + 0x00, 0xa5, 0x62, 0x95, 0x01, 0xa5, 0x63, 0x95, + 0x02, 0xa0, 0x00, 0x86, 0x64, 0x84, 0x65, 0x84, + 0x70, 0x88, 0x84, 0x0d, 0x86, 0x17, 0xe8, 0xe8, + 0xe8, 0x86, 0x16, 0x60, 0x46, 0x0f, 0x48, 0x49, + 0xff, 0x38, 0x65, 0x33, 0xa4, 0x34, 0xb0, 0x01, + 0x88, 0xc4, 0x32, 0x90, 0x11, 0xd0, 0x04, 0xc5, + 0x31, 0x90, 0x0b, 0x85, 0x33, 0x84, 0x34, 0x85, + 0x35, 0x84, 0x36, 0xaa, 0x68, 0x60, 0xa2, 0x10, + 0xa5, 0x0f, 0x30, 0xb6, 0x20, 0x26, 0xb5, 0xa9, + 0x80, 0x85, 0x0f, 0x68, 0xd0, 0xd0, 0xa6, 0x37, + 0xa5, 0x38, 0x86, 0x33, 0x85, 0x34, 0xa0, 0x00, + 0x84, 0x4f, 0x84, 0x4e, 0xa5, 0x31, 0xa6, 0x32, + 0x85, 0x5f, 0x86, 0x60, 0xa9, 0x19, 0xa2, 0x00, + 0x85, 0x22, 0x86, 0x23, 0xc5, 0x16, 0xf0, 0x05, + 0x20, 0xc7, 0xb5, 0xf0, 0xf7, 0xa9, 0x07, 0x85, + 0x53, 0xa5, 0x2d, 0xa6, 0x2e, 0x85, 0x22, 0x86, + 0x23, 0xe4, 0x30, 0xd0, 0x04, 0xc5, 0x2f, 0xf0, + 0x05, 0x20, 0xbd, 0xb5, 0xf0, 0xf3, 0x85, 0x58, + 0x86, 0x59, 0xa9, 0x03, 0x85, 0x53, 0xa5, 0x58, + 0xa6, 0x59, 0xe4, 0x32, 0xd0, 0x07, 0xc5, 0x31, + 0xd0, 0x03, 0x4c, 0x06, 0xb6, 0x85, 0x22, 0x86, + 0x23, 0xa0, 0x00, 0xb1, 0x22, 0xaa, 0xc8, 0xb1, + 0x22, 0x08, 0xc8, 0xb1, 0x22, 0x65, 0x58, 0x85, + 0x58, 0xc8, 0xb1, 0x22, 0x65, 0x59, 0x85, 0x59, + 0x28, 0x10, 0xd3, 0x8a, 0x30, 0xd0, 0xc8, 0xb1, + 0x22, 0xa0, 0x00, 0x0a, 0x69, 0x05, 0x65, 0x22, + 0x85, 0x22, 0x90, 0x02, 0xe6, 0x23, 0xa6, 0x23, + 0xe4, 0x59, 0xd0, 0x04, 0xc5, 0x58, 0xf0, 0xba, + 0x20, 0xc7, 0xb5, 0xf0, 0xf3, 0xb1, 0x22, 0x30, + 0x35, 0xc8, 0xb1, 0x22, 0x10, 0x30, 0xc8, 0xb1, + 0x22, 0xf0, 0x2b, 0xc8, 0xb1, 0x22, 0xaa, 0xc8, + 0xb1, 0x22, 0xc5, 0x34, 0x90, 0x06, 0xd0, 0x1e, + 0xe4, 0x33, 0xb0, 0x1a, 0xc5, 0x60, 0x90, 0x16, + 0xd0, 0x04, 0xe4, 0x5f, 0x90, 0x10, 0x86, 0x5f, + 0x85, 0x60, 0xa5, 0x22, 0xa6, 0x23, 0x85, 0x4e, + 0x86, 0x4f, 0xa5, 0x53, 0x85, 0x55, 0xa5, 0x53, + 0x18, 0x65, 0x22, 0x85, 0x22, 0x90, 0x02, 0xe6, + 0x23, 0xa6, 0x23, 0xa0, 0x00, 0x60, 0xa5, 0x4f, + 0x05, 0x4e, 0xf0, 0xf5, 0xa5, 0x55, 0x29, 0x04, + 0x4a, 0xa8, 0x85, 0x55, 0xb1, 0x4e, 0x65, 0x5f, + 0x85, 0x5a, 0xa5, 0x60, 0x69, 0x00, 0x85, 0x5b, + 0xa5, 0x33, 0xa6, 0x34, 0x85, 0x58, 0x86, 0x59, + 0x20, 0xbf, 0xa3, 0xa4, 0x55, 0xc8, 0xa5, 0x58, + 0x91, 0x4e, 0xaa, 0xe6, 0x59, 0xa5, 0x59, 0xc8, + 0x91, 0x4e, 0x4c, 0x2a, 0xb5, 0xa5, 0x65, 0x48, + 0xa5, 0x64, 0x48, 0x20, 0x83, 0xae, 0x20, 0x8f, + 0xad, 0x68, 0x85, 0x6f, 0x68, 0x85, 0x70, 0xa0, + 0x00, 0xb1, 0x6f, 0x18, 0x71, 0x64, 0x90, 0x05, + 0xa2, 0x17, 0x4c, 0x37, 0xa4, 0x20, 0x75, 0xb4, + 0x20, 0x7a, 0xb6, 0xa5, 0x50, 0xa4, 0x51, 0x20, + 0xaa, 0xb6, 0x20, 0x8c, 0xb6, 0xa5, 0x6f, 0xa4, + 0x70, 0x20, 0xaa, 0xb6, 0x20, 0xca, 0xb4, 0x4c, + 0xb8, 0xad, 0xa0, 0x00, 0xb1, 0x6f, 0x48, 0xc8, + 0xb1, 0x6f, 0xaa, 0xc8, 0xb1, 0x6f, 0xa8, 0x68, + 0x86, 0x22, 0x84, 0x23, 0xa8, 0xf0, 0x0a, 0x48, + 0x88, 0xb1, 0x22, 0x91, 0x35, 0x98, 0xd0, 0xf8, + 0x68, 0x18, 0x65, 0x35, 0x85, 0x35, 0x90, 0x02, + 0xe6, 0x36, 0x60, 0x20, 0x8f, 0xad, 0xa5, 0x64, + 0xa4, 0x65, 0x85, 0x22, 0x84, 0x23, 0x20, 0xdb, + 0xb6, 0x08, 0xa0, 0x00, 0xb1, 0x22, 0x48, 0xc8, + 0xb1, 0x22, 0xaa, 0xc8, 0xb1, 0x22, 0xa8, 0x68, + 0x28, 0xd0, 0x13, 0xc4, 0x34, 0xd0, 0x0f, 0xe4, + 0x33, 0xd0, 0x0b, 0x48, 0x18, 0x65, 0x33, 0x85, + 0x33, 0x90, 0x02, 0xe6, 0x34, 0x68, 0x86, 0x22, + 0x84, 0x23, 0x60, 0xc4, 0x18, 0xd0, 0x0c, 0xc5, + 0x17, 0xd0, 0x08, 0x85, 0x16, 0xe9, 0x03, 0x85, + 0x17, 0xa0, 0x00, 0x60, 0x20, 0xa1, 0xb7, 0x8a, + 0x48, 0xa9, 0x01, 0x20, 0x7d, 0xb4, 0x68, 0xa0, + 0x00, 0x91, 0x62, 0x68, 0x68, 0x4c, 0xca, 0xb4, + 0x20, 0x61, 0xb7, 0xd1, 0x50, 0x98, 0x90, 0x04, + 0xb1, 0x50, 0xaa, 0x98, 0x48, 0x8a, 0x48, 0x20, + 0x7d, 0xb4, 0xa5, 0x50, 0xa4, 0x51, 0x20, 0xaa, + 0xb6, 0x68, 0xa8, 0x68, 0x18, 0x65, 0x22, 0x85, + 0x22, 0x90, 0x02, 0xe6, 0x23, 0x98, 0x20, 0x8c, + 0xb6, 0x4c, 0xca, 0xb4, 0x20, 0x61, 0xb7, 0x18, + 0xf1, 0x50, 0x49, 0xff, 0x4c, 0x06, 0xb7, 0xa9, + 0xff, 0x85, 0x65, 0x20, 0x79, 0x00, 0xc9, 0x29, + 0xf0, 0x06, 0x20, 0xfd, 0xae, 0x20, 0x9e, 0xb7, + 0x20, 0x61, 0xb7, 0xf0, 0x4b, 0xca, 0x8a, 0x48, + 0x18, 0xa2, 0x00, 0xf1, 0x50, 0xb0, 0xb6, 0x49, + 0xff, 0xc5, 0x65, 0x90, 0xb1, 0xa5, 0x65, 0xb0, + 0xad, 0x20, 0xf7, 0xae, 0x68, 0xa8, 0x68, 0x85, + 0x55, 0x68, 0x68, 0x68, 0xaa, 0x68, 0x85, 0x50, + 0x68, 0x85, 0x51, 0xa5, 0x55, 0x48, 0x98, 0x48, + 0xa0, 0x00, 0x8a, 0x60, 0x20, 0x82, 0xb7, 0x4c, + 0xa2, 0xb3, 0x20, 0xa3, 0xb6, 0xa2, 0x00, 0x86, + 0x0d, 0xa8, 0x60, 0x20, 0x82, 0xb7, 0xf0, 0x08, + 0xa0, 0x00, 0xb1, 0x22, 0xa8, 0x4c, 0xa2, 0xb3, + 0x4c, 0x48, 0xb2, 0x20, 0x73, 0x00, 0x20, 0x8a, + 0xad, 0x20, 0xb8, 0xb1, 0xa6, 0x64, 0xd0, 0xf0, + 0xa6, 0x65, 0x4c, 0x79, 0x00, 0x20, 0x82, 0xb7, + 0xd0, 0x03, 0x4c, 0xf7, 0xb8, 0xa6, 0x7a, 0xa4, + 0x7b, 0x86, 0x71, 0x84, 0x72, 0xa6, 0x22, 0x86, + 0x7a, 0x18, 0x65, 0x22, 0x85, 0x24, 0xa6, 0x23, + 0x86, 0x7b, 0x90, 0x01, 0xe8, 0x86, 0x25, 0xa0, + 0x00, 0xb1, 0x24, 0x48, 0x98, 0x91, 0x24, 0x20, + 0x79, 0x00, 0x20, 0xf3, 0xbc, 0x68, 0xa0, 0x00, + 0x91, 0x24, 0xa6, 0x71, 0xa4, 0x72, 0x86, 0x7a, + 0x84, 0x7b, 0x60, 0x20, 0x8a, 0xad, 0x20, 0xf7, + 0xb7, 0x20, 0xfd, 0xae, 0x4c, 0x9e, 0xb7, 0xa5, + 0x66, 0x30, 0x9d, 0xa5, 0x61, 0xc9, 0x91, 0xb0, + 0x97, 0x20, 0x9b, 0xbc, 0xa5, 0x64, 0xa4, 0x65, + 0x84, 0x14, 0x85, 0x15, 0x60, 0xa5, 0x15, 0x48, + 0xa5, 0x14, 0x48, 0x20, 0xf7, 0xb7, 0xa0, 0x00, + 0xb1, 0x14, 0xa8, 0x68, 0x85, 0x14, 0x68, 0x85, + 0x15, 0x4c, 0xa2, 0xb3, 0x20, 0xeb, 0xb7, 0x8a, + 0xa0, 0x00, 0x91, 0x14, 0x60, 0x20, 0xeb, 0xb7, + 0x86, 0x49, 0xa2, 0x00, 0x20, 0x79, 0x00, 0xf0, + 0x03, 0x20, 0xf1, 0xb7, 0x86, 0x4a, 0xa0, 0x00, + 0xb1, 0x14, 0x45, 0x4a, 0x25, 0x49, 0xf0, 0xf8, + 0x60, 0xa9, 0x11, 0xa0, 0xbf, 0x4c, 0x67, 0xb8, + 0x20, 0x8c, 0xba, 0xa5, 0x66, 0x49, 0xff, 0x85, + 0x66, 0x45, 0x6e, 0x85, 0x6f, 0xa5, 0x61, 0x4c, + 0x6a, 0xb8, 0x20, 0x99, 0xb9, 0x90, 0x3c, 0x20, + 0x8c, 0xba, 0xd0, 0x03, 0x4c, 0xfc, 0xbb, 0xa6, + 0x70, 0x86, 0x56, 0xa2, 0x69, 0xa5, 0x69, 0xa8, + 0xf0, 0xce, 0x38, 0xe5, 0x61, 0xf0, 0x24, 0x90, + 0x12, 0x84, 0x61, 0xa4, 0x6e, 0x84, 0x66, 0x49, + 0xff, 0x69, 0x00, 0xa0, 0x00, 0x84, 0x56, 0xa2, + 0x61, 0xd0, 0x04, 0xa0, 0x00, 0x84, 0x70, 0xc9, + 0xf9, 0x30, 0xc7, 0xa8, 0xa5, 0x70, 0x56, 0x01, + 0x20, 0xb0, 0xb9, 0x24, 0x6f, 0x10, 0x57, 0xa0, + 0x61, 0xe0, 0x69, 0xf0, 0x02, 0xa0, 0x69, 0x38, + 0x49, 0xff, 0x65, 0x56, 0x85, 0x70, 0xb9, 0x04, + 0x00, 0xf5, 0x04, 0x85, 0x65, 0xb9, 0x03, 0x00, + 0xf5, 0x03, 0x85, 0x64, 0xb9, 0x02, 0x00, 0xf5, + 0x02, 0x85, 0x63, 0xb9, 0x01, 0x00, 0xf5, 0x01, + 0x85, 0x62, 0xb0, 0x03, 0x20, 0x47, 0xb9, 0xa0, + 0x00, 0x98, 0x18, 0xa6, 0x62, 0xd0, 0x4a, 0xa6, + 0x63, 0x86, 0x62, 0xa6, 0x64, 0x86, 0x63, 0xa6, + 0x65, 0x86, 0x64, 0xa6, 0x70, 0x86, 0x65, 0x84, + 0x70, 0x69, 0x08, 0xc9, 0x20, 0xd0, 0xe4, 0xa9, + 0x00, 0x85, 0x61, 0x85, 0x66, 0x60, 0x65, 0x56, + 0x85, 0x70, 0xa5, 0x65, 0x65, 0x6d, 0x85, 0x65, + 0xa5, 0x64, 0x65, 0x6c, 0x85, 0x64, 0xa5, 0x63, + 0x65, 0x6b, 0x85, 0x63, 0xa5, 0x62, 0x65, 0x6a, + 0x85, 0x62, 0x4c, 0x36, 0xb9, 0x69, 0x01, 0x06, + 0x70, 0x26, 0x65, 0x26, 0x64, 0x26, 0x63, 0x26, + 0x62, 0x10, 0xf2, 0x38, 0xe5, 0x61, 0xb0, 0xc7, + 0x49, 0xff, 0x69, 0x01, 0x85, 0x61, 0x90, 0x0e, + 0xe6, 0x61, 0xf0, 0x42, 0x66, 0x62, 0x66, 0x63, + 0x66, 0x64, 0x66, 0x65, 0x66, 0x70, 0x60, 0xa5, + 0x66, 0x49, 0xff, 0x85, 0x66, 0xa5, 0x62, 0x49, + 0xff, 0x85, 0x62, 0xa5, 0x63, 0x49, 0xff, 0x85, + 0x63, 0xa5, 0x64, 0x49, 0xff, 0x85, 0x64, 0xa5, + 0x65, 0x49, 0xff, 0x85, 0x65, 0xa5, 0x70, 0x49, + 0xff, 0x85, 0x70, 0xe6, 0x70, 0xd0, 0x0e, 0xe6, + 0x65, 0xd0, 0x0a, 0xe6, 0x64, 0xd0, 0x06, 0xe6, + 0x63, 0xd0, 0x02, 0xe6, 0x62, 0x60, 0xa2, 0x0f, + 0x4c, 0x37, 0xa4, 0xa2, 0x25, 0xb4, 0x04, 0x84, + 0x70, 0xb4, 0x03, 0x94, 0x04, 0xb4, 0x02, 0x94, + 0x03, 0xb4, 0x01, 0x94, 0x02, 0xa4, 0x68, 0x94, + 0x01, 0x69, 0x08, 0x30, 0xe8, 0xf0, 0xe6, 0xe9, + 0x08, 0xa8, 0xa5, 0x70, 0xb0, 0x14, 0x16, 0x01, + 0x90, 0x02, 0xf6, 0x01, 0x76, 0x01, 0x76, 0x01, + 0x76, 0x02, 0x76, 0x03, 0x76, 0x04, 0x6a, 0xc8, + 0xd0, 0xec, 0x18, 0x60, 0x81, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x7f, 0x5e, 0x56, 0xcb, 0x79, 0x80, + 0x13, 0x9b, 0x0b, 0x64, 0x80, 0x76, 0x38, 0x93, + 0x16, 0x82, 0x38, 0xaa, 0x3b, 0x20, 0x80, 0x35, + 0x04, 0xf3, 0x34, 0x81, 0x35, 0x04, 0xf3, 0x34, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x31, 0x72, + 0x17, 0xf8, 0x20, 0x2b, 0xbc, 0xf0, 0x02, 0x10, + 0x03, 0x4c, 0x48, 0xb2, 0xa5, 0x61, 0xe9, 0x7f, + 0x48, 0xa9, 0x80, 0x85, 0x61, 0xa9, 0xd6, 0xa0, + 0xb9, 0x20, 0x67, 0xb8, 0xa9, 0xdb, 0xa0, 0xb9, + 0x20, 0x0f, 0xbb, 0xa9, 0xbc, 0xa0, 0xb9, 0x20, + 0x50, 0xb8, 0xa9, 0xc1, 0xa0, 0xb9, 0x20, 0x43, + 0xe0, 0xa9, 0xe0, 0xa0, 0xb9, 0x20, 0x67, 0xb8, + 0x68, 0x20, 0x7e, 0xbd, 0xa9, 0xe5, 0xa0, 0xb9, + 0x20, 0x8c, 0xba, 0xd0, 0x03, 0x4c, 0x8b, 0xba, + 0x20, 0xb7, 0xba, 0xa9, 0x00, 0x85, 0x26, 0x85, + 0x27, 0x85, 0x28, 0x85, 0x29, 0xa5, 0x70, 0x20, + 0x59, 0xba, 0xa5, 0x65, 0x20, 0x59, 0xba, 0xa5, + 0x64, 0x20, 0x59, 0xba, 0xa5, 0x63, 0x20, 0x59, + 0xba, 0xa5, 0x62, 0x20, 0x5e, 0xba, 0x4c, 0x8f, + 0xbb, 0xd0, 0x03, 0x4c, 0x83, 0xb9, 0x4a, 0x09, + 0x80, 0xa8, 0x90, 0x19, 0x18, 0xa5, 0x29, 0x65, + 0x6d, 0x85, 0x29, 0xa5, 0x28, 0x65, 0x6c, 0x85, + 0x28, 0xa5, 0x27, 0x65, 0x6b, 0x85, 0x27, 0xa5, + 0x26, 0x65, 0x6a, 0x85, 0x26, 0x66, 0x26, 0x66, + 0x27, 0x66, 0x28, 0x66, 0x29, 0x66, 0x70, 0x98, + 0x4a, 0xd0, 0xd6, 0x60, 0x85, 0x22, 0x84, 0x23, + 0xa0, 0x04, 0xb1, 0x22, 0x85, 0x6d, 0x88, 0xb1, + 0x22, 0x85, 0x6c, 0x88, 0xb1, 0x22, 0x85, 0x6b, + 0x88, 0xb1, 0x22, 0x85, 0x6e, 0x45, 0x66, 0x85, + 0x6f, 0xa5, 0x6e, 0x09, 0x80, 0x85, 0x6a, 0x88, + 0xb1, 0x22, 0x85, 0x69, 0xa5, 0x61, 0x60, 0xa5, + 0x69, 0xf0, 0x1f, 0x18, 0x65, 0x61, 0x90, 0x04, + 0x30, 0x1d, 0x18, 0x2c, 0x10, 0x14, 0x69, 0x80, + 0x85, 0x61, 0xd0, 0x03, 0x4c, 0xfb, 0xb8, 0xa5, + 0x6f, 0x85, 0x66, 0x60, 0xa5, 0x66, 0x49, 0xff, + 0x30, 0x05, 0x68, 0x68, 0x4c, 0xf7, 0xb8, 0x4c, + 0x7e, 0xb9, 0x20, 0x0c, 0xbc, 0xaa, 0xf0, 0x10, + 0x18, 0x69, 0x02, 0xb0, 0xf2, 0xa2, 0x00, 0x86, + 0x6f, 0x20, 0x77, 0xb8, 0xe6, 0x61, 0xf0, 0xe7, + 0x60, 0x84, 0x20, 0x00, 0x00, 0x00, 0x20, 0x0c, + 0xbc, 0xa9, 0xf9, 0xa0, 0xba, 0xa2, 0x00, 0x86, + 0x6f, 0x20, 0xa2, 0xbb, 0x4c, 0x12, 0xbb, 0x20, + 0x8c, 0xba, 0xf0, 0x76, 0x20, 0x1b, 0xbc, 0xa9, + 0x00, 0x38, 0xe5, 0x61, 0x85, 0x61, 0x20, 0xb7, + 0xba, 0xe6, 0x61, 0xf0, 0xba, 0xa2, 0xfc, 0xa9, + 0x01, 0xa4, 0x6a, 0xc4, 0x62, 0xd0, 0x10, 0xa4, + 0x6b, 0xc4, 0x63, 0xd0, 0x0a, 0xa4, 0x6c, 0xc4, + 0x64, 0xd0, 0x04, 0xa4, 0x6d, 0xc4, 0x65, 0x08, + 0x2a, 0x90, 0x09, 0xe8, 0x95, 0x29, 0xf0, 0x32, + 0x10, 0x34, 0xa9, 0x01, 0x28, 0xb0, 0x0e, 0x06, + 0x6d, 0x26, 0x6c, 0x26, 0x6b, 0x26, 0x6a, 0xb0, + 0xe6, 0x30, 0xce, 0x10, 0xe2, 0xa8, 0xa5, 0x6d, + 0xe5, 0x65, 0x85, 0x6d, 0xa5, 0x6c, 0xe5, 0x64, + 0x85, 0x6c, 0xa5, 0x6b, 0xe5, 0x63, 0x85, 0x6b, + 0xa5, 0x6a, 0xe5, 0x62, 0x85, 0x6a, 0x98, 0x4c, + 0x4f, 0xbb, 0xa9, 0x40, 0xd0, 0xce, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x85, 0x70, 0x28, 0x4c, + 0x8f, 0xbb, 0xa2, 0x14, 0x4c, 0x37, 0xa4, 0xa5, + 0x26, 0x85, 0x62, 0xa5, 0x27, 0x85, 0x63, 0xa5, + 0x28, 0x85, 0x64, 0xa5, 0x29, 0x85, 0x65, 0x4c, + 0xd7, 0xb8, 0x85, 0x22, 0x84, 0x23, 0xa0, 0x04, + 0xb1, 0x22, 0x85, 0x65, 0x88, 0xb1, 0x22, 0x85, + 0x64, 0x88, 0xb1, 0x22, 0x85, 0x63, 0x88, 0xb1, + 0x22, 0x85, 0x66, 0x09, 0x80, 0x85, 0x62, 0x88, + 0xb1, 0x22, 0x85, 0x61, 0x84, 0x70, 0x60, 0xa2, + 0x5c, 0x2c, 0xa2, 0x57, 0xa0, 0x00, 0xf0, 0x04, + 0xa6, 0x49, 0xa4, 0x4a, 0x20, 0x1b, 0xbc, 0x86, + 0x22, 0x84, 0x23, 0xa0, 0x04, 0xa5, 0x65, 0x91, + 0x22, 0x88, 0xa5, 0x64, 0x91, 0x22, 0x88, 0xa5, + 0x63, 0x91, 0x22, 0x88, 0xa5, 0x66, 0x09, 0x7f, + 0x25, 0x62, 0x91, 0x22, 0x88, 0xa5, 0x61, 0x91, + 0x22, 0x84, 0x70, 0x60, 0xa5, 0x6e, 0x85, 0x66, + 0xa2, 0x05, 0xb5, 0x68, 0x95, 0x60, 0xca, 0xd0, + 0xf9, 0x86, 0x70, 0x60, 0x20, 0x1b, 0xbc, 0xa2, + 0x06, 0xb5, 0x60, 0x95, 0x68, 0xca, 0xd0, 0xf9, + 0x86, 0x70, 0x60, 0xa5, 0x61, 0xf0, 0xfb, 0x06, + 0x70, 0x90, 0xf7, 0x20, 0x6f, 0xb9, 0xd0, 0xf2, + 0x4c, 0x38, 0xb9, 0xa5, 0x61, 0xf0, 0x09, 0xa5, + 0x66, 0x2a, 0xa9, 0xff, 0xb0, 0x02, 0xa9, 0x01, + 0x60, 0x20, 0x2b, 0xbc, 0x85, 0x62, 0xa9, 0x00, + 0x85, 0x63, 0xa2, 0x88, 0xa5, 0x62, 0x49, 0xff, + 0x2a, 0xa9, 0x00, 0x85, 0x65, 0x85, 0x64, 0x86, + 0x61, 0x85, 0x70, 0x85, 0x66, 0x4c, 0xd2, 0xb8, + 0x46, 0x66, 0x60, 0x85, 0x24, 0x84, 0x25, 0xa0, + 0x00, 0xb1, 0x24, 0xc8, 0xaa, 0xf0, 0xc4, 0xb1, + 0x24, 0x45, 0x66, 0x30, 0xc2, 0xe4, 0x61, 0xd0, + 0x21, 0xb1, 0x24, 0x09, 0x80, 0xc5, 0x62, 0xd0, + 0x19, 0xc8, 0xb1, 0x24, 0xc5, 0x63, 0xd0, 0x12, + 0xc8, 0xb1, 0x24, 0xc5, 0x64, 0xd0, 0x0b, 0xc8, + 0xa9, 0x7f, 0xc5, 0x70, 0xb1, 0x24, 0xe5, 0x65, + 0xf0, 0x28, 0xa5, 0x66, 0x90, 0x02, 0x49, 0xff, + 0x4c, 0x31, 0xbc, 0xa5, 0x61, 0xf0, 0x4a, 0x38, + 0xe9, 0xa0, 0x24, 0x66, 0x10, 0x09, 0xaa, 0xa9, + 0xff, 0x85, 0x68, 0x20, 0x4d, 0xb9, 0x8a, 0xa2, + 0x61, 0xc9, 0xf9, 0x10, 0x06, 0x20, 0x99, 0xb9, + 0x84, 0x68, 0x60, 0xa8, 0xa5, 0x66, 0x29, 0x80, + 0x46, 0x62, 0x05, 0x62, 0x85, 0x62, 0x20, 0xb0, + 0xb9, 0x84, 0x68, 0x60, 0xa5, 0x61, 0xc9, 0xa0, + 0xb0, 0x20, 0x20, 0x9b, 0xbc, 0x84, 0x70, 0xa5, + 0x66, 0x84, 0x66, 0x49, 0x80, 0x2a, 0xa9, 0xa0, + 0x85, 0x61, 0xa5, 0x65, 0x85, 0x07, 0x4c, 0xd2, + 0xb8, 0x85, 0x62, 0x85, 0x63, 0x85, 0x64, 0x85, + 0x65, 0xa8, 0x60, 0xa0, 0x00, 0xa2, 0x0a, 0x94, + 0x5d, 0xca, 0x10, 0xfb, 0x90, 0x0f, 0xc9, 0x2d, + 0xd0, 0x04, 0x86, 0x67, 0xf0, 0x04, 0xc9, 0x2b, + 0xd0, 0x05, 0x20, 0x73, 0x00, 0x90, 0x5b, 0xc9, + 0x2e, 0xf0, 0x2e, 0xc9, 0x45, 0xd0, 0x30, 0x20, + 0x73, 0x00, 0x90, 0x17, 0xc9, 0xab, 0xf0, 0x0e, + 0xc9, 0x2d, 0xf0, 0x0a, 0xc9, 0xaa, 0xf0, 0x08, + 0xc9, 0x2b, 0xf0, 0x04, 0xd0, 0x07, 0x66, 0x60, + 0x20, 0x73, 0x00, 0x90, 0x5c, 0x24, 0x60, 0x10, + 0x0e, 0xa9, 0x00, 0x38, 0xe5, 0x5e, 0x4c, 0x49, + 0xbd, 0x66, 0x5f, 0x24, 0x5f, 0x50, 0xc3, 0xa5, + 0x5e, 0x38, 0xe5, 0x5d, 0x85, 0x5e, 0xf0, 0x12, + 0x10, 0x09, 0x20, 0xfe, 0xba, 0xe6, 0x5e, 0xd0, + 0xf9, 0xf0, 0x07, 0x20, 0xe2, 0xba, 0xc6, 0x5e, + 0xd0, 0xf9, 0xa5, 0x67, 0x30, 0x01, 0x60, 0x4c, + 0xb4, 0xbf, 0x48, 0x24, 0x5f, 0x10, 0x02, 0xe6, + 0x5d, 0x20, 0xe2, 0xba, 0x68, 0x38, 0xe9, 0x30, + 0x20, 0x7e, 0xbd, 0x4c, 0x0a, 0xbd, 0x48, 0x20, + 0x0c, 0xbc, 0x68, 0x20, 0x3c, 0xbc, 0xa5, 0x6e, + 0x45, 0x66, 0x85, 0x6f, 0xa6, 0x61, 0x4c, 0x6a, + 0xb8, 0xa5, 0x5e, 0xc9, 0x0a, 0x90, 0x09, 0xa9, + 0x64, 0x24, 0x60, 0x30, 0x11, 0x4c, 0x7e, 0xb9, + 0x0a, 0x0a, 0x18, 0x65, 0x5e, 0x0a, 0x18, 0xa0, + 0x00, 0x71, 0x7a, 0x38, 0xe9, 0x30, 0x85, 0x5e, + 0x4c, 0x30, 0xbd, 0x9b, 0x3e, 0xbc, 0x1f, 0xfd, + 0x9e, 0x6e, 0x6b, 0x27, 0xfd, 0x9e, 0x6e, 0x6b, + 0x28, 0x00, 0xa9, 0x71, 0xa0, 0xa3, 0x20, 0xda, + 0xbd, 0xa5, 0x3a, 0xa6, 0x39, 0x85, 0x62, 0x86, + 0x63, 0xa2, 0x90, 0x38, 0x20, 0x49, 0xbc, 0x20, + 0xdf, 0xbd, 0x4c, 0x1e, 0xab, 0xa0, 0x01, 0xa9, + 0x20, 0x24, 0x66, 0x10, 0x02, 0xa9, 0x2d, 0x99, + 0xff, 0x00, 0x85, 0x66, 0x84, 0x71, 0xc8, 0xa9, + 0x30, 0xa6, 0x61, 0xd0, 0x03, 0x4c, 0x04, 0xbf, + 0xa9, 0x00, 0xe0, 0x80, 0xf0, 0x02, 0xb0, 0x09, + 0xa9, 0xbd, 0xa0, 0xbd, 0x20, 0x28, 0xba, 0xa9, + 0xf7, 0x85, 0x5d, 0xa9, 0xb8, 0xa0, 0xbd, 0x20, + 0x5b, 0xbc, 0xf0, 0x1e, 0x10, 0x12, 0xa9, 0xb3, + 0xa0, 0xbd, 0x20, 0x5b, 0xbc, 0xf0, 0x02, 0x10, + 0x0e, 0x20, 0xe2, 0xba, 0xc6, 0x5d, 0xd0, 0xee, + 0x20, 0xfe, 0xba, 0xe6, 0x5d, 0xd0, 0xdc, 0x20, + 0x49, 0xb8, 0x20, 0x9b, 0xbc, 0xa2, 0x01, 0xa5, + 0x5d, 0x18, 0x69, 0x0a, 0x30, 0x09, 0xc9, 0x0b, + 0xb0, 0x06, 0x69, 0xff, 0xaa, 0xa9, 0x02, 0x38, + 0xe9, 0x02, 0x85, 0x5e, 0x86, 0x5d, 0x8a, 0xf0, + 0x02, 0x10, 0x13, 0xa4, 0x71, 0xa9, 0x2e, 0xc8, + 0x99, 0xff, 0x00, 0x8a, 0xf0, 0x06, 0xa9, 0x30, + 0xc8, 0x99, 0xff, 0x00, 0x84, 0x71, 0xa0, 0x00, + 0xa2, 0x80, 0xa5, 0x65, 0x18, 0x79, 0x19, 0xbf, + 0x85, 0x65, 0xa5, 0x64, 0x79, 0x18, 0xbf, 0x85, + 0x64, 0xa5, 0x63, 0x79, 0x17, 0xbf, 0x85, 0x63, + 0xa5, 0x62, 0x79, 0x16, 0xbf, 0x85, 0x62, 0xe8, + 0xb0, 0x04, 0x10, 0xde, 0x30, 0x02, 0x30, 0xda, + 0x8a, 0x90, 0x04, 0x49, 0xff, 0x69, 0x0a, 0x69, + 0x2f, 0xc8, 0xc8, 0xc8, 0xc8, 0x84, 0x47, 0xa4, + 0x71, 0xc8, 0xaa, 0x29, 0x7f, 0x99, 0xff, 0x00, + 0xc6, 0x5d, 0xd0, 0x06, 0xa9, 0x2e, 0xc8, 0x99, + 0xff, 0x00, 0x84, 0x71, 0xa4, 0x47, 0x8a, 0x49, + 0xff, 0x29, 0x80, 0xaa, 0xc0, 0x24, 0xf0, 0x04, + 0xc0, 0x3c, 0xd0, 0xa6, 0xa4, 0x71, 0xb9, 0xff, + 0x00, 0x88, 0xc9, 0x30, 0xf0, 0xf8, 0xc9, 0x2e, + 0xf0, 0x01, 0xc8, 0xa9, 0x2b, 0xa6, 0x5e, 0xf0, + 0x2e, 0x10, 0x08, 0xa9, 0x00, 0x38, 0xe5, 0x5e, + 0xaa, 0xa9, 0x2d, 0x99, 0x01, 0x01, 0xa9, 0x45, + 0x99, 0x00, 0x01, 0x8a, 0xa2, 0x2f, 0x38, 0xe8, + 0xe9, 0x0a, 0xb0, 0xfb, 0x69, 0x3a, 0x99, 0x03, + 0x01, 0x8a, 0x99, 0x02, 0x01, 0xa9, 0x00, 0x99, + 0x04, 0x01, 0xf0, 0x08, 0x99, 0xff, 0x00, 0xa9, + 0x00, 0x99, 0x00, 0x01, 0xa9, 0x00, 0xa0, 0x01, + 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x0a, + 0x1f, 0x00, 0x00, 0x98, 0x96, 0x80, 0xff, 0xf0, + 0xbd, 0xc0, 0x00, 0x01, 0x86, 0xa0, 0xff, 0xff, + 0xd8, 0xf0, 0x00, 0x00, 0x03, 0xe8, 0xff, 0xff, + 0xff, 0x9c, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xdf, 0x0a, 0x80, 0x00, 0x03, + 0x4b, 0xc0, 0xff, 0xff, 0x73, 0x60, 0x00, 0x00, + 0x0e, 0x10, 0xff, 0xff, 0xfd, 0xa8, 0x00, 0x00, + 0x00, 0x3c, 0xec, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0x20, 0x0c, 0xbc, 0xa9, 0x11, 0xa0, 0xbf, + 0x20, 0xa2, 0xbb, 0xf0, 0x70, 0xa5, 0x69, 0xd0, + 0x03, 0x4c, 0xf9, 0xb8, 0xa2, 0x4e, 0xa0, 0x00, + 0x20, 0xd4, 0xbb, 0xa5, 0x6e, 0x10, 0x0f, 0x20, + 0xcc, 0xbc, 0xa9, 0x4e, 0xa0, 0x00, 0x20, 0x5b, + 0xbc, 0xd0, 0x03, 0x98, 0xa4, 0x07, 0x20, 0xfe, + 0xbb, 0x98, 0x48, 0x20, 0xea, 0xb9, 0xa9, 0x4e, + 0xa0, 0x00, 0x20, 0x28, 0xba, 0x20, 0xed, 0xbf, + 0x68, 0x4a, 0x90, 0x0a, 0xa5, 0x61, 0xf0, 0x06, + 0xa5, 0x66, 0x49, 0xff, 0x85, 0x66, 0x60, 0x81, + 0x38, 0xaa, 0x3b, 0x29, 0x07, 0x71, 0x34, 0x58, + 0x3e, 0x56, 0x74, 0x16, 0x7e, 0xb3, 0x1b, 0x77, + 0x2f, 0xee, 0xe3, 0x85, 0x7a, 0x1d, 0x84, 0x1c, + 0x2a, 0x7c, 0x63, 0x59, 0x58, 0x0a, 0x7e, 0x75, + 0xfd, 0xe7, 0xc6, 0x80, 0x31, 0x72, 0x18, 0x10, + 0x81, 0x00, 0x00, 0x00, 0x00, 0xa9, 0xbf, 0xa0, + 0xbf, 0x20, 0x28, 0xba, 0xa5, 0x70, 0x69, 0x50, + 0x90, 0x03, 0x20, 0x23, 0xbc, 0x4c, 0x00, 0xe0 +}; diff --git a/Src/C64.cpp b/Src/C64.cpp index d21c2f2..45d2bcf 100644 --- a/Src/C64.cpp +++ b/Src/C64.cpp @@ -1,7 +1,21 @@ /* * C64.cpp - Put the pieces together * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "sysdeps.h" @@ -18,7 +32,7 @@ #include "Display.h" #include "Prefs.h" -#if defined(__unix) && !defined(__svgalib__) && !defined(HAVE_SDL) +#if defined(__unix) && !defined(__svgalib__) &&!defined(WII) #include "CmdPipe.h" #endif @@ -36,7 +50,6 @@ bool IsFrodoSC = false; C64::C64() { - int i,j; uint8 *p; // The thread is not yet running @@ -51,13 +64,13 @@ C64::C64() TheDisplay = new C64Display(this); // Allocate RAM/ROM memory - RAM = new uint8[0x10000]; - Basic = new uint8[0x2000]; - Kernal = new uint8[0x2000]; - Char = new uint8[0x1000]; - Color = new uint8[0x0400]; - RAM1541 = new uint8[0x0800]; - ROM1541 = new uint8[0x4000]; + RAM = new uint8[C64_RAM_SIZE]; + Basic = new uint8[BASIC_ROM_SIZE]; + Kernal = new uint8[KERNAL_ROM_SIZE]; + Char = new uint8[CHAR_ROM_SIZE]; + Color = new uint8[COLOR_RAM_SIZE]; + RAM1541 = new uint8[DRIVE_RAM_SIZE]; + ROM1541 = new uint8[DRIVE_ROM_SIZE]; // Create the chips TheCPU = new MOS6510(this, RAM, Basic, Kernal, Char, Color); @@ -73,22 +86,24 @@ C64::C64() TheREU = TheCPU->TheREU = new REU(TheCPU); // Initialize RAM with powerup pattern - for (i=0, p=RAM; i<512; i++) { - for (j=0; j<64; j++) + p = RAM; + for (unsigned i=0; i<512; i++) { + for (unsigned j=0; j<64; j++) *p++ = 0; - for (j=0; j<64; j++) + for (unsigned j=0; j<64; j++) *p++ = 0xff; } // Initialize color RAM with random values - for (i=0, p=Color; i<1024; i++) + p = Color; + for (unsigned i=0; iJoystick1On, prefs->Joystick2On); + open_close_joysticks(ThePrefs.Joystick1Port, ThePrefs.Joystick2Port, prefs->Joystick1Port, prefs->Joystick2Port); PatchKernal(prefs->FastReset, prefs->Emul1541Proc); TheDisplay->NewPrefs(prefs); @@ -690,25 +705,29 @@ bool C64::LoadSnapshot(char *filename) #ifdef __BEOS__ -#include "C64_Be.i" +#include "C64_Be.h" #endif #ifdef AMIGA -#include "C64_Amiga.i" +#include "C64_Amiga.h" #endif -#ifdef HAVE_SDL -#include "C64_SDL.i" +#ifdef __unix +# if defined(QTOPIA) or defined(MAEMO) or defined(WII) +# include "C64_Embedded.h" +# else +# include "C64_x.h" +# endif #endif #ifdef __mac__ -#include "C64_mac.i" +#include "C64_mac.h" #endif #ifdef WIN32 -#include "C64_WIN32.i" +#include "C64_WIN32.h" #endif #ifdef __riscos__ -#include "C64_Acorn.i" +#include "C64_Acorn.h" #endif diff --git a/Src/C64.h b/Src/C64.h index efd4f67..f33ba65 100644 --- a/Src/C64.h +++ b/Src/C64.h @@ -1,20 +1,28 @@ /* * C64.h - Put the pieces together * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _C64_H #define _C64_H -#if defined(HAVE_SDL) -/* SDL menu */ -#include "menu.h" -#endif - #ifdef __BEOS__ #include -#include #endif #ifdef AMIGA @@ -27,11 +35,16 @@ #include "ROlib.h" #endif -#ifdef GEKKO -#define PREFS_PATH "/apps/frodo/frodorc" -#elif HAVE_SDL -#define PREFS_PATH "/home/ska/.frodorc" -#endif + +// Sizes of memory areas +const int C64_RAM_SIZE = 0x10000; +const int COLOR_RAM_SIZE = 0x400; +const int BASIC_ROM_SIZE = 0x2000; +const int KERNAL_ROM_SIZE = 0x2000; +const int CHAR_ROM_SIZE = 0x1000; +const int DRIVE_RAM_SIZE = 0x800; +const int DRIVE_ROM_SIZE = 0x4000; + // false: Frodo, true: FrodoSC extern bool IsFrodoSC; @@ -100,15 +113,12 @@ public: #ifdef FRODO_SC uint32 CycleCounter; #endif - void enter_menu() { - this->have_a_break = true; - } private: void c64_ctor1(void); void c64_ctor2(void); void c64_dtor(void); - void open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2); + void open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2); uint8 poll_joystick(int port); void thread_func(void); @@ -116,7 +126,7 @@ private: bool quit_thyself; // Emulation thread shall quit bool have_a_break; // Emulation thread shall pause - int joy_minx, joy_maxx, joy_miny, joy_maxy; // For dynamic joystick calibration + int joy_minx[2], joy_maxx[2], joy_miny[2], joy_maxy[2]; // For dynamic joystick calibration uint8 joykey; // Joystick keyboard emulation mask value uint8 orig_kernal_1d84, // Original contents of kernal locations $1d84 and $1d85 @@ -128,12 +138,14 @@ public: private: static long thread_invoc(void *obj); + void open_close_joystick(int port, int oldjoy, int newjoy); - BJoystick *joy[2]; // Joystick objects + void *joy[2]; // Joystick objects (BJoystick or BDigitalPort) + bool joy_geek_port[2]; // Flag: joystick on GeekPort? thread_id the_thread; sem_id pause_sem; sem_id sound_sync_sem; - double start_time; + bigtime_t start_time; #endif #ifdef AMIGA @@ -148,31 +160,11 @@ private: bool game_open, port_allocated; // Flags: gameport.device opened, game port allocated #endif -#ifdef GEKKO - double speed_index; -#endif - #ifdef __unix - int joyfd[2]; // File descriptors for joysticks + void open_close_joystick(int port, int oldjoy, int newjoy); double speed_index; public: -#endif -#ifdef HAVE_SDL - menu_t main_menu; - TTF_Font *menu_font; - - bool fake_key_sequence; - int fake_key_type; - int fake_key_index; - int fake_key_keytime; - - bool prefs_changed; - char save_game_name[256]; - - void select_disc(Prefs *np); - void bind_key(Prefs *np); - void other_options(Prefs *np); - void save_load_state(Prefs *np); + CmdPipe *gui; #endif #ifdef WIN32 diff --git a/Src/C64_Acorn.i b/Src/C64_Acorn.h similarity index 91% rename from Src/C64_Acorn.i rename to Src/C64_Acorn.h index 920e27e..e3c705a 100644 --- a/Src/C64_Acorn.i +++ b/Src/C64_Acorn.h @@ -1,13 +1,23 @@ /* - * C64_Acorn.i + * C64_Acorn.h - Put the pieces together, RISC OS specific stuff * - * RISC OS specific stuff concerning the actual emulator - * Frodo (C) 1994-1997,2002 Christian Bauer - * Acorn port by Andreas Dehmel, 1997 + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 */ - #include "Prefs.h" #include "ROlib.h" #include "AcornGUI.h" @@ -146,7 +156,7 @@ void C64::c64_dtor(void) } -void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2) +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) { // Check if the Joystick module is loaded. If not then write an illegal value to // the joystick state. diff --git a/Src/C64_Amiga.i b/Src/C64_Amiga.h similarity index 90% rename from Src/C64_Amiga.i rename to Src/C64_Amiga.h index ad8e629..02f4fad 100644 --- a/Src/C64_Amiga.i +++ b/Src/C64_Amiga.h @@ -1,7 +1,21 @@ /* - * C64_Amiga.i - Put the pieces together, Amiga specific stuff + * C64_Amiga.h - Put the pieces together, Amiga specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -213,7 +227,7 @@ void C64::VBlank(bool draw_frame) * joystick preferences */ -void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2) +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) { if (game_open && (oldjoy2 != newjoy2)) diff --git a/Src/C64_Be.i b/Src/C64_Be.h similarity index 68% rename from Src/C64_Be.i rename to Src/C64_Be.h index acaae69..aeccb99 100644 --- a/Src/C64_Be.i +++ b/Src/C64_Be.h @@ -1,11 +1,26 @@ /* - * C64_Be.i - Put the pieces together, Be specific stuff + * C64_Be.h - Put the pieces together, Be specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include #include +#include #undef PROFILING @@ -16,8 +31,8 @@ void C64::c64_ctor1(void) { - joy[0] = new BJoystick(); - joy[1] = new BJoystick(); + joy[0] = joy[1] = NULL; + joy_geek_port[0] = joy_geek_port[1] = false; } void C64::c64_ctor2(void) @@ -43,9 +58,6 @@ void C64::c64_dtor(void) { delete_sem(pause_sem); delete_sem(sound_sync_sem); - - delete joy[0]; - delete joy[1]; } @@ -210,25 +222,50 @@ void C64::SoundSync(void) * joystick preferences */ -void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2) +void C64::open_close_joystick(int port, int oldjoy, int newjoy) { - if (oldjoy1 != newjoy1) { + if (oldjoy != newjoy) { joy_minx = joy_miny = 32767; // Reset calibration joy_maxx = joy_maxy = 0; - if (newjoy1) - joy[0]->Open("joystick2"); - else - joy[0]->Close(); + if (joy[port]) { + if (joy_geek_port[port]) { + ((BDigitalPort *)joy[port])->Close(); + delete (BDigitalPort *)joy[port]; + } else { + ((BJoystick *)joy[port])->Close(); + delete (BJoystick *)joy[port]; + } + joy[port] = NULL; + } + switch (newjoy) { + case 1: + joy[port] = new BJoystick; + ((BJoystick *)joy[port])->Open("joystick1"); + joy_geek_port[port] = false; + break; + case 2: + joy[port] = new BJoystick; + ((BJoystick *)joy[port])->Open("joystick2"); + joy_geek_port[port] = false; + break; + case 3: + joy[port] = new BDigitalPort; + ((BDigitalPort *)joy[port])->Open("DigitalA"); + joy_geek_port[port] = true; + break; + case 4: + joy[port] = new BDigitalPort; + ((BDigitalPort *)joy[port])->Open("DigitalB"); + joy_geek_port[port] = true; + break; + } } +} - if (oldjoy2 != newjoy2) { - joy_minx = joy_miny = 32767; // Reset calibration - joy_maxx = joy_maxy = 0; - if (newjoy2) - joy[1]->Open("joystick1"); - else - joy[1]->Close(); - } +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) +{ + open_close_joystick(0, oldjoy1, newjoy1); + open_close_joystick(1, oldjoy2, newjoy2); } @@ -240,31 +277,46 @@ uint8 C64::poll_joystick(int port) { uint8 j = 0xff; - if (joy[port]->Update() != B_ERROR) { - if (joy[port]->horizontal > joy_maxx) - joy_maxx = joy[port]->horizontal; - if (joy[port]->horizontal < joy_minx) - joy_minx = joy[port]->horizontal; - if (joy[port]->vertical > joy_maxy) - joy_maxy = joy[port]->vertical; - if (joy[port]->vertical < joy_miny) - joy_miny = joy[port]->vertical; + if (joy[port] == NULL) + return j; - if (!joy[port]->button1) - j &= 0xef; // Button + if (joy_geek_port[port]) { - if (joy_maxx-joy_minx < 100 || joy_maxy-joy_miny < 100) - return j; + // GeekPort + uint8 val; + if (((BDigitalPort *)joy[port])->Read(&val) == 1) + j = val | 0xe0; - if (joy[port]->horizontal < (joy_minx + (joy_maxx-joy_minx)/3)) - j &= 0xf7; // Right - else if (joy[port]->horizontal > (joy_minx + 2*(joy_maxx-joy_minx)/3)) - j &= 0xfb; // Left + } else { - if (joy[port]->vertical < (joy_miny + (joy_maxy-joy_miny)/3)) - j &= 0xfd; // Down - else if (joy[port]->vertical > (joy_miny + 2*(joy_maxy-joy_miny)/3)) - j &= 0xfe; // Up + // Joystick port + BJoystick *p = (BJoystick *)joy[port]; + if (p->Update() != B_ERROR) { + if (p->horizontal > joy_maxx) + joy_maxx = p->horizontal; + if (p->horizontal < joy_minx) + joy_minx = p->horizontal; + if (p->vertical > joy_maxy) + joy_maxy = p->vertical; + if (p->vertical < joy_miny) + joy_miny = p->vertical; + + if (!p->button1) + j &= 0xef; // Button + + if (joy_maxx-joy_minx < 100 || joy_maxy-joy_miny < 100) + return j; + + if (p->horizontal < (joy_minx + (joy_maxx-joy_minx)/3)) + j &= 0xf7; // Right + else if (p->horizontal > (joy_minx + 2*(joy_maxx-joy_minx)/3)) + j &= 0xfb; // Left + + if (p->vertical < (joy_miny + (joy_maxy-joy_miny)/3)) + j &= 0xfd; // Down + else if (p->vertical > (joy_miny + 2*(joy_maxy-joy_miny)/3)) + j &= 0xfe; // Up + } } return j; } diff --git a/Src/C64_Embedded.h b/Src/C64_Embedded.h new file mode 100644 index 0000000..e2132a8 --- /dev/null +++ b/Src/C64_Embedded.h @@ -0,0 +1,357 @@ +/* + * C64_x.h - Put the pieces together, X specific stuff + * + * Frodo (C) 1994-1997,2002-2004 Christian Bauer + * + * 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 + */ + +#include "main.h" +#include +#ifndef R14 +static struct timeval tv_start; +#endif + +#ifndef HAVE_USLEEP +/* + * NAME: + * usleep -- This is the precision timer for Test Set + * Automation. It uses the select(2) system + * call to delay for the desired number of + * micro-seconds. This call returns ZERO + * (which is usually ignored) on successful + * completion, -1 otherwise. + * + * ALGORITHM: + * 1) We range check the passed in microseconds and log a + * warning message if appropriate. We then return without + * delay, flagging an error. + * 2) Load the Seconds and micro-seconds portion of the + * interval timer structure. + * 3) Call select(2) with no file descriptors set, just the + * timer, this results in either delaying the proper + * ammount of time or being interupted early by a signal. + * + * HISTORY: + * Added when the need for a subsecond timer was evident. + * + * AUTHOR: + * Michael J. Dyer Telephone: AT&T 414.647.4044 + * General Electric Medical Systems GE DialComm 8 *767.4044 + * P.O. Box 414 Mail Stop 12-27 Sect'y AT&T 414.647.4584 + * Milwaukee, Wisconsin USA 53201 8 *767.4584 + * internet: mike@sherlock.med.ge.com GEMS WIZARD e-mail: DYER + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +int usleep(unsigned long int microSeconds) +{ + unsigned int Seconds, uSec; + int nfds, readfds, writefds, exceptfds; + struct timeval Timer; + + nfds = readfds = writefds = exceptfds = 0; + + if( (microSeconds == (unsigned long) 0) + || microSeconds > (unsigned long) 4000000 ) + { + errno = ERANGE; /* value out of range */ + perror( "usleep time out of range ( 0 -> 4000000 ) " ); + return -1; + } + + Seconds = microSeconds / (unsigned long) 1000000; + uSec = microSeconds % (unsigned long) 1000000; + + Timer.tv_sec = Seconds; + Timer.tv_usec = uSec; + + if( select( nfds, &readfds, &writefds, &exceptfds, &Timer ) < 0 ) + { + perror( "usleep (select) failed" ); + return -1; + } + + return 0; +} +#endif + +#ifdef __linux__ +// select() timing is much more accurate under Linux +static void Delay_usec(unsigned long usec) +{ + int was_error; + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = usec; + do { + errno = 0; + was_error = select(0, NULL, NULL, NULL, &tv); + } while (was_error && (errno == EINTR)); +} +#else +static void Delay_usec(unsigned long usec) +{ + usleep(usec); +} +#endif + +/* + * Constructor, system-dependent things + */ + +void C64::c64_ctor1(void) +{ + // Initialize joystick variables + joy_minx[0] = joy_miny[0] = 32767; + joy_maxx[0] = joy_maxy[0] = -32768; + joy_minx[1] = joy_miny[1] = 32767; + joy_maxx[1] = joy_maxy[1] = -32768; +} + +void C64::c64_ctor2(void) +{ +#ifndef R14 + gettimeofday(&tv_start, NULL); +#endif +} + + +/* + * Destructor, system-dependent things + */ + +void C64::c64_dtor(void) +{ +} + + +/* + * Start main emulation thread + */ + +void C64::Run(void) +{ + // Reset chips + TheCPU->Reset(); + TheSID->Reset(); + TheCIA1->Reset(); + TheCIA2->Reset(); + TheCPU1541->Reset(); + + // Patch kernal IEC routines + orig_kernal_1d84 = Kernal[0x1d84]; + orig_kernal_1d85 = Kernal[0x1d85]; + PatchKernal(ThePrefs.FastReset, ThePrefs.Emul1541Proc); + + quit_thyself = false; + thread_func(); +} + + +char kbd_feedbuf[255]; +int kbd_feedbuf_pos; + +void kbd_buf_feed(char *s) { + strcpy(kbd_feedbuf, s); + kbd_feedbuf_pos=0; +} + +void kbd_buf_update(C64 *TheC64) { + if((kbd_feedbuf[kbd_feedbuf_pos]!=0) + && TheC64->RAM[198]==0) { + TheC64->RAM[631]=kbd_feedbuf[kbd_feedbuf_pos]; + TheC64->RAM[198]=1; + + kbd_feedbuf_pos++; + } +} + +void load_prg(C64 *TheC64, uint8 *prg, int prg_size) { + uint8 start_hi, start_lo; + uint16 start; + int i; + + start_lo=*prg++; + start_hi=*prg++; + start=(start_hi<<8)+start_lo; + + for(i=0; i<(prg_size-2); i++) { + TheC64->RAM[start+i]=prg[i]; + } +} + + +/* + * Vertical blank: Poll keyboard and joysticks, update window + */ + +void C64::VBlank(bool draw_frame) +{ + // Poll keyboard + TheDisplay->PollKeyboard(TheCIA1->KeyMatrix, TheCIA1->RevMatrix, &joykey); + if (TheDisplay->quit_requested) + quit_thyself = true; + + // Poll joysticks + TheCIA1->Joystick1 = poll_joystick(0); + TheCIA1->Joystick2 = poll_joystick(1); + + if (ThePrefs.JoystickSwap) { + uint8 tmp = TheCIA1->Joystick1; + TheCIA1->Joystick1 = TheCIA1->Joystick2; + TheCIA1->Joystick2 = tmp; + } + + // Joystick keyboard emulation + if (TheDisplay->NumLock()) + TheCIA1->Joystick1 &= joykey; + else + TheCIA1->Joystick2 &= joykey; + + // Count TOD clocks + TheCIA1->CountTOD(); + TheCIA2->CountTOD(); + + // Update window if needed + if (draw_frame) { + TheDisplay->Update(); +#ifndef R14 + // Calculate time between VBlanks, display speedometer + struct timeval tv; + gettimeofday(&tv, NULL); + if ((tv.tv_usec -= tv_start.tv_usec) < 0) { + tv.tv_usec += 1000000; + tv.tv_sec -= 1; + } + tv.tv_sec -= tv_start.tv_sec; + double elapsed_time = (double)tv.tv_sec * 1000000 + tv.tv_usec; + speed_index = 20000 / (elapsed_time + 1) * ThePrefs.SkipFrames * 100; + + // Limit speed to 100% if desired + if ((speed_index > 100) && ThePrefs.LimitSpeed) { + Delay_usec((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time)); + speed_index = 100; + } + + gettimeofday(&tv_start, NULL); +#endif + kbd_buf_update(this); + TheDisplay->Speedometer((int)speed_index); + } +} + + +/* + * The emulation's main loop + */ + +void C64::thread_func(void) +{ + int linecnt = 0; + +#ifdef FRODO_SC + while (!quit_thyself) { + + // The order of calls is important here + if (TheVIC->EmulateCycle()) + TheSID->EmulateLine(); + TheCIA1->CheckIRQs(); + TheCIA2->CheckIRQs(); + TheCIA1->EmulateCycle(); + TheCIA2->EmulateCycle(); + TheCPU->EmulateCycle(); + + if (ThePrefs.Emul1541Proc) { + TheCPU1541->CountVIATimers(1); + if (!TheCPU1541->Idle) + TheCPU1541->EmulateCycle(); + } + CycleCounter++; +#else + while (!quit_thyself) { + + // The order of calls is important here + int cycles = TheVIC->EmulateLine(); + TheSID->EmulateLine(); +#if !PRECISE_CIA_CYCLES + TheCIA1->EmulateLine(ThePrefs.CIACycles); + TheCIA2->EmulateLine(ThePrefs.CIACycles); +#endif + + if (ThePrefs.Emul1541Proc) { + int cycles_1541 = ThePrefs.FloppyCycles; + TheCPU1541->CountVIATimers(cycles_1541); + + if (!TheCPU1541->Idle) { + // 1541 processor active, alternately execute + // 6502 and 6510 instructions until both have + // used up their cycles + while (cycles >= 0 || cycles_1541 >= 0) + if (cycles > cycles_1541) + cycles -= TheCPU->EmulateLine(1); + else + cycles_1541 -= TheCPU1541->EmulateLine(1); + } else + TheCPU->EmulateLine(cycles); + } else + // 1541 processor disabled, only emulate 6510 + TheCPU->EmulateLine(cycles); +#endif + linecnt++; +#if !defined(__svgalib__) && !defined(WII) + if ((linecnt & 0xfff) == 0 && gui) { + + // check for command from GUI process + // fprintf(stderr,":"); + while (gui->probe()) { + char c; + if (gui->eread(&c, 1) != 1) { + delete gui; + gui = 0; + fprintf(stderr,"Oops, GUI process died...\n"); + } else { + // fprintf(stderr,"%c",c); + switch (c) { + case 'q': + quit_thyself = true; + break; + case 'r': + Reset(); + break; + case 'p':{ + Prefs *np = Frodo::reload_prefs(); + NewPrefs(np); + ThePrefs = *np; + break; + } + default: + break; + } + } + } + } +#endif + } +} diff --git a/Src/C64_PC.cpp b/Src/C64_PC.cpp deleted file mode 100644 index 096cbb3..0000000 --- a/Src/C64_PC.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/* - * C64_PC.cpp - Put the pieces together (Frodo PC) - * - * Frodo (C) 1994-1997,2002 Christian Bauer - */ - -// Same as C64.cpp (mainly to keep the BeIDE happy) -#ifdef __riscos__ -#include "C64.cc" -#else -#include "C64.cpp" -#endif diff --git a/Src/C64_SC.cpp b/Src/C64_SC.cpp index 32dcff5..29f9549 100644 --- a/Src/C64_SC.cpp +++ b/Src/C64_SC.cpp @@ -1,10 +1,26 @@ /* * C64_SC.cpp - Put the pieces together (Frodo SC) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ -// Same as C64.cpp (mainly to keep the BeIDE happy) +// Same as C64.cpp (but object files are different, and this gives it the +// name "C64_SC.o" instead of "C64.o" which is needed under some build +// environments) #ifdef __riscos__ #include "C64.cc" #else diff --git a/Src/C64_SDL.i b/Src/C64_SDL.i deleted file mode 100644 index b5d49da..0000000 --- a/Src/C64_SDL.i +++ /dev/null @@ -1,830 +0,0 @@ -/* - * C64_x.i - Put the pieces together, X specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Unix stuff by Bernd Schmidt/Lutz Vieweg - */ - -#include "main.h" - -#include -#include - -#if defined(GEKKO) -#include -#include -#define FONT_PATH "/apps/frodo/FreeMono.ttf" -#define SAVES_PATH "/apps/frodo/saves" -#define IMAGE_PATH "/apps/frodo/images" -#define TMP_PATH "/apps/frodo/tmp" -#else -#define FONT_PATH "FreeMono.ttf" -#define SAVES_PATH "saves" -#define IMAGE_PATH "images" -#define TMP_PATH "tmp" -#endif - -static struct timeval tv_start; -static int MENU_SIZE_X, MENU_SIZE_Y; -static const char *main_menu_messages[] = { - "Insert disc or tape", /* 0 */ - "Load disc or tape", /* 1 */ - "Reset C64", /* 2 */ - "Bind key to joystick",/* 3 */ - "Other options", /* 4 */ - "Controller 1 joystick port", /* 5 */ - "^|1|2", - "Save/Load state", /* 7 */ - " ", - "Quit", /* 9 */ - NULL, -}; - -static const char *other_options_messages[] = { - "Display resolution", /* 0 */ - "^|double-center|stretched", - "Speed (approx)", /* 2 */ - "^|95|100|110", - NULL, -}; - -static const char *save_load_state_messages[] = { - "Load saved state", /* 0 */ - "Save current state", /* 1 */ - "Delete state", /* 2 */ - NULL, -}; - -/* - * Constructor, system-dependent things - */ -void C64::c64_ctor1(void) -{ - // Initialize joystick variables -#ifdef HAVE_LINUX_JOYSTICK_H - joyfd[0] = joyfd[1] = -1; - joy_minx = joy_miny = 32767; - joy_maxx = joy_maxy = -32768; -#endif - - this->fake_key_sequence = false; - this->fake_key_index = 0; - this->fake_key_keytime = 5; - this->fake_key_type = 0; - - this->prefs_changed = false; - memset(this->save_game_name, 0, sizeof(this->save_game_name)); - strcpy(this->save_game_name, "unknown"); - - MENU_SIZE_X = FULL_DISPLAY_X - FULL_DISPLAY_X / 4; - MENU_SIZE_Y = FULL_DISPLAY_Y - FULL_DISPLAY_Y / 4; - - SDL_RWops *rw; - - Uint8 *data = (Uint8*)malloc(1 * 1024*1024); - FILE *fp = fopen(FONT_PATH, "r"); - if (!fp) { - fprintf(stderr, "Could not open font\n"); - exit(1); - } - fread(data, 1, 1 * 1024 * 1024, fp); - rw = SDL_RWFromMem(data, 1 * 1024 * 1024); - if (!rw) { - fprintf(stderr, "Could not create RW: %s\n", SDL_GetError()); - exit(1); - } - - this->menu_font = TTF_OpenFontRW(rw, 1, 20); - if (!this->menu_font) - { - fprintf(stderr, "Unable to open font\n" ); - exit(1); - } - menu_init(&this->main_menu, this->menu_font, main_menu_messages, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); -} - -void C64::c64_ctor2(void) -{ - gettimeofday(&tv_start, NULL); -} - - -/* - * Destructor, system-dependent things - */ - -void C64::c64_dtor(void) -{ - menu_fini(&this->main_menu); -} - -static int cmpstringp(const void *p1, const void *p2) -{ - return strcmp(* (char * const *) p1, * (char * const *) p2); -} - -static const char **get_file_list(const char *base_dir) -{ - DIR *d = opendir(base_dir); - const char **file_list; - int cur = 0; - struct dirent *de; - int cnt = 16; - - if (!d) - return NULL; - - file_list = (const char**)malloc(cnt * sizeof(char*)); - file_list[cur++] = strdup("None"); - file_list[cur] = NULL; - - for (de = readdir(d); - de; - de = readdir(d)) - { - if (strstr(de->d_name, ".d64") || strstr(de->d_name, ".D64") || - strstr(de->d_name, ".prg") || strstr(de->d_name, ".PRG") || - strstr(de->d_name, ".p00") || strstr(de->d_name, ".P00") || - strstr(de->d_name, ".s00") || strstr(de->d_name, ".S00") || - strstr(de->d_name, ".t64") || strstr(de->d_name, ".T64") || - strstr(de->d_name, ".sav")) - { - char *p; - - p = strdup(de->d_name); - file_list[cur++] = p; - file_list[cur] = NULL; - if (cur > cnt - 2) - { - cnt = cnt + 32; - file_list = (const char**)realloc(file_list, cnt * sizeof(char*)); - if (!file_list) - return NULL; - } - } - } - closedir(d); - qsort(&file_list[1], cur-1, sizeof(const char *), cmpstringp); - - return file_list; -} - -void C64::select_disc(Prefs *np) -{ - const char **file_list = get_file_list(IMAGE_PATH); - menu_t select_disc_menu; - - if (file_list == NULL) - return; - - menu_init(&select_disc_menu, this->menu_font, file_list, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); - int opt = menu_select(real_screen, &select_disc_menu, NULL); - if (opt >= 0) - { - const char *name = file_list[opt]; - - if (strcmp(file_list[opt], "None") == 0) - { - strcpy(np->DrivePath[0], "\0"); - strcpy(this->save_game_name, "unknown"); - } - else - { - snprintf(np->DrivePath[0], 255, "%s/%s", - IMAGE_PATH, name); - strncpy(this->save_game_name, name, 255); - if (strstr(name, ".d64") || strstr(name, ".D64")) - np->DriveType[0] = DRVTYPE_D64; - else if (strstr(name, ".prg") || strstr(name, ".PRG") || - strstr(name, ".p00") || strstr(name, ".P00") || - strstr(name, ".s00") || strstr(name, ".S00")) { - FILE *src, *dst; - - /* Clean temp dir first (we only want one file) */ - unlink(TMP_PATH"/a"); - - src = fopen(np->DrivePath[0], "r"); - if (src != NULL) - { - np->DriveType[0] = DRVTYPE_DIR; - snprintf(np->DrivePath[0], 255, "%s", TMP_PATH); - - /* Special handling of .prg: Copy to TMP_PATH and - * load that as a dir */ - dst = fopen(TMP_PATH"/a", "w"); - if (dst) - { - Uint8 buf[1024]; - size_t v; - - do { - v = fread(buf, 1, 1024, src); - fwrite(buf, 1, v, dst); - } while (v > 0); - fclose(dst); - } - fclose(src); - } - } - else - np->DriveType[0] = DRVTYPE_T64; - NewPrefs(np); - ThePrefs = *np; - } - this->prefs_changed = true; - } - menu_fini(&select_disc_menu); - - /* Cleanup everything */ - for ( int i = 0; file_list[i]; i++ ) - free((void*)file_list[i]); - free(file_list); -} - -/* - C64 keyboard matrix: - - Bit 7 6 5 4 3 2 1 0 - 0 CUD F5 F3 F1 F7 CLR RET DEL - 1 SHL E S Z 4 A W 3 - 2 X T F C 6 D R 5 - 3 V U H B 8 G Y 7 - 4 N O K M 0 J I 9 - 5 , @ : . - L P + - 6 / ^ = SHR HOM ; * � - 7 R/S Q C= SPC 2 CTL <- 1 -*/ -#define MATRIX(a,b) (((a) << 3) | (b)) - -void C64::bind_key(Prefs *np) -{ - const char **bind_key_messages; - bool has_classic_controller = false; - menu_t bind_key_menu; - menu_t key_menu; - static const char *keys[] = { "None", "space", "Run/Stop", "return", "F1", "F3", "F5", "F7", - "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", - "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", - "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", - "ctrl", "del", "home,", "shl", "shr", "clr", "C=", "<-", - NULL }; - int kcs[] = { 0, MATRIX(7, 4), MATRIX(7, 7), MATRIX(0, 1), /* space, R/S, return */ - MATRIX(0, 4), MATRIX(0, 5), MATRIX(0, 6), MATRIX(0, 3), MATRIX(4, 3), MATRIX(7, 0), - MATRIX(7, 3), MATRIX(1, 0), MATRIX(1, 3), MATRIX(2, 0), MATRIX(2, 3), MATRIX(3, 0), - MATRIX(3, 3), MATRIX(4, 0), MATRIX(1, 2), MATRIX(3, 4), MATRIX(2, 4), MATRIX(2, 2), - MATRIX(1, 6), MATRIX(2, 5), MATRIX(3, 2), MATRIX(3, 5), MATRIX(4, 1), MATRIX(4, 2), - MATRIX(4, 5), MATRIX(5, 2), MATRIX(4, 4), MATRIX(4, 7), MATRIX(4, 6), MATRIX(5, 1), - MATRIX(7, 6), MATRIX(2, 1), MATRIX(1, 5), MATRIX(2, 6), MATRIX(3, 6), MATRIX(3, 7), - MATRIX(1, 1), MATRIX(2, 7), MATRIX(3, 1), MATRIX(1, 4), /* ... Z */ - MATRIX(7, 3), MATRIX(0, 0), MATRIX(6, 4), MATRIX(1, 7), MATRIX(6, 4), - MATRIX(0, 2), MATRIX(7, 5), MATRIX(7, 1), - }; - -#if defined(GEKKO) - WPADData *wpad, *wpad_other; - - wpad = WPAD_Data(0); - wpad_other = WPAD_Data(1); - - if (wpad->exp.type == WPAD_EXP_CLASSIC || - wpad_other->exp.type == WPAD_EXP_CLASSIC) - has_classic_controller = true; -#endif - - bind_key_messages = (const char **)malloc( sizeof(const char*) * (N_WIIMOTE_BINDINGS + 1)); - assert(bind_key_messages); - memset(bind_key_messages, 0, sizeof(const char*) * (N_WIIMOTE_BINDINGS + 1)); - - bind_key_messages[WIIMOTE_A] = "Bind to A"; - bind_key_messages[WIIMOTE_B] = "Bind to B"; - bind_key_messages[WIIMOTE_PLUS] = "Bind to Plus"; - bind_key_messages[WIIMOTE_MINUS] = "Bind to Minus"; - bind_key_messages[WIIMOTE_1] = "Bind to 1"; - - if (has_classic_controller) - { - bind_key_messages[WIIMOTE_PLUS] = "Bind to wiimote/classic Plus"; - bind_key_messages[WIIMOTE_MINUS] = "Bind to wiimote/classic Minus"; - - bind_key_messages[CLASSIC_X] = "Bind to classic X"; - bind_key_messages[CLASSIC_Y] = "Bind to classic Y"; - bind_key_messages[CLASSIC_B] = "Bind to classic B"; - bind_key_messages[CLASSIC_L] = "Bind to classic L"; - bind_key_messages[CLASSIC_R] = "Bind to classic R"; - bind_key_messages[CLASSIC_ZL] = "Bind to classic ZL"; - bind_key_messages[CLASSIC_ZR] = "Bind to classic ZR"; - } - - menu_init(&bind_key_menu, this->menu_font, bind_key_messages, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); - int opt = menu_select(real_screen, &bind_key_menu, NULL); - if (opt >= 0) - { - menu_init(&key_menu, this->menu_font, keys, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); - int key = menu_select(real_screen, &key_menu, NULL); - - /* Assume prefs are changed */ - this->prefs_changed = true; - if (key > 0) - np->JoystickKeyBinding[opt] = kcs[key]; - else if (key == 0) - np->JoystickKeyBinding[opt] = -1; - else - this->prefs_changed = false; - menu_fini(&key_menu); - } - menu_fini(&bind_key_menu); - free(bind_key_messages); -} - -void C64::other_options(Prefs *np) -{ - menu_t display_menu; - int submenus[2] = { np->DisplayOption}; - -#define SPEED_95 40 -#define SPEED_110 34 -#define SPEED_100 38 - - switch (np->MsPerFrame) - { - case SPEED_95: - submenus[1] = 0; break; - case SPEED_110: - submenus[1] = 2; break; - default: - /* If it has some other value... */ - submenus[1] = 1; break; - } - menu_init(&display_menu, this->menu_font, other_options_messages, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); - int opt = menu_select(real_screen, &display_menu, submenus); - if (opt >= 0) - { - np->DisplayOption = submenus[0]; - switch(submenus[1]) - { - case 0: - np->MsPerFrame = SPEED_95; break; - case 1: - np->MsPerFrame = SPEED_100; break; - case 2: - default: - np->MsPerFrame = SPEED_110; break; - } - this->prefs_changed = true; - } - menu_fini(&display_menu); -} - -void C64::save_load_state(Prefs *np) -{ - menu_t save_load_menu; - menu_t select_saves_menu; - - menu_init(&save_load_menu, this->menu_font, save_load_state_messages, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); - int opt = menu_select(real_screen, &save_load_menu, NULL); - switch(opt) - { - case 1: /* save */ - { - char buf[255]; - - snprintf(buf, 255, "%s/%s.sav", SAVES_PATH, - this->save_game_name); - - this->SaveSnapshot(buf); - } break; - case 0: /* load/delete */ - case 2: - { - const char **file_list = get_file_list(SAVES_PATH); - - if (file_list == NULL) - break; - menu_init(&select_saves_menu, this->menu_font, file_list, - 32, 32, MENU_SIZE_X, MENU_SIZE_Y); - int save = menu_select(real_screen, &select_saves_menu, NULL); - if (save >= 0) - { - char buf[255]; - - snprintf(buf, 255, "%s/%s", SAVES_PATH, file_list[save]); - if (opt == 2) - unlink(buf); - else /* Load the snapshot */ - this->LoadSnapshot(buf); - } - menu_fini(&select_saves_menu); - - /* Cleanup everything */ - for ( int i = 0; file_list[i]; i++ ) - free((void*)file_list[i]); - free(file_list); - } break; - default: - break; - } - menu_fini(&save_load_menu); -} - -/* - * Start main emulation thread - */ - -void C64::Run(void) -{ - // Reset chips - TheCPU->Reset(); - TheSID->Reset(); - TheCIA1->Reset(); - TheCIA2->Reset(); - TheCPU1541->Reset(); - - // Patch kernal IEC routines - orig_kernal_1d84 = Kernal[0x1d84]; - orig_kernal_1d85 = Kernal[0x1d85]; - PatchKernal(ThePrefs.FastReset, ThePrefs.Emul1541Proc); - - quit_thyself = false; - thread_func(); -} - -/* From dreamcast port */ -static const char *auto_seq[4] = -{ - "\nLOAD \"*\",8,1\nRUN\n", - "\nLOAD \"*\",9,1\nRUN\n", - "\nLOAD \"*\",10,1\nRUN\n", - "\nLOAD \"*\",11,1\nRUN\n", -}; -extern "C" int get_kc_from_char(char c_in, int *shifted); - -/* - * Vertical blank: Poll keyboard and joysticks, update window - */ - -void C64::VBlank(bool draw_frame) -{ -#if defined(GEKKO) - WPAD_ScanPads(); -#endif - - // Poll joysticks - TheCIA1->Joystick1 = poll_joystick(0); - TheCIA1->Joystick2 = poll_joystick(1); - - // Poll keyboard - TheDisplay->PollKeyboard(TheCIA1->KeyMatrix, TheCIA1->RevMatrix, &joykey); - if (TheDisplay->quit_requested) - quit_thyself = true; - - if (this->fake_key_sequence) - { - int shifted; - int kc = get_kc_from_char(auto_seq[this->fake_key_type][this->fake_key_index], &shifted); - - TheDisplay->FakeKeyPress(kc, shifted, TheCIA1->KeyMatrix, - TheCIA1->RevMatrix); - - this->fake_key_keytime --; - if (this->fake_key_keytime == 0) - { - this->fake_key_keytime = 1; - this->fake_key_index ++; - - if (auto_seq[this->fake_key_type][this->fake_key_index] == '\0') - { - this->fake_key_sequence = false; - this->fake_key_index = 0; - this->fake_key_keytime = 5; - } - } - } -#ifndef GEKKO - // Joystick keyboard emulation - if (TheDisplay->NumLock()) - TheCIA1->Joystick1 &= joykey; - else - TheCIA1->Joystick2 &= joykey; -#endif - - // Count TOD clocks - TheCIA1->CountTOD(); - TheCIA2->CountTOD(); - - // Update window if needed - if (draw_frame) { - TheDisplay->Update(); -#if 0 - // Calculate time between VBlanks, display speedometer - struct timeval tv; - gettimeofday(&tv, NULL); - if ((tv.tv_usec -= tv_start.tv_usec) < 0) { - tv.tv_usec += 1000000; - tv.tv_sec -= 1; - } - tv.tv_sec -= tv_start.tv_sec; - double elapsed_time = (double)tv.tv_sec * 1000000 + tv.tv_usec; - speed_index = 20000 / (elapsed_time + 1) * 100; - - // Limit speed to 100% if desired - if ((speed_index > 100)) { - usleep((unsigned long)(20000 - elapsed_time)); - speed_index = 100; - } - - gettimeofday(&tv_start, NULL); - - TheDisplay->Speedometer((int)speed_index); -#endif - } - if (this->have_a_break) { - int submenus[1]; - int opt; - int old_swap = ThePrefs.JoystickSwap == true ? 1 : 0; - - Prefs np = ThePrefs; - this->prefs_changed = false; - - TheSID->PauseSound(); - submenus[0] = old_swap; - opt = menu_select(real_screen, &this->main_menu, submenus); - - switch(opt) - { - case 0: /* Insert disc/tape */ - this->select_disc(&np); - break; - case 1: /* Load disc/tape */ - this->fake_key_sequence = true; - break; - case 2: /* Reset */ - Reset(); - break; - case 3: /* Bind keys to joystick */ - this->bind_key(&np); - break; - case 4: /* Other options */ - this->other_options(&np); - break; - case 5: /* Swap joysticks */ - break; - case 7: /* Save / load game */ - this->save_load_state(&np); - break; - case 9: /* Quit */ - quit_thyself = true; - break; - case -1: - default: - break; - } - if (submenus[0] == 0) - np.JoystickSwap = false; - else - np.JoystickSwap = true; - if (submenus[0] != old_swap) - this->prefs_changed = true; - - if (this->prefs_changed) - { - this->NewPrefs(&np); - ThePrefs = np; - } - TheDisplay->FakeKeyPress(-1, false, TheCIA1->KeyMatrix, - TheCIA1->RevMatrix); - - this->have_a_break = false; - if (this->quit_thyself) - ThePrefs.Save(PREFS_PATH); - } - /* From Acorn port */ - static uint64_t lastFrame; -#if defined(GEKKO) - uint32_t now = ticks_to_millisecs(gettime()); -#else - uint32_t now = SDL_GetTicks(); -#endif - - if ( (now - lastFrame) < ThePrefs.MsPerFrame) { - usleep( (ThePrefs.MsPerFrame - (now - lastFrame)) * 1000); - } - lastFrame = now; -} - - -/* - * Open/close joystick drivers given old and new state of - * joystick preferences - */ - -void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2) -{ -#ifdef HAVE_LINUX_JOYSTICK_H - if (oldjoy1 != newjoy1) { - joy_minx = joy_miny = 32767; // Reset calibration - joy_maxx = joy_maxy = -32768; - if (newjoy1) { - joyfd[0] = open("/dev/js0", O_RDONLY); - if (joyfd[0] < 0) - fprintf(stderr, "Couldn't open joystick 1\n"); - } else { - close(joyfd[0]); - joyfd[0] = -1; - } - } - - if (oldjoy2 != newjoy2) { - joy_minx = joy_miny = 32767; // Reset calibration - joy_maxx = joy_maxy = -32768; - if (newjoy2) { - joyfd[1] = open("/dev/js1", O_RDONLY); - if (joyfd[1] < 0) - fprintf(stderr, "Couldn't open joystick 2\n"); - } else { - close(joyfd[1]); - joyfd[1] = -1; - } - } -#endif -} - - -/* - * Poll joystick port, return CIA mask - */ - -uint8 C64::poll_joystick(int port) -{ -#ifdef GEKKO - int extra_keys[N_WIIMOTE_BINDINGS]; - int controller = port; - WPADData *wpad, *wpad_other; - Uint32 held, held_other, held_classic, held_classic_other; - uint8 j = 0xff; - - if (ThePrefs.JoystickSwap) - controller = !port; - held_classic = held_classic_other = 0; - - wpad = WPAD_Data(controller); - wpad_other = WPAD_Data(!controller); - held = wpad->btns_h; - held_other = wpad_other->btns_h; - - // Check classic controller as well - if (wpad->exp.type == WPAD_EXP_CLASSIC) - held_classic = wpad->exp.classic.btns_held; - if (wpad_other->exp.type == WPAD_EXP_CLASSIC) - held_classic_other = wpad_other->exp.classic.btns_held; - - if ( (held & WPAD_BUTTON_UP) || (held_classic & CLASSIC_CTRL_BUTTON_LEFT) ) - j &= 0xfb; // Left - if ( (held & WPAD_BUTTON_DOWN) || (held_classic & CLASSIC_CTRL_BUTTON_RIGHT) ) - j &= 0xf7; // Right - if ( (held & WPAD_BUTTON_RIGHT) || (held_classic & CLASSIC_CTRL_BUTTON_UP) ) - j &= 0xfe; // Up - if ( (held & WPAD_BUTTON_LEFT) || (held_classic & CLASSIC_CTRL_BUTTON_DOWN) ) - j &= 0xfd; // Down - if ( (held & WPAD_BUTTON_2) || (held_classic & CLASSIC_CTRL_BUTTON_A) ) - j &= 0xef; // Button - if ( (held & WPAD_BUTTON_HOME) || (held_classic & CLASSIC_CTRL_BUTTON_HOME) ) - this->enter_menu(); - - extra_keys[WIIMOTE_A] = (held | held_other) & WPAD_BUTTON_A; - extra_keys[WIIMOTE_B] = (held | held_other) & WPAD_BUTTON_B; - extra_keys[WIIMOTE_PLUS] = (held | held_other) & WPAD_BUTTON_PLUS; - extra_keys[WIIMOTE_MINUS] = (held | held_other) & WPAD_BUTTON_MINUS; - extra_keys[WIIMOTE_1] = (held | held_other) & WPAD_BUTTON_1; - - /* Classic buttons (might not be connected) */ - extra_keys[CLASSIC_X] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_X; - extra_keys[CLASSIC_Y] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_Y; - extra_keys[CLASSIC_B] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_B; - extra_keys[CLASSIC_L] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_FULL_L; - extra_keys[CLASSIC_R] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_FULL_R; - extra_keys[CLASSIC_ZL] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_ZL; - extra_keys[CLASSIC_ZR] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_ZR; - - extra_keys[WIIMOTE_PLUS] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_MINUS; - extra_keys[WIIMOTE_MINUS] = (held_classic | held_classic_other) & CLASSIC_CTRL_BUTTON_PLUS; - - for (int i = 0; i < N_WIIMOTE_BINDINGS; i++) - { - int kc = ThePrefs.JoystickKeyBinding[i]; - - if ( kc < 0 ) - continue; - - if (extra_keys[i]) - TheDisplay->UpdateKeyMatrix(kc, false, - TheCIA1->KeyMatrix, TheCIA1->RevMatrix); - else - TheDisplay->UpdateKeyMatrix(kc, true, - TheCIA1->KeyMatrix, TheCIA1->RevMatrix); - } - - return j; -#elif defined(HAVE_LINUX_JOYSTICK_H) - JS_DATA_TYPE js; - uint8 j = 0xff; - - if (joyfd[port] >= 0) { - if (read(joyfd[port], &js, JS_RETURN) == JS_RETURN) { - if (js.x > joy_maxx) - joy_maxx = js.x; - if (js.x < joy_minx) - joy_minx = js.x; - if (js.y > joy_maxy) - joy_maxy = js.y; - if (js.y < joy_miny) - joy_miny = js.y; - - if (joy_maxx-joy_minx < 100 || joy_maxy-joy_miny < 100) - return 0xff; - - if (js.x < (joy_minx + (joy_maxx-joy_minx)/3)) - j &= 0xfb; // Left - else if (js.x > (joy_minx + 2*(joy_maxx-joy_minx)/3)) - j &= 0xf7; // Right - - if (js.y < (joy_miny + (joy_maxy-joy_miny)/3)) - j &= 0xfe; // Up - else if (js.y > (joy_miny + 2*(joy_maxy-joy_miny)/3)) - j &= 0xfd; // Down - - if (js.buttons & 1) - j &= 0xef; // Button - } - } - return j; -#else - return 0xff; -#endif -} - - -/* - * The emulation's main loop - */ - -void C64::thread_func(void) -{ - int linecnt = 0; - -#ifdef FRODO_SC - while (!quit_thyself) { - - // The order of calls is important here - if (TheVIC->EmulateCycle()) - TheSID->EmulateLine(); - TheCIA1->CheckIRQs(); - TheCIA2->CheckIRQs(); - TheCIA1->EmulateCycle(); - TheCIA2->EmulateCycle(); - TheCPU->EmulateCycle(); - - if (ThePrefs.Emul1541Proc) { - TheCPU1541->CountVIATimers(1); - if (!TheCPU1541->Idle) - TheCPU1541->EmulateCycle(); - } - CycleCounter++; -#else - while (!quit_thyself) { - - // The order of calls is important here - int cycles = TheVIC->EmulateLine(); - TheSID->EmulateLine(); -#if !PRECISE_CIA_CYCLES - TheCIA1->EmulateLine(ThePrefs.CIACycles); - TheCIA2->EmulateLine(ThePrefs.CIACycles); -#endif - - if (ThePrefs.Emul1541Proc) { - int cycles_1541 = ThePrefs.FloppyCycles; - TheCPU1541->CountVIATimers(cycles_1541); - - if (!TheCPU1541->Idle) { - // 1541 processor active, alternately execute - // 6502 and 6510 instructions until both have - // used up their cycles - while (cycles >= 0 || cycles_1541 >= 0) - if (cycles > cycles_1541) - cycles -= TheCPU->EmulateLine(1); - else - cycles_1541 -= TheCPU1541->EmulateLine(1); - } else - TheCPU->EmulateLine(cycles); - } else - // 1541 processor disabled, only emulate 6510 - TheCPU->EmulateLine(cycles); -#endif - linecnt++; - } -} diff --git a/Src/C64_WIN32.i b/Src/C64_WIN32.h similarity index 90% rename from Src/C64_WIN32.i rename to Src/C64_WIN32.h index b723caf..6aac403 100644 --- a/Src/C64_WIN32.i +++ b/Src/C64_WIN32.h @@ -1,8 +1,21 @@ /* - * C64_WIN32.i - Put the pieces together, WIN32 specific stuff + * C64_WIN32.h - Put the pieces together, WIN32 specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * WIN32 code by J. Richard Sladkey + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -212,7 +225,7 @@ void C64::CheckTimerChange() BOOL joystick_open[2]; -void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2) +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) { if (oldjoy1 != newjoy1) { joystick_open[0] = FALSE; diff --git a/Src/C64_x.i b/Src/C64_x.h similarity index 74% rename from Src/C64_x.i rename to Src/C64_x.h index aa964fa..67ecad4 100644 --- a/Src/C64_x.i +++ b/Src/C64_x.h @@ -1,14 +1,27 @@ /* - * C64_x.i - Put the pieces together, X specific stuff + * C64_x.h - Put the pieces together, X specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Unix stuff by Bernd Schmidt/Lutz Vieweg + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "main.h" +#include "sys\time.h" - -static struct timeval tv_start; +typedef struct timeval tv_start; #ifndef HAVE_USLEEP /* @@ -82,6 +95,27 @@ int usleep(unsigned long int microSeconds) } #endif +#ifdef __linux__ +// select() timing is much more accurate under Linux +static void Delay_usec(unsigned long usec) +{ + int was_error; + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = usec; + do { + errno = 0; + was_error = select(0, NULL, NULL, NULL, &tv); + } while (was_error && (errno == EINTR)); +} +#else +static void Delay_usec(unsigned long usec) +{ + usleep(usec); +} +#endif + /* * Constructor, system-dependent things @@ -90,17 +124,18 @@ int usleep(unsigned long int microSeconds) void C64::c64_ctor1(void) { // Initialize joystick variables - joyfd[0] = joyfd[1] = -1; - joy_minx = joy_miny = 32767; - joy_maxx = joy_maxy = -32768; + joy_minx[0] = joy_miny[0] = 32767; + joy_maxx[0] = joy_maxy[0] = -32768; + joy_minx[1] = joy_miny[1] = 32767; + joy_maxx[1] = joy_maxy[1] = -32768; // we need to create a potential GUI subprocess here, because we don't want // it to inherit file-descriptors (such as for the audio-device and alike..) -#if defined(__svgalib__) +#if defined(__svgalib__) or defined(WII) gui = 0; #else // try to start up Tk gui. - gui = new CmdPipe("wish", "TkGui.tcl"); + gui = new CmdPipe("wish", BINDIR "Frodo_GUI.tcl"); if (gui) { if (gui->fail) { delete gui; gui = 0; @@ -149,7 +184,7 @@ void C64::c64_ctor2(void) } #endif // SVGAlib - gettimeofday(&tv_start, NULL); + //gettimeofday(&tv_start, NULL); } @@ -221,111 +256,29 @@ void C64::VBlank(bool draw_frame) TheDisplay->Update(); // Calculate time between VBlanks, display speedometer - struct timeval tv; - gettimeofday(&tv, NULL); - if ((tv.tv_usec -= tv_start.tv_usec) < 0) { - tv.tv_usec += 1000000; - tv.tv_sec -= 1; - } - tv.tv_sec -= tv_start.tv_sec; - double elapsed_time = (double)tv.tv_sec * 1000000 + tv.tv_usec; - speed_index = 20000 / (elapsed_time + 1) * ThePrefs.SkipFrames * 100; + //struct timeval tv; + //gettimeofday(&tv, NULL); + //if ((tv.tv_usec -= tv_start.tv_usec) < 0) { + // tv.tv_usec += 1000000; + // tv.tv_sec -= 1; + //} + //tv.tv_sec -= tv_start.tv_sec; + //double elapsed_time = (double)tv.tv_sec * 1000000 + tv.tv_usec; + //speed_index = 20000 / (elapsed_time + 1) * ThePrefs.SkipFrames * 100; - // Limit speed to 100% if desired - if ((speed_index > 100) && ThePrefs.LimitSpeed) { - usleep((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time)); - speed_index = 100; - } + //// Limit speed to 100% if desired + //if ((speed_index > 100) && ThePrefs.LimitSpeed) { + // Delay_usec((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time)); + // speed_index = 100; + //} - gettimeofday(&tv_start, NULL); + //gettimeofday(&tv_start, NULL); TheDisplay->Speedometer((int)speed_index); } } -/* - * Open/close joystick drivers given old and new state of - * joystick preferences - */ - -void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2) -{ -#ifdef HAVE_LINUX_JOYSTICK_H - if (oldjoy1 != newjoy1) { - joy_minx = joy_miny = 32767; // Reset calibration - joy_maxx = joy_maxy = -32768; - if (newjoy1) { - joyfd[0] = open("/dev/js0", O_RDONLY); - if (joyfd[0] < 0) - fprintf(stderr, "Couldn't open joystick 1\n"); - } else { - close(joyfd[0]); - joyfd[0] = -1; - } - } - - if (oldjoy2 != newjoy2) { - joy_minx = joy_miny = 32767; // Reset calibration - joy_maxx = joy_maxy = -32768; - if (newjoy2) { - joyfd[1] = open("/dev/js1", O_RDONLY); - if (joyfd[1] < 0) - fprintf(stderr, "Couldn't open joystick 2\n"); - } else { - close(joyfd[1]); - joyfd[1] = -1; - } - } -#endif -} - - -/* - * Poll joystick port, return CIA mask - */ - -uint8 C64::poll_joystick(int port) -{ -#ifdef HAVE_LINUX_JOYSTICK_H - JS_DATA_TYPE js; - uint8 j = 0xff; - - if (joyfd[port] >= 0) { - if (read(joyfd[port], &js, JS_RETURN) == JS_RETURN) { - if (js.x > joy_maxx) - joy_maxx = js.x; - if (js.x < joy_minx) - joy_minx = js.x; - if (js.y > joy_maxy) - joy_maxy = js.y; - if (js.y < joy_miny) - joy_miny = js.y; - - if (joy_maxx-joy_minx < 100 || joy_maxy-joy_miny < 100) - return 0xff; - - if (js.x < (joy_minx + (joy_maxx-joy_minx)/3)) - j &= 0xfb; // Left - else if (js.x > (joy_minx + 2*(joy_maxx-joy_minx)/3)) - j &= 0xf7; // Right - - if (js.y < (joy_miny + (joy_maxy-joy_miny)/3)) - j &= 0xfe; // Up - else if (js.y > (joy_miny + 2*(joy_maxy-joy_miny)/3)) - j &= 0xfd; // Down - - if (js.buttons & 1) - j &= 0xef; // Button - } - } - return j; -#else - return 0xff; -#endif -} - - /* * The emulation's main loop */ diff --git a/Src/CIA.cpp b/Src/CIA.cpp index 6c6fefd..2b79ec5 100644 --- a/Src/CIA.cpp +++ b/Src/CIA.cpp @@ -1,10 +1,24 @@ /* * CIA.cpp - 6526 emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * diff --git a/Src/CIA.h b/Src/CIA.h index 67b6d9c..b8d2902 100644 --- a/Src/CIA.h +++ b/Src/CIA.h @@ -1,7 +1,21 @@ /* * CIA.h - 6526 emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _CIA_H diff --git a/Src/CIA_SC.cpp b/Src/CIA_SC.cpp index bd15123..e54ce3e 100644 --- a/Src/CIA_SC.cpp +++ b/Src/CIA_SC.cpp @@ -1,10 +1,24 @@ /* * CIA_SC.cpp - Single-cycle 6526 emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -44,7 +58,7 @@ enum { T_LOAD_THEN_COUNT, T_LOAD_THEN_WAIT_THEN_COUNT, T_COUNT, - T_COUNT_THEN_STOP, + T_COUNT_THEN_STOP }; diff --git a/Src/CPU1541.cpp b/Src/CPU1541.cpp index 09d407f..8827a69 100644 --- a/Src/CPU1541.cpp +++ b/Src/CPU1541.cpp @@ -1,10 +1,24 @@ /* * CPU1541.cpp - 6502 (1541) emulation (line based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -731,7 +745,7 @@ handle_int: } #define IS_CPU_1541 -#include "CPU_emulline.i" +#include "CPU_emulline.h" // Extension opcode case 0xf2: diff --git a/Src/CPU1541.h b/Src/CPU1541.h index 6c56202..d70f3e5 100644 --- a/Src/CPU1541.h +++ b/Src/CPU1541.h @@ -1,7 +1,21 @@ /* * CPU1541.h - 6502 (1541) emulation (line based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _CPU_1541_H diff --git a/Src/CPU1541_PC.cpp b/Src/CPU1541_PC.cpp deleted file mode 100644 index e284e28..0000000 --- a/Src/CPU1541_PC.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/* - * CPU1541_PC.cpp - Put the pieces together (Frodo PC) - * - * Frodo (C) 1994-1997,2002 Christian Bauer - */ - -// Same as CPU1541.cpp (mainly to keep the BeIDE happy) -#ifdef __riscos__ -#include "CPU1541.cc" -#else -#include "CPU1541.cpp" -#endif diff --git a/Src/CPU1541_SC.cpp b/Src/CPU1541_SC.cpp index f7d0207..5cdaa90 100644 --- a/Src/CPU1541_SC.cpp +++ b/Src/CPU1541_SC.cpp @@ -1,10 +1,24 @@ /* * CPU1541_SC.cpp - Single-cycle 6502 (1541) emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -613,7 +627,7 @@ void MOS6502_1541::EmulateCycle(void) } #define IS_CPU_1541 -#include "CPU_emulcycle.i" +#include "CPU_emulcycle.h" // Extension opcode case O_EXT: diff --git a/Src/CPUC64.cpp b/Src/CPUC64.cpp index 985184a..b6b3bb4 100644 --- a/Src/CPUC64.cpp +++ b/Src/CPUC64.cpp @@ -1,10 +1,24 @@ /* * CPUC64.cpp - 6510 (C64) emulation (line based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -465,55 +479,51 @@ void MOS6510::REUWriteByte(uint16 adr, uint8 byte) */ #if PC_IS_POINTER -void MOS6510::jump(uint16 adr) -{ - if (adr < 0xa000) { - pc = ram + adr; - pc_base = ram; - } else - switch (adr >> 12) { - case 0xa: - case 0xb: - if (basic_in) { - pc = basic_rom + (adr & 0x1fff); - pc_base = basic_rom - 0xa000; - } else { - pc = ram + adr; - pc_base = ram; - } - break; - case 0xc: - pc = ram + adr; - pc_base = ram; - break; - case 0xd: - if (io_in) - illegal_jump(pc-pc_base, adr); - else if (char_in) { - pc = char_rom + (adr & 0x0fff); - pc_base = char_rom - 0xd000; - } else { - pc = ram + adr; - pc_base = ram; - } - break; - case 0xe: - case 0xf: - if (kernal_in) { - pc = kernal_rom + (adr & 0x1fff); - pc_base = kernal_rom - 0xe000; - } else { - pc = ram + adr; - pc_base = ram; - } - break; - } -} +#define jump(adr) \ + if ((adr) < 0xa000) { \ + pc = ram + (adr); \ + pc_base = ram; \ + } else { \ + switch ((adr) >> 12) { \ + case 0xa: \ + case 0xb: \ + if (basic_in) { \ + pc = basic_rom + ((adr) & 0x1fff); \ + pc_base = basic_rom - 0xa000; \ + } else { \ + pc = ram + (adr); \ + pc_base = ram; \ + } \ + break; \ + case 0xc: \ + pc = ram + (adr); \ + pc_base = ram; \ + break; \ + case 0xd: \ + if (io_in) { \ + illegal_jump(pc-pc_base, (adr)); \ + } else if (char_in) { \ + pc = char_rom + ((adr) & 0x0fff); \ + pc_base = char_rom - 0xd000; \ + } else { \ + pc = ram + (adr); \ + pc_base = ram; \ + } \ + break; \ + case 0xe: \ + case 0xf: \ + if (kernal_in) { \ + pc = kernal_rom + ((adr) & 0x1fff); \ + pc_base = kernal_rom - 0xe000; \ + } else { \ + pc = ram + (adr); \ + pc_base = ram; \ + } \ + break; \ + } \ + } #else -inline void MOS6510::jump(uint16 adr) -{ - pc = adr; -} +#define jump(adr) pc = (adr) #endif @@ -524,31 +534,22 @@ inline void MOS6510::jump(uint16 adr) void MOS6510::do_adc(uint8 byte) { if (!d_flag) { - uint16 tmp; - - // Binary mode - tmp = a + byte + (c_flag ? 1 : 0); + uint16 tmp = a + (byte) + (c_flag ? 1 : 0); c_flag = tmp > 0xff; - v_flag = !((a ^ byte) & 0x80) && ((a ^ tmp) & 0x80); + v_flag = !((a ^ (byte)) & 0x80) && ((a ^ tmp) & 0x80); z_flag = n_flag = a = tmp; - } else { uint16 al, ah; - - // Decimal mode - al = (a & 0x0f) + (byte & 0x0f) + (c_flag ? 1 : 0); // Calculate lower nybble - if (al > 9) al += 6; // BCD fixup for lower nybble - - ah = (a >> 4) + (byte >> 4); // Calculate upper nybble + al = (a & 0x0f) + ((byte) & 0x0f) + (c_flag ? 1 : 0); + if (al > 9) al += 6; + ah = (a >> 4) + ((byte) >> 4); if (al > 0x0f) ah++; - - z_flag = a + byte + (c_flag ? 1 : 0); // Set flags - n_flag = ah << 4; // Only highest bit used - v_flag = (((ah << 4) ^ a) & 0x80) && !((a ^ byte) & 0x80); - - if (ah > 9) ah += 6; // BCD fixup for upper nybble - c_flag = ah > 0x0f; // Set carry flag - a = (ah << 4) | (al & 0x0f); // Compose result + z_flag = a + (byte) + (c_flag ? 1 : 0); + n_flag = ah << 4; + v_flag = (((ah << 4) ^ a) & 0x80) && !((a ^ (byte)) & 0x80); + if (ah > 9) ah += 6; + c_flag = ah > 0x0f; + a = (ah << 4) | (al & 0x0f); } } @@ -559,32 +560,24 @@ void MOS6510::do_adc(uint8 byte) void MOS6510::do_sbc(uint8 byte) { - uint16 tmp = a - byte - (c_flag ? 0 : 1); - + uint16 tmp = a - (byte) - (c_flag ? 0 : 1); if (!d_flag) { - - // Binary mode c_flag = tmp < 0x100; - v_flag = ((a ^ tmp) & 0x80) && ((a ^ byte) & 0x80); + v_flag = ((a ^ tmp) & 0x80) && ((a ^ (byte)) & 0x80); z_flag = n_flag = a = tmp; - } else { uint16 al, ah; - - // Decimal mode - al = (a & 0x0f) - (byte & 0x0f) - (c_flag ? 0 : 1); // Calculate lower nybble - ah = (a >> 4) - (byte >> 4); // Calculate upper nybble + al = (a & 0x0f) - ((byte) & 0x0f) - (c_flag ? 0 : 1); + ah = (a >> 4) - ((byte) >> 4); if (al & 0x10) { - al -= 6; // BCD fixup for lower nybble + al -= 6; ah--; } - if (ah & 0x10) ah -= 6; // BCD fixup for upper nybble - - c_flag = tmp < 0x100; // Set flags - v_flag = ((a ^ tmp) & 0x80) && ((a ^ byte) & 0x80); + if (ah & 0x10) ah -= 6; + c_flag = tmp < 0x100; + v_flag = ((a ^ tmp) & 0x80) && ((a ^ (byte)) & 0x80); z_flag = n_flag = tmp; - - a = (ah << 4) | (al & 0x0f); // Compose result + a = (ah << 4) | (al & 0x0f); } } @@ -605,7 +598,7 @@ void MOS6510::GetState(MOS6510State *s) if (i_flag) s->p |= 0x04; if (!z_flag) s->p |= 0x02; if (c_flag) s->p |= 0x01; - + s->ddr = ram[0]; s->pr = ram[1] & 0x3f; @@ -758,10 +751,10 @@ int MOS6510::EmulateLine(int cycles_left) // Any pending interrupts? if (interrupt.intr_any) { handle_int: - if (interrupt.intr[INT_RESET]) + if (interrupt.intr[INT_RESET]) { Reset(); - else if (interrupt.intr[INT_NMI]) { + } else if (interrupt.intr[INT_NMI]) { interrupt.intr[INT_NMI] = false; // Simulate an edge-triggered input #if PC_IS_POINTER push_byte((pc-pc_base) >> 8); push_byte(pc-pc_base); @@ -770,7 +763,8 @@ handle_int: #endif push_flags(false); i_flag = true; - jump(read_word(0xfffa)); + adr = read_word(0xfffa); + jump(adr); last_cycles = 7; } else if ((interrupt.intr[INT_VICIRQ] || interrupt.intr[INT_CIAIRQ]) && !i_flag) { @@ -781,12 +775,13 @@ handle_int: #endif push_flags(false); i_flag = true; - jump(read_word(0xfffe)); + adr = read_word(0xfffe); + jump(adr); last_cycles = 7; } } -#include "CPU_emulline.i" +#include "CPU_emulline.h" // Extension opcode case 0xf2: @@ -816,7 +811,7 @@ handle_int: jump(0xedac); break; case 0x03: - ram[0x90] |= TheIEC->In(&a); + ram[0x90] |= TheIEC->In(a); set_nz(a); c_flag = false; jump(0xedac); diff --git a/Src/CPUC64.h b/Src/CPUC64.h index 3e0641a..0fcb3cc 100644 --- a/Src/CPUC64.h +++ b/Src/CPUC64.h @@ -1,7 +1,21 @@ /* * CPUC64.h - 6510 (C64) emulation (line based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _CPU_C64_H @@ -98,7 +112,6 @@ private: void write_zp(uint16 adr, uint8 byte); void new_config(void); - void jump(uint16 adr); void illegal_op(uint8 op, uint16 at); void illegal_jump(uint16 at, uint16 to); diff --git a/Src/CPUC64_PC.cpp b/Src/CPUC64_PC.cpp deleted file mode 100644 index a479513..0000000 --- a/Src/CPUC64_PC.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/* - * C64_PC.cpp - Put the pieces together (Frodo PC) - * - * Frodo (C) 1994-1997,2002 Christian Bauer - */ - -// Same as CPUC64.cpp (mainly to keep the BeIDE happy) -#ifdef __riscos__ -#include "CPUC64.cc" -#else -#include "CPUC64.cpp" -#endif diff --git a/Src/CPUC64_SC.cpp b/Src/CPUC64_SC.cpp index 485d395..5e7cd86 100644 --- a/Src/CPUC64_SC.cpp +++ b/Src/CPUC64_SC.cpp @@ -1,10 +1,24 @@ /* * CPUC64_SC.cpp - Single-cycle 6510 (C64) emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -262,9 +276,6 @@ inline uint8 MOS6510::read_byte_io(uint16 adr) * Read a byte from the CPU's address space */ -#ifdef __i386 -inline -#endif uint8 MOS6510::read_byte(uint16 adr) { if (adr < 0xa000) { @@ -594,7 +605,7 @@ void MOS6510::EmulateCycle(void) state = 0x0008; } -#include "CPU_emulcycle.i" +#include "CPU_emulcycle.h" // Extension opcode case O_EXT: @@ -619,7 +630,7 @@ void MOS6510::EmulateCycle(void) pc = 0xedac; Last; case 0x03: - ram[0x90] |= TheIEC->In(&a); + ram[0x90] |= TheIEC->In(a); set_nz(a); c_flag = false; pc = 0xedac; diff --git a/Src/CPU_common.cpp b/Src/CPU_common.cpp index 0f0ae2e..44527ab 100644 --- a/Src/CPU_common.cpp +++ b/Src/CPU_common.cpp @@ -1,7 +1,21 @@ /* * CPU_common.cpp - Definitions common to 6502/6510 SC emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "sysdeps.h" diff --git a/Src/CPU_common.h b/Src/CPU_common.h index 7fb7c93..3a55847 100644 --- a/Src/CPU_common.h +++ b/Src/CPU_common.h @@ -1,7 +1,21 @@ /* * CPU_common.h - Definitions common to 6502/6510 SC emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _CPU_COMMON_H_ diff --git a/Src/CPU_emulcycle.i b/Src/CPU_emulcycle.h similarity index 95% rename from Src/CPU_emulcycle.i rename to Src/CPU_emulcycle.h index c757af4..d43e83f 100644 --- a/Src/CPU_emulcycle.i +++ b/Src/CPU_emulcycle.h @@ -1,9 +1,23 @@ /* - * CPU_emulcycle.i - SC 6510/6502 emulation core (body of + * CPU_emulcycle.h - SC 6510/6502 emulation core (body of * EmulateCycle() function, the same for * both 6510 and 6502) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ @@ -1057,7 +1071,7 @@ v_flag = (data ^ a) & 0x40; if ((data & 0x0f) + (data & 0x01) > 5) a = a & 0xf0 | (a + 6) & 0x0f; - if (c_flag = ((data + (data & 0x10)) & 0x1f0) > 0x50) + if ((c_flag = ((data + (data & 0x10)) & 0x1f0) > 0x50) != 0) a += 0x60; } Last; diff --git a/Src/CPU_emulline.i b/Src/CPU_emulline.h similarity index 95% rename from Src/CPU_emulline.i rename to Src/CPU_emulline.h index 9b35b9c..66f0d10 100644 --- a/Src/CPU_emulline.i +++ b/Src/CPU_emulline.h @@ -1,9 +1,23 @@ /* - * CPU_emulline.i - 6510/6502 emulation core (body of + * CPU_emulline.h - 6510/6502 emulation core (body of * EmulateLine() function, the same for * both 6510 and 6502) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ @@ -744,12 +758,14 @@ // Jump/branch group case 0x4c: // JMP abs - jump(read_adr_abs()); + adr = read_adr_abs(); + jump(adr); ENDOP(3); case 0x6c: // JMP (ind) adr = read_adr_abs(); - jump(read_byte(adr) | (read_byte((adr + 1) & 0xff | adr & 0xff00) << 8)); + adr = read_byte(adr) | (read_byte((adr + 1) & 0xff | adr & 0xff00) << 8); + jump(adr); ENDOP(5); case 0x20: // JSR abs @@ -758,18 +774,21 @@ #else push_byte(pc+1 >> 8); push_byte(pc+1); #endif - jump(read_adr_abs()); + adr = read_adr_abs(); + jump(adr); ENDOP(6); case 0x60: // RTS adr = pop_byte(); // Split because of pop_byte ++sp side-effect - jump((adr | pop_byte() << 8) + 1); + adr = (adr | pop_byte() << 8) + 1; + jump(adr); ENDOP(6); case 0x40: // RTI pop_flags(); adr = pop_byte(); // Split because of pop_byte ++sp side-effect - jump(adr | pop_byte() << 8); + adr = adr | pop_byte() << 8; + jump(adr); if (interrupt.intr_any && !i_flag) goto handle_int; ENDOP(6); @@ -782,7 +801,8 @@ #endif push_flags(true); i_flag = true; - jump(read_word(0xfffe)); + adr = read_word(0xfffe); + jump(adr); ENDOP(7); #if PC_IS_POINTER @@ -1309,7 +1329,7 @@ v_flag = (tmp2 ^ a) & 0x40; if ((tmp2 & 0x0f) + (tmp2 & 0x01) > 5) a = a & 0xf0 | (a + 6) & 0x0f; - if (c_flag = ((tmp2 + (tmp2 & 0x10)) & 0x1f0) > 0x50) + if ((c_flag = ((tmp2 + (tmp2 & 0x10)) & 0x1f0) > 0x50) != 0) a += 0x60; } ENDOP(2); diff --git a/Src/Char_ROM.h b/Src/Char_ROM.h new file mode 100644 index 0000000..2d7a863 --- /dev/null +++ b/Src/Char_ROM.h @@ -0,0 +1,521 @@ +/* + * Char_ROM.h - C64 Character ROM + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * C64/1541 ROMs (C) Commodore Business Machines + */ + +static const uint8 builtin_char_rom[CHAR_ROM_SIZE] = { + 0x3c, 0x66, 0x6e, 0x6e, 0x60, 0x62, 0x3c, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, + 0x0c, 0x12, 0x30, 0x7c, 0x30, 0x62, 0xfc, 0x00, + 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, + 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x06, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x6e, 0x76, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x0e, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00, + 0x70, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x70, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x08, 0x1c, 0x3e, 0x7f, 0x7f, 0x1c, 0x3e, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x00, 0x00, 0x00, 0xe0, 0xf0, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x1c, 0x0f, 0x07, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x38, 0xf0, 0xe0, 0x00, 0x00, 0x00, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, + 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0x03, + 0x03, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xc0, + 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x00, 0x3c, 0x7e, 0x7e, 0x7e, 0x7e, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, + 0x36, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x08, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, + 0x00, 0x00, 0x00, 0x07, 0x0f, 0x1c, 0x18, 0x18, + 0xc3, 0xe7, 0x7e, 0x3c, 0x3c, 0x7e, 0xe7, 0xc3, + 0x00, 0x3c, 0x7e, 0x66, 0x66, 0x7e, 0x3c, 0x00, + 0x18, 0x18, 0x66, 0x66, 0x18, 0x18, 0x3c, 0x00, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0xc0, 0xc0, 0x30, 0x30, 0xc0, 0xc0, 0x30, 0x30, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x03, 0x3e, 0x76, 0x36, 0x36, 0x00, + 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0x33, 0x33, + 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, + 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, + 0xc3, 0x99, 0x91, 0x91, 0x9f, 0x99, 0xc3, 0xff, + 0xe7, 0xc3, 0x99, 0x81, 0x99, 0x99, 0x99, 0xff, + 0x83, 0x99, 0x99, 0x83, 0x99, 0x99, 0x83, 0xff, + 0xc3, 0x99, 0x9f, 0x9f, 0x9f, 0x99, 0xc3, 0xff, + 0x87, 0x93, 0x99, 0x99, 0x99, 0x93, 0x87, 0xff, + 0x81, 0x9f, 0x9f, 0x87, 0x9f, 0x9f, 0x81, 0xff, + 0x81, 0x9f, 0x9f, 0x87, 0x9f, 0x9f, 0x9f, 0xff, + 0xc3, 0x99, 0x9f, 0x91, 0x99, 0x99, 0xc3, 0xff, + 0x99, 0x99, 0x99, 0x81, 0x99, 0x99, 0x99, 0xff, + 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xff, + 0xe1, 0xf3, 0xf3, 0xf3, 0xf3, 0x93, 0xc7, 0xff, + 0x99, 0x93, 0x87, 0x8f, 0x87, 0x93, 0x99, 0xff, + 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0xff, + 0x9c, 0x88, 0x80, 0x94, 0x9c, 0x9c, 0x9c, 0xff, + 0x99, 0x89, 0x81, 0x81, 0x91, 0x99, 0x99, 0xff, + 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xff, + 0x83, 0x99, 0x99, 0x83, 0x9f, 0x9f, 0x9f, 0xff, + 0xc3, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xf1, 0xff, + 0x83, 0x99, 0x99, 0x83, 0x87, 0x93, 0x99, 0xff, + 0xc3, 0x99, 0x9f, 0xc3, 0xf9, 0x99, 0xc3, 0xff, + 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xff, + 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xe7, 0xff, + 0x9c, 0x9c, 0x9c, 0x94, 0x80, 0x88, 0x9c, 0xff, + 0x99, 0x99, 0xc3, 0xe7, 0xc3, 0x99, 0x99, 0xff, + 0x99, 0x99, 0x99, 0xc3, 0xe7, 0xe7, 0xe7, 0xff, + 0x81, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x81, 0xff, + 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xff, + 0xf3, 0xed, 0xcf, 0x83, 0xcf, 0x9d, 0x03, 0xff, + 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xff, + 0xff, 0xe7, 0xc3, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, + 0xff, 0xef, 0xcf, 0x80, 0x80, 0xcf, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff, 0xe7, 0xff, + 0x99, 0x99, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x99, 0x99, 0x00, 0x99, 0x00, 0x99, 0x99, 0xff, + 0xe7, 0xc1, 0x9f, 0xc3, 0xf9, 0x83, 0xe7, 0xff, + 0x9d, 0x99, 0xf3, 0xe7, 0xcf, 0x99, 0xb9, 0xff, + 0xc3, 0x99, 0xc3, 0xc7, 0x98, 0x99, 0xc0, 0xff, + 0xf9, 0xf3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf3, 0xe7, 0xcf, 0xcf, 0xcf, 0xe7, 0xf3, 0xff, + 0xcf, 0xe7, 0xf3, 0xf3, 0xf3, 0xe7, 0xcf, 0xff, + 0xff, 0x99, 0xc3, 0x00, 0xc3, 0x99, 0xff, 0xff, + 0xff, 0xe7, 0xe7, 0x81, 0xe7, 0xe7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe7, 0xcf, + 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe7, 0xff, + 0xff, 0xfc, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0xff, + 0xc3, 0x99, 0x91, 0x89, 0x99, 0x99, 0xc3, 0xff, + 0xe7, 0xe7, 0xc7, 0xe7, 0xe7, 0xe7, 0x81, 0xff, + 0xc3, 0x99, 0xf9, 0xf3, 0xcf, 0x9f, 0x81, 0xff, + 0xc3, 0x99, 0xf9, 0xe3, 0xf9, 0x99, 0xc3, 0xff, + 0xf9, 0xf1, 0xe1, 0x99, 0x80, 0xf9, 0xf9, 0xff, + 0x81, 0x9f, 0x83, 0xf9, 0xf9, 0x99, 0xc3, 0xff, + 0xc3, 0x99, 0x9f, 0x83, 0x99, 0x99, 0xc3, 0xff, + 0x81, 0x99, 0xf3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, + 0xc3, 0x99, 0x99, 0xc3, 0x99, 0x99, 0xc3, 0xff, + 0xc3, 0x99, 0x99, 0xc1, 0xf9, 0x99, 0xc3, 0xff, + 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, + 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xe7, 0xcf, + 0xf1, 0xe7, 0xcf, 0x9f, 0xcf, 0xe7, 0xf1, 0xff, + 0xff, 0xff, 0x81, 0xff, 0x81, 0xff, 0xff, 0xff, + 0x8f, 0xe7, 0xf3, 0xf9, 0xf3, 0xe7, 0x8f, 0xff, + 0xc3, 0x99, 0xf9, 0xf3, 0xe7, 0xff, 0xe7, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xf7, 0xe3, 0xc1, 0x80, 0x80, 0xe3, 0xc1, 0xff, + 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, + 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, + 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, + 0xff, 0xff, 0xff, 0x1f, 0x0f, 0xc7, 0xe7, 0xe7, + 0xe7, 0xe7, 0xe3, 0xf0, 0xf8, 0xff, 0xff, 0xff, + 0xe7, 0xe7, 0xc7, 0x0f, 0x1f, 0xff, 0xff, 0xff, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x00, 0x00, + 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, + 0xfc, 0xf8, 0xf1, 0xe3, 0xc7, 0x8f, 0x1f, 0x3f, + 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xff, 0xc3, 0x81, 0x81, 0x81, 0x81, 0xc3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, + 0xc9, 0x80, 0x80, 0x80, 0xc1, 0xe3, 0xf7, 0xff, + 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, + 0xff, 0xff, 0xff, 0xf8, 0xf0, 0xe3, 0xe7, 0xe7, + 0x3c, 0x18, 0x81, 0xc3, 0xc3, 0x81, 0x18, 0x3c, + 0xff, 0xc3, 0x81, 0x99, 0x99, 0x81, 0xc3, 0xff, + 0xe7, 0xe7, 0x99, 0x99, 0xe7, 0xe7, 0xc3, 0xff, + 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, + 0xf7, 0xe3, 0xc1, 0x80, 0xc1, 0xe3, 0xf7, 0xff, + 0xe7, 0xe7, 0xe7, 0x00, 0x00, 0xe7, 0xe7, 0xe7, + 0x3f, 0x3f, 0xcf, 0xcf, 0x3f, 0x3f, 0xcf, 0xcf, + 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, + 0xff, 0xff, 0xfc, 0xc1, 0x89, 0xc9, 0xc9, 0xff, + 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0x33, 0x33, 0xcc, 0xcc, + 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xe7, 0xe7, 0xe7, 0xe0, 0xe0, 0xe7, 0xe7, 0xe7, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, + 0xe7, 0xe7, 0xe7, 0xe0, 0xe0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x07, 0xe7, 0xe7, 0xe7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe7, 0xe7, 0xe7, + 0xe7, 0xe7, 0xe7, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0xe7, 0xe7, 0xe7, + 0xe7, 0xe7, 0xe7, 0x07, 0x07, 0xe7, 0xe7, 0xe7, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, + 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, + 0xe7, 0xe7, 0xe7, 0x07, 0x07, 0xff, 0xff, 0xff, + 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, + 0x3c, 0x66, 0x6e, 0x6e, 0x60, 0x62, 0x3c, 0x00, + 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, + 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00, + 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c, + 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c, + 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00, + 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, + 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06, + 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, + 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00, + 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00, + 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78, + 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, + 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, + 0x0c, 0x12, 0x30, 0x7c, 0x30, 0x62, 0xfc, 0x00, + 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, + 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00, + 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, + 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00, + 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00, + 0x06, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, + 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, + 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, + 0x3c, 0x66, 0x6e, 0x76, 0x66, 0x66, 0x3c, 0x00, + 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00, + 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00, + 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00, + 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, + 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, + 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30, + 0x0e, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0e, 0x00, + 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00, + 0x70, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x70, 0x00, + 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, + 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, + 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00, + 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, + 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, + 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, + 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, + 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00, + 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, + 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00, + 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00, + 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00, + 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, + 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00, + 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, + 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00, + 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, + 0xc0, 0xc0, 0x30, 0x30, 0xc0, 0xc0, 0x30, 0x30, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, + 0x33, 0x99, 0xcc, 0x66, 0x33, 0x99, 0xcc, 0x66, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0x33, 0x33, + 0xcc, 0x99, 0x33, 0x66, 0xcc, 0x99, 0x33, 0x66, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, + 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x01, 0x03, 0x06, 0x6c, 0x78, 0x70, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, + 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, + 0xc3, 0x99, 0x91, 0x91, 0x9f, 0x99, 0xc3, 0xff, + 0xff, 0xff, 0xc3, 0xf9, 0xc1, 0x99, 0xc1, 0xff, + 0xff, 0x9f, 0x9f, 0x83, 0x99, 0x99, 0x83, 0xff, + 0xff, 0xff, 0xc3, 0x9f, 0x9f, 0x9f, 0xc3, 0xff, + 0xff, 0xf9, 0xf9, 0xc1, 0x99, 0x99, 0xc1, 0xff, + 0xff, 0xff, 0xc3, 0x99, 0x81, 0x9f, 0xc3, 0xff, + 0xff, 0xf1, 0xe7, 0xc1, 0xe7, 0xe7, 0xe7, 0xff, + 0xff, 0xff, 0xc1, 0x99, 0x99, 0xc1, 0xf9, 0x83, + 0xff, 0x9f, 0x9f, 0x83, 0x99, 0x99, 0x99, 0xff, + 0xff, 0xe7, 0xff, 0xc7, 0xe7, 0xe7, 0xc3, 0xff, + 0xff, 0xf9, 0xff, 0xf9, 0xf9, 0xf9, 0xf9, 0xc3, + 0xff, 0x9f, 0x9f, 0x93, 0x87, 0x93, 0x99, 0xff, + 0xff, 0xc7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xff, + 0xff, 0xff, 0x99, 0x80, 0x80, 0x94, 0x9c, 0xff, + 0xff, 0xff, 0x83, 0x99, 0x99, 0x99, 0x99, 0xff, + 0xff, 0xff, 0xc3, 0x99, 0x99, 0x99, 0xc3, 0xff, + 0xff, 0xff, 0x83, 0x99, 0x99, 0x83, 0x9f, 0x9f, + 0xff, 0xff, 0xc1, 0x99, 0x99, 0xc1, 0xf9, 0xf9, + 0xff, 0xff, 0x83, 0x99, 0x9f, 0x9f, 0x9f, 0xff, + 0xff, 0xff, 0xc1, 0x9f, 0xc3, 0xf9, 0x83, 0xff, + 0xff, 0xe7, 0x81, 0xe7, 0xe7, 0xe7, 0xf1, 0xff, + 0xff, 0xff, 0x99, 0x99, 0x99, 0x99, 0xc1, 0xff, + 0xff, 0xff, 0x99, 0x99, 0x99, 0xc3, 0xe7, 0xff, + 0xff, 0xff, 0x9c, 0x94, 0x80, 0xc1, 0xc9, 0xff, + 0xff, 0xff, 0x99, 0xc3, 0xe7, 0xc3, 0x99, 0xff, + 0xff, 0xff, 0x99, 0x99, 0x99, 0xc1, 0xf3, 0x87, + 0xff, 0xff, 0x81, 0xf3, 0xe7, 0xcf, 0x81, 0xff, + 0xc3, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xc3, 0xff, + 0xf3, 0xed, 0xcf, 0x83, 0xcf, 0x9d, 0x03, 0xff, + 0xc3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xc3, 0xff, + 0xff, 0xe7, 0xc3, 0x81, 0xe7, 0xe7, 0xe7, 0xe7, + 0xff, 0xef, 0xcf, 0x80, 0x80, 0xcf, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe7, 0xe7, 0xe7, 0xe7, 0xff, 0xff, 0xe7, 0xff, + 0x99, 0x99, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x99, 0x99, 0x00, 0x99, 0x00, 0x99, 0x99, 0xff, + 0xe7, 0xc1, 0x9f, 0xc3, 0xf9, 0x83, 0xe7, 0xff, + 0x9d, 0x99, 0xf3, 0xe7, 0xcf, 0x99, 0xb9, 0xff, + 0xc3, 0x99, 0xc3, 0xc7, 0x98, 0x99, 0xc0, 0xff, + 0xf9, 0xf3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf3, 0xe7, 0xcf, 0xcf, 0xcf, 0xe7, 0xf3, 0xff, + 0xcf, 0xe7, 0xf3, 0xf3, 0xf3, 0xe7, 0xcf, 0xff, + 0xff, 0x99, 0xc3, 0x00, 0xc3, 0x99, 0xff, 0xff, + 0xff, 0xe7, 0xe7, 0x81, 0xe7, 0xe7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe7, 0xcf, + 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe7, 0xff, + 0xff, 0xfc, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0xff, + 0xc3, 0x99, 0x91, 0x89, 0x99, 0x99, 0xc3, 0xff, + 0xe7, 0xe7, 0xc7, 0xe7, 0xe7, 0xe7, 0x81, 0xff, + 0xc3, 0x99, 0xf9, 0xf3, 0xcf, 0x9f, 0x81, 0xff, + 0xc3, 0x99, 0xf9, 0xe3, 0xf9, 0x99, 0xc3, 0xff, + 0xf9, 0xf1, 0xe1, 0x99, 0x80, 0xf9, 0xf9, 0xff, + 0x81, 0x9f, 0x83, 0xf9, 0xf9, 0x99, 0xc3, 0xff, + 0xc3, 0x99, 0x9f, 0x83, 0x99, 0x99, 0xc3, 0xff, + 0x81, 0x99, 0xf3, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, + 0xc3, 0x99, 0x99, 0xc3, 0x99, 0x99, 0xc3, 0xff, + 0xc3, 0x99, 0x99, 0xc1, 0xf9, 0x99, 0xc3, 0xff, + 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, + 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xe7, 0xcf, + 0xf1, 0xe7, 0xcf, 0x9f, 0xcf, 0xe7, 0xf1, 0xff, + 0xff, 0xff, 0x81, 0xff, 0x81, 0xff, 0xff, 0xff, + 0x8f, 0xe7, 0xf3, 0xf9, 0xf3, 0xe7, 0x8f, 0xff, + 0xc3, 0x99, 0xf9, 0xf3, 0xe7, 0xff, 0xe7, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xe7, 0xc3, 0x99, 0x81, 0x99, 0x99, 0x99, 0xff, + 0x83, 0x99, 0x99, 0x83, 0x99, 0x99, 0x83, 0xff, + 0xc3, 0x99, 0x9f, 0x9f, 0x9f, 0x99, 0xc3, 0xff, + 0x87, 0x93, 0x99, 0x99, 0x99, 0x93, 0x87, 0xff, + 0x81, 0x9f, 0x9f, 0x87, 0x9f, 0x9f, 0x81, 0xff, + 0x81, 0x9f, 0x9f, 0x87, 0x9f, 0x9f, 0x9f, 0xff, + 0xc3, 0x99, 0x9f, 0x91, 0x99, 0x99, 0xc3, 0xff, + 0x99, 0x99, 0x99, 0x81, 0x99, 0x99, 0x99, 0xff, + 0xc3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xc3, 0xff, + 0xe1, 0xf3, 0xf3, 0xf3, 0xf3, 0x93, 0xc7, 0xff, + 0x99, 0x93, 0x87, 0x8f, 0x87, 0x93, 0x99, 0xff, + 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x81, 0xff, + 0x9c, 0x88, 0x80, 0x94, 0x9c, 0x9c, 0x9c, 0xff, + 0x99, 0x89, 0x81, 0x81, 0x91, 0x99, 0x99, 0xff, + 0xc3, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xff, + 0x83, 0x99, 0x99, 0x83, 0x9f, 0x9f, 0x9f, 0xff, + 0xc3, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xf1, 0xff, + 0x83, 0x99, 0x99, 0x83, 0x87, 0x93, 0x99, 0xff, + 0xc3, 0x99, 0x9f, 0xc3, 0xf9, 0x99, 0xc3, 0xff, + 0x81, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xff, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xff, + 0x99, 0x99, 0x99, 0x99, 0x99, 0xc3, 0xe7, 0xff, + 0x9c, 0x9c, 0x9c, 0x94, 0x80, 0x88, 0x9c, 0xff, + 0x99, 0x99, 0xc3, 0xe7, 0xc3, 0x99, 0x99, 0xff, + 0x99, 0x99, 0x99, 0xc3, 0xe7, 0xe7, 0xe7, 0xff, + 0x81, 0xf9, 0xf3, 0xe7, 0xcf, 0x9f, 0x81, 0xff, + 0xe7, 0xe7, 0xe7, 0x00, 0x00, 0xe7, 0xe7, 0xe7, + 0x3f, 0x3f, 0xcf, 0xcf, 0x3f, 0x3f, 0xcf, 0xcf, + 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, + 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, + 0xcc, 0x66, 0x33, 0x99, 0xcc, 0x66, 0x33, 0x99, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0x33, 0x33, 0xcc, 0xcc, + 0x33, 0x66, 0xcc, 0x99, 0x33, 0x66, 0xcc, 0x99, + 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, + 0xe7, 0xe7, 0xe7, 0xe0, 0xe0, 0xe7, 0xe7, 0xe7, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, + 0xe7, 0xe7, 0xe7, 0xe0, 0xe0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x07, 0xe7, 0xe7, 0xe7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe7, 0xe7, 0xe7, + 0xe7, 0xe7, 0xe7, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0xe7, 0xe7, 0xe7, + 0xe7, 0xe7, 0xe7, 0x07, 0x07, 0xe7, 0xe7, 0xe7, + 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, + 0xfe, 0xfc, 0xf9, 0x93, 0x87, 0x8f, 0x9f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, + 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, + 0xe7, 0xe7, 0xe7, 0x07, 0x07, 0xff, 0xff, 0xff, + 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0 +}; diff --git a/Src/CmdPipe.cpp b/Src/CmdPipe.cpp index c449c41..82e6508 100644 --- a/Src/CmdPipe.cpp +++ b/Src/CmdPipe.cpp @@ -1,8 +1,21 @@ /* * CmdPipe.cpp * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Tcl/Tk stuff by Lutz Vieweg + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "CmdPipe.h" @@ -102,18 +115,18 @@ unsigned long Pipe::eread(void * buf, unsigned long len) { int Pipe::probe(void) const { - fd_set set; - FD_ZERO(&set); - FD_SET(fds[0], &set); - - struct timeval tv; - tv.tv_sec = 0; - tv.tv_usec = 0; - +// fd_set set; +// FD_ZERO(&set); +// FD_SET(fds[0], &set); +// +// struct timeval tv; +// tv.tv_sec = 0; +// tv.tv_usec = 0; +// int res; -// Use the following commented line for HP-UX < 10.20 -// res = select(FD_SETSIZE, (int *)&set, (int *)0, (int *)0, &tv); - res = select(FD_SETSIZE, &set, (fd_set *)0, (fd_set *)0, &tv); +//// Use the following commented line for HP-UX < 10.20 +//// res = select(FD_SETSIZE, (int *)&set, (int *)0, (int *)0, &tv); +// res = select(FD_SETSIZE, &set, (fd_set *)0, (fd_set *)0, &tv); if (res > 0) return -1; return 0; @@ -157,12 +170,12 @@ CmdPipe::CmdPipe(const char * command, const char * arg, int nicediff) : childpi CmdPipe::~CmdPipe(void) { - if (childpid) { - int status; - waitpid(childpid, &status, 0); - - if (status != 0) { - fprintf(stderr,"~CmdPipe child process returned error\n"); - } - } + //if (childpid) { + // int status; + // waitpid(childpid, &status, 0); + // + // if (status != 0) { + // fprintf(stderr,"~CmdPipe child process returned error\n"); + // } + //} } diff --git a/Src/CmdPipe.h b/Src/CmdPipe.h index 983483f..4bff300 100644 --- a/Src/CmdPipe.h +++ b/Src/CmdPipe.h @@ -1,8 +1,21 @@ /* * CmdPipe.h * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Tcl/Tk stuff by Lutz Vieweg + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef CmdPipe_h diff --git a/Src/Display.cpp b/Src/Display.cpp index d2474f3..cf20d24 100644 --- a/Src/Display.cpp +++ b/Src/Display.cpp @@ -1,16 +1,30 @@ /* * Display.cpp - C64 graphics display, emulator window handling + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * - * Frodo (C) 1994-1997,2002 Christian Bauer + * 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 */ -#include "sysdeps.h" - +#include "sysdeps.h" + #include "Display.h" #include "main.h" -#include "Prefs.h" - +#include "Prefs.h" + // LED states enum { LED_OFF, // LED off @@ -20,32 +34,34 @@ enum { }; -#undef USE_THEORETICAL_COLORS +#define USE_PEPTO_COLORS 1 -#ifdef USE_THEORETICAL_COLORS +#ifdef USE_PEPTO_COLORS -// C64 color palette (theoretical values) +// C64 color palette +// Values based on measurements by Philip "Pepto" Timmermann +// (see http://www.pepto.de/projects/colorvic/) const uint8 palette_red[16] = { - 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff, 0x80, 0xff, 0x40, 0x80, 0x80, 0x80, 0xc0 + 0x00, 0xff, 0x86, 0x4c, 0x88, 0x35, 0x20, 0xcf, 0x88, 0x40, 0xcb, 0x34, 0x68, 0x8b, 0x68, 0xa1 }; const uint8 palette_green[16] = { - 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x80, 0x40, 0x80, 0x40, 0x80, 0xff, 0x80, 0xc0 + 0x00, 0xff, 0x19, 0xc1, 0x17, 0xac, 0x07, 0xf2, 0x3e, 0x2a, 0x55, 0x34, 0x68, 0xff, 0x4a, 0xa1 }; const uint8 palette_blue[16] = { - 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x80, 0xff, 0xc0 + 0x00, 0xff, 0x01, 0xe3, 0xbd, 0x0a, 0xc0, 0x2d, 0x00, 0x00, 0x37, 0x34, 0x68, 0x59, 0xff, 0xa1 }; #else -// C64 color palette (more realistic looking colors) +// C64 color palette (traditional Frodo colors) const uint8 palette_red[16] = { 0x00, 0xff, 0x99, 0x00, 0xcc, 0x44, 0x11, 0xff, 0xaa, 0x66, 0xff, 0x40, 0x80, 0x66, 0x77, 0xc0 }; const uint8 palette_green[16] = { - 0x00, 0xff, 0x00, 0xff, 0x00, 0xcc, 0x00, 0xff, 0x55, 0x33, 0x66, 0x40, 0x80, 0xff, 0x77, 0xc0 + 0x00, 0xff, 0x00, 0xff, 0x00, 0xcc, 0x00, 0xdd, 0x55, 0x33, 0x66, 0x40, 0x80, 0xff, 0x77, 0xc0 }; const uint8 palette_blue[16] = { @@ -69,21 +85,25 @@ void C64Display::UpdateLEDs(int l0, int l1, int l2, int l3) #if defined(__BEOS__) -#include "Display_Be.i" +#include "Display_Be.h" #elif defined(AMIGA) -#include "Display_Amiga.i" +#include "Display_Amiga.h" #elif defined(HAVE_SDL) -#include "Display_SDL.i" +# if defined(QTOPIA) or defined(MAEMO) or defined(WII) +# include "Display_EmbeddedSDL.h" +# else +# include "Display_SDL.h" +# endif #elif defined(__unix) # ifdef __svgalib__ -# include "Display_svga.i" +# include "Display_svga.h" # else -# include "Display_x.i" +# include "Display_x.h" # endif #elif defined(__mac__) -#include "Display_mac.i" +#include "Display_mac.h" #elif defined(WIN32) -#include "Display_WIN32.i" +#include "Display_WIN32.h" #elif defined(__riscos__) -#include "Display_Acorn.i" +#include "Display_Acorn.h" #endif diff --git a/Src/Display.h b/Src/Display.h index 2d4211a..2146d01 100644 --- a/Src/Display.h +++ b/Src/Display.h @@ -1,7 +1,21 @@ /* * Display.h - C64 graphics display, emulator window handling * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _DISPLAY_H @@ -16,8 +30,7 @@ #endif #ifdef HAVE_SDL -#include -extern SDL_Surface *real_screen; +struct SDL_Surface; #endif #ifdef WIN32 @@ -38,10 +51,6 @@ const int DISPLAY_X = 0x180; const int DISPLAY_Y = 0x110; #endif -#if defined(HAVE_SDL) -const int FULL_DISPLAY_X = 640; -const int FULL_DISPLAY_Y = 480; -#endif class C64Window; class C64Screen; @@ -63,12 +72,6 @@ public: void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick, uint8 *joystick2); #else void PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick); -#endif -#if defined(HAVE_SDL) - void FakeKeyPress(int kc, bool shift, uint8 *CIA_key_matrix, - uint8 *CIA_rev_matrix); - void TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick); - void UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix); #endif bool NumLock(void); void InitColors(uint8 *colors); @@ -90,7 +93,7 @@ public: Joy_Keys JoystickKeys[2]; // it's easier making the joystick keys public #endif -#if defined(__unix) || defined(GEKKO) +#ifdef __unix bool quit_requested; #endif diff --git a/Src/Display_Acorn.i b/Src/Display_Acorn.h similarity index 93% rename from Src/Display_Acorn.i rename to Src/Display_Acorn.h index 14f558c..93e9126 100644 --- a/Src/Display_Acorn.i +++ b/Src/Display_Acorn.h @@ -1,10 +1,22 @@ /* - * Display_Acorn.i + * Display_Acorn.h - C64 graphics display, emulator window handling, + * RISC OS specific stuff * - * Handles redraws and suchlike as well as the keyboard - * Frodo (C) 1994-1997 by Christian Bauer - * Acorn port by Andreas Dehmel, 1997 + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 */ diff --git a/Src/Display_Amiga.i b/Src/Display_Amiga.h similarity index 93% rename from Src/Display_Amiga.i rename to Src/Display_Amiga.h index c846b68..f9bf84b 100644 --- a/Src/Display_Amiga.i +++ b/Src/Display_Amiga.h @@ -1,8 +1,22 @@ /* - * Display_Amiga.i - C64 graphics display, emulator window handling, + * Display_Amiga.h - C64 graphics display, emulator window handling, * Amiga specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -487,7 +501,7 @@ void C64Display::PollKeyboard(UBYTE *key_matrix, UBYTE *rev_matrix, UBYTE *joyst case 0: { // About Frodo TheC64->Pause(); char str[256]; - sprintf(str, "%s by Christian Bauer\n\n© Copyright 1994-1997\nFreely distributable", VERSION_STRING); + sprintf(str, "%s by Christian Bauer\n\n© Copyright 1994-1997,2002-2005", VERSION_STRING); ShowRequester(str, "OK"); TheC64->Resume(); break; diff --git a/Src/Display_Be.i b/Src/Display_Be.h similarity index 74% rename from Src/Display_Be.i rename to Src/Display_Be.h index 214b849..ed787f4 100644 --- a/Src/Display_Be.i +++ b/Src/Display_Be.h @@ -1,9 +1,22 @@ /* - * Display_Be.i - C64 graphics display, emulator window handling, + * Display_Be.h - C64 graphics display, emulator window handling, * Be specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * GameKit stuff by Tinic Urou + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -15,6 +28,14 @@ #include "main.h" +#ifndef BIT_BANG +#define BIT_BANG 0 +#endif +#ifndef MGA_HACK +#define MGA_HACK 0 +#endif + + // Window thread messages const uint32 MSG_REDRAW = 1; @@ -71,7 +92,7 @@ const int key_byte[128] = { 3, 4, 4, 5, 5, 6, 6, 8+0, 0x26,0x22,0x2a, 0, 7, -1, 7, -1, - 7, 8+0, 0, 0,0x30, -1, 7, 7, + 0x30, 8+0, 0, 0,0x30, -1, 7, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -128,17 +149,23 @@ private: class SpeedoView; class LEDView; -class C64Window : public BWindow { +class C64Window : public BDirectWindow { public: C64Window(); virtual bool QuitRequested(void); virtual void MessageReceived(BMessage *msg); + virtual void DirectConnected(direct_buffer_info *info); BBitmap *TheBitmap[2]; SpeedoView *Speedometer; LEDView *LED[4]; +#if BIT_BANG + uint8 *bits; + int bytes_per_row; +#endif + private: BitmapView *main_view; }; @@ -153,12 +180,21 @@ public: C64Screen(C64Display *display) : BWindowScreen("Frodo", B_8_BIT_640x480, &error), the_display(display) { Lock(); - BitmapView *main_view = new BitmapView(Bounds(), NULL); + TheBitmap = new BBitmap(DisplayFrame, B_COLOR_8_BIT); + main_view = new BitmapView(Bounds(), TheBitmap); AddChild(main_view); main_view->MakeFocus(); Connected = false; + first_connected = true; +#if MGA_HACK + mga_ready = false; +#endif Unlock(); } + ~C64Screen() + { + delete TheBitmap; + } virtual void ScreenConnected(bool active); virtual void DispatchMessage(BMessage *msg, BHandler *handler); @@ -169,10 +205,27 @@ public: bool Connected; // Flag: screen connected int Speed; char SpeedoStr[16]; // Speedometer value converted to a string + BBitmap *TheBitmap; private: C64Display *the_display; + BitmapView *main_view; + bool first_connected; status_t error; + +#if MGA_HACK + area_id mga_clone_area; + volatile uint8 *isa_io; + bool mga_ready; + + void CRTC_out(int reg, uint8 val) {isa_io[0x3d4] = reg; __eieio(); isa_io[0x3d5] = val; __eieio();} + uint8 CRTC_in(int reg) {isa_io[0x3d4] = reg; __eieio(); return isa_io[0x3d5];} + void SEQ_out(int reg, uint8 val) {isa_io[0x3c4] = reg; __eieio(); isa_io[0x3c5] = val; __eieio();} + uint8 SEQ_in(int reg) {isa_io[0x3c4] = reg; __eieio(); return isa_io[0x3c5];} + void GDC_out(int reg, uint8 val) {isa_io[0x3ce] = reg; __eieio(); isa_io[0x3cf] = val; __eieio();} + uint8 GDC_in(int reg) {isa_io[0x3ce] = reg; __eieio(); return isa_io[0x3cf];} + void ATC_out(int reg, uint8 val) {isa_io[0x3c0] = reg; __eieio(); isa_io[0x3c0] = val; __eieio();} +#endif }; @@ -300,13 +353,75 @@ void C64Display::Update(void) the_screen->DrawLED(i, led_state[i]); the_screen->DrawSpeedometer(); + // Update C64 display in dobule scan mode + if (ThePrefs.DoubleScan) { + uint8 *src = (uint8 *)the_screen->TheBitmap->Bits(); + uint32 src_xmod = the_screen->TheBitmap->BytesPerRow(); + src += src_xmod * 16 + 32; + uint8 *dest = (uint8 *)the_screen->CardInfo()->frame_buffer; + uint32 dest_xmod = the_screen->CardInfo()->bytes_per_row; +#ifdef __POWERPC__ + double tmp[1]; + for (int y=0; y<240; y++) { + uint32 *p = (uint32 *)src - 1; + double *q1 = (double *)dest - 1; + double *q2 = q1 + dest_xmod / sizeof(double); + for (int x=0; x<80; x++) { + uint32 val = *(++p); + uint8 *r = (uint8 *)&tmp[1]; + *(--r) = val; + *(--r) = val; + val >>= 8; + *(--r) = val; + *(--r) = val; + val >>= 8; + *(--r) = val; + *(--r) = val; + val >>= 8; + *(--r) = val; + *(--r) = val; + double tmp2 = tmp[0]; + *(++q1) = tmp2; + *(++q2) = tmp2; + } + src += src_xmod; + dest += dest_xmod * 2; + } +#else + for (int y=0; y<240; y++) { + uint32 *p = (uint32 *)src; + uint32 *q1 = (uint32 *)dest; + uint32 *q2 = q1 + dest_xmod / sizeof(uint32); + for (int x=0; x<80; x++) { + uint32 val = *p++; + uint32 tmp = val & 0x000000ff; + tmp |= (val << 8) & 0x0000ff00; + tmp |= (val << 8) & 0x00ff0000; + tmp |= (val << 16) & 0xff000000; + *q1++ = tmp; + *q2++ = tmp; + tmp = (val >> 16) & 0x000000ff; + tmp |= (val >> 8) & 0x0000ff00; + tmp |= (val >> 8) & 0x00ff0000; + tmp |= val & 0xff000000; + *q1++ = tmp; + *q2++ = tmp; + } + src += src_xmod; + dest += dest_xmod * 2; + } +#endif + } + } else { +#if !BIT_BANG // Update C64 display BMessage msg(MSG_REDRAW); msg.AddInt32("bitmap", draw_bitmap); the_window->PostMessage(&msg); draw_bitmap ^= 1; +#endif // Update LEDs for (int i=0; i<4; i++) @@ -338,10 +453,17 @@ void C64Display::Speedometer(int speed) uint8 *C64Display::BitmapBase(void) { - if (using_screen) - return (uint8 *)the_screen->CardInfo()->frame_buffer; - else + if (using_screen) { + if (ThePrefs.DoubleScan) + return (uint8 *)the_screen->TheBitmap->Bits(); + else + return (uint8 *)the_screen->CardInfo()->frame_buffer; + } else +#if BIT_BANG + return (uint8 *)the_window->bits; +#else return (uint8 *)the_window->TheBitmap[draw_bitmap]->Bits(); +#endif } @@ -351,10 +473,17 @@ uint8 *C64Display::BitmapBase(void) int C64Display::BitmapXMod(void) { - if (using_screen) - return the_screen->CardInfo()->bytes_per_row; - else + if (using_screen) { + if (ThePrefs.DoubleScan) + return the_screen->TheBitmap->BytesPerRow(); + else + return the_screen->CardInfo()->bytes_per_row; + } else +#if BIT_BANG + return the_window->bytes_per_row; +#else return the_window->TheBitmap[draw_bitmap]->BytesPerRow(); +#endif } @@ -486,7 +615,7 @@ void C64Display::Resume(void) * Window constructor */ -C64Window::C64Window() : BWindow(WindowFrame, "Frodo", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE) +C64Window::C64Window() : BDirectWindow(WindowFrame, "Frodo", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE) { // Move window to right position Lock(); @@ -511,7 +640,7 @@ C64Window::C64Window() : BWindow(WindowFrame, "Frodo", B_TITLED_WINDOW, B_NOT_RE bar->AddItem(menu); AddChild(bar); SetKeyMenuBar(bar); - int mbar_height = bar->Frame().bottom + 1; + int mbar_height = int(bar->Frame().bottom) + 1; // Resize window to fit menu bar ResizeBy(0, mbar_height); @@ -572,8 +701,10 @@ void C64Window::MessageReceived(BMessage *msg) switch (msg->what) { case MSG_REDRAW: // Redraw bitmap MessageQueue()->Lock(); - while ((msg2 = MessageQueue()->FindMessage(MSG_REDRAW, 0)) != NULL) + while ((msg2 = MessageQueue()->FindMessage(MSG_REDRAW, 0)) != NULL) { MessageQueue()->RemoveMessage(msg2); + delete msg2; + } MessageQueue()->Unlock(); main_view->ChangeBitmap(TheBitmap[msg->FindInt32("bitmap")]); Lock(); @@ -587,6 +718,29 @@ void C64Window::MessageReceived(BMessage *msg) } +/* + * Window connected/disconnected + */ + +void C64Window::DirectConnected(direct_buffer_info *info) +{ +#if BIT_BANG + switch (info->buffer_state & B_DIRECT_MODE_MASK) { + case B_DIRECT_STOP: +// acquire_sem(drawing_sem); + break; + case B_DIRECT_MODIFY: +// acquire_sem(drawing_sem); + case B_DIRECT_START: + bits = ((uint8 *)info->bits + info->window_bounds.top * info->bytes_per_row + info->window_bounds.left * info->bits_per_pixel / 8); + bytes_per_row = info->bytes_per_row; +// release_sem(drawing_sem); + break; + } +#endif +} + + /* * Workspace activated/deactivated */ @@ -594,6 +748,54 @@ void C64Window::MessageReceived(BMessage *msg) void C64Screen::ScreenConnected(bool active) { if (active) { + if (first_connected) { + first_connected = false; + +#if MGA_HACK + mga_clone_area = -1; + + // Construct register area name + char mga_area_name[64]; + int bus = 0, device = 13, function = 0; + sprintf(mga_area_name, "102B_0519_%02X%02X%02X regs", bus, device, function); + + // Find MGA register area + area_id mga_area = find_area(mga_area_name); + if (mga_area > 0) { + + // Clone area, remove write protection + volatile uint8 *mga_io; + mga_clone_area = clone_area("mga registers", (void **)&mga_io, B_ANY_ADDRESS, B_READ_AREA | B_WRITE_AREA, mga_area); + if (mga_clone_area > 0) { + isa_io = mga_io + 0x1c00; + mga_ready = true; + } + } +#endif + } + +#if MGA_HACK + if (mga_ready) { + CRTC_out(0x09, 1); // Enable double scan + int a = 4 * 640; + CRTC_out(0x0c, a >> 8); // Center screen vertically + CRTC_out(0x0d, a); + // defaults: + // total 0x67 + // display end 0x4f + // blank start 0x4f + // blank end 2b + // sync start 0x53 + // sync end 1f + CRTC_out(0x00, 0x3f); // Horizontal timing + CRTC_out(0x01, 0x2f); + CRTC_out(0x02, 0x2f); + CRTC_out(0x03, 0x83); + CRTC_out(0x04, 0x32); + CRTC_out(0x05, 0x1a); + } +#endif + FillRect(0, 0, 639, 479, 0); // Clear screen the_display->TheC64->Resume(); Connected = true; @@ -644,12 +846,18 @@ void C64Screen::DispatchMessage(BMessage *msg, BHandler *handler) void C64Screen::DrawLED(int i, int state) { + int maxy; + if (ThePrefs.DoubleScan) + maxy = 480; + else + maxy = DISPLAY_Y; + switch (state) { case LED_ON: - FillRect(10+i*20, DISPLAY_Y-20, 20+i*20, DISPLAY_Y-12, 54); + FillRect(10+i*20, maxy-20, 20+i*20, maxy-12, 54); break; case LED_ERROR_ON: - FillRect(10+i*20, DISPLAY_Y-20, 20+i*20, DISPLAY_Y-12, 44); + FillRect(10+i*20, maxy-20, 20+i*20, maxy-12, 44); break; } } @@ -676,14 +884,23 @@ static const int8 Digits[11][8] = { // Digit images void C64Screen::DrawSpeedometer() { // Don't display speedometer if we're running at about 100% - if (Speed >= 99 && Speed <= 101) + if (Speed >= 50 && Speed <= 101) return; + int maxx, maxy; + if (ThePrefs.DoubleScan) { + maxx = 640; + maxy = 480; + } else { + maxx = DISPLAY_X; + maxy = DISPLAY_Y; + } + char *s = SpeedoStr; char c; long xmod = CardInfo()->bytes_per_row; - uint8 *p = (uint8 *)CardInfo()->frame_buffer + DISPLAY_X - 8*8 + (DISPLAY_Y-20) * xmod; - while (c = *s++) { + uint8 *p = (uint8 *)CardInfo()->frame_buffer + maxx - 8*8 + (maxy-20) * xmod; + while ((c = *s++) != 0) { if (c == ' ') continue; if (c == '%') @@ -716,7 +933,11 @@ void C64Screen::FillRect(int x1, int y1, int x2, int y2, int color) uint8 *p = (uint8 *)CardInfo()->frame_buffer + y1 * xmod + x1; int n = x2 - x1 + 1; for(int y=y1; y<=y2; y++) { +#ifdef __POWERPC__ memset_nc(p, color, n); +#else + memset(p, color, n); +#endif p += xmod; } } @@ -804,6 +1025,7 @@ SpeedoView::SpeedoView(BRect frame) : BView(frame, "", B_FOLLOW_NONE, B_WILL_DRA speedostr[0] = 0; bounds = Bounds(); SetViewColor(fill_gray); + SetLowColor(fill_gray); SetFont(be_plain_font); } diff --git a/Src/Display_EmbeddedSDL.h b/Src/Display_EmbeddedSDL.h new file mode 100644 index 0000000..b97684b --- /dev/null +++ b/Src/Display_EmbeddedSDL.h @@ -0,0 +1,1003 @@ +/* + * DisplayEmbeddedSDL.h - C64 graphics display, emulator window handling + * for embedded Linux devices (Qtopia, Maemo) + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * Changes for embedded Linux devices (Qtopia, Maemo) (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "C64.h" +#include "SAM.h" +#include "main.h" +#include "Version.h" + +#include "sdlgui.h" +#include "dlgMain.h" + +#define QWS +#include +//#include +#include +#include + + +// Display surface +static SDL_Surface *screen = 0; +static SDL_Surface *backgroundSurf = 0; +static SDL_Surface *surf = 0; + +//static SDL_mutex *screenLock = 0; +static u32 screenLock = 0; +lwpq_t ThreadOneQ; +lwp_t GUIthread; +#define THREADSTACK 1024*128 +u8 threadonestack[THREADSTACK]; + +// Mode of Joystick emulation. 0 = none, 1 = Joyport 1, 2 = Joyport 2 +static short joy_emu = 0; + +// Keyboard +static bool tab_pressed = false; + +// For LED error blinking +static C64Display *c64_disp; +//static struct sigaction pulse_sa; +//static itimerval pulse_tv; + +// SDL joysticks +static SDL_Joystick *joy[2] = {NULL, NULL}; + +// Colors for speedometer/drive LEDs +enum +{ + black = 0, + white = 1, + fill_gray = 16, + shine_gray = 17, + shadow_gray = 18, + red = 19, + green = 20, + PALETTE_SIZE = 21 +}; + +/* + C64 keyboard matrix: + + Bit 7 6 5 4 3 2 1 0 + 0 CUD F5 F3 F1 F7 CLR RET DEL + 1 SHL E S Z 4 A W 3 + 2 X T F C 6 D R 5 + 3 V U H B 8 G Y 7 + 4 N O K M 0 J I 9 + 5 , @ : . - L P + + 6 / ^ = SHR HOM ; * + 7 R/S Q C= SPC 2 CTL <- 1 +*/ + +#define MATRIX(a,b) (((a) << 3) | (b)) + + +/* + * Open window + */ + +char *buffer; + +int width = 320; +int height = 240; + +bool isGuiAvailable = true; // TODO from main.cpp +bool GUIOpened = false; + +//static SDL_Thread *GUIthread = NULL; +static const int GUI_RETURN_INFO = (SDL_USEREVENT+1); +static bool doUpdate = true; + +void update( int32 x, int32 y, int32 w, int32 h, bool forced ) +{ + if ( !forced && !doUpdate ) // the HW surface is available + return; + + // SDL_UpdateRect(SDL_GetVideoSurface(), 0, 0, width, height); + // SDL_UpdateRect(surf, x, y, w, h); + SDL_UpdateRect(screen, x, y, w, h); +} + +void update( bool forced ) +{ + update( 0, 0, width, height, forced ); +} + +void update() +{ + update( 0, 0, width, height, false ); +} + +void restoreBackground() +{ + if (backgroundSurf != NULL) { + SDL_BlitSurface(backgroundSurf, NULL, screen, NULL); + update(true); + fprintf(stderr, "video surface restored\n"); + } +} + +void allocateBackgroundSurf() +{ + // allocate new background video surface + backgroundSurf = SDL_ConvertSurface(screen, screen->format, screen->flags); + fprintf(stderr, "Allocating background video surface\n"); +} + +void freeBackgroundSurf() +{ + // free background video surface + if (backgroundSurf != NULL) + { + fprintf(stderr, "Freeing background video surface\n"); + SDL_FreeSurface(backgroundSurf); + backgroundSurf = NULL; + } +} + +void openGUI() +{ + fprintf(stderr, "open GUI\n"); + if (GUIOpened) + { + fprintf(stderr, "GUI is already open!\n"); + return; + } + allocateBackgroundSurf(); + surf = backgroundSurf; + GUIOpened = true; +} + +void closeGUI() +{ + fprintf(stderr, "close GUI\n"); + // update the main surface and then redirect VDI to it + restoreBackground(); + surf = screen; // redirect VDI to main surface + fprintf(stderr, "VDI redirected back to main video surface\n"); + freeBackgroundSurf(); + GUIOpened = false; +} + +void saveBackground() +{ + if (backgroundSurf != NULL) { + SDL_BlitSurface(screen, NULL, backgroundSurf, NULL); + surf = backgroundSurf; // redirect VDI to background surface + fprintf(stderr, "video surface saved to background, VDI redirected\n"); + } +} + +void blendBackgrounds() +{ + if (backgroundSurf != NULL) + { + SDL_Rect *Rect; + Rect = SDLGui_GetFirstBackgroundRect(); + while (Rect != NULL) + { + SDL_BlitSurface(backgroundSurf, Rect, screen, Rect); + Rect = SDLGui_GetNextBackgroundRect(); + } + update(true); + } +} + +static Prefs DialogPrefs; + +// running in a different thread +//static int open_gui(void * /*ptr*/) +static void *open_gui (void *arg) +{ + LWP_InitQueue (&ThreadOneQ); + openGUI(); + DialogPrefs = ThePrefs; + // Show main dialog + int status = Dialog_Main(DialogPrefs); + // The status is sent to event checking thread by the USEREVENT+1 message + SDL_Event ev; + ev.type = GUI_RETURN_INFO; + ev.user.code = status; // STATUS_SHUTDOWN or STATUS_REBOOT + ev.user.data1 = NULL; + SDL_PeepEvents(&ev, 1, SDL_ADDEVENT, SDL_EVENTMASK(GUI_RETURN_INFO)); + closeGUI(); + return 0; +} + +bool start_GUI_thread() +{ + if (isGuiAvailable) // TODO && !hostScreen.isGUIopen()) + { + //GUIthread = SDL_CreateThread(open_gui, NULL); + LWP_CreateThread (&GUIthread, open_gui, NULL, threadonestack, THREADSTACK, 80); + } + return (GUIthread != NULL); +} + +void kill_GUI_thread() +{ + if (GUIthread != NULL) { + // SDL_KillThread(GUIthread); + LWP_ThreadBroadcast(GUIthread); + LWP_JoinThread(GUIthread, NULL); + LWP_CloseQueue(GUIthread); + GUIthread = NULL; + } +} + +void screenlock() +{ + //while (SDL_mutexP(screenLock)==-1) + //{ + // SDL_Delay(20); + // fprintf(stderr, "Couldn't lock mutex\n"); + //} + while(LWP_MutexLock(screenLock)); +} + +void screenunlock() +{ + //while (SDL_mutexV(screenLock)==-1) + //{ + // SDL_Delay(20); + // fprintf(stderr, "Couldn't unlock mutex\n"); + //} + LWP_MutexUnlock(screenLock); +} + +int init_graphics(void) +{ + // Init SDL + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO) < 0) { + fprintf(stderr, "Couldn't initialize SDL (%s)\n", SDL_GetError()); + return 0; + } + + LWP_MutexInit (&screenLock, false); + //screenLock = SDL_CreateMutex(); + + buffer = new char[DISPLAY_X*DISPLAY_Y]; + // Open window + //SDL_WM_SetCaption(VERSION_STRING, "Frodo"); + screen = SDL_SetVideoMode(320, 240, 8, SDL_SWSURFACE|SDL_DOUBLEBUF); + surf = screen; + if (screen == NULL) + { + fprintf(stderr, "SDL Couldn't set video mode to %d x %d\n", DISPLAY_X, DISPLAY_Y+17); + } + else + { + fprintf(stderr, "SDL Set video mode to %d x %d\n", DISPLAY_X, DISPLAY_Y+17); + SDLGui_Init(screen); + start_GUI_thread(); + } + return 1; +} + + + +/* + * Display constructor + */ + +C64Display::C64Display(C64 *the_c64) : TheC64(the_c64) +{ + quit_requested = false; + speedometer_string[0] = 0; + + // LEDs off + for (int i=0; i<4; i++) + led_state[i] = old_led_state[i] = LED_OFF; + + // Start timer for LED error blinking + c64_disp = this; + //pulse_sa.sa_handler = (void (*)(int))pulse_handler; + //pulse_sa.sa_flags = SA_RESTART; + //sigemptyset(&pulse_sa.sa_mask); + //sigaction(SIGALRM, &pulse_sa, NULL); + //pulse_tv.it_interval.tv_sec = 0; + //pulse_tv.it_interval.tv_usec = 400000; + //pulse_tv.it_value.tv_sec = 0; + //pulse_tv.it_value.tv_usec = 400000; + //setitimer(ITIMER_REAL, &pulse_tv, NULL); +} + + +/* + * Display destructor + */ + +C64Display::~C64Display() +{ + SDL_Quit(); + delete[] buffer; + DEBUG_Finish(); +} + + +/* + * Prefs may have changed + */ + +void C64Display::NewPrefs(Prefs *prefs) +{ +} + + +/* + * Redraw bitmap + */ + +void C64Display::Update(void) +{ + screenlock(); + if (surf == NULL) + return; + int iOffsetX = (DISPLAY_X - surf->w) / 2; + int iOffsetY = (DISPLAY_Y - surf->h) / 2; + for (int j=0; j < surf->h - 17; j++) + { + memcpy(static_cast(surf->pixels)+surf->w*j, buffer+iOffsetX+DISPLAY_X*(j+iOffsetY), surf->w); + } + // Draw speedometer/LEDs + SDL_Rect r = {0, (surf->h - 17), DISPLAY_X, 15}; + SDL_FillRect(surf, &r, fill_gray); + r.w = DISPLAY_X; r.h = 1; + SDL_FillRect(surf, &r, shine_gray); + r.y = (surf->h - 17) + 14; + SDL_FillRect(surf, &r, shadow_gray); + r.w = 16; + for (int i=2; i<5; i++) + { + r.x = DISPLAY_X * i/5 - 24; r.y = (surf->h - 17) + 4; + SDL_FillRect(surf, &r, shadow_gray); + r.y = (surf->h - 17) + 10; + SDL_FillRect(surf, &r, shine_gray); + } + r.y = (surf->h - 17); r.w = 1; r.h = 15; + for (int i=0; i<4; i++) + { + r.x = DISPLAY_X * i / 5; + SDL_FillRect(surf, &r, shine_gray); + r.x = DISPLAY_X * (i+1) / 5 - 1; + SDL_FillRect(surf, &r, shadow_gray); + } + r.y = (surf->h - 17) + 4; r.h = 7; + for (int i=2; i<5; i++) + { + r.x = DISPLAY_X * i/5 - 24; + SDL_FillRect(surf, &r, shadow_gray); + r.x = DISPLAY_X * i/5 - 9; + SDL_FillRect(surf, &r, shine_gray); + } + r.y = (surf->h - 17) + 5; r.w = 14; r.h = 5; + for (int i=0; i<3; i++) + { + r.x = DISPLAY_X * (i+2) / 5 - 23; + int c; + switch (led_state[i]) + { + case LED_ON: + c = green; + break; + case LED_ERROR_ON: + c = red; + break; + default: + c = black; + break; + } + SDL_FillRect(surf, &r, c); + } + + draw_string(surf, DISPLAY_X * 1/5 + 8, (surf->h - 17) + 4, "D\x12 8", black, fill_gray); + draw_string(surf, DISPLAY_X * 2/5 + 8, (surf->h - 17) + 4, "D\x12 9", black, fill_gray); + draw_string(surf, DISPLAY_X * 3/5 + 8, (surf->h - 17) + 4, "D\x12 10", black, fill_gray); + if (joy_emu == 1) + draw_string(surf, DISPLAY_X * 4/5 + 2, (surf->h - 17) + 4, "1", black, fill_gray); + else if (joy_emu == 2) + draw_string(surf, DISPLAY_X * 4/5 + 2, (surf->h - 17) + 4, "2", black, fill_gray); + draw_string(surf, 24, (surf->h - 17) + 4, speedometer_string, black, fill_gray); + + // Update display + SDL_Flip(surf); + + blendBackgrounds(); + screenunlock(); +} + + +/* + * Draw string into surface using the C64 ROM font + */ + +void C64Display::draw_string(SDL_Surface *s, int x, int y, const char *str, uint8 front_color, uint8 back_color) +{ + uint8 *pb = (uint8 *)s->pixels + s->pitch*y + x; + char c; + while ((c = *str++) != 0) + { + uint8 *q = TheC64->Char + c*8 + 0x800; + uint8 *p = pb; + for (int y=0; y<8; y++) + { + uint8 v = *q++; + p[0] = (v & 0x80) ? front_color : back_color; + p[1] = (v & 0x40) ? front_color : back_color; + p[2] = (v & 0x20) ? front_color : back_color; + p[3] = (v & 0x10) ? front_color : back_color; + p[4] = (v & 0x08) ? front_color : back_color; + p[5] = (v & 0x04) ? front_color : back_color; + p[6] = (v & 0x02) ? front_color : back_color; + p[7] = (v & 0x01) ? front_color : back_color; + p += s->pitch; + } + pb += 8; + } +} + + +/* + * LED error blink + */ + +void C64Display::pulse_handler(...) +{ + for (int i=0; i<4; i++) + switch (c64_disp->led_state[i]) + { + case LED_ERROR_ON: + c64_disp->led_state[i] = LED_ERROR_OFF; + break; + case LED_ERROR_OFF: + c64_disp->led_state[i] = LED_ERROR_ON; + break; + } +} + + +/* + * Draw speedometer + */ + +void C64Display::Speedometer(int speed) +{ + static int delay = 0; + + if (delay >= 20) + { + delay = 0; + sprintf(speedometer_string, "%d%%", speed); + } + else + delay++; +} + + +/* + * Return pointer to bitmap data + */ + +uint8 *C64Display::BitmapBase(void) +{ + //return (uint8 *)screen->pixels; + return (uint8 *)buffer; +} + + +/* + * Return number of bytes per row + */ + +int C64Display::BitmapXMod(void) +{ + //return screen->pitch; + return DISPLAY_X; +} + + + +/* + * Poll the keyboard + */ + +static void translate_key(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) +{ + int c64_key = -1; + if (tab_pressed) + { + // Function and run/stop key emulation on Zaurus keyboard + switch (key) + { + case SDLK_q: c64_key = MATRIX(0,4); break; + case SDLK_w: c64_key = MATRIX(0,4) | 0x80; break; + case SDLK_e: c64_key = MATRIX(0,5); break; + case SDLK_r: c64_key = MATRIX(0,5) | 0x80; break; + case SDLK_t: c64_key = MATRIX(0,6); break; + case SDLK_z: c64_key = MATRIX(0,6) | 0x80; break; + case SDLK_u: c64_key = MATRIX(0,3); break; + case SDLK_i: c64_key = MATRIX(0,3) | 0x80; break; + case SDLK_o: c64_key = MATRIX(7,7); break; + } + } + else + { + switch (key) + { + case SDLK_a: c64_key = MATRIX(1,2); break; + case SDLK_b: c64_key = MATRIX(3,4); break; + case SDLK_c: c64_key = MATRIX(2,4); break; + case SDLK_d: c64_key = MATRIX(2,2); break; + case SDLK_e: c64_key = MATRIX(1,6); break; + case SDLK_f: c64_key = MATRIX(2,5); break; + case SDLK_g: c64_key = MATRIX(3,2); break; + case SDLK_h: c64_key = MATRIX(3,5); break; + case SDLK_i: c64_key = MATRIX(4,1); break; + case SDLK_j: c64_key = MATRIX(4,2); break; + case SDLK_k: c64_key = MATRIX(4,5); break; + case SDLK_l: c64_key = MATRIX(5,2); break; + case SDLK_m: c64_key = MATRIX(4,4); break; + case SDLK_n: c64_key = MATRIX(4,7); break; + case SDLK_o: c64_key = MATRIX(4,6); break; + case SDLK_p: c64_key = MATRIX(5,1); break; + case SDLK_q: c64_key = MATRIX(7,6); break; + case SDLK_r: c64_key = MATRIX(2,1); break; + case SDLK_s: c64_key = MATRIX(1,5); break; + case SDLK_t: c64_key = MATRIX(2,6); break; + case SDLK_u: c64_key = MATRIX(3,6); break; + case SDLK_v: c64_key = MATRIX(3,7); break; + case SDLK_w: c64_key = MATRIX(1,1); break; + case SDLK_x: c64_key = MATRIX(2,7); break; + case SDLK_y: c64_key = MATRIX(3,1); break; + case SDLK_z: c64_key = MATRIX(1,4); break; + + case SDLK_0: c64_key = MATRIX(4,3); break; + case SDLK_1: c64_key = MATRIX(7,0); break; + case SDLK_2: c64_key = MATRIX(7,3); break; + case SDLK_3: c64_key = MATRIX(1,0); break; + case SDLK_4: c64_key = MATRIX(1,3); break; + case SDLK_5: c64_key = MATRIX(2,0); break; + case SDLK_6: c64_key = MATRIX(2,3); break; + case SDLK_7: c64_key = MATRIX(3,0); break; + case SDLK_8: c64_key = MATRIX(3,3); break; + case SDLK_9: c64_key = MATRIX(4,0); break; + + case SDLK_SPACE: c64_key = MATRIX(7,4); break; + case SDLK_BACKQUOTE: c64_key = MATRIX(7,1); break; + case SDLK_BACKSLASH: c64_key = MATRIX(6,6); break; + case SDLK_COMMA: c64_key = MATRIX(5,7); break; + case SDLK_PERIOD: c64_key = MATRIX(5,4); break; + case SDLK_MINUS: c64_key = MATRIX(5,0); break; + case SDLK_EQUALS: c64_key = MATRIX(5,3); break; + case SDLK_LEFTBRACKET: c64_key = MATRIX(5,6); break; + case SDLK_RIGHTBRACKET: c64_key = MATRIX(6,1); break; + case SDLK_SEMICOLON: c64_key = MATRIX(5,5); break; + case SDLK_QUOTE: c64_key = MATRIX(6,2); break; + case SDLK_SLASH: c64_key = MATRIX(6,7); break; + + case SDLK_ESCAPE: c64_key = MATRIX(7,7); break; + case SDLK_RETURN: c64_key = MATRIX(0,1); break; + case SDLK_BACKSPACE: case SDLK_DELETE: c64_key = MATRIX(0,0); break; + case SDLK_INSERT: c64_key = MATRIX(6,3); break; + case SDLK_HOME: c64_key = MATRIX(6,3); break; + case SDLK_END: c64_key = MATRIX(6,0); break; + case SDLK_PAGEUP: c64_key = MATRIX(6,0); break; + case SDLK_PAGEDOWN: c64_key = MATRIX(6,5); break; + + case SDLK_LCTRL: c64_key = MATRIX(7,2); break; + case SDLK_RCTRL: c64_key = MATRIX(7,5); break; + case SDLK_LSHIFT: c64_key = MATRIX(1,7); break; + case SDLK_RSHIFT: c64_key = MATRIX(6,4); break; + case SDLK_LALT: case SDLK_LMETA: c64_key = MATRIX(7,5); break; + case SDLK_RALT: case SDLK_RMETA: c64_key = MATRIX(7,5); break; + + case SDLK_UP: c64_key = MATRIX(0,7)| 0x80; break; + case SDLK_DOWN: c64_key = MATRIX(0,7); break; + case SDLK_LEFT: c64_key = MATRIX(0,2) | 0x80; break; + case SDLK_RIGHT: c64_key = MATRIX(0,2); break; + + case SDLK_F1: c64_key = MATRIX(0,4); break; + case SDLK_F2: c64_key = MATRIX(0,4) | 0x80; break; + case SDLK_F3: c64_key = MATRIX(0,5); break; + case SDLK_F4: c64_key = MATRIX(0,5) | 0x80; break; + case SDLK_F5: c64_key = MATRIX(0,6); break; + case SDLK_F6: c64_key = MATRIX(0,6) | 0x80; break; + case SDLK_F7: c64_key = MATRIX(0,3); break; + case SDLK_F8: c64_key = MATRIX(0,3) | 0x80; break; + + case SDLK_KP0: case SDLK_KP5: c64_key = 0x10 | 0x40; break; + case SDLK_KP1: c64_key = 0x06 | 0x40; break; + case SDLK_KP2: c64_key = 0x02 | 0x40; break; + case SDLK_KP3: c64_key = 0x0a | 0x40; break; + case SDLK_KP4: c64_key = 0x04 | 0x40; break; + case SDLK_KP6: c64_key = 0x08 | 0x40; break; + case SDLK_KP7: c64_key = 0x05 | 0x40; break; + case SDLK_KP8: c64_key = 0x01 | 0x40; break; + case SDLK_KP9: c64_key = 0x09 | 0x40; break; + + case SDLK_KP_DIVIDE: c64_key = MATRIX(6,7); break; + case SDLK_KP_ENTER: c64_key = MATRIX(0,1); break; + + // Support for Zaurus/Qtopia + case SDLK_QUOTEDBL: c64_key = MATRIX(7,3) | 0x80; break; + case SDLK_ASTERISK: c64_key = MATRIX(6,1); break; + case SDLK_DOLLAR: c64_key = MATRIX(1,3) | 0x80; break; + case SDLK_COLON: c64_key = MATRIX(5,5); break; + case SDLK_AT: c64_key = MATRIX(5,6); break; + } + } + if (c64_key < 0) + return; + + // Zaurus/Qtopia joystick emulation + if (joy_emu != 0) + { + switch (key) + { + case SDLK_SPACE: c64_key = 0x10 | 0x40; break; + case SDLK_UP: c64_key = 0x01 | 0x40; break; + case SDLK_DOWN: c64_key = 0x02 | 0x40; break; + case SDLK_LEFT: c64_key = 0x04 | 0x40; break; + case SDLK_RIGHT: c64_key = 0x08 | 0x40; break; + } + } + + // Handle joystick emulation + if (c64_key & 0x40) + { + c64_key &= 0x1f; + if (key_up) + *joystick |= c64_key; + else + *joystick &= ~c64_key; + return; + } + + // Handle other keys + bool shifted = c64_key & 0x80; + int c64_byte = (c64_key >> 3) & 7; + int c64_bit = c64_key & 7; + if (key_up) + { + if (shifted) + { + key_matrix[6] |= 0x10; + rev_matrix[4] |= 0x40; + } + key_matrix[c64_byte] |= (1 << c64_bit); + rev_matrix[c64_bit] |= (1 << c64_byte); + } + else + { + if (shifted) + { + key_matrix[6] &= 0xef; + rev_matrix[4] &= 0xbf; + } + key_matrix[c64_byte] &= ~(1 << c64_bit); + rev_matrix[c64_bit] &= ~(1 << c64_byte); + } +} + +void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) +{ + SDL_Event event; + int eventmask = SDL_EVENTMASK(SDL_KEYDOWN) + | SDL_EVENTMASK(SDL_KEYUP) + | SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) + | SDL_EVENTMASK(SDL_MOUSEBUTTONUP) + | SDL_EVENTMASK(SDL_MOUSEMOTION) + | SDL_EVENTMASK(SDL_JOYAXISMOTION) + | SDL_EVENTMASK(SDL_JOYHATMOTION) + | SDL_EVENTMASK(SDL_JOYBUTTONDOWN) + | SDL_EVENTMASK(SDL_JOYBUTTONUP) + | SDL_EVENTMASK(SDL_ACTIVEEVENT) + | SDL_EVENTMASK(GUI_RETURN_INFO) + | SDL_EVENTMASK(SDL_QUIT); + + SDL_PumpEvents(); + while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, eventmask)) + { + if (GUIOpened) + { + if (event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_MOUSEBUTTONUP) + { + if (event.type == SDL_MOUSEBUTTONDOWN) + fprintf(stderr, "Mouse down\n"); + if (event.type == SDL_MOUSEBUTTONUP) + fprintf(stderr, "Mouse up\n"); + SDL_Event ev; + ev.type = SDL_USEREVENT; // map button down/up to user event + ev.user.code = event.type; + ev.user.data1 = (void *)(int)event.button.x; + ev.user.data2 = (void *)(int)event.button.y; + SDL_PeepEvents(&ev, 1, SDL_ADDEVENT, SDL_EVENTMASK(SDL_USEREVENT)); + } + else if (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP) + { + if (event.type == SDL_KEYDOWN) + fprintf(stderr, "Key down\n"); + if (event.type == SDL_KEYUP) + fprintf(stderr, "Key up\n"); + SDLKey sym = event.key.keysym.sym; + int state = SDL_GetModState(); // keysym.mod does not deliver single mod key presses for + SDL_Event ev; + ev.type = SDL_USEREVENT; // map key down/up event to user event + ev.user.code = event.type; + ev.user.data1 = (void *)(int)sym; + ev.user.data2 = (void *)(int)state; + SDL_PeepEvents(&ev, 1, SDL_ADDEVENT, SDL_EVENTMASK(SDL_USEREVENT)); + } + } + else + { + switch (event.type) + { + case GUI_RETURN_INFO: + { + fprintf(stderr, "Return code from gui: %d\n", event.user.code); + switch (event.user.code) + { + case DO_RESET: + TheC64->Reset(); + break; + case DO_QUIT: + quit_requested = true; + break; + case DO_USEPREFS: + TheC64->NewPrefs(&DialogPrefs); + ThePrefs = DialogPrefs; + break; + case DO_SAVEPREFS: + TheC64->NewPrefs(&DialogPrefs); + ThePrefs = DialogPrefs; + ThePrefs.Save(Frodo::get_prefs_path()); + break; + } + break; + } + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + start_GUI_thread(); + break; + // Key pressed + case SDL_KEYDOWN: +// fprintf(stderr, "SDL-Key: %d\n", event.key.keysym.sym); + if (tab_pressed && event.key.keysym.sym == SDLK_j) + { + if (joy_emu < 2) + joy_emu++; + else + joy_emu = 0; + } + if (tab_pressed && event.key.keysym.sym == SDLK_p) + { + // NMI (Restore) + TheC64->NMI(); + } + else + { + switch (event.key.keysym.sym) + { + case SDLK_TAB: + tab_pressed = true; + break; + + case SDLK_F9: // F9: Invoke SAM + SAM(TheC64); + break; + + case SDLK_F11: // F10: Quit + // Iconify not implemented in Qtopia SDL yet. Quit instead show gui. + //SDL_WM_IconifyWindow(); + quit_requested = true; + break; + + case SDLK_F12: // F12: Reset + TheC64->Reset(); + break; + + case SDLK_KP_PLUS: // '+' on keypad: Increase SkipFrames + ThePrefs.SkipFrames++; + break; + + case SDLK_KP_MINUS: // '-' on keypad: Decrease SkipFrames + if (ThePrefs.SkipFrames > 1) + ThePrefs.SkipFrames--; + break; + + case SDLK_KP_MULTIPLY: // '*' on keypad: Toggle speed limiter + ThePrefs.LimitSpeed = !ThePrefs.LimitSpeed; + break; + + default: + translate_key(event.key.keysym.sym, false, key_matrix, rev_matrix, joystick); + break; + } + } + break; + + // Key released + case SDL_KEYUP: + if (event.key.keysym.sym == SDLK_TAB) + tab_pressed = false; + else +{ + translate_key(event.key.keysym.sym, true, key_matrix, rev_matrix, joystick); +} + break; + + // Quit Frodo + case SDL_QUIT: + quit_requested = true; + break; + } + } + } +} + + +/* + * Check if NumLock is down (for switching the joystick keyboard emulation) + */ + +bool C64Display::NumLock(void) +{ + if (joy_emu == 2) + return true; + return false; +} + + +/* + * Open/close joystick drivers given old and new state of + * joystick preferences + */ + +void C64::open_close_joystick(int port, int oldjoy, int newjoy) +{ + if (oldjoy != newjoy) { + joy_minx[port] = joy_miny[port] = 32767; // Reset calibration + joy_maxx[port] = joy_maxy[port] = -32768; + if (newjoy) { + joy[port] = SDL_JoystickOpen(newjoy - 1); + if (joy[port] == NULL) + fprintf(stderr, "Couldn't open joystick %d\n", port + 1); + } else { + if (joy[port]) { + SDL_JoystickClose(joy[port]); + joy[port] = NULL; + } + } + } +} + +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) +{ + open_close_joystick(0, oldjoy1, newjoy1); + open_close_joystick(1, oldjoy2, newjoy2); +} +//#include "BRUCELEE.h" + +extern void kbd_buf_feed(char *s); +extern void load_prg(C64 *TheC64, uint8 *prg, int prg_size); +/* + * Poll joystick port, return CIA mask + */ + +uint8 C64::poll_joystick(int port) +{ + + uint8 j = 0xff; + + if (port == 0 && (joy[0] || joy[1])) + SDL_JoystickUpdate(); + + if (joy[port]) { + int x = SDL_JoystickGetAxis(joy[port], 0), y = SDL_JoystickGetAxis(joy[port], 1); + + if (x > joy_maxx[port]) + joy_maxx[port] = x; + if (x < joy_minx[port]) + joy_minx[port] = x; + if (y > joy_maxy[port]) + joy_maxy[port] = y; + if (y < joy_miny[port]) + joy_miny[port] = y; + + if (joy_maxx[port] - joy_minx[port] < 100 || joy_maxy[port] - joy_miny[port] < 100) + return 0xff; + + if (x < (joy_minx[port] + (joy_maxx[port]-joy_minx[port])/3)) + j &= 0xfb; // Left + else if (x > (joy_minx[port] + 2*(joy_maxx[port]-joy_minx[port])/3)) + j &= 0xf7; // Right + + if (y < (joy_miny[port] + (joy_maxy[port]-joy_miny[port])/3)) + j &= 0xfd; // Up + else if (y > (joy_miny[port] + 2*(joy_maxy[port]-joy_miny[port])/3)) + j &= 0xfe; // Down + + if (SDL_JoystickGetButton(joy[port], 0)) // A button + { + j &= 0xef; // Button + + } + if (SDL_JoystickGetButton(joy[port], 6)) //Left Trigger + { + kbd_buf_feed("\rLOAD\"*\",8,1\rRUN\r"); + } + + if (SDL_JoystickGetButton(joy[port], 5)) //right trigger + { + int F5=21; + kbd_buf_feed((char*)F5); + + } + if (SDL_JoystickGetButton(joy[port], 7)) //start button + { + //load_prg(this, (uint8*)brucelee_bin,size_brucelee_bin); + //kbd_buf_feed("\rRUN\r"); + int F7=23; + kbd_buf_feed((char*)F7); + } + } + + return j; +} + +/* + * Allocate C64 colors + */ + +void C64Display::InitColors(uint8 *colors) +{ + SDL_Color palette[PALETTE_SIZE]; + for (int i=0; i<16; i++) + { + palette[i].r = palette_red[i]; + palette[i].g = palette_green[i]; + palette[i].b = palette_blue[i]; + } + palette[fill_gray].r = palette[fill_gray].g = palette[fill_gray].b = 0xd0; + palette[shine_gray].r = palette[shine_gray].g = palette[shine_gray].b = 0xf0; + palette[shadow_gray].r = palette[shadow_gray].g = palette[shadow_gray].b = 0x80; + palette[red].r = 0xf0; + palette[red].g = palette[red].b = 0; + palette[green].g = 0xf0; + palette[green].r = palette[green].b = 0; + SDL_SetColors(screen, palette, 0, PALETTE_SIZE); + + for (int i=0; i<256; i++) + colors[i] = i & 0x0f; +} + + +/* + * Show a requester (error message) + */ + +long int ShowRequester(char *a,char *b,char *) +{ + printf("%s: %s\n", a, b); + return 1; +} diff --git a/Src/Display_EmbeddedSDL.org b/Src/Display_EmbeddedSDL.org new file mode 100644 index 0000000..8f3b459 --- /dev/null +++ b/Src/Display_EmbeddedSDL.org @@ -0,0 +1,1037 @@ +/* + * DisplayEmbeddedSDL.h - C64 graphics display, emulator window handling + * for embedded Linux devices (Qtopia, Maemo) + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * Changes for embedded Linux devices (Qtopia, Maemo) (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "C64.h" +#include "SAM.h" +#include "main.h" +#include "Version.h" + +#include "sdlgui.h" +#include "dlgMain.h" + +#define QWS +#include +//#include +#include +#include + + +// Display surface +static SDL_Surface *screen = 0; +static SDL_Surface *backgroundSurf = 0; +static SDL_Surface *surf = 0; + +//static SDL_mutex *screenLock = 0; +static u32 screenLock = 0; +lwpq_t ThreadOneQ; +lwp_t GUIthread; +#define THREADSTACK 1024*128 +u8 threadonestack[THREADSTACK]; + +// Mode of Joystick emulation. 0 = none, 1 = Joyport 1, 2 = Joyport 2 +static short joy_emu = 0; + +// Keyboard +static bool tab_pressed = false; + +// For LED error blinking +static C64Display *c64_disp; +//static struct sigaction pulse_sa; +//static itimerval pulse_tv; + +// SDL joysticks +static SDL_Joystick *joy[2] = {NULL, NULL}; + +// Colors for speedometer/drive LEDs +enum +{ + black = 0, + white = 1, + fill_gray = 16, + shine_gray = 17, + shadow_gray = 18, + red = 19, + green = 20, + PALETTE_SIZE = 21 +}; + +/* + C64 keyboard matrix: + + Bit 7 6 5 4 3 2 1 0 + 0 CUD F5 F3 F1 F7 CLR RET DEL + 1 SHL E S Z 4 A W 3 + 2 X T F C 6 D R 5 + 3 V U H B 8 G Y 7 + 4 N O K M 0 J I 9 + 5 , @ : . - L P + + 6 / ^ = SHR HOM ; * + 7 R/S Q C= SPC 2 CTL <- 1 +*/ + +#define MATRIX(a,b) (((a) << 3) | (b)) + + +/* + * Open window + */ + +char *buffer; + +int width = 320; +int height = 240; + +bool isGuiAvailable = true; // TODO from main.cpp +bool GUIOpened = false; + +//static SDL_Thread *GUIthread = NULL; +static const int GUI_RETURN_INFO = (SDL_USEREVENT+1); +static bool doUpdate = true; + +void update( int32 x, int32 y, int32 w, int32 h, bool forced ) +{ + if ( !forced && !doUpdate ) // the HW surface is available + return; + + // SDL_UpdateRect(SDL_GetVideoSurface(), 0, 0, width, height); + // SDL_UpdateRect(surf, x, y, w, h); + SDL_UpdateRect(screen, x, y, w, h); +} + +void update( bool forced ) +{ + update( 0, 0, width, height, forced ); +} + +void update() +{ + update( 0, 0, width, height, false ); +} + +void restoreBackground() +{ + if (backgroundSurf != NULL) { + SDL_BlitSurface(backgroundSurf, NULL, screen, NULL); + update(true); + fprintf(stderr, "video surface restored\n"); + } +} + +void allocateBackgroundSurf() +{ + // allocate new background video surface + backgroundSurf = SDL_ConvertSurface(screen, screen->format, screen->flags); + fprintf(stderr, "Allocating background video surface\n"); +} + +void freeBackgroundSurf() +{ + // free background video surface + if (backgroundSurf != NULL) + { + fprintf(stderr, "Freeing background video surface\n"); + SDL_FreeSurface(backgroundSurf); + backgroundSurf = NULL; + } +} + +void openGUI() +{ + fprintf(stderr, "open GUI\n"); + if (GUIOpened) + { + fprintf(stderr, "GUI is already open!\n"); + return; + } + allocateBackgroundSurf(); + surf = backgroundSurf; + GUIOpened = true; +} + +void closeGUI() +{ + fprintf(stderr, "close GUI\n"); + // update the main surface and then redirect VDI to it + restoreBackground(); + surf = screen; // redirect VDI to main surface + fprintf(stderr, "VDI redirected back to main video surface\n"); + freeBackgroundSurf(); + GUIOpened = false; +} + +void saveBackground() +{ + if (backgroundSurf != NULL) { + SDL_BlitSurface(screen, NULL, backgroundSurf, NULL); + surf = backgroundSurf; // redirect VDI to background surface + fprintf(stderr, "video surface saved to background, VDI redirected\n"); + } +} + +void blendBackgrounds() +{ + if (backgroundSurf != NULL) + { + SDL_Rect *Rect; + Rect = SDLGui_GetFirstBackgroundRect(); + while (Rect != NULL) + { + SDL_BlitSurface(backgroundSurf, Rect, screen, Rect); + Rect = SDLGui_GetNextBackgroundRect(); + } + update(true); + } +} + +static Prefs DialogPrefs; + +// running in a different thread +//static int open_gui(void * /*ptr*/) +static void *open_gui (void *arg) +{ + LWP_InitQueue (&ThreadOneQ); + openGUI(); + DialogPrefs = ThePrefs; + // Show main dialog + int status = Dialog_Main(DialogPrefs); + // The status is sent to event checking thread by the USEREVENT+1 message + SDL_Event ev; + ev.type = GUI_RETURN_INFO; + ev.user.code = status; // STATUS_SHUTDOWN or STATUS_REBOOT + ev.user.data1 = NULL; + SDL_PeepEvents(&ev, 1, SDL_ADDEVENT, SDL_EVENTMASK(GUI_RETURN_INFO)); + closeGUI(); + return 0; +} + +bool start_GUI_thread() +{ + if (isGuiAvailable) // TODO && !hostScreen.isGUIopen()) + { + //GUIthread = SDL_CreateThread(open_gui, NULL); + LWP_CreateThread (&GUIthread, open_gui, NULL, threadonestack, THREADSTACK, 80); + } + return (GUIthread != NULL); +} + +void kill_GUI_thread() +{ + if (GUIthread != NULL) { + // SDL_KillThread(GUIthread); + LWP_ThreadBroadcast(GUIthread); + LWP_JoinThread(GUIthread, NULL); + LWP_CloseQueue(GUIthread); + GUIthread = NULL; + } +} + +void screenlock() +{ + //while (SDL_mutexP(screenLock)==-1) + //{ + // SDL_Delay(20); + // fprintf(stderr, "Couldn't lock mutex\n"); + //} + while(LWP_MutexLock(screenLock)); +} + +void screenunlock() +{ + //while (SDL_mutexV(screenLock)==-1) + //{ + // SDL_Delay(20); + // fprintf(stderr, "Couldn't unlock mutex\n"); + //} + LWP_MutexUnlock(screenLock); +} + +int init_graphics(void) +{ + // Init SDL + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO) < 0) { + fprintf(stderr, "Couldn't initialize SDL (%s)\n", SDL_GetError()); + return 0; + } + + LWP_MutexInit (&screenLock, false); + //screenLock = SDL_CreateMutex(); + + buffer = new char[DISPLAY_X*DISPLAY_Y]; + // Open window + //SDL_WM_SetCaption(VERSION_STRING, "Frodo"); + screen = SDL_SetVideoMode(320, 240, 8, SDL_SWSURFACE|SDL_DOUBLEBUF); + surf = screen; + if (screen == NULL) + { + fprintf(stderr, "SDL Couldn't set video mode to %d x %d\n", DISPLAY_X, DISPLAY_Y+17); + } + else + { + fprintf(stderr, "SDL Set video mode to %d x %d\n", DISPLAY_X, DISPLAY_Y+17); + SDLGui_Init(screen); + start_GUI_thread(); + } + return 1; +} + + + +/* + * Display constructor + */ + +C64Display::C64Display(C64 *the_c64) : TheC64(the_c64) +{ + quit_requested = false; + speedometer_string[0] = 0; + + // LEDs off + for (int i=0; i<4; i++) + led_state[i] = old_led_state[i] = LED_OFF; + + // Start timer for LED error blinking + c64_disp = this; + //pulse_sa.sa_handler = (void (*)(int))pulse_handler; + //pulse_sa.sa_flags = SA_RESTART; + //sigemptyset(&pulse_sa.sa_mask); + //sigaction(SIGALRM, &pulse_sa, NULL); + //pulse_tv.it_interval.tv_sec = 0; + //pulse_tv.it_interval.tv_usec = 400000; + //pulse_tv.it_value.tv_sec = 0; + //pulse_tv.it_value.tv_usec = 400000; + //setitimer(ITIMER_REAL, &pulse_tv, NULL); +} + + +/* + * Display destructor + */ + +C64Display::~C64Display() +{ + SDL_Quit(); + delete[] buffer; + DEBUG_Finish(); +} + + +/* + * Prefs may have changed + */ + +void C64Display::NewPrefs(Prefs *prefs) +{ +} + + +/* + * Redraw bitmap + */ + +void C64Display::Update(void) +{ + screenlock(); + if (surf == NULL) + return; + int iOffsetX = (DISPLAY_X - surf->w) / 2; + int iOffsetY = (DISPLAY_Y - surf->h) / 2; + for (int j=0; j < surf->h - 17; j++) + { + memcpy(static_cast(surf->pixels)+surf->w*j, buffer+iOffsetX+DISPLAY_X*(j+iOffsetY), surf->w); + } + // Draw speedometer/LEDs + SDL_Rect r = {0, (surf->h - 17), DISPLAY_X, 15}; + SDL_FillRect(surf, &r, fill_gray); + r.w = DISPLAY_X; r.h = 1; + SDL_FillRect(surf, &r, shine_gray); + r.y = (surf->h - 17) + 14; + SDL_FillRect(surf, &r, shadow_gray); + r.w = 16; + for (int i=2; i<5; i++) + { + r.x = DISPLAY_X * i/5 - 24; r.y = (surf->h - 17) + 4; + SDL_FillRect(surf, &r, shadow_gray); + r.y = (surf->h - 17) + 10; + SDL_FillRect(surf, &r, shine_gray); + } + r.y = (surf->h - 17); r.w = 1; r.h = 15; + for (int i=0; i<4; i++) + { + r.x = DISPLAY_X * i / 5; + SDL_FillRect(surf, &r, shine_gray); + r.x = DISPLAY_X * (i+1) / 5 - 1; + SDL_FillRect(surf, &r, shadow_gray); + } + r.y = (surf->h - 17) + 4; r.h = 7; + for (int i=2; i<5; i++) + { + r.x = DISPLAY_X * i/5 - 24; + SDL_FillRect(surf, &r, shadow_gray); + r.x = DISPLAY_X * i/5 - 9; + SDL_FillRect(surf, &r, shine_gray); + } + r.y = (surf->h - 17) + 5; r.w = 14; r.h = 5; + for (int i=0; i<3; i++) + { + r.x = DISPLAY_X * (i+2) / 5 - 23; + int c; + switch (led_state[i]) + { + case LED_ON: + c = green; + break; + case LED_ERROR_ON: + c = red; + break; + default: + c = black; + break; + } + SDL_FillRect(surf, &r, c); + } + + draw_string(surf, DISPLAY_X * 1/5 + 8, (surf->h - 17) + 4, "D\x12 8", black, fill_gray); + draw_string(surf, DISPLAY_X * 2/5 + 8, (surf->h - 17) + 4, "D\x12 9", black, fill_gray); + draw_string(surf, DISPLAY_X * 3/5 + 8, (surf->h - 17) + 4, "D\x12 10", black, fill_gray); + if (joy_emu == 1) + draw_string(surf, DISPLAY_X * 4/5 + 2, (surf->h - 17) + 4, "1", black, fill_gray); + else if (joy_emu == 2) + draw_string(surf, DISPLAY_X * 4/5 + 2, (surf->h - 17) + 4, "2", black, fill_gray); + draw_string(surf, 24, (surf->h - 17) + 4, speedometer_string, black, fill_gray); + + // Update display + SDL_Flip(surf); + + blendBackgrounds(); + screenunlock(); +} + + +/* + * Draw string into surface using the C64 ROM font + */ + +void C64Display::draw_string(SDL_Surface *s, int x, int y, const char *str, uint8 front_color, uint8 back_color) +{ + uint8 *pb = (uint8 *)s->pixels + s->pitch*y + x; + char c; + while ((c = *str++) != 0) + { + uint8 *q = TheC64->Char + c*8 + 0x800; + uint8 *p = pb; + for (int y=0; y<8; y++) + { + uint8 v = *q++; + p[0] = (v & 0x80) ? front_color : back_color; + p[1] = (v & 0x40) ? front_color : back_color; + p[2] = (v & 0x20) ? front_color : back_color; + p[3] = (v & 0x10) ? front_color : back_color; + p[4] = (v & 0x08) ? front_color : back_color; + p[5] = (v & 0x04) ? front_color : back_color; + p[6] = (v & 0x02) ? front_color : back_color; + p[7] = (v & 0x01) ? front_color : back_color; + p += s->pitch; + } + pb += 8; + } +} + + +/* + * LED error blink + */ + +void C64Display::pulse_handler(...) +{ + for (int i=0; i<4; i++) + switch (c64_disp->led_state[i]) + { + case LED_ERROR_ON: + c64_disp->led_state[i] = LED_ERROR_OFF; + break; + case LED_ERROR_OFF: + c64_disp->led_state[i] = LED_ERROR_ON; + break; + } +} + + +/* + * Draw speedometer + */ + +void C64Display::Speedometer(int speed) +{ + static int delay = 0; + + if (delay >= 20) + { + delay = 0; + sprintf(speedometer_string, "%d%%", speed); + } + else + delay++; +} + + +/* + * Return pointer to bitmap data + */ + +uint8 *C64Display::BitmapBase(void) +{ + //return (uint8 *)screen->pixels; + return (uint8 *)buffer; +} + + +/* + * Return number of bytes per row + */ + +int C64Display::BitmapXMod(void) +{ + //return screen->pitch; + return DISPLAY_X; +} + + + +/* + * Poll the keyboard + */ + +static void translate_key(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) +{ + int c64_key = -1; + if (tab_pressed) + { + // Function and run/stop key emulation on Zaurus keyboard + switch (key) + { + case SDLK_q: c64_key = MATRIX(0,4); break; + case SDLK_w: c64_key = MATRIX(0,4) | 0x80; break; + case SDLK_e: c64_key = MATRIX(0,5); break; + case SDLK_r: c64_key = MATRIX(0,5) | 0x80; break; + case SDLK_t: c64_key = MATRIX(0,6); break; + case SDLK_z: c64_key = MATRIX(0,6) | 0x80; break; + case SDLK_u: c64_key = MATRIX(0,3); break; + case SDLK_i: c64_key = MATRIX(0,3) | 0x80; break; + case SDLK_o: c64_key = MATRIX(7,7); break; + } + } + else + { + switch (key) + { + case SDLK_a: c64_key = MATRIX(1,2); break; + case SDLK_b: c64_key = MATRIX(3,4); break; + case SDLK_c: c64_key = MATRIX(2,4); break; + case SDLK_d: c64_key = MATRIX(2,2); break; + case SDLK_e: c64_key = MATRIX(1,6); break; + case SDLK_f: c64_key = MATRIX(2,5); break; + case SDLK_g: c64_key = MATRIX(3,2); break; + case SDLK_h: c64_key = MATRIX(3,5); break; + case SDLK_i: c64_key = MATRIX(4,1); break; + case SDLK_j: c64_key = MATRIX(4,2); break; + case SDLK_k: c64_key = MATRIX(4,5); break; + case SDLK_l: c64_key = MATRIX(5,2); break; + case SDLK_m: c64_key = MATRIX(4,4); break; + case SDLK_n: c64_key = MATRIX(4,7); break; + case SDLK_o: c64_key = MATRIX(4,6); break; + case SDLK_p: c64_key = MATRIX(5,1); break; + case SDLK_q: c64_key = MATRIX(7,6); break; + case SDLK_r: c64_key = MATRIX(2,1); break; + case SDLK_s: c64_key = MATRIX(1,5); break; + case SDLK_t: c64_key = MATRIX(2,6); break; + case SDLK_u: c64_key = MATRIX(3,6); break; + case SDLK_v: c64_key = MATRIX(3,7); break; + case SDLK_w: c64_key = MATRIX(1,1); break; + case SDLK_x: c64_key = MATRIX(2,7); break; + case SDLK_y: c64_key = MATRIX(3,1); break; + case SDLK_z: c64_key = MATRIX(1,4); break; + + case SDLK_0: c64_key = MATRIX(4,3); break; + case SDLK_1: c64_key = MATRIX(7,0); break; + case SDLK_2: c64_key = MATRIX(7,3); break; + case SDLK_3: c64_key = MATRIX(1,0); break; + case SDLK_4: c64_key = MATRIX(1,3); break; + case SDLK_5: c64_key = MATRIX(2,0); break; + case SDLK_6: c64_key = MATRIX(2,3); break; + case SDLK_7: c64_key = MATRIX(3,0); break; + case SDLK_8: c64_key = MATRIX(3,3); break; + case SDLK_9: c64_key = MATRIX(4,0); break; + + case SDLK_SPACE: c64_key = MATRIX(7,4); break; + case SDLK_BACKQUOTE: c64_key = MATRIX(7,1); break; + case SDLK_BACKSLASH: c64_key = MATRIX(6,6); break; + case SDLK_COMMA: c64_key = MATRIX(5,7); break; + case SDLK_PERIOD: c64_key = MATRIX(5,4); break; + case SDLK_MINUS: c64_key = MATRIX(5,0); break; + case SDLK_EQUALS: c64_key = MATRIX(5,3); break; + case SDLK_LEFTBRACKET: c64_key = MATRIX(5,6); break; + case SDLK_RIGHTBRACKET: c64_key = MATRIX(6,1); break; + case SDLK_SEMICOLON: c64_key = MATRIX(5,5); break; + case SDLK_QUOTE: c64_key = MATRIX(6,2); break; + case SDLK_SLASH: c64_key = MATRIX(6,7); break; + + case SDLK_ESCAPE: c64_key = MATRIX(7,7); break; + case SDLK_RETURN: c64_key = MATRIX(0,1); break; + case SDLK_BACKSPACE: case SDLK_DELETE: c64_key = MATRIX(0,0); break; + case SDLK_INSERT: c64_key = MATRIX(6,3); break; + case SDLK_HOME: c64_key = MATRIX(6,3); break; + case SDLK_END: c64_key = MATRIX(6,0); break; + case SDLK_PAGEUP: c64_key = MATRIX(6,0); break; + case SDLK_PAGEDOWN: c64_key = MATRIX(6,5); break; + + case SDLK_LCTRL: c64_key = MATRIX(7,2); break; + case SDLK_RCTRL: c64_key = MATRIX(7,5); break; + case SDLK_LSHIFT: c64_key = MATRIX(1,7); break; + case SDLK_RSHIFT: c64_key = MATRIX(6,4); break; + case SDLK_LALT: case SDLK_LMETA: c64_key = MATRIX(7,5); break; + case SDLK_RALT: case SDLK_RMETA: c64_key = MATRIX(7,5); break; + + case SDLK_UP: c64_key = MATRIX(0,7)| 0x80; break; + case SDLK_DOWN: c64_key = MATRIX(0,7); break; + case SDLK_LEFT: c64_key = MATRIX(0,2) | 0x80; break; + case SDLK_RIGHT: c64_key = MATRIX(0,2); break; + + case SDLK_F1: c64_key = MATRIX(0,4); break; + case SDLK_F2: c64_key = MATRIX(0,4) | 0x80; break; + case SDLK_F3: c64_key = MATRIX(0,5); break; + case SDLK_F4: c64_key = MATRIX(0,5) | 0x80; break; + case SDLK_F5: c64_key = MATRIX(0,6); break; + case SDLK_F6: c64_key = MATRIX(0,6) | 0x80; break; + case SDLK_F7: c64_key = MATRIX(0,3); break; + case SDLK_F8: c64_key = MATRIX(0,3) | 0x80; break; + + case SDLK_KP0: case SDLK_KP5: c64_key = 0x10 | 0x40; break; + case SDLK_KP1: c64_key = 0x06 | 0x40; break; + case SDLK_KP2: c64_key = 0x02 | 0x40; break; + case SDLK_KP3: c64_key = 0x0a | 0x40; break; + case SDLK_KP4: c64_key = 0x04 | 0x40; break; + case SDLK_KP6: c64_key = 0x08 | 0x40; break; + case SDLK_KP7: c64_key = 0x05 | 0x40; break; + case SDLK_KP8: c64_key = 0x01 | 0x40; break; + case SDLK_KP9: c64_key = 0x09 | 0x40; break; + + case SDLK_KP_DIVIDE: c64_key = MATRIX(6,7); break; + case SDLK_KP_ENTER: c64_key = MATRIX(0,1); break; + + // Support for Zaurus/Qtopia + case SDLK_QUOTEDBL: c64_key = MATRIX(7,3) | 0x80; break; + case SDLK_ASTERISK: c64_key = MATRIX(6,1); break; + case SDLK_DOLLAR: c64_key = MATRIX(1,3) | 0x80; break; + case SDLK_COLON: c64_key = MATRIX(5,5); break; + case SDLK_AT: c64_key = MATRIX(5,6); break; + } + } + if (c64_key < 0) + return; + + // Zaurus/Qtopia joystick emulation + if (joy_emu != 0) + { + switch (key) + { + case SDLK_SPACE: c64_key = 0x10 | 0x40; break; + case SDLK_UP: c64_key = 0x01 | 0x40; break; + case SDLK_DOWN: c64_key = 0x02 | 0x40; break; + case SDLK_LEFT: c64_key = 0x04 | 0x40; break; + case SDLK_RIGHT: c64_key = 0x08 | 0x40; break; + } + } + + // Handle joystick emulation + if (c64_key & 0x40) + { + c64_key &= 0x1f; + if (key_up) + *joystick |= c64_key; + else + *joystick &= ~c64_key; + return; + } + + // Handle other keys + bool shifted = c64_key & 0x80; + int c64_byte = (c64_key >> 3) & 7; + int c64_bit = c64_key & 7; + if (key_up) + { + if (shifted) + { + key_matrix[6] |= 0x10; + rev_matrix[4] |= 0x40; + } + key_matrix[c64_byte] |= (1 << c64_bit); + rev_matrix[c64_bit] |= (1 << c64_byte); + } + else + { + if (shifted) + { + key_matrix[6] &= 0xef; + rev_matrix[4] &= 0xbf; + } + key_matrix[c64_byte] &= ~(1 << c64_bit); + rev_matrix[c64_bit] &= ~(1 << c64_byte); + } +} + +void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) +{ + SDL_Event event; + int eventmask = SDL_EVENTMASK(SDL_KEYDOWN) + | SDL_EVENTMASK(SDL_KEYUP) + | SDL_EVENTMASK(SDL_MOUSEBUTTONDOWN) + | SDL_EVENTMASK(SDL_MOUSEBUTTONUP) + | SDL_EVENTMASK(SDL_MOUSEMOTION) + | SDL_EVENTMASK(SDL_JOYAXISMOTION) + | SDL_EVENTMASK(SDL_JOYHATMOTION) + | SDL_EVENTMASK(SDL_JOYBUTTONDOWN) + | SDL_EVENTMASK(SDL_JOYBUTTONUP) + | SDL_EVENTMASK(SDL_ACTIVEEVENT) + | SDL_EVENTMASK(GUI_RETURN_INFO) + | SDL_EVENTMASK(SDL_QUIT); + + SDL_PumpEvents(); + while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, eventmask)) + { + if (GUIOpened) + { + if (event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_MOUSEBUTTONUP) + { + if (event.type == SDL_MOUSEBUTTONDOWN) + fprintf(stderr, "Mouse down\n"); + if (event.type == SDL_MOUSEBUTTONUP) + fprintf(stderr, "Mouse up\n"); + SDL_Event ev; + ev.type = SDL_USEREVENT; // map button down/up to user event + ev.user.code = event.type; + ev.user.data1 = (void *)(int)event.button.x; + ev.user.data2 = (void *)(int)event.button.y; + SDL_PeepEvents(&ev, 1, SDL_ADDEVENT, SDL_EVENTMASK(SDL_USEREVENT)); + } + else if (event.type == SDL_KEYDOWN || event.type == SDL_KEYUP) + { + if (event.type == SDL_KEYDOWN) + fprintf(stderr, "Key down\n"); + if (event.type == SDL_KEYUP) + fprintf(stderr, "Key up\n"); + SDLKey sym = event.key.keysym.sym; + int state = SDL_GetModState(); // keysym.mod does not deliver single mod key presses for + SDL_Event ev; + ev.type = SDL_USEREVENT; // map key down/up event to user event + ev.user.code = event.type; + ev.user.data1 = (void *)(int)sym; + ev.user.data2 = (void *)(int)state; + SDL_PeepEvents(&ev, 1, SDL_ADDEVENT, SDL_EVENTMASK(SDL_USEREVENT)); + } + } + else + { + switch (event.type) + { + case GUI_RETURN_INFO: + { + fprintf(stderr, "Return code from gui: %d\n", event.user.code); + switch (event.user.code) + { + case DO_RESET: + TheC64->Reset(); + break; + case DO_QUIT: + quit_requested = true; + break; + case DO_USEPREFS: + TheC64->NewPrefs(&DialogPrefs); + ThePrefs = DialogPrefs; + break; + case DO_SAVEPREFS: + TheC64->NewPrefs(&DialogPrefs); + ThePrefs = DialogPrefs; + ThePrefs.Save(Frodo::get_prefs_path()); + break; + } + break; + } + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + start_GUI_thread(); + break; + // Key pressed + case SDL_KEYDOWN: +// fprintf(stderr, "SDL-Key: %d\n", event.key.keysym.sym); + if (tab_pressed && event.key.keysym.sym == SDLK_j) + { + if (joy_emu < 2) + joy_emu++; + else + joy_emu = 0; + } + if (tab_pressed && event.key.keysym.sym == SDLK_p) + { + // NMI (Restore) + TheC64->NMI(); + } + else + { + switch (event.key.keysym.sym) + { + case SDLK_TAB: + tab_pressed = true; + break; + + case SDLK_F9: // F9: Invoke SAM + SAM(TheC64); + break; + + case SDLK_F11: // F10: Quit + // Iconify not implemented in Qtopia SDL yet. Quit instead show gui. + //SDL_WM_IconifyWindow(); + quit_requested = true; + break; + + case SDLK_F12: // F12: Reset + TheC64->Reset(); + break; + + case SDLK_KP_PLUS: // '+' on keypad: Increase SkipFrames + ThePrefs.SkipFrames++; + break; + + case SDLK_KP_MINUS: // '-' on keypad: Decrease SkipFrames + if (ThePrefs.SkipFrames > 1) + ThePrefs.SkipFrames--; + break; + + case SDLK_KP_MULTIPLY: // '*' on keypad: Toggle speed limiter + ThePrefs.LimitSpeed = !ThePrefs.LimitSpeed; + break; + + default: + translate_key(event.key.keysym.sym, false, key_matrix, rev_matrix, joystick); + break; + } + } + break; + + // Key released + case SDL_KEYUP: + if (event.key.keysym.sym == SDLK_TAB) + tab_pressed = false; + else +{ + translate_key(event.key.keysym.sym, true, key_matrix, rev_matrix, joystick); +} + break; + + // Quit Frodo + case SDL_QUIT: + quit_requested = true; + break; + } + } + } +} + + +/* + * Check if NumLock is down (for switching the joystick keyboard emulation) + */ + +bool C64Display::NumLock(void) +{ + if (joy_emu == 2) + return true; + return false; +} + + +/* + * Open/close joystick drivers given old and new state of + * joystick preferences + */ + +void C64::open_close_joystick(int port, int oldjoy, int newjoy) +{ + if (oldjoy != newjoy) { + joy_minx[port] = joy_miny[port] = 32767; // Reset calibration + joy_maxx[port] = joy_maxy[port] = -32768; + if (newjoy) { + joy[port] = SDL_JoystickOpen(newjoy - 1); + if (joy[port] == NULL) + fprintf(stderr, "Couldn't open joystick %d\n", port + 1); + } else { + if (joy[port]) { + SDL_JoystickClose(joy[port]); + joy[port] = NULL; + } + } + } +} + +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) +{ + open_close_joystick(0, oldjoy1, newjoy1); + open_close_joystick(1, oldjoy2, newjoy2); +} +//#include "BRUCELEE.h" +bool sevenpressed=false; +bool fivepressed=false; +extern void kbd_buf_feed(char *s); +extern void load_prg(C64 *TheC64, uint8 *prg, int prg_size); +/* + * Poll joystick port, return CIA mask + */ + + +uint8 C64::poll_joystick(int port) +{ + if(sevenpressed) + { + SDL_KeyboardEvent* myevent = new SDL_KeyboardEvent; + myevent->type = SDL_KEYUP; + myevent->which = 0; + myevent->state = SDL_RELEASED; + myevent->keysym.sym = SDLK_F7; + SDL_PushEvent((SDL_Event*)myevent); + delete myevent; + sevenpressed=false; + } + if (fivepressed) + { + SDL_KeyboardEvent* myevent = new SDL_KeyboardEvent; + myevent->type = SDL_KEYUP; + myevent->which = 0; + myevent->state = SDL_RELEASED; + myevent->keysym.sym = SDLK_F5; + SDL_PushEvent((SDL_Event*)myevent); + delete myevent; + fivepressed=false; + } + uint8 j = 0xff; + + if (port == 0 && (joy[0] || joy[1])) + SDL_JoystickUpdate(); + + if (joy[port]) { + int x = SDL_JoystickGetAxis(joy[port], 0), y = SDL_JoystickGetAxis(joy[port], 1); + + if (x > joy_maxx[port]) + joy_maxx[port] = x; + if (x < joy_minx[port]) + joy_minx[port] = x; + if (y > joy_maxy[port]) + joy_maxy[port] = y; + if (y < joy_miny[port]) + joy_miny[port] = y; + + if (joy_maxx[port] - joy_minx[port] < 100 || joy_maxy[port] - joy_miny[port] < 100) + return 0xff; + + if (x < (joy_minx[port] + (joy_maxx[port]-joy_minx[port])/3)) + j &= 0xfb; // Left + else if (x > (joy_minx[port] + 2*(joy_maxx[port]-joy_minx[port])/3)) + j &= 0xf7; // Right + + if (y < (joy_miny[port] + (joy_maxy[port]-joy_miny[port])/3)) + j &= 0xfd; // Up + else if (y > (joy_miny[port] + 2*(joy_maxy[port]-joy_miny[port])/3)) + j &= 0xfe; // Down + + if (SDL_JoystickGetButton(joy[port], 0)) // A button + { + j &= 0xef; // Button + + } + if (SDL_JoystickGetButton(joy[port], 6)) //Left Trigger + { + kbd_buf_feed("\rLOAD\"*\",8,1\rRUN\r"); + } + + if (SDL_JoystickGetButton(joy[port], 5)) //right trigger + { + SDL_KeyboardEvent* myevent = new SDL_KeyboardEvent; + myevent->type = SDL_KEYDOWN; + myevent->which = 0; + myevent->state = SDL_PRESSED; + myevent->keysym.sym = SDLK_F5; + SDL_PushEvent((SDL_Event*)myevent); + delete myevent; + fivepressed=true; + } + if (SDL_JoystickGetButton(joy[port], 7)) //start button + { + //load_prg(this, (uint8*)brucelee_bin,size_brucelee_bin); + //kbd_buf_feed("\rRUN\r"); + SDL_KeyboardEvent* myevent = new SDL_KeyboardEvent; + myevent->type = SDL_KEYDOWN; + myevent->which = 0; + myevent->state = SDL_PRESSED; + myevent->keysym.sym = SDLK_F7; + SDL_PushEvent((SDL_Event*)myevent); + delete myevent; + sevenpressed=true; + } + } + + return j; +} + +/* + * Allocate C64 colors + */ + +void C64Display::InitColors(uint8 *colors) +{ + SDL_Color palette[PALETTE_SIZE]; + for (int i=0; i<16; i++) + { + palette[i].r = palette_red[i]; + palette[i].g = palette_green[i]; + palette[i].b = palette_blue[i]; + } + palette[fill_gray].r = palette[fill_gray].g = palette[fill_gray].b = 0xd0; + palette[shine_gray].r = palette[shine_gray].g = palette[shine_gray].b = 0xf0; + palette[shadow_gray].r = palette[shadow_gray].g = palette[shadow_gray].b = 0x80; + palette[red].r = 0xf0; + palette[red].g = palette[red].b = 0; + palette[green].g = 0xf0; + palette[green].r = palette[green].b = 0; + SDL_SetColors(screen, palette, 0, PALETTE_SIZE); + + for (int i=0; i<256; i++) + colors[i] = i & 0x0f; +} + + +/* + * Show a requester (error message) + */ + +long int ShowRequester(char *a,char *b,char *) +{ + printf("%s: %s\n", a, b); + return 1; +} diff --git a/Src/Display_SDL.i b/Src/Display_SDL.h similarity index 65% rename from Src/Display_SDL.i rename to Src/Display_SDL.h index 852fe64..76c0077 100644 --- a/Src/Display_SDL.i +++ b/Src/Display_SDL.h @@ -1,8 +1,22 @@ /* - * Display_SDL.i - C64 graphics display, emulator window handling, + * Display_SDL.h - C64 graphics display, emulator window handling, * SDL specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "C64.h" @@ -13,18 +27,18 @@ // Display surface -SDL_Surface *screen = NULL; -SDL_Surface *real_screen = NULL; +static SDL_Surface *screen = NULL; // Keyboard static bool num_locked = false; -#if defined(DO_ERROR_BLINK) // For LED error blinking static C64Display *c64_disp; -static struct sigaction pulse_sa; -static itimerval pulse_tv; -#endif +//static struct sigaction pulse_sa; +//static itimerval pulse_tv; + +// SDL joysticks +static SDL_Joystick *joy[2] = {NULL, NULL}; // Colors for speedometer/drive LEDs enum { @@ -61,40 +75,10 @@ enum { int init_graphics(void) { - Uint32 rmask, gmask, bmask, amask; - - /* SDL interprets each pixel as a 32-bit number, so our masks must depend - on the endianness (byte order) of the machine */ -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - rmask = 0xff000000; - gmask = 0x00ff0000; - bmask = 0x0000ff00; - amask = 0x000000ff; -#else - rmask = 0x000000ff; - gmask = 0x0000ff00; - bmask = 0x00ff0000; - amask = 0xff000000; -#endif - - // Open window - SDL_WM_SetCaption(VERSION_STRING, "Frodo"); - SDL_ShowCursor(SDL_DISABLE); - - screen = SDL_CreateRGBSurface(SDL_SWSURFACE, DISPLAY_X, DISPLAY_Y + 17, 8, - rmask, gmask, bmask, amask); - if (!screen) - { - fprintf(stderr, "Cannot allocate surface to draw on: %s\n", - SDL_GetError); - exit(1); - } - real_screen = SDL_SetVideoMode(FULL_DISPLAY_X, FULL_DISPLAY_Y, 8, - SDL_DOUBLEBUF); - if (!real_screen) - { - fprintf(stderr, "\n\nCannot initialize video: %s\n", SDL_GetError()); - exit(1); + // Init SDL + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { + fprintf(stderr, "Couldn't initialize SDL (%s)\n", SDL_GetError()); + return 0; } return 1; @@ -110,15 +94,19 @@ C64Display::C64Display(C64 *the_c64) : TheC64(the_c64) quit_requested = false; speedometer_string[0] = 0; + // Open window + SDL_WM_SetCaption(VERSION_STRING, "Frodo"); + screen = SDL_SetVideoMode(DISPLAY_X, DISPLAY_Y + 17, 16, SDL_SWSURFACE |SDL_DOUBLEBUF | (ThePrefs.DisplayType == DISPTYPE_SCREEN ? SDL_FULLSCREEN : 0)); + // LEDs off for (int i=0; i<4; i++) led_state[i] = old_led_state[i] = LED_OFF; -#if defined(DO_ERROR_BLINK) // Start timer for LED error blinking c64_disp = this; + /* pulse_sa.sa_handler = (void (*)(int))pulse_handler; - pulse_sa.sa_flags = 0; + pulse_sa.sa_flags = SA_RESTART; sigemptyset(&pulse_sa.sa_mask); sigaction(SIGALRM, &pulse_sa, NULL); pulse_tv.it_interval.tv_sec = 0; @@ -126,7 +114,7 @@ C64Display::C64Display(C64 *the_c64) : TheC64(the_c64) pulse_tv.it_value.tv_sec = 0; pulse_tv.it_value.tv_usec = 400000; setitimer(ITIMER_REAL, &pulse_tv, NULL); -#endif + */ } @@ -155,38 +143,60 @@ void C64Display::NewPrefs(Prefs *prefs) void C64Display::Update(void) { - if (ThePrefs.DisplayOption == 0) { - const int x_border = (DISPLAY_X - FULL_DISPLAY_X / 2) / 2; - const int y_border = (DISPLAY_Y - FULL_DISPLAY_Y / 2) / 2; - Uint8 *src_pixels = (Uint8*)screen->pixels; - Uint8 *dst_pixels = (Uint8*)real_screen->pixels; - const Uint16 src_pitch = screen->pitch; - const Uint16 dst_pitch = real_screen->pitch; - - /* Center, double size */ - for (int y = y_border; y < (FULL_DISPLAY_Y/2) + y_border; y++) - { - for (int x = x_border; x < (FULL_DISPLAY_X / 2 + x_border); x++) - { - int src_off = y * src_pitch + x; - int dst_off = (y * 2 - y_border * 2) * dst_pitch + (x * 2 - x_border * 2); - Uint8 v = src_pixels[src_off]; - - dst_pixels[ dst_off ] = v; - dst_pixels[ dst_off + 1 ] = v; - dst_pixels[ dst_off + dst_pitch ] = v; - dst_pixels[ dst_off + dst_pitch + 1] = v; - } + // Draw speedometer/LEDs + SDL_Rect r = {0, DISPLAY_Y, DISPLAY_X, 15}; + SDL_FillRect(screen, &r, fill_gray); + r.w = DISPLAY_X; r.h = 1; + SDL_FillRect(screen, &r, shine_gray); + r.y = DISPLAY_Y + 14; + SDL_FillRect(screen, &r, shadow_gray); + r.w = 16; + for (int i=2; i<6; i++) { + r.x = DISPLAY_X * i/5 - 24; r.y = DISPLAY_Y + 4; + SDL_FillRect(screen, &r, shadow_gray); + r.y = DISPLAY_Y + 10; + SDL_FillRect(screen, &r, shine_gray); + } + r.y = DISPLAY_Y; r.w = 1; r.h = 15; + for (int i=0; i<5; i++) { + r.x = DISPLAY_X * i / 5; + SDL_FillRect(screen, &r, shine_gray); + r.x = DISPLAY_X * (i+1) / 5 - 1; + SDL_FillRect(screen, &r, shadow_gray); + } + r.y = DISPLAY_Y + 4; r.h = 7; + for (int i=2; i<6; i++) { + r.x = DISPLAY_X * i/5 - 24; + SDL_FillRect(screen, &r, shadow_gray); + r.x = DISPLAY_X * i/5 - 9; + SDL_FillRect(screen, &r, shine_gray); + } + r.y = DISPLAY_Y + 5; r.w = 14; r.h = 5; + for (int i=0; i<4; i++) { + r.x = DISPLAY_X * (i+2) / 5 - 23; + int c; + switch (led_state[i]) { + case LED_ON: + c = green; + break; + case LED_ERROR_ON: + c = red; + break; + default: + c = black; + break; } + SDL_FillRect(screen, &r, c); } - else { - SDL_Rect srcrect = {0, 0, DISPLAY_X, DISPLAY_Y}; - SDL_Rect dstrect = {0, 0, FULL_DISPLAY_X, FULL_DISPLAY_Y}; - /* Stretch */ - SDL_SoftStretch(screen, &srcrect, real_screen, &dstrect); - } - SDL_Flip(real_screen); + draw_string(screen, DISPLAY_X * 1/5 + 8, DISPLAY_Y + 4, "D\x12 8", black, fill_gray); + draw_string(screen, DISPLAY_X * 2/5 + 8, DISPLAY_Y + 4, "D\x12 9", black, fill_gray); + draw_string(screen, DISPLAY_X * 3/5 + 8, DISPLAY_Y + 4, "D\x12 10", black, fill_gray); + draw_string(screen, DISPLAY_X * 4/5 + 8, DISPLAY_Y + 4, "D\x12 11", black, fill_gray); + draw_string(screen, 24, DISPLAY_Y + 4, speedometer_string, black, fill_gray); + + // Update display + SDL_Flip(screen); } @@ -222,7 +232,6 @@ void C64Display::draw_string(SDL_Surface *s, int x, int y, const char *str, uint * LED error blink */ -#if defined(DO_ERROR_BLINK) void C64Display::pulse_handler(...) { for (int i=0; i<4; i++) @@ -235,7 +244,6 @@ void C64Display::pulse_handler(...) break; } } -#endif /* @@ -273,67 +281,12 @@ int C64Display::BitmapXMod(void) return screen->pitch; } -void C64Display::FakeKeyPress(int kc, bool shift, uint8 *CIA_key_matrix, - uint8 *CIA_rev_matrix) -{ - // Clear matrices - for (int i = 0; i < 8; i ++) - { - CIA_key_matrix[i] = 0xFF; - CIA_rev_matrix[i] = 0xFF; - } - - if (shift) - { - CIA_key_matrix[6] &= 0xef; - CIA_rev_matrix[4] &= 0xbf; - } - - if (kc != -1) - { - int c64_byte, c64_bit, shifted; - c64_byte = kc >> 3; - c64_bit = kc & 7; - shifted = kc & 128; - c64_byte &= 7; - if (shifted) - { - CIA_key_matrix[6] &= 0xef; - CIA_rev_matrix[4] &= 0xbf; - } - CIA_key_matrix[c64_byte] &= ~(1 << c64_bit); - CIA_rev_matrix[c64_bit] &= ~(1 << c64_byte); - } -} - -void C64Display::UpdateKeyMatrix(int c64_key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix) -{ - bool shifted = c64_key & 0x80; - int c64_byte = (c64_key >> 3) & 7; - int c64_bit = c64_key & 7; - - if (key_up) { - if (shifted) { - key_matrix[6] |= 0x10; - rev_matrix[4] |= 0x40; - } - key_matrix[c64_byte] |= (1 << c64_bit); - rev_matrix[c64_bit] |= (1 << c64_byte); - } else { - if (shifted) { - key_matrix[6] &= 0xef; - rev_matrix[4] &= 0xbf; - } - key_matrix[c64_byte] &= ~(1 << c64_bit); - rev_matrix[c64_bit] &= ~(1 << c64_byte); - } -} /* * Poll the keyboard */ -void C64Display::TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) +static void translate_key(SDLKey key, bool key_up, uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) { int c64_key = -1; switch (key) { @@ -397,18 +350,17 @@ void C64Display::TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 case SDLK_PAGEUP: c64_key = MATRIX(6,0); break; case SDLK_PAGEDOWN: c64_key = MATRIX(6,5); break; - case SDLK_LCTRL: c64_key = 0x10 | 0x40; break; - case SDLK_TAB: c64_key = MATRIX(7,2); break; + case SDLK_LCTRL: case SDLK_TAB: c64_key = MATRIX(7,2); break; case SDLK_RCTRL: c64_key = MATRIX(7,5); break; case SDLK_LSHIFT: c64_key = MATRIX(1,7); break; case SDLK_RSHIFT: c64_key = MATRIX(6,4); break; case SDLK_LALT: case SDLK_LMETA: c64_key = MATRIX(7,5); break; case SDLK_RALT: case SDLK_RMETA: c64_key = MATRIX(7,5); break; - case SDLK_UP: c64_key = 0x01 | 0x40; break; - case SDLK_DOWN: c64_key = 0x02 | 0x40; break; - case SDLK_LEFT: c64_key = 0x04 | 0x40; break; - case SDLK_RIGHT: c64_key = 0x08 | 0x40; break; + case SDLK_UP: c64_key = MATRIX(0,7)| 0x80; break; + case SDLK_DOWN: c64_key = MATRIX(0,7); break; + case SDLK_LEFT: c64_key = MATRIX(0,2) | 0x80; break; + case SDLK_RIGHT: c64_key = MATRIX(0,2); break; case SDLK_F1: c64_key = MATRIX(0,4); break; case SDLK_F2: c64_key = MATRIX(0,4) | 0x80; break; @@ -431,7 +383,6 @@ void C64Display::TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 case SDLK_KP_DIVIDE: c64_key = MATRIX(6,7); break; case SDLK_KP_ENTER: c64_key = MATRIX(0,1); break; - default: break; } @@ -448,7 +399,25 @@ void C64Display::TranslateKey(SDLKey key, bool key_up, uint8 *key_matrix, uint8 return; } - this->UpdateKeyMatrix(c64_key, key_up, key_matrix, rev_matrix); + // Handle other keys + bool shifted = c64_key & 0x80; + int c64_byte = (c64_key >> 3) & 7; + int c64_bit = c64_key & 7; + if (key_up) { + if (shifted) { + key_matrix[6] |= 0x10; + rev_matrix[4] |= 0x40; + } + key_matrix[c64_byte] |= (1 << c64_bit); + rev_matrix[c64_bit] |= (1 << c64_byte); + } else { + if (shifted) { + key_matrix[6] &= 0xef; + rev_matrix[4] &= 0xbf; + } + key_matrix[c64_byte] &= ~(1 << c64_bit); + rev_matrix[c64_bit] &= ~(1 << c64_byte); + } } void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joystick) @@ -477,11 +446,7 @@ void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joyst TheC64->Reset(); break; - case SDLK_HOME: // Home: Pause and enter menu - TheC64->enter_menu(); - break; - - case SDLK_SCROLLOCK: + case SDLK_NUMLOCK: num_locked = true; break; @@ -499,17 +464,17 @@ void C64Display::PollKeyboard(uint8 *key_matrix, uint8 *rev_matrix, uint8 *joyst break; default: - TranslateKey(event.key.keysym.sym, false, key_matrix, rev_matrix, joystick); + translate_key(event.key.keysym.sym, false, key_matrix, rev_matrix, joystick); break; } break; // Key released case SDL_KEYUP: - if (event.key.keysym.sym == SDLK_SCROLLOCK) + if (event.key.keysym.sym == SDLK_NUMLOCK) num_locked = false; else - TranslateKey(event.key.keysym.sym, true, key_matrix, rev_matrix, joystick); + translate_key(event.key.keysym.sym, true, key_matrix, rev_matrix, joystick); break; // Quit Frodo @@ -531,6 +496,80 @@ bool C64Display::NumLock(void) } +/* + * Open/close joystick drivers given old and new state of + * joystick preferences + */ + +void C64::open_close_joystick(int port, int oldjoy, int newjoy) +{ + if (oldjoy != newjoy) { + joy_minx[port] = joy_miny[port] = 32767; // Reset calibration + joy_maxx[port] = joy_maxy[port] = -32768; + if (newjoy) { + joy[port] = SDL_JoystickOpen(newjoy - 1); + if (joy[port] == NULL) + fprintf(stderr, "Couldn't open joystick %d\n", port + 1); + } else { + if (joy[port]) { + SDL_JoystickClose(joy[port]); + joy[port] = NULL; + } + } + } +} + +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) +{ + open_close_joystick(0, oldjoy1, newjoy1); + open_close_joystick(1, oldjoy2, newjoy2); +} + + +/* + * Poll joystick port, return CIA mask + */ + +uint8 C64::poll_joystick(int port) +{ + uint8 j = 0xff; + + if (port == 0 && (joy[0] || joy[1])) + SDL_JoystickUpdate(); + + if (joy[port]) { + int x = SDL_JoystickGetAxis(joy[port], 0), y = SDL_JoystickGetAxis(joy[port], 1); + + if (x > joy_maxx[port]) + joy_maxx[port] = x; + if (x < joy_minx[port]) + joy_minx[port] = x; + if (y > joy_maxy[port]) + joy_maxy[port] = y; + if (y < joy_miny[port]) + joy_miny[port] = y; + + if (joy_maxx[port] - joy_minx[port] < 100 || joy_maxy[port] - joy_miny[port] < 100) + return 0xff; + + if (x < (joy_minx[port] + (joy_maxx[port]-joy_minx[port])/3)) + j &= 0xfb; // Left + else if (x > (joy_minx[port] + 2*(joy_maxx[port]-joy_minx[port])/3)) + j &= 0xf7; // Right + + if (y < (joy_miny[port] + (joy_maxy[port]-joy_miny[port])/3)) + j &= 0xfe; // Up + else if (y > (joy_miny[port] + 2*(joy_maxy[port]-joy_miny[port])/3)) + j &= 0xfd; // Down + + if (SDL_JoystickGetButton(joy[port], 0)) + j &= 0xef; // Button + } + + return j; +} + + /* * Allocate C64 colors */ @@ -551,8 +590,6 @@ void C64Display::InitColors(uint8 *colors) palette[green].g = 0xf0; palette[green].r = palette[green].b = 0; SDL_SetColors(screen, palette, 0, PALETTE_SIZE); - SDL_SetColors(real_screen, palette, 0, PALETTE_SIZE); - for (int i=0; i<256; i++) colors[i] = i & 0x0f; diff --git a/Src/Display_WIN32.i b/Src/Display_WIN32.h similarity index 98% rename from Src/Display_WIN32.i rename to Src/Display_WIN32.h index c6cccf4..4489c41 100644 --- a/Src/Display_WIN32.i +++ b/Src/Display_WIN32.h @@ -1,9 +1,22 @@ /* - * Display_WIN32.i - C64 graphics display, emulator window handling, + * Display_WIN32.h - C64 graphics display, emulator window handling, * WIN32 specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * WIN32 code by J. Richard Sladkey + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include diff --git a/Src/Display_svga.i b/Src/Display_svga.h similarity index 91% rename from Src/Display_svga.i rename to Src/Display_svga.h index 29f0874..3463b8c 100644 --- a/Src/Display_svga.i +++ b/Src/Display_svga.h @@ -1,9 +1,22 @@ /* - * Display_svga.i - C64 graphics display, emulator window handling, + * Display_svga.h - C64 graphics display, emulator window handling, * SVGAlib specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * SVGAlib stuff by Bernd Schmidt + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -137,7 +150,7 @@ static int keystate[256]; static int f11pressed = 0, f12pressed = 0, quit = 0; static int joystate = 0xFF; static int numlock = 0; -static UBYTE rev_matrix[8], key_matrix[8]; +static uint8 rev_matrix[8], key_matrix[8]; /* C64 keyboard matrix: @@ -482,14 +495,14 @@ void C64Display::Update(void) return; for (y = 0; y < DISPLAY_Y; y++) { - vga_drawscanline(y, bufmem + hsize * y); + vga_drawscanline(y, (uint8 *)bufmem + hsize * y); } } -UBYTE *C64Display::BitmapBase(void) +uint8 *C64Display::BitmapBase(void) { - return (UBYTE *)bufmem; + return (uint8 *)bufmem; } @@ -499,7 +512,7 @@ int C64Display::BitmapXMod(void) } -void C64Display::PollKeyboard(UBYTE *CIA_key_matrix, UBYTE *CIA_rev_matrix, UBYTE *joystick) +void C64Display::PollKeyboard(uint8 *CIA_key_matrix, uint8 *CIA_rev_matrix, uint8 *joystick) { keyboard_update(); *joystick = joystate; @@ -534,7 +547,7 @@ static int colorval(int v) return ((v & 255)*0x01010101) >> 26; } -void C64Display::InitColors(UBYTE *colors) +void C64Display::InitColors(uint8 *colors) { int i; diff --git a/Src/Display_x.i b/Src/Display_x.h similarity index 94% rename from Src/Display_x.i rename to Src/Display_x.h index 0c30afe..503086e 100644 --- a/Src/Display_x.i +++ b/Src/Display_x.h @@ -1,9 +1,22 @@ /* - * Display_x.i - C64 graphics display, emulator window handling, + * Display_x.h - C64 graphics display, emulator window handling, * X specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * X11 stuff by Bernd Schmidt/Lutz Vieweg + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "SAM.h" @@ -329,7 +342,7 @@ C64Display::C64Display(C64 *the_c64) : TheC64(the_c64) // Start timer for LED error blinking c64_disp = this; pulse_sa.sa_handler = (void (*)(int))pulse_handler; - pulse_sa.sa_flags = 0; + pulse_sa.sa_flags = SA_RESTART; sigemptyset(&pulse_sa.sa_mask); sigaction(SIGALRM, &pulse_sa, NULL); pulse_tv.it_interval.tv_sec = 0; @@ -761,6 +774,26 @@ bool C64Display::NumLock(void) } +/* + * Open/close joystick drivers given old and new state of + * joystick preferences + */ + +void C64::open_close_joysticks(int oldjoy1, int oldjoy2, int newjoy1, int newjoy2) +{ +} + + +/* + * Poll joystick port, return CIA mask + */ + +uint8 C64::poll_joystick(int port) +{ + return 0xff; +} + + /* * Allocate C64 colors */ diff --git a/Src/FixPoint.i b/Src/FixPoint.h similarity index 92% rename from Src/FixPoint.i rename to Src/FixPoint.h index 4b04290..1a46f6e 100644 --- a/Src/FixPoint.i +++ b/Src/FixPoint.h @@ -1,12 +1,30 @@ /* - * FixPoint.i + * FixPoint.h - Provides fixed point arithmetic (for use in SID.cpp) * - * Provides fixpoint arithmetic (for use in SID.cpp) + * (C) 1997 Andreas Dehmel + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +/* * You need to define FIXPOINT_PREC (number of fractional bits) and * ldSINTAB (ld of the size of the sinus table) as well M_PI * _before_ including this file. * Requires at least 32bit ints! - * (C) 1997 Andreas Dehmel */ diff --git a/Src/Frodo.RES b/Src/Frodo.RES new file mode 100644 index 0000000..328953e Binary files /dev/null and b/Src/Frodo.RES differ diff --git a/Src/FrodoHeaders.pch++ b/Src/FrodoHeaders.pch++ deleted file mode 100644 index 5c0e65b..0000000 --- a/Src/FrodoHeaders.pch++ +++ /dev/null @@ -1,12 +0,0 @@ -/* - * FrodoHeaders.pch++ (for Metrowerks BeIDE) - */ - -#define PC_IS_POINTER 1 -#define PRECISE_CPU_CYCLES 0 -#define PRECISE_CIA_CYCLES 0 - -#include -#include -#include -#include diff --git a/Src/FrodoPCHeaders.pch++ b/Src/FrodoPCHeaders.pch++ deleted file mode 100644 index 82aeb70..0000000 --- a/Src/FrodoPCHeaders.pch++ +++ /dev/null @@ -1,12 +0,0 @@ -/* - * FrodoPCHeaders.pch++ (for Metrowerks BeIDE) - */ - -#define PC_IS_POINTER 0 -#define PRECISE_CPU_CYCLES 1 -#define PRECISE_CIA_CYCLES 1 - -#include -#include -#include -#include diff --git a/Src/FrodoSCHeaders.pch++ b/Src/FrodoSCHeaders.pch++ deleted file mode 100644 index b076ed8..0000000 --- a/Src/FrodoSCHeaders.pch++ +++ /dev/null @@ -1,10 +0,0 @@ -/* - * FrodoSCHeaders.pch++ (for Metrowerks BeIDE) - */ - -#define FRODO_SC - -#include -#include -#include -#include diff --git a/Src/FrodoWii.rar b/Src/FrodoWii.rar new file mode 100644 index 0000000..1b83dd5 Binary files /dev/null and b/Src/FrodoWii.rar differ diff --git a/TkGui.tcl b/Src/Frodo_GUI.tcl old mode 100755 new mode 100644 similarity index 97% rename from TkGui.tcl rename to Src/Frodo_GUI.tcl index 2ebed21..4d76c0b --- a/TkGui.tcl +++ b/Src/Frodo_GUI.tcl @@ -2,6 +2,22 @@ # Frodo Tk GUI by Lutz Vieweg # requires Tk >= 4.1 +# +# Frodo (C) 1994-1997,2002-2005 Christian Bauer +# +# 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 #package require Tk 4.1 @@ -1013,6 +1029,3 @@ trace variable pref(ShowOptions) w set_ShowOptions set pref(ShowOptions) $pref(ShowOptions) tkwait window . - - - diff --git a/Src/IEC.cpp b/Src/IEC.cpp index 607c5bb..733a23f 100644 --- a/Src/IEC.cpp +++ b/Src/IEC.cpp @@ -1,10 +1,24 @@ /* * IEC.cpp - IEC bus routines, 1541 emulation (DOS level) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -35,12 +49,52 @@ #include "1541t64.h" #include "Prefs.h" #include "Display.h" +#include "main.h" + + +// IEC command codes +enum { + CMD_DATA = 0x60, // Data transfer + CMD_CLOSE = 0xe0, // Close channel + CMD_OPEN = 0xf0 // Open channel +}; + +// IEC ATN codes +enum { + ATN_LISTEN = 0x20, + ATN_UNLISTEN = 0x30, + ATN_TALK = 0x40, + ATN_UNTALK = 0x50 +}; /* * Constructor: Initialize variables */ +Drive *IEC::create_drive(const char *path) +{ + if (IsDirectory(path)) { + // Mount host directory + return new FSDrive(this, path); + } else { + // Not a directory, check for mountable file type + int type; + if (IsMountableFile(path, type)) { + if (type == FILE_IMAGE) { + // Mount disk image + return new ImageDrive(this, path); + } else { + // Mount archive type file + return new ArchDrive(this, path); + } + } else { + // Unknown file type + // print error? + } + } +} + IEC::IEC(C64Display *display) : the_display(display) { int i; @@ -49,15 +103,10 @@ IEC::IEC(C64Display *display) : the_display(display) for (i=0; i<4; i++) drive[i] = NULL; // Important because UpdateLEDs is called from the drive constructors (via set_error) - if (!ThePrefs.Emul1541Proc) - for (i=0; i<4; i++) { - if (ThePrefs.DriveType[i] == DRVTYPE_DIR) - drive[i] = new FSDrive(this, ThePrefs.DrivePath[i]); - else if (ThePrefs.DriveType[i] == DRVTYPE_D64) - drive[i] = new D64Drive(this, ThePrefs.DrivePath[i]); - else - drive[i] = new T64Drive(this, ThePrefs.DrivePath[i]); - } + if (!ThePrefs.Emul1541Proc) { + for (i=0; i<4; i++) + drive[i] = create_drive(ThePrefs.DrivePath[i]); + } listener_active = talker_active = false; listening = false; @@ -98,19 +147,14 @@ void IEC::Reset(void) void IEC::NewPrefs(Prefs *prefs) { // Delete and recreate all changed drives - for (int i=0; i<4; i++) - if ((ThePrefs.DriveType[i] != prefs->DriveType[i]) || strcmp(ThePrefs.DrivePath[i], prefs->DrivePath[i]) || ThePrefs.Emul1541Proc != prefs->Emul1541Proc) { + for (int i=0; i<4; i++) { + if (strcmp(ThePrefs.DrivePath[i], prefs->DrivePath[i]) || ThePrefs.Emul1541Proc != prefs->Emul1541Proc) { delete drive[i]; drive[i] = NULL; // Important because UpdateLEDs is called from drive constructors (via set_error()) - if (!prefs->Emul1541Proc) { - if (prefs->DriveType[i] == DRVTYPE_DIR) - drive[i] = new FSDrive(this, prefs->DrivePath[i]); - else if (prefs->DriveType[i] == DRVTYPE_D64) - drive[i] = new D64Drive(this, prefs->DrivePath[i]); - else - drive[i] = new T64Drive(this, prefs->DrivePath[i]); - } + if (!prefs->Emul1541Proc) + drive[i] = create_drive(prefs->DrivePath[i]); } + } UpdateLEDs(); } @@ -196,12 +240,12 @@ uint8 IEC::OutSec(uint8 byte) * Read one byte */ -uint8 IEC::In(uint8 *byte) +uint8 IEC::In(uint8 &byte) { if (talker_active && (received_cmd == CMD_DATA)) return data_in(byte); - *byte = 0; + byte = 0; return ST_TIMEOUT; } @@ -353,7 +397,7 @@ uint8 IEC::open_out(uint8 byte, bool eoi) *name_ptr = 0; // End string listener->LED = DRVLED_ON; // Turn on drive LED UpdateLEDs(); - return listener->Open(sec_addr, name_buf); + return listener->Open(sec_addr, name_buf, name_len); } return ST_OK; @@ -374,7 +418,7 @@ uint8 IEC::data_out(uint8 byte, bool eoi) * Read byte from channel */ -uint8 IEC::data_in(uint8 *byte) +uint8 IEC::data_in(uint8 &byte) { return talker->Read(sec_addr, byte); } @@ -398,28 +442,49 @@ Drive::Drive(IEC *iec) */ // 1541 error messages -char *Errors_1541[] = { - "00, OK,00,00\r", - "25,WRITE ERROR,00,00\r", - "26,WRITE PROTECT ON,00,00\r", - "30,SYNTAX ERROR,00,00\r", - "33,SYNTAX ERROR,00,00\r", - "60,WRITE FILE OPEN,00,00\r", - "61,FILE NOT OPEN,00,00\r", - "62,FILE NOT FOUND,00,00\r", - "67,ILLEGAL TRACK OR SECTOR,00,00\r", - "70,NO CHANNEL,00,00\r", - "73,CBM DOS V2.6 1541,00,00\r", - "74,DRIVE NOT READY,00,00\r" +static const char *Errors_1541[] = { + "00, OK,%02d,%02d\x0d", + "01, FILES SCRATCHED,%02d,%02d\x0d", + "03, UNIMPLEMENTED,%02d,%02d\x0d", + "20, READ ERROR,%02d,%02d\x0d", + "21, READ ERROR,%02d,%02d\x0d", + "22, READ ERROR,%02d,%02d\x0d", + "23, READ ERROR,%02d,%02d\x0d", + "24, READ ERROR,%02d,%02d\x0d", + "25, WRITE ERROR,%02d,%02d\x0d", + "26, WRITE PROTECT ON,%02d,%02d\x0d", + "27, READ ERROR,%02d,%02d\x0d", + "28, WRITE ERROR,%02d,%02d\x0d", + "29, DISK ID MISMATCH,%02d,%02d\x0d", + "30, SYNTAX ERROR,%02d,%02d\x0d", + "31, SYNTAX ERROR,%02d,%02d\x0d", + "32, SYNTAX ERROR,%02d,%02d\x0d", + "33, SYNTAX ERROR,%02d,%02d\x0d", + "34, SYNTAX ERROR,%02d,%02d\x0d", + "60, WRITE FILE OPEN,%02d,%02d\x0d", + "61, FILE NOT OPEN,%02d,%02d\x0d", + "62, FILE NOT FOUND,%02d,%02d\x0d", + "63, FILE EXISTS,%02d,%02d\x0d", + "64, FILE TYPE MISMATCH,%02d,%02d\x0d", + "65, NO BLOCK,%02d,%02d\x0d", + "66, ILLEGAL TRACK OR SECTOR,%02d,%02d\x0d", + "70, NO CHANNEL,%02d,%02d\x0d", + "71, DIR ERROR,%02d,%02d\x0d", + "72, DISK FULL,%02d,%02d\x0d", + "73, CBM DOS V2.6 1541,%02d,%02d\x0d", + "74, DRIVE NOT READY,%02d,%02d\x0d" }; -void Drive::set_error(int error) +void Drive::set_error(int error, int track, int sector) { - error_ptr = Errors_1541[error]; - error_len = strlen(error_ptr); + // Write error message to buffer + sprintf(error_buf, Errors_1541[error], track, sector); + error_ptr = error_buf; + error_len = strlen(error_buf); + current_error = error; // Set drive condition - if (error != ERR_OK) + if (error != ERR_OK && error != ERR_SCRATCHED) if (error == ERR_STARTUP) LED = DRVLED_OFF; else @@ -428,3 +493,461 @@ void Drive::set_error(int error) LED = DRVLED_OFF; the_iec->UpdateLEDs(); } + + +/* + * Parse file name, determine access mode and file type + */ + +void Drive::parse_file_name(const uint8 *src, int src_len, uint8 *dest, int &dest_len, int &mode, int &type, int &rec_len, bool convert_charset) +{ + // If the string contains a ':', the file name starts after that + const uint8 *p = (const uint8 *)memchr(src, ':', src_len); + if (p) { + p++; + src_len -= p - src; + } else + p = src; + + // Transfer file name upto ',' + dest_len = 0; + uint8 *q = dest; + while (*p != ',' && src_len-- > 0) { + if (convert_charset) + *q++ = petscii2ascii(*p++); + else + *q++ = *p++; + dest_len++; + } + *q++ = 0; + + // Strip trailing CRs + while (dest_len > 0 && dest[dest_len - 1] == 0x0d) + dest[--dest_len] = 0; + + // Look for mode and type parameters separated by ',' + p++; src_len--; + while (src_len > 0) { + switch (*p) { + case 'D': + type = FTYPE_DEL; + break; + case 'S': + type = FTYPE_SEQ; + break; + case 'P': + type = FTYPE_PRG; + break; + case 'U': + type = FTYPE_USR; + break; + case 'L': + type = FTYPE_REL; + while (*p != ',' && src_len-- > 0) p++; + p++; src_len--; + rec_len = *p++; src_len--; + if (src_len < 0) + rec_len = 0; + break; + case 'R': + mode = FMODE_READ; + break; + case 'W': + mode = FMODE_WRITE; + break; + case 'A': + mode = FMODE_APPEND; + break; + case 'M': + mode = FMODE_M; + break; + } + + // Skip to ',' + while (*p != ',' && src_len-- > 0) p++; + p++; src_len--; + } +} + + +/* + * Execute DOS command (parse command and call appropriate routine) + */ + +static void parse_block_cmd_args(const uint8 *p, int &arg1, int &arg2, int &arg3, int &arg4) +{ + arg1 = arg2 = arg3 = arg4 = 0; + + while (*p == ' ' || *p == 0x1d || *p == ',') p++; + while (*p >= '0' && *p < '@') + arg1 = arg1 * 10 + (*p++ & 0x0f); + + while (*p == ' ' || *p == 0x1d || *p == ',') p++; + while (*p >= '0' && *p < '@') + arg2 = arg2 * 10 + (*p++ & 0x0f); + + while (*p == ' ' || *p == 0x1d || *p == ',') p++; + while (*p >= '0' && *p < '@') + arg3 = arg3 * 10 + (*p++ & 0x0f); + + while (*p == ' ' || *p == 0x1d || *p == ',') p++; + while (*p >= '0' && *p < '@') + arg4 = arg4 * 10 + (*p++ & 0x0f); +} + +void Drive::execute_cmd(const uint8 *cmd, int cmd_len) +{ + // Strip trailing CRs + while (cmd_len > 0 && cmd[cmd_len - 1] == 0x0d) + cmd_len--; + + // Find token delimiters + const uint8 *colon = (const uint8 *)memchr(cmd, ':', cmd_len); + const uint8 *equal = colon ? (const uint8 *)memchr(colon, '=', cmd_len - (colon - cmd)) : NULL; + const uint8 *comma = (const uint8 *)memchr(cmd, ',', cmd_len); + const uint8 *minus = (const uint8 *)memchr(cmd, '-', cmd_len); + + // Parse command name + set_error(ERR_OK); + switch (cmd[0]) { + case 'B': // Block/buffer + if (!minus) + set_error(ERR_SYNTAX31); + else { + // Parse arguments (up to 4 decimal numbers separated by + // space, cursor right or comma) + const uint8 *p = colon ? colon + 1 : cmd + 3; + int arg1, arg2, arg3, arg4; + parse_block_cmd_args(p, arg1, arg2, arg3, arg4); + + // Switch on command + switch (minus[1]) { + case 'R': + block_read_cmd(arg1, arg3, arg4); + break; + case 'W': + block_write_cmd(arg1, arg3, arg4); + break; + case 'E': + block_execute_cmd(arg1, arg3, arg4); + break; + case 'A': + block_allocate_cmd(arg2, arg3); + break; + case 'F': + block_free_cmd(arg2, arg3); + break; + case 'P': + buffer_pointer_cmd(arg1, arg2); + break; + default: + set_error(ERR_SYNTAX31); + break; + } + } + break; + + case 'M': // Memory + if (cmd[1] != '-') + set_error(ERR_SYNTAX31); + else { + // Read parameters + uint16 adr = uint8(cmd[3]) | (uint8(cmd[4]) << 8); + uint8 len = uint8(cmd[5]); + + // Switch on command + switch (cmd[2]) { + case 'R': + mem_read_cmd(adr, (cmd_len < 6) ? 1 : len); + break; + case 'W': + mem_write_cmd(adr, len, (uint8 *)cmd + 6); + break; + case 'E': + mem_execute_cmd(adr); + break; + default: + set_error(ERR_SYNTAX31); + break; + } + } + break; + + case 'C': // Copy + if (!colon) + set_error(ERR_SYNTAX31); + else if (!equal || memchr(cmd, '*', cmd_len) || memchr(cmd, '?', cmd_len) || (comma && comma < equal)) + set_error(ERR_SYNTAX30); + else + copy_cmd(colon + 1, equal - colon - 1, equal + 1, cmd_len - (equal + 1 - cmd)); + break; + + case 'R': // Rename + if (!colon) + set_error(ERR_SYNTAX34); + else if (!equal || comma || memchr(cmd, '*', cmd_len) || memchr(cmd, '?', cmd_len)) + set_error(ERR_SYNTAX30); + else + rename_cmd(colon + 1, equal - colon - 1, equal + 1, cmd_len - (equal + 1 - cmd)); + break; + + case 'S': // Scratch + if (!colon) + set_error(ERR_SYNTAX34); + else + scratch_cmd(colon + 1, cmd_len - (colon + 1 - cmd)); + break; + + case 'P': // Position + position_cmd(cmd + 1, cmd_len - 1); + break; + + case 'I': // Initialize + initialize_cmd(); + break; + + case 'N': // New (format) + if (!colon) + set_error(ERR_SYNTAX34); + else + new_cmd(colon + 1, comma ? (comma - colon - 1) : cmd_len - (colon + 1 - cmd), comma); + break; + + case 'V': // Validate + validate_cmd(); + break; + + case 'U': // User + if (cmd[1] == '0') + break; + switch (cmd[1] & 0x0f) { + case 1: { // U1/UA: Read block + const uint8 *p = colon ? colon + 1 : cmd + 2; + int arg1, arg2, arg3, arg4; + parse_block_cmd_args(p, arg1, arg2, arg3, arg4); + block_read_cmd(arg1, arg3, arg4, true); + break; + } + case 2: { // U2/UB: Write block + const uint8 *p = colon ? colon + 1 : cmd + 2; + int arg1, arg2, arg3, arg4; + parse_block_cmd_args(p, arg1, arg2, arg3, arg4); + block_write_cmd(arg1, arg3, arg4, true); + break; + } + case 9: // U9/UI: C64/VC20 mode switch + if (cmd[2] != '+' && cmd[2] != '-') + Reset(); + break; + case 10: // U:/UJ: Reset + Reset(); + break; + default: + set_error(ERR_UNIMPLEMENTED); + break; + } + break; + + default: + set_error(ERR_SYNTAX31); + break; + } +} + +// BLOCK-READ:channel,0,track,sector +void Drive::block_read_cmd(int channel, int track, int sector, bool user_cmd) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// BLOCK-WRITE:channel,0,track,sector +void Drive::block_write_cmd(int channel, int track, int sector, bool user_cmd) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// BLOCK-EXECUTE:channel,0,track,sector +void Drive::block_execute_cmd(int channel, int track, int sector) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// BLOCK-ALLOCATE:0,track,sector +void Drive::block_allocate_cmd(int track, int sector) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// BLOCK-FREE:0,track,sector +void Drive::block_free_cmd(int track, int sector) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// BUFFER-POINTER:channel,pos +void Drive::buffer_pointer_cmd(int channel, int pos) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// M-R[] +void Drive::mem_read_cmd(uint16 adr, uint8 len) +{ + unsupp_cmd(); + error_ptr = error_buf; + error_buf[0] = 0; + error_len = 0; + set_error(ERR_OK); +} + +// M-W +void Drive::mem_write_cmd(uint16 adr, uint8 len, uint8 *p) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// M-E +void Drive::mem_execute_cmd(uint16 adr) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// COPY:new=file1,file2,... +// ^ ^ +// new_file old_files +void Drive::copy_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_files, int old_files_len) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// RENAME:new=old +// ^ ^ +// new_file old_file +void Drive::rename_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_file, int old_file_len) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// SCRATCH:file1,file2,... +// ^ +// files +void Drive::scratch_cmd(const uint8 *files, int files_len) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// P +// ^ +// cmd +void Drive::position_cmd(const uint8 *cmd, int cmd_len) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// INITIALIZE +void Drive::initialize_cmd(void) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// NEW:name,id +// ^ ^ +// name comma (or NULL) +void Drive::new_cmd(const uint8 *name, int name_len, const uint8 *comma) +{ + set_error(ERR_UNIMPLEMENTED); +} + +// VALIDATE +void Drive::validate_cmd(void) +{ + set_error(ERR_UNIMPLEMENTED); +} + + +/* + * Notice user of unsupported drive command + */ + +void Drive::unsupp_cmd(void) +{ +} + + +/* + * Convert PETSCII<->ASCII + */ + +uint8 ascii2petscii(char c) +{ + if ((c >= 'A') && (c <= 'Z') || (c >= 'a') && (c <= 'z')) + return c ^ 0x20; + return c; +} + +void ascii2petscii(uint8 *dest, const char *src, int n) +{ + while (n-- && (*dest++ = ascii2petscii(*src++))) ; +} + +char petscii2ascii(uint8 c) +{ + if ((c >= 'A') && (c <= 'Z') || (c >= 'a') && (c <= 'z')) + return c ^ 0x20; + if ((c >= 0xc1) && (c <= 0xda)) + return c ^ 0x80; + return c; +} + +void petscii2ascii(char *dest, const uint8 *src, int n) +{ + while (n-- && (*dest++ = petscii2ascii(*src++))) ; +} + + +/* + * Check whether file is a mountable disk image or archive file, return type + */ + +bool IsMountableFile(const char *path, int &type) +{ + // Read header and determine file size + uint8 header[64]; + memset(header, 0, sizeof(header)); + FILE *f = fopen(path, "rb"); + if (f == NULL) + return false; + fseek(f, 0, SEEK_END); + long size = ftell(f); + fseek(f, 0, SEEK_SET); + fread(header, 1, sizeof(header), f); + fclose(f); + + if (IsImageFile(path, header, size)) { + type = FILE_IMAGE; + return true; + } else if (IsArchFile(path, header, size)) { + type = FILE_ARCH; + return true; + } else + return false; +} + + +/* + * Read directory of mountable disk image or archive file into c64_dir_entry vector, + * returns false on error + */ + +bool ReadDirectory(const char *path, int type, vector &vec) +{ + vec.clear(); + switch (type) { + case FILE_IMAGE: + return ReadImageDirectory(path, vec); + case FILE_ARCH: + return ReadArchDirectory(path, vec); + default: + return false; + } +} diff --git a/Src/IEC.h b/Src/IEC.h index b0a76e4..8995281 100644 --- a/Src/IEC.h +++ b/Src/IEC.h @@ -1,17 +1,34 @@ /* * IEC.h - IEC bus routines, 1541 emulation (DOS level) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _IEC_H #define _IEC_H +/* + * Definitions + */ + // Maximum length of file names const int NAMEBUF_LENGTH = 256; - // C64 status codes enum { ST_OK = 0, // No error @@ -21,40 +38,69 @@ enum { ST_NOTPRESENT = 0x80 // Device not present }; - // 1541 error codes enum { - ERR_OK, // 00 OK - ERR_WRITEERROR, // 25 WRITE ERROR +#ifndef R14 + aERR_OK, // 00 OK +#else + ERR_OK, // 00 OK +#endif + ERR_SCRATCHED, // 01 FILES SCRATCHED + ERR_UNIMPLEMENTED, // 03 UNIMPLEMENTED + ERR_READ20, // 20 READ ERROR (block header not found) + ERR_READ21, // 21 READ ERROR (no sync character) + ERR_READ22, // 22 READ ERROR (data block not present) + ERR_READ23, // 23 READ ERROR (checksum error in data block) + ERR_READ24, // 24 READ ERROR (byte decoding error) + ERR_WRITE25, // 25 WRITE ERROR (write-verify error) ERR_WRITEPROTECT, // 26 WRITE PROTECT ON - ERR_SYNTAX30, // 30 SYNTAX ERROR (unknown command) + ERR_READ27, // 27 READ ERROR (checksum error in header) + ERR_WRITE28, // 28 WRITE ERROR (long data block) + ERR_DISKID, // 29 DISK ID MISMATCH + ERR_SYNTAX30, // 30 SYNTAX ERROR (general syntax) + ERR_SYNTAX31, // 31 SYNTAX ERROR (invalid command) + ERR_SYNTAX32, // 32 SYNTAX ERROR (command too long) ERR_SYNTAX33, // 33 SYNTAX ERROR (wildcards on writing) + ERR_SYNTAX34, // 34 SYNTAX ERROR (missing file name) ERR_WRITEFILEOPEN, // 60 WRITE FILE OPEN ERR_FILENOTOPEN, // 61 FILE NOT OPEN ERR_FILENOTFOUND, // 62 FILE NOT FOUND - ERR_ILLEGALTS, // 67 ILLEGAL TRACK OR SECTOR + ERR_FILEEXISTS, // 63 FILE EXISTS + ERR_FILETYPE, // 64 FILE TYPE MISMATCH + ERR_NOBLOCK, // 65 NO BLOCK + ERR_ILLEGALTS, // 66 ILLEGAL TRACK OR SECTOR ERR_NOCHANNEL, // 70 NO CHANNEL + ERR_DIRERROR, // 71 DIR ERROR + ERR_DISKFULL, // 72 DISK FULL ERR_STARTUP, // 73 Power-up message ERR_NOTREADY // 74 DRIVE NOT READY }; - -// IEC command codes +// Mountable file types enum { - CMD_DATA = 0x60, // Data transfer - CMD_CLOSE = 0xe0, // Close channel - CMD_OPEN = 0xf0 // Open channel + FILE_IMAGE, // Disk image, handled by ImageDrive + FILE_ARCH // Archive file, handled by ArchDrive }; - -// IEC ATN codes +// 1541 file types enum { - ATN_LISTEN = 0x20, - ATN_UNLISTEN = 0x30, - ATN_TALK = 0x40, - ATN_UNTALK = 0x50 + FTYPE_DEL, // Deleted + FTYPE_SEQ, // Sequential + FTYPE_PRG, // Program + FTYPE_USR, // User + FTYPE_REL, // Relative + FTYPE_UNKNOWN }; +static const char ftype_char[9] = "DSPUL "; + +// 1541 file access modes +enum { + FMODE_READ, // Read + FMODE_WRITE, // Write + FMODE_APPEND, // Append + FMODE_M // Read open file +}; // Drive LED states enum { @@ -63,6 +109,26 @@ enum { DRVLED_ERROR // Error, blink LED }; +// Information about file in disk image/archive file +struct c64_dir_entry { + c64_dir_entry(const uint8 *n, int t, bool o, bool p, size_t s, off_t ofs = 0, uint8 sal = 0, uint8 sah = 0) + : type(t), is_open(o), is_protected(p), size(s), offset(ofs), sa_lo(sal), sa_hi(sah) + { + strncpy((char *)name, (const char *)n, 17); + name[16] = 0; + } + + // Basic information + uint8 name[17]; // File name (C64 charset, null-terminated) + int type; // File type (see defines above) + bool is_open; // Flag: file open + bool is_protected; // Flag: file protected + size_t size; // File size (may be approximated) + + // Special information + off_t offset; // Offset of file in archive file + uint8 sa_lo, sa_hi; // C64 start address +}; class Drive; class C64Display; @@ -81,13 +147,15 @@ public: uint8 Out(uint8 byte, bool eoi); uint8 OutATN(uint8 byte); uint8 OutSec(uint8 byte); - uint8 In(uint8 *byte); + uint8 In(uint8 &byte); void SetATN(void); void RelATN(void); void Turnaround(void); void Release(void); private: + Drive *create_drive(const char *path); + uint8 listen(int device); uint8 talk(int device); uint8 unlisten(void); @@ -96,12 +164,12 @@ private: uint8 sec_talk(void); uint8 open_out(uint8 byte, bool eoi); uint8 data_out(uint8 byte, bool eoi); - uint8 data_in(uint8 *byte); + uint8 data_in(uint8 &byte); C64Display *the_display; // Pointer to display object (for drive LEDs) - char name_buf[NAMEBUF_LENGTH]; // Buffer for file names and command strings - char *name_ptr; // Pointer for reception of file name + uint8 name_buf[NAMEBUF_LENGTH]; // Buffer for file names and command strings + uint8 *name_ptr; // Pointer for reception of file name int name_len; // Received length of file name Drive *drive[4]; // 4 drives (8..11) @@ -117,16 +185,15 @@ private: uint8 sec_addr; // Received secondary address ($0x) }; - // Abstract superclass for individual drives class Drive { public: Drive(IEC *iec); virtual ~Drive() {} - virtual uint8 Open(int channel, char *filename)=0; + virtual uint8 Open(int channel, const uint8 *name, int name_len)=0; virtual uint8 Close(int channel)=0; - virtual uint8 Read(int channel, uint8 *byte)=0; + virtual uint8 Read(int channel, uint8 &byte)=0; virtual uint8 Write(int channel, uint8 byte, bool eoi)=0; virtual void Reset(void)=0; @@ -134,13 +201,62 @@ public: bool Ready; // Drive is ready for operation protected: - void set_error(int error); + void set_error(int error, int track = 0, int sector = 0); - char *error_ptr; // Pointer within error message - int error_len; // Remaining length of error message + void parse_file_name(const uint8 *src, int src_len, uint8 *dest, int &dest_len, int &mode, int &type, int &rec_len, bool convert_charset = false); + + void execute_cmd(const uint8 *cmd, int cmd_len); + virtual void block_read_cmd(int channel, int track, int sector, bool user_cmd = false); + virtual void block_write_cmd(int channel, int track, int sector, bool user_cmd = false); + virtual void block_execute_cmd(int channel, int track, int sector); + virtual void block_allocate_cmd(int track, int sector); + virtual void block_free_cmd(int track, int sector); + virtual void buffer_pointer_cmd(int channel, int pos); + virtual void mem_read_cmd(uint16 adr, uint8 len); + virtual void mem_write_cmd(uint16 adr, uint8 len, uint8 *p); + virtual void mem_execute_cmd(uint16 adr); + virtual void copy_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_files, int old_files_len); + virtual void rename_cmd(const uint8 *new_file, int new_file_len, const uint8 *old_file, int old_file_len); + virtual void scratch_cmd(const uint8 *files, int files_len); + virtual void position_cmd(const uint8 *cmd, int cmd_len); + virtual void initialize_cmd(void); + virtual void new_cmd(const uint8 *name, int name_len, const uint8 *comma); + virtual void validate_cmd(void); + void unsupp_cmd(void); + + char error_buf[256]; // Buffer with current error message + char *error_ptr; // Pointer within error message + int error_len; // Remaining length of error message + int current_error; // Number of current error + + uint8 cmd_buf[64]; // Buffer for incoming command strings + int cmd_len; // Length of received command private: - IEC *the_iec; // Pointer to IEC object + IEC *the_iec; // Pointer to IEC object }; + +/* + * Functions + */ + +// Convert ASCII character to PETSCII character +extern uint8 ascii2petscii(char c); + +// Convert ASCII string to PETSCII string +extern void ascii2petscii(uint8 *dest, const char *src, int max); + +// Convert PETSCII character to ASCII character +extern char petscii2ascii(uint8 c); + +// Convert PETSCII string to ASCII string +extern void petscii2ascii(char *dest, const uint8 *src, int max); + +// Check whether file is a mountable disk image or archive file, return type +extern bool IsMountableFile(const char *path, int &type); + +// Read directory of mountable disk image or archive file into c64_dir_entry vector +extern bool ReadDirectory(const char *path, int type, vector &vec); + #endif diff --git a/Src/Kernal_ROM.h b/Src/Kernal_ROM.h new file mode 100644 index 0000000..cb6795a --- /dev/null +++ b/Src/Kernal_ROM.h @@ -0,0 +1,1033 @@ +/* + * Kernal_ROM.h - C64 Kernal ROM + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * C64/1541 ROMs (C) Commodore Business Machines + */ + +static const uint8 builtin_kernal_rom[KERNAL_ROM_SIZE] = { + 0x85, 0x56, 0x20, 0x0f, 0xbc, 0xa5, 0x61, 0xc9, + 0x88, 0x90, 0x03, 0x20, 0xd4, 0xba, 0x20, 0xcc, + 0xbc, 0xa5, 0x07, 0x18, 0x69, 0x81, 0xf0, 0xf3, + 0x38, 0xe9, 0x01, 0x48, 0xa2, 0x05, 0xb5, 0x69, + 0xb4, 0x61, 0x95, 0x61, 0x94, 0x69, 0xca, 0x10, + 0xf5, 0xa5, 0x56, 0x85, 0x70, 0x20, 0x53, 0xb8, + 0x20, 0xb4, 0xbf, 0xa9, 0xc4, 0xa0, 0xbf, 0x20, + 0x59, 0xe0, 0xa9, 0x00, 0x85, 0x6f, 0x68, 0x20, + 0xb9, 0xba, 0x60, 0x85, 0x71, 0x84, 0x72, 0x20, + 0xca, 0xbb, 0xa9, 0x57, 0x20, 0x28, 0xba, 0x20, + 0x5d, 0xe0, 0xa9, 0x57, 0xa0, 0x00, 0x4c, 0x28, + 0xba, 0x85, 0x71, 0x84, 0x72, 0x20, 0xc7, 0xbb, + 0xb1, 0x71, 0x85, 0x67, 0xa4, 0x71, 0xc8, 0x98, + 0xd0, 0x02, 0xe6, 0x72, 0x85, 0x71, 0xa4, 0x72, + 0x20, 0x28, 0xba, 0xa5, 0x71, 0xa4, 0x72, 0x18, + 0x69, 0x05, 0x90, 0x01, 0xc8, 0x85, 0x71, 0x84, + 0x72, 0x20, 0x67, 0xb8, 0xa9, 0x5c, 0xa0, 0x00, + 0xc6, 0x67, 0xd0, 0xe4, 0x60, 0x98, 0x35, 0x44, + 0x7a, 0x00, 0x68, 0x28, 0xb1, 0x46, 0x00, 0x20, + 0x2b, 0xbc, 0x30, 0x37, 0xd0, 0x20, 0x20, 0xf3, + 0xff, 0x86, 0x22, 0x84, 0x23, 0xa0, 0x04, 0xb1, + 0x22, 0x85, 0x62, 0xc8, 0xb1, 0x22, 0x85, 0x64, + 0xa0, 0x08, 0xb1, 0x22, 0x85, 0x63, 0xc8, 0xb1, + 0x22, 0x85, 0x65, 0x4c, 0xe3, 0xe0, 0xa9, 0x8b, + 0xa0, 0x00, 0x20, 0xa2, 0xbb, 0xa9, 0x8d, 0xa0, + 0xe0, 0x20, 0x28, 0xba, 0xa9, 0x92, 0xa0, 0xe0, + 0x20, 0x67, 0xb8, 0xa6, 0x65, 0xa5, 0x62, 0x85, + 0x65, 0x86, 0x62, 0xa6, 0x63, 0xa5, 0x64, 0x85, + 0x63, 0x86, 0x64, 0xa9, 0x00, 0x85, 0x66, 0xa5, + 0x61, 0x85, 0x70, 0xa9, 0x80, 0x85, 0x61, 0x20, + 0xd7, 0xb8, 0xa2, 0x8b, 0xa0, 0x00, 0x4c, 0xd4, + 0xbb, 0xc9, 0xf0, 0xd0, 0x07, 0x84, 0x38, 0x86, + 0x37, 0x4c, 0x63, 0xa6, 0xaa, 0xd0, 0x02, 0xa2, + 0x1e, 0x4c, 0x37, 0xa4, 0x20, 0xd2, 0xff, 0xb0, + 0xe8, 0x60, 0x20, 0xcf, 0xff, 0xb0, 0xe2, 0x60, + 0x20, 0xad, 0xe4, 0xb0, 0xdc, 0x60, 0x20, 0xc6, + 0xff, 0xb0, 0xd6, 0x60, 0x20, 0xe4, 0xff, 0xb0, + 0xd0, 0x60, 0x20, 0x8a, 0xad, 0x20, 0xf7, 0xb7, + 0xa9, 0xe1, 0x48, 0xa9, 0x46, 0x48, 0xad, 0x0f, + 0x03, 0x48, 0xad, 0x0c, 0x03, 0xae, 0x0d, 0x03, + 0xac, 0x0e, 0x03, 0x28, 0x6c, 0x14, 0x00, 0x08, + 0x8d, 0x0c, 0x03, 0x8e, 0x0d, 0x03, 0x8c, 0x0e, + 0x03, 0x68, 0x8d, 0x0f, 0x03, 0x60, 0x20, 0xd4, + 0xe1, 0xa6, 0x2d, 0xa4, 0x2e, 0xa9, 0x2b, 0x20, + 0xd8, 0xff, 0xb0, 0x95, 0x60, 0xa9, 0x01, 0x2c, + 0xa9, 0x00, 0x85, 0x0a, 0x20, 0xd4, 0xe1, 0xa5, + 0x0a, 0xa6, 0x2b, 0xa4, 0x2c, 0x20, 0xd5, 0xff, + 0xb0, 0x57, 0xa5, 0x0a, 0xf0, 0x17, 0xa2, 0x1c, + 0x20, 0xb7, 0xff, 0x29, 0x10, 0xd0, 0x17, 0xa5, + 0x7a, 0xc9, 0x02, 0xf0, 0x07, 0xa9, 0x64, 0xa0, + 0xa3, 0x4c, 0x1e, 0xab, 0x60, 0x20, 0xb7, 0xff, + 0x29, 0xbf, 0xf0, 0x05, 0xa2, 0x1d, 0x4c, 0x37, + 0xa4, 0xa5, 0x7b, 0xc9, 0x02, 0xd0, 0x0e, 0x86, + 0x2d, 0x84, 0x2e, 0xa9, 0x76, 0xa0, 0xa3, 0x20, + 0x1e, 0xab, 0x4c, 0x2a, 0xa5, 0x20, 0x8e, 0xa6, + 0x20, 0x33, 0xa5, 0x4c, 0x77, 0xa6, 0x20, 0x19, + 0xe2, 0x20, 0xc0, 0xff, 0xb0, 0x0b, 0x60, 0x20, + 0x19, 0xe2, 0xa5, 0x49, 0x20, 0xc3, 0xff, 0x90, + 0xc3, 0x4c, 0xf9, 0xe0, 0xa9, 0x00, 0x20, 0xbd, + 0xff, 0xa2, 0x01, 0xa0, 0x00, 0x20, 0xba, 0xff, + 0x20, 0x06, 0xe2, 0x20, 0x57, 0xe2, 0x20, 0x06, + 0xe2, 0x20, 0x00, 0xe2, 0xa0, 0x00, 0x86, 0x49, + 0x20, 0xba, 0xff, 0x20, 0x06, 0xe2, 0x20, 0x00, + 0xe2, 0x8a, 0xa8, 0xa6, 0x49, 0x4c, 0xba, 0xff, + 0x20, 0x0e, 0xe2, 0x4c, 0x9e, 0xb7, 0x20, 0x79, + 0x00, 0xd0, 0x02, 0x68, 0x68, 0x60, 0x20, 0xfd, + 0xae, 0x20, 0x79, 0x00, 0xd0, 0xf7, 0x4c, 0x08, + 0xaf, 0xa9, 0x00, 0x20, 0xbd, 0xff, 0x20, 0x11, + 0xe2, 0x20, 0x9e, 0xb7, 0x86, 0x49, 0x8a, 0xa2, + 0x01, 0xa0, 0x00, 0x20, 0xba, 0xff, 0x20, 0x06, + 0xe2, 0x20, 0x00, 0xe2, 0x86, 0x4a, 0xa0, 0x00, + 0xa5, 0x49, 0xe0, 0x03, 0x90, 0x01, 0x88, 0x20, + 0xba, 0xff, 0x20, 0x06, 0xe2, 0x20, 0x00, 0xe2, + 0x8a, 0xa8, 0xa6, 0x4a, 0xa5, 0x49, 0x20, 0xba, + 0xff, 0x20, 0x06, 0xe2, 0x20, 0x0e, 0xe2, 0x20, + 0x9e, 0xad, 0x20, 0xa3, 0xb6, 0xa6, 0x22, 0xa4, + 0x23, 0x4c, 0xbd, 0xff, 0xa9, 0xe0, 0xa0, 0xe2, + 0x20, 0x67, 0xb8, 0x20, 0x0c, 0xbc, 0xa9, 0xe5, + 0xa0, 0xe2, 0xa6, 0x6e, 0x20, 0x07, 0xbb, 0x20, + 0x0c, 0xbc, 0x20, 0xcc, 0xbc, 0xa9, 0x00, 0x85, + 0x6f, 0x20, 0x53, 0xb8, 0xa9, 0xea, 0xa0, 0xe2, + 0x20, 0x50, 0xb8, 0xa5, 0x66, 0x48, 0x10, 0x0d, + 0x20, 0x49, 0xb8, 0xa5, 0x66, 0x30, 0x09, 0xa5, + 0x12, 0x49, 0xff, 0x85, 0x12, 0x20, 0xb4, 0xbf, + 0xa9, 0xea, 0xa0, 0xe2, 0x20, 0x67, 0xb8, 0x68, + 0x10, 0x03, 0x20, 0xb4, 0xbf, 0xa9, 0xef, 0xa0, + 0xe2, 0x4c, 0x43, 0xe0, 0x20, 0xca, 0xbb, 0xa9, + 0x00, 0x85, 0x12, 0x20, 0x6b, 0xe2, 0xa2, 0x4e, + 0xa0, 0x00, 0x20, 0xf6, 0xe0, 0xa9, 0x57, 0xa0, + 0x00, 0x20, 0xa2, 0xbb, 0xa9, 0x00, 0x85, 0x66, + 0xa5, 0x12, 0x20, 0xdc, 0xe2, 0xa9, 0x4e, 0xa0, + 0x00, 0x4c, 0x0f, 0xbb, 0x48, 0x4c, 0x9d, 0xe2, + 0x81, 0x49, 0x0f, 0xda, 0xa2, 0x83, 0x49, 0x0f, + 0xda, 0xa2, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x05, + 0x84, 0xe6, 0x1a, 0x2d, 0x1b, 0x86, 0x28, 0x07, + 0xfb, 0xf8, 0x87, 0x99, 0x68, 0x89, 0x01, 0x87, + 0x23, 0x35, 0xdf, 0xe1, 0x86, 0xa5, 0x5d, 0xe7, + 0x28, 0x83, 0x49, 0x0f, 0xda, 0xa2, 0xa5, 0x66, + 0x48, 0x10, 0x03, 0x20, 0xb4, 0xbf, 0xa5, 0x61, + 0x48, 0xc9, 0x81, 0x90, 0x07, 0xa9, 0xbc, 0xa0, + 0xb9, 0x20, 0x0f, 0xbb, 0xa9, 0x3e, 0xa0, 0xe3, + 0x20, 0x43, 0xe0, 0x68, 0xc9, 0x81, 0x90, 0x07, + 0xa9, 0xe0, 0xa0, 0xe2, 0x20, 0x50, 0xb8, 0x68, + 0x10, 0x03, 0x4c, 0xb4, 0xbf, 0x60, 0x0b, 0x76, + 0xb3, 0x83, 0xbd, 0xd3, 0x79, 0x1e, 0xf4, 0xa6, + 0xf5, 0x7b, 0x83, 0xfc, 0xb0, 0x10, 0x7c, 0x0c, + 0x1f, 0x67, 0xca, 0x7c, 0xde, 0x53, 0xcb, 0xc1, + 0x7d, 0x14, 0x64, 0x70, 0x4c, 0x7d, 0xb7, 0xea, + 0x51, 0x7a, 0x7d, 0x63, 0x30, 0x88, 0x7e, 0x7e, + 0x92, 0x44, 0x99, 0x3a, 0x7e, 0x4c, 0xcc, 0x91, + 0xc7, 0x7f, 0xaa, 0xaa, 0xaa, 0x13, 0x81, 0x00, + 0x00, 0x00, 0x00, 0x20, 0xcc, 0xff, 0xa9, 0x00, + 0x85, 0x13, 0x20, 0x7a, 0xa6, 0x58, 0xa2, 0x80, + 0x6c, 0x00, 0x03, 0x8a, 0x30, 0x03, 0x4c, 0x3a, + 0xa4, 0x4c, 0x74, 0xa4, 0x20, 0x53, 0xe4, 0x20, + 0xbf, 0xe3, 0x20, 0x22, 0xe4, 0xa2, 0xfb, 0x9a, + 0xd0, 0xe4, 0xe6, 0x7a, 0xd0, 0x02, 0xe6, 0x7b, + 0xad, 0x60, 0xea, 0xc9, 0x3a, 0xb0, 0x0a, 0xc9, + 0x20, 0xf0, 0xef, 0x38, 0xe9, 0x30, 0x38, 0xe9, + 0xd0, 0x60, 0x80, 0x4f, 0xc7, 0x52, 0x58, 0xa9, + 0x4c, 0x85, 0x54, 0x8d, 0x10, 0x03, 0xa9, 0x48, + 0xa0, 0xb2, 0x8d, 0x11, 0x03, 0x8c, 0x12, 0x03, + 0xa9, 0x91, 0xa0, 0xb3, 0x85, 0x05, 0x84, 0x06, + 0xa9, 0xaa, 0xa0, 0xb1, 0x85, 0x03, 0x84, 0x04, + 0xa2, 0x1c, 0xbd, 0xa2, 0xe3, 0x95, 0x73, 0xca, + 0x10, 0xf8, 0xa9, 0x03, 0x85, 0x53, 0xa9, 0x00, + 0x85, 0x68, 0x85, 0x13, 0x85, 0x18, 0xa2, 0x01, + 0x8e, 0xfd, 0x01, 0x8e, 0xfc, 0x01, 0xa2, 0x19, + 0x86, 0x16, 0x38, 0x20, 0x9c, 0xff, 0x86, 0x2b, + 0x84, 0x2c, 0x38, 0x20, 0x99, 0xff, 0x86, 0x37, + 0x84, 0x38, 0x86, 0x33, 0x84, 0x34, 0xa0, 0x00, + 0x98, 0x91, 0x2b, 0xe6, 0x2b, 0xd0, 0x02, 0xe6, + 0x2c, 0x60, 0xa5, 0x2b, 0xa4, 0x2c, 0x20, 0x08, + 0xa4, 0xa9, 0x73, 0xa0, 0xe4, 0x20, 0x1e, 0xab, + 0xa5, 0x37, 0x38, 0xe5, 0x2b, 0xaa, 0xa5, 0x38, + 0xe5, 0x2c, 0x20, 0xcd, 0xbd, 0xa9, 0x60, 0xa0, + 0xe4, 0x20, 0x1e, 0xab, 0x4c, 0x44, 0xa6, 0x8b, + 0xe3, 0x83, 0xa4, 0x7c, 0xa5, 0x1a, 0xa7, 0xe4, + 0xa7, 0x86, 0xae, 0xa2, 0x0b, 0xbd, 0x47, 0xe4, + 0x9d, 0x00, 0x03, 0xca, 0x10, 0xf7, 0x60, 0x00, + 0x20, 0x42, 0x41, 0x53, 0x49, 0x43, 0x20, 0x42, + 0x59, 0x54, 0x45, 0x53, 0x20, 0x46, 0x52, 0x45, + 0x45, 0x0d, 0x00, 0x93, 0x0d, 0x20, 0x20, 0x20, + 0x20, 0x2a, 0x2a, 0x2a, 0x2a, 0x20, 0x43, 0x4f, + 0x4d, 0x4d, 0x4f, 0x44, 0x4f, 0x52, 0x45, 0x20, + 0x36, 0x34, 0x20, 0x42, 0x41, 0x53, 0x49, 0x43, + 0x20, 0x56, 0x32, 0x20, 0x2a, 0x2a, 0x2a, 0x2a, + 0x0d, 0x0d, 0x20, 0x36, 0x34, 0x4b, 0x20, 0x52, + 0x41, 0x4d, 0x20, 0x53, 0x59, 0x53, 0x54, 0x45, + 0x4d, 0x20, 0x20, 0x00, 0x81, 0x48, 0x20, 0xc9, + 0xff, 0xaa, 0x68, 0x90, 0x01, 0x8a, 0x60, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0x85, 0xa9, 0xa9, 0x01, 0x85, + 0xab, 0x60, 0xad, 0x86, 0x02, 0x91, 0xf3, 0x60, + 0x69, 0x02, 0xa4, 0x91, 0xc8, 0xd0, 0x04, 0xc5, + 0xa1, 0xd0, 0xf7, 0x60, 0x19, 0x26, 0x44, 0x19, + 0x1a, 0x11, 0xe8, 0x0d, 0x70, 0x0c, 0x06, 0x06, + 0xd1, 0x02, 0x37, 0x01, 0xae, 0x00, 0x69, 0x00, + 0xa2, 0x00, 0xa0, 0xdc, 0x60, 0xa2, 0x28, 0xa0, + 0x19, 0x60, 0xb0, 0x07, 0x86, 0xd6, 0x84, 0xd3, + 0x20, 0x6c, 0xe5, 0xa6, 0xd6, 0xa4, 0xd3, 0x60, + 0x20, 0xa0, 0xe5, 0xa9, 0x00, 0x8d, 0x91, 0x02, + 0x85, 0xcf, 0xa9, 0x48, 0x8d, 0x8f, 0x02, 0xa9, + 0xeb, 0x8d, 0x90, 0x02, 0xa9, 0x0a, 0x8d, 0x89, + 0x02, 0x8d, 0x8c, 0x02, 0xa9, 0x0e, 0x8d, 0x86, + 0x02, 0xa9, 0x04, 0x8d, 0x8b, 0x02, 0xa9, 0x0c, + 0x85, 0xcd, 0x85, 0xcc, 0xad, 0x88, 0x02, 0x09, + 0x80, 0xa8, 0xa9, 0x00, 0xaa, 0x94, 0xd9, 0x18, + 0x69, 0x28, 0x90, 0x01, 0xc8, 0xe8, 0xe0, 0x1a, + 0xd0, 0xf3, 0xa9, 0xff, 0x95, 0xd9, 0xa2, 0x18, + 0x20, 0xff, 0xe9, 0xca, 0x10, 0xfa, 0xa0, 0x00, + 0x84, 0xd3, 0x84, 0xd6, 0xa6, 0xd6, 0xa5, 0xd3, + 0xb4, 0xd9, 0x30, 0x08, 0x18, 0x69, 0x28, 0x85, + 0xd3, 0xca, 0x10, 0xf4, 0x20, 0xf0, 0xe9, 0xa9, + 0x27, 0xe8, 0xb4, 0xd9, 0x30, 0x06, 0x18, 0x69, + 0x28, 0xe8, 0x10, 0xf6, 0x85, 0xd5, 0x4c, 0x24, + 0xea, 0xe4, 0xc9, 0xf0, 0x03, 0x4c, 0xed, 0xe6, + 0x60, 0xea, 0x20, 0xa0, 0xe5, 0x4c, 0x66, 0xe5, + 0xa9, 0x03, 0x85, 0x9a, 0xa9, 0x00, 0x85, 0x99, + 0xa2, 0x2f, 0xbd, 0xb8, 0xec, 0x9d, 0xff, 0xcf, + 0xca, 0xd0, 0xf7, 0x60, 0xac, 0x77, 0x02, 0xa2, + 0x00, 0xbd, 0x78, 0x02, 0x9d, 0x77, 0x02, 0xe8, + 0xe4, 0xc6, 0xd0, 0xf5, 0xc6, 0xc6, 0x98, 0x58, + 0x18, 0x60, 0x20, 0x16, 0xe7, 0xa5, 0xc6, 0x85, + 0xcc, 0x8d, 0x92, 0x02, 0xf0, 0xf7, 0x78, 0xa5, + 0xcf, 0xf0, 0x0c, 0xa5, 0xce, 0xae, 0x87, 0x02, + 0xa0, 0x00, 0x84, 0xcf, 0x20, 0x13, 0xea, 0x20, + 0xb4, 0xe5, 0xc9, 0x83, 0xd0, 0x10, 0xa2, 0x09, + 0x78, 0x86, 0xc6, 0xbd, 0xe6, 0xec, 0x9d, 0x76, + 0x02, 0xca, 0xd0, 0xf7, 0xf0, 0xcf, 0xc9, 0x0d, + 0xd0, 0xc8, 0xa4, 0xd5, 0x84, 0xd0, 0xb1, 0xd1, + 0xc9, 0x20, 0xd0, 0x03, 0x88, 0xd0, 0xf7, 0xc8, + 0x84, 0xc8, 0xa0, 0x00, 0x8c, 0x92, 0x02, 0x84, + 0xd3, 0x84, 0xd4, 0xa5, 0xc9, 0x30, 0x1b, 0xa6, + 0xd6, 0x20, 0x91, 0xe5, 0xe4, 0xc9, 0xd0, 0x12, + 0xa5, 0xca, 0x85, 0xd3, 0xc5, 0xc8, 0x90, 0x0a, + 0xb0, 0x2b, 0x98, 0x48, 0x8a, 0x48, 0xa5, 0xd0, + 0xf0, 0x93, 0xa4, 0xd3, 0xb1, 0xd1, 0x85, 0xd7, + 0x29, 0x3f, 0x06, 0xd7, 0x24, 0xd7, 0x10, 0x02, + 0x09, 0x80, 0x90, 0x04, 0xa6, 0xd4, 0xd0, 0x04, + 0x70, 0x02, 0x09, 0x40, 0xe6, 0xd3, 0x20, 0x84, + 0xe6, 0xc4, 0xc8, 0xd0, 0x17, 0xa9, 0x00, 0x85, + 0xd0, 0xa9, 0x0d, 0xa6, 0x99, 0xe0, 0x03, 0xf0, + 0x06, 0xa6, 0x9a, 0xe0, 0x03, 0xf0, 0x03, 0x20, + 0x16, 0xe7, 0xa9, 0x0d, 0x85, 0xd7, 0x68, 0xaa, + 0x68, 0xa8, 0xa5, 0xd7, 0xc9, 0xde, 0xd0, 0x02, + 0xa9, 0xff, 0x18, 0x60, 0xc9, 0x22, 0xd0, 0x08, + 0xa5, 0xd4, 0x49, 0x01, 0x85, 0xd4, 0xa9, 0x22, + 0x60, 0x09, 0x40, 0xa6, 0xc7, 0xf0, 0x02, 0x09, + 0x80, 0xa6, 0xd8, 0xf0, 0x02, 0xc6, 0xd8, 0xae, + 0x86, 0x02, 0x20, 0x13, 0xea, 0x20, 0xb6, 0xe6, + 0x68, 0xa8, 0xa5, 0xd8, 0xf0, 0x02, 0x46, 0xd4, + 0x68, 0xaa, 0x68, 0x18, 0x58, 0x60, 0x20, 0xb3, + 0xe8, 0xe6, 0xd3, 0xa5, 0xd5, 0xc5, 0xd3, 0xb0, + 0x3f, 0xc9, 0x4f, 0xf0, 0x32, 0xad, 0x92, 0x02, + 0xf0, 0x03, 0x4c, 0x67, 0xe9, 0xa6, 0xd6, 0xe0, + 0x19, 0x90, 0x07, 0x20, 0xea, 0xe8, 0xc6, 0xd6, + 0xa6, 0xd6, 0x16, 0xd9, 0x56, 0xd9, 0xe8, 0xb5, + 0xd9, 0x09, 0x80, 0x95, 0xd9, 0xca, 0xa5, 0xd5, + 0x18, 0x69, 0x28, 0x85, 0xd5, 0xb5, 0xd9, 0x30, + 0x03, 0xca, 0xd0, 0xf9, 0x4c, 0xf0, 0xe9, 0xc6, + 0xd6, 0x20, 0x7c, 0xe8, 0xa9, 0x00, 0x85, 0xd3, + 0x60, 0xa6, 0xd6, 0xd0, 0x06, 0x86, 0xd3, 0x68, + 0x68, 0xd0, 0x9d, 0xca, 0x86, 0xd6, 0x20, 0x6c, + 0xe5, 0xa4, 0xd5, 0x84, 0xd3, 0x60, 0x48, 0x85, + 0xd7, 0x8a, 0x48, 0x98, 0x48, 0xa9, 0x00, 0x85, + 0xd0, 0xa4, 0xd3, 0xa5, 0xd7, 0x10, 0x03, 0x4c, + 0xd4, 0xe7, 0xc9, 0x0d, 0xd0, 0x03, 0x4c, 0x91, + 0xe8, 0xc9, 0x20, 0x90, 0x10, 0xc9, 0x60, 0x90, + 0x04, 0x29, 0xdf, 0xd0, 0x02, 0x29, 0x3f, 0x20, + 0x84, 0xe6, 0x4c, 0x93, 0xe6, 0xa6, 0xd8, 0xf0, + 0x03, 0x4c, 0x97, 0xe6, 0xc9, 0x14, 0xd0, 0x2e, + 0x98, 0xd0, 0x06, 0x20, 0x01, 0xe7, 0x4c, 0x73, + 0xe7, 0x20, 0xa1, 0xe8, 0x88, 0x84, 0xd3, 0x20, + 0x24, 0xea, 0xc8, 0xb1, 0xd1, 0x88, 0x91, 0xd1, + 0xc8, 0xb1, 0xf3, 0x88, 0x91, 0xf3, 0xc8, 0xc4, + 0xd5, 0xd0, 0xef, 0xa9, 0x20, 0x91, 0xd1, 0xad, + 0x86, 0x02, 0x91, 0xf3, 0x10, 0x4d, 0xa6, 0xd4, + 0xf0, 0x03, 0x4c, 0x97, 0xe6, 0xc9, 0x12, 0xd0, + 0x02, 0x85, 0xc7, 0xc9, 0x13, 0xd0, 0x03, 0x20, + 0x66, 0xe5, 0xc9, 0x1d, 0xd0, 0x17, 0xc8, 0x20, + 0xb3, 0xe8, 0x84, 0xd3, 0x88, 0xc4, 0xd5, 0x90, + 0x09, 0xc6, 0xd6, 0x20, 0x7c, 0xe8, 0xa0, 0x00, + 0x84, 0xd3, 0x4c, 0xa8, 0xe6, 0xc9, 0x11, 0xd0, + 0x1d, 0x18, 0x98, 0x69, 0x28, 0xa8, 0xe6, 0xd6, + 0xc5, 0xd5, 0x90, 0xec, 0xf0, 0xea, 0xc6, 0xd6, + 0xe9, 0x28, 0x90, 0x04, 0x85, 0xd3, 0xd0, 0xf8, + 0x20, 0x7c, 0xe8, 0x4c, 0xa8, 0xe6, 0x20, 0xcb, + 0xe8, 0x4c, 0x44, 0xec, 0x29, 0x7f, 0xc9, 0x7f, + 0xd0, 0x02, 0xa9, 0x5e, 0xc9, 0x20, 0x90, 0x03, + 0x4c, 0x91, 0xe6, 0xc9, 0x0d, 0xd0, 0x03, 0x4c, + 0x91, 0xe8, 0xa6, 0xd4, 0xd0, 0x3f, 0xc9, 0x14, + 0xd0, 0x37, 0xa4, 0xd5, 0xb1, 0xd1, 0xc9, 0x20, + 0xd0, 0x04, 0xc4, 0xd3, 0xd0, 0x07, 0xc0, 0x4f, + 0xf0, 0x24, 0x20, 0x65, 0xe9, 0xa4, 0xd5, 0x20, + 0x24, 0xea, 0x88, 0xb1, 0xd1, 0xc8, 0x91, 0xd1, + 0x88, 0xb1, 0xf3, 0xc8, 0x91, 0xf3, 0x88, 0xc4, + 0xd3, 0xd0, 0xef, 0xa9, 0x20, 0x91, 0xd1, 0xad, + 0x86, 0x02, 0x91, 0xf3, 0xe6, 0xd8, 0x4c, 0xa8, + 0xe6, 0xa6, 0xd8, 0xf0, 0x05, 0x09, 0x40, 0x4c, + 0x97, 0xe6, 0xc9, 0x11, 0xd0, 0x16, 0xa6, 0xd6, + 0xf0, 0x37, 0xc6, 0xd6, 0xa5, 0xd3, 0x38, 0xe9, + 0x28, 0x90, 0x04, 0x85, 0xd3, 0x10, 0x2a, 0x20, + 0x6c, 0xe5, 0xd0, 0x25, 0xc9, 0x12, 0xd0, 0x04, + 0xa9, 0x00, 0x85, 0xc7, 0xc9, 0x1d, 0xd0, 0x12, + 0x98, 0xf0, 0x09, 0x20, 0xa1, 0xe8, 0x88, 0x84, + 0xd3, 0x4c, 0xa8, 0xe6, 0x20, 0x01, 0xe7, 0x4c, + 0xa8, 0xe6, 0xc9, 0x13, 0xd0, 0x06, 0x20, 0x44, + 0xe5, 0x4c, 0xa8, 0xe6, 0x09, 0x80, 0x20, 0xcb, + 0xe8, 0x4c, 0x4f, 0xec, 0x46, 0xc9, 0xa6, 0xd6, + 0xe8, 0xe0, 0x19, 0xd0, 0x03, 0x20, 0xea, 0xe8, + 0xb5, 0xd9, 0x10, 0xf4, 0x86, 0xd6, 0x4c, 0x6c, + 0xe5, 0xa2, 0x00, 0x86, 0xd8, 0x86, 0xc7, 0x86, + 0xd4, 0x86, 0xd3, 0x20, 0x7c, 0xe8, 0x4c, 0xa8, + 0xe6, 0xa2, 0x02, 0xa9, 0x00, 0xc5, 0xd3, 0xf0, + 0x07, 0x18, 0x69, 0x28, 0xca, 0xd0, 0xf6, 0x60, + 0xc6, 0xd6, 0x60, 0xa2, 0x02, 0xa9, 0x27, 0xc5, + 0xd3, 0xf0, 0x07, 0x18, 0x69, 0x28, 0xca, 0xd0, + 0xf6, 0x60, 0xa6, 0xd6, 0xe0, 0x19, 0xf0, 0x02, + 0xe6, 0xd6, 0x60, 0xa2, 0x0f, 0xdd, 0xda, 0xe8, + 0xf0, 0x04, 0xca, 0x10, 0xf8, 0x60, 0x8e, 0x86, + 0x02, 0x60, 0x90, 0x05, 0x1c, 0x9f, 0x9c, 0x1e, + 0x1f, 0x9e, 0x81, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0x9b, 0xa5, 0xac, 0x48, 0xa5, 0xad, 0x48, + 0xa5, 0xae, 0x48, 0xa5, 0xaf, 0x48, 0xa2, 0xff, + 0xc6, 0xd6, 0xc6, 0xc9, 0xce, 0xa5, 0x02, 0xe8, + 0x20, 0xf0, 0xe9, 0xe0, 0x18, 0xb0, 0x0c, 0xbd, + 0xf1, 0xec, 0x85, 0xac, 0xb5, 0xda, 0x20, 0xc8, + 0xe9, 0x30, 0xec, 0x20, 0xff, 0xe9, 0xa2, 0x00, + 0xb5, 0xd9, 0x29, 0x7f, 0xb4, 0xda, 0x10, 0x02, + 0x09, 0x80, 0x95, 0xd9, 0xe8, 0xe0, 0x18, 0xd0, + 0xef, 0xa5, 0xf1, 0x09, 0x80, 0x85, 0xf1, 0xa5, + 0xd9, 0x10, 0xc3, 0xe6, 0xd6, 0xee, 0xa5, 0x02, + 0xa9, 0x7f, 0x8d, 0x00, 0xdc, 0xad, 0x01, 0xdc, + 0xc9, 0xfb, 0x08, 0xa9, 0x7f, 0x8d, 0x00, 0xdc, + 0x28, 0xd0, 0x0b, 0xa0, 0x00, 0xea, 0xca, 0xd0, + 0xfc, 0x88, 0xd0, 0xf9, 0x84, 0xc6, 0xa6, 0xd6, + 0x68, 0x85, 0xaf, 0x68, 0x85, 0xae, 0x68, 0x85, + 0xad, 0x68, 0x85, 0xac, 0x60, 0xa6, 0xd6, 0xe8, + 0xb5, 0xd9, 0x10, 0xfb, 0x8e, 0xa5, 0x02, 0xe0, + 0x18, 0xf0, 0x0e, 0x90, 0x0c, 0x20, 0xea, 0xe8, + 0xae, 0xa5, 0x02, 0xca, 0xc6, 0xd6, 0x4c, 0xda, + 0xe6, 0xa5, 0xac, 0x48, 0xa5, 0xad, 0x48, 0xa5, + 0xae, 0x48, 0xa5, 0xaf, 0x48, 0xa2, 0x19, 0xca, + 0x20, 0xf0, 0xe9, 0xec, 0xa5, 0x02, 0x90, 0x0e, + 0xf0, 0x0c, 0xbd, 0xef, 0xec, 0x85, 0xac, 0xb5, + 0xd8, 0x20, 0xc8, 0xe9, 0x30, 0xe9, 0x20, 0xff, + 0xe9, 0xa2, 0x17, 0xec, 0xa5, 0x02, 0x90, 0x0f, + 0xb5, 0xda, 0x29, 0x7f, 0xb4, 0xd9, 0x10, 0x02, + 0x09, 0x80, 0x95, 0xda, 0xca, 0xd0, 0xec, 0xae, + 0xa5, 0x02, 0x20, 0xda, 0xe6, 0x4c, 0x58, 0xe9, + 0x29, 0x03, 0x0d, 0x88, 0x02, 0x85, 0xad, 0x20, + 0xe0, 0xe9, 0xa0, 0x27, 0xb1, 0xac, 0x91, 0xd1, + 0xb1, 0xae, 0x91, 0xf3, 0x88, 0x10, 0xf5, 0x60, + 0x20, 0x24, 0xea, 0xa5, 0xac, 0x85, 0xae, 0xa5, + 0xad, 0x29, 0x03, 0x09, 0xd8, 0x85, 0xaf, 0x60, + 0xbd, 0xf0, 0xec, 0x85, 0xd1, 0xb5, 0xd9, 0x29, + 0x03, 0x0d, 0x88, 0x02, 0x85, 0xd2, 0x60, 0xa0, + 0x27, 0x20, 0xf0, 0xe9, 0x20, 0x24, 0xea, 0x20, + 0xda, 0xe4, 0xa9, 0x20, 0x91, 0xd1, 0x88, 0x10, + 0xf6, 0x60, 0xea, 0xa8, 0xa9, 0x02, 0x85, 0xcd, + 0x20, 0x24, 0xea, 0x98, 0xa4, 0xd3, 0x91, 0xd1, + 0x8a, 0x91, 0xf3, 0x60, 0xa5, 0xd1, 0x85, 0xf3, + 0xa5, 0xd2, 0x29, 0x03, 0x09, 0xd8, 0x85, 0xf4, + 0x60, 0x20, 0xea, 0xff, 0xa5, 0xcc, 0xd0, 0x29, + 0xc6, 0xcd, 0xd0, 0x25, 0xa9, 0x14, 0x85, 0xcd, + 0xa4, 0xd3, 0x46, 0xcf, 0xae, 0x87, 0x02, 0xb1, + 0xd1, 0xb0, 0x11, 0xe6, 0xcf, 0x85, 0xce, 0x20, + 0x24, 0xea, 0xb1, 0xf3, 0x8d, 0x87, 0x02, 0xae, + 0x86, 0x02, 0xa5, 0xce, 0x49, 0x80, 0x20, 0x1c, + 0xea, 0xa5, 0x01, 0x29, 0x10, 0xf0, 0x0a, 0xa0, + 0x00, 0x84, 0xc0, 0xa5, 0x01, 0x09, 0x20, 0xd0, + 0x08, 0xa5, 0xc0, 0xd0, 0x06, 0xa5, 0x01, 0x29, + 0x1f, 0x85, 0x01, 0x20, 0x87, 0xea, 0xad, 0x0d, + 0xdc, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa9, + 0x00, 0x8d, 0x8d, 0x02, 0xa0, 0x40, 0x84, 0xcb, + 0x8d, 0x00, 0xdc, 0xae, 0x01, 0xdc, 0xe0, 0xff, + 0xf0, 0x61, 0xa8, 0xa9, 0x81, 0x85, 0xf5, 0xa9, + 0xeb, 0x85, 0xf6, 0xa9, 0xfe, 0x8d, 0x00, 0xdc, + 0xa2, 0x08, 0x48, 0xad, 0x01, 0xdc, 0xcd, 0x01, + 0xdc, 0xd0, 0xf8, 0x4a, 0xb0, 0x16, 0x48, 0xb1, + 0xf5, 0xc9, 0x05, 0xb0, 0x0c, 0xc9, 0x03, 0xf0, + 0x08, 0x0d, 0x8d, 0x02, 0x8d, 0x8d, 0x02, 0x10, + 0x02, 0x84, 0xcb, 0x68, 0xc8, 0xc0, 0x41, 0xb0, + 0x0b, 0xca, 0xd0, 0xdf, 0x38, 0x68, 0x2a, 0x8d, + 0x00, 0xdc, 0xd0, 0xcc, 0x68, 0x6c, 0x8f, 0x02, + 0xa4, 0xcb, 0xb1, 0xf5, 0xaa, 0xc4, 0xc5, 0xf0, + 0x07, 0xa0, 0x10, 0x8c, 0x8c, 0x02, 0xd0, 0x36, + 0x29, 0x7f, 0x2c, 0x8a, 0x02, 0x30, 0x16, 0x70, + 0x49, 0xc9, 0x7f, 0xf0, 0x29, 0xc9, 0x14, 0xf0, + 0x0c, 0xc9, 0x20, 0xf0, 0x08, 0xc9, 0x1d, 0xf0, + 0x04, 0xc9, 0x11, 0xd0, 0x35, 0xac, 0x8c, 0x02, + 0xf0, 0x05, 0xce, 0x8c, 0x02, 0xd0, 0x2b, 0xce, + 0x8b, 0x02, 0xd0, 0x26, 0xa0, 0x04, 0x8c, 0x8b, + 0x02, 0xa4, 0xc6, 0x88, 0x10, 0x1c, 0xa4, 0xcb, + 0x84, 0xc5, 0xac, 0x8d, 0x02, 0x8c, 0x8e, 0x02, + 0xe0, 0xff, 0xf0, 0x0e, 0x8a, 0xa6, 0xc6, 0xec, + 0x89, 0x02, 0xb0, 0x06, 0x9d, 0x77, 0x02, 0xe8, + 0x86, 0xc6, 0xa9, 0x7f, 0x8d, 0x00, 0xdc, 0x60, + 0xad, 0x8d, 0x02, 0xc9, 0x03, 0xd0, 0x15, 0xcd, + 0x8e, 0x02, 0xf0, 0xee, 0xad, 0x91, 0x02, 0x30, + 0x1d, 0xad, 0x18, 0xd0, 0x49, 0x02, 0x8d, 0x18, + 0xd0, 0x4c, 0x76, 0xeb, 0x0a, 0xc9, 0x08, 0x90, + 0x02, 0xa9, 0x06, 0xaa, 0xbd, 0x79, 0xeb, 0x85, + 0xf5, 0xbd, 0x7a, 0xeb, 0x85, 0xf6, 0x4c, 0xe0, + 0xea, 0x81, 0xeb, 0xc2, 0xeb, 0x03, 0xec, 0x78, + 0xec, 0x14, 0x0d, 0x1d, 0x88, 0x85, 0x86, 0x87, + 0x11, 0x33, 0x57, 0x41, 0x34, 0x5a, 0x53, 0x45, + 0x01, 0x35, 0x52, 0x44, 0x36, 0x43, 0x46, 0x54, + 0x58, 0x37, 0x59, 0x47, 0x38, 0x42, 0x48, 0x55, + 0x56, 0x39, 0x49, 0x4a, 0x30, 0x4d, 0x4b, 0x4f, + 0x4e, 0x2b, 0x50, 0x4c, 0x2d, 0x2e, 0x3a, 0x40, + 0x2c, 0x5c, 0x2a, 0x3b, 0x13, 0x01, 0x3d, 0x5e, + 0x2f, 0x31, 0x5f, 0x04, 0x32, 0x20, 0x02, 0x51, + 0x03, 0xff, 0x94, 0x8d, 0x9d, 0x8c, 0x89, 0x8a, + 0x8b, 0x91, 0x23, 0xd7, 0xc1, 0x24, 0xda, 0xd3, + 0xc5, 0x01, 0x25, 0xd2, 0xc4, 0x26, 0xc3, 0xc6, + 0xd4, 0xd8, 0x27, 0xd9, 0xc7, 0x28, 0xc2, 0xc8, + 0xd5, 0xd6, 0x29, 0xc9, 0xca, 0x30, 0xcd, 0xcb, + 0xcf, 0xce, 0xdb, 0xd0, 0xcc, 0xdd, 0x3e, 0x5b, + 0xba, 0x3c, 0xa9, 0xc0, 0x5d, 0x93, 0x01, 0x3d, + 0xde, 0x3f, 0x21, 0x5f, 0x04, 0x22, 0xa0, 0x02, + 0xd1, 0x83, 0xff, 0x94, 0x8d, 0x9d, 0x8c, 0x89, + 0x8a, 0x8b, 0x91, 0x96, 0xb3, 0xb0, 0x97, 0xad, + 0xae, 0xb1, 0x01, 0x98, 0xb2, 0xac, 0x99, 0xbc, + 0xbb, 0xa3, 0xbd, 0x9a, 0xb7, 0xa5, 0x9b, 0xbf, + 0xb4, 0xb8, 0xbe, 0x29, 0xa2, 0xb5, 0x30, 0xa7, + 0xa1, 0xb9, 0xaa, 0xa6, 0xaf, 0xb6, 0xdc, 0x3e, + 0x5b, 0xa4, 0x3c, 0xa8, 0xdf, 0x5d, 0x93, 0x01, + 0x3d, 0xde, 0x3f, 0x81, 0x5f, 0x04, 0x95, 0xa0, + 0x02, 0xab, 0x83, 0xff, 0xc9, 0x0e, 0xd0, 0x07, + 0xad, 0x18, 0xd0, 0x09, 0x02, 0xd0, 0x09, 0xc9, + 0x8e, 0xd0, 0x0b, 0xad, 0x18, 0xd0, 0x29, 0xfd, + 0x8d, 0x18, 0xd0, 0x4c, 0xa8, 0xe6, 0xc9, 0x08, + 0xd0, 0x07, 0xa9, 0x80, 0x0d, 0x91, 0x02, 0x30, + 0x09, 0xc9, 0x09, 0xd0, 0xee, 0xa9, 0x7f, 0x2d, + 0x91, 0x02, 0x8d, 0x91, 0x02, 0x4c, 0xa8, 0xe6, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1c, 0x17, 0x01, 0x9f, 0x1a, 0x13, 0x05, 0xff, + 0x9c, 0x12, 0x04, 0x1e, 0x03, 0x06, 0x14, 0x18, + 0x1f, 0x19, 0x07, 0x9e, 0x02, 0x08, 0x15, 0x16, + 0x12, 0x09, 0x0a, 0x92, 0x0d, 0x0b, 0x0f, 0x0e, + 0xff, 0x10, 0x0c, 0xff, 0xff, 0x1b, 0x00, 0xff, + 0x1c, 0xff, 0x1d, 0xff, 0xff, 0x1f, 0x1e, 0xff, + 0x90, 0x06, 0xff, 0x05, 0xff, 0xff, 0x11, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x9b, 0x37, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x14, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x06, 0x01, 0x02, 0x03, 0x04, 0x00, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x4c, + 0x4f, 0x41, 0x44, 0x0d, 0x52, 0x55, 0x4e, 0x0d, + 0x00, 0x28, 0x50, 0x78, 0xa0, 0xc8, 0xf0, 0x18, + 0x40, 0x68, 0x90, 0xb8, 0xe0, 0x08, 0x30, 0x58, + 0x80, 0xa8, 0xd0, 0xf8, 0x20, 0x48, 0x70, 0x98, + 0xc0, 0x09, 0x40, 0x2c, 0x09, 0x20, 0x20, 0xa4, + 0xf0, 0x48, 0x24, 0x94, 0x10, 0x0a, 0x38, 0x66, + 0xa3, 0x20, 0x40, 0xed, 0x46, 0x94, 0x46, 0xa3, + 0x68, 0x85, 0x95, 0x78, 0x20, 0x97, 0xee, 0xc9, + 0x3f, 0xd0, 0x03, 0x20, 0x85, 0xee, 0xad, 0x00, + 0xdd, 0x09, 0x08, 0x8d, 0x00, 0xdd, 0x78, 0x20, + 0x8e, 0xee, 0x20, 0x97, 0xee, 0x20, 0xb3, 0xee, + 0x78, 0x20, 0x97, 0xee, 0x20, 0xa9, 0xee, 0xb0, + 0x64, 0x20, 0x85, 0xee, 0x24, 0xa3, 0x10, 0x0a, + 0x20, 0xa9, 0xee, 0x90, 0xfb, 0x20, 0xa9, 0xee, + 0xb0, 0xfb, 0x20, 0xa9, 0xee, 0x90, 0xfb, 0x20, + 0x8e, 0xee, 0xa9, 0x08, 0x85, 0xa5, 0xad, 0x00, + 0xdd, 0xcd, 0x00, 0xdd, 0xd0, 0xf8, 0x0a, 0x90, + 0x3f, 0x66, 0x95, 0xb0, 0x05, 0x20, 0xa0, 0xee, + 0xd0, 0x03, 0x20, 0x97, 0xee, 0x20, 0x85, 0xee, + 0xea, 0xea, 0xea, 0xea, 0xad, 0x00, 0xdd, 0x29, + 0xdf, 0x09, 0x10, 0x8d, 0x00, 0xdd, 0xc6, 0xa5, + 0xd0, 0xd4, 0xa9, 0x04, 0x8d, 0x07, 0xdc, 0xa9, + 0x19, 0x8d, 0x0f, 0xdc, 0xad, 0x0d, 0xdc, 0xad, + 0x0d, 0xdc, 0x29, 0x02, 0xd0, 0x0a, 0x20, 0xa9, + 0xee, 0xb0, 0xf4, 0x58, 0x60, 0xa9, 0x80, 0x2c, + 0xa9, 0x03, 0x20, 0x1c, 0xfe, 0x58, 0x18, 0x90, + 0x4a, 0x85, 0x95, 0x20, 0x36, 0xed, 0xad, 0x00, + 0xdd, 0x29, 0xf7, 0x8d, 0x00, 0xdd, 0x60, 0x85, + 0x95, 0x20, 0x36, 0xed, 0x78, 0x20, 0xa0, 0xee, + 0x20, 0xbe, 0xed, 0x20, 0x85, 0xee, 0x20, 0xa9, + 0xee, 0x30, 0xfb, 0x58, 0x60, 0x24, 0x94, 0x30, + 0x05, 0x38, 0x66, 0x94, 0xd0, 0x05, 0x48, 0x20, + 0x40, 0xed, 0x68, 0x85, 0x95, 0x18, 0x60, 0x78, + 0x20, 0x8e, 0xee, 0xad, 0x00, 0xdd, 0x09, 0x08, + 0x8d, 0x00, 0xdd, 0xa9, 0x5f, 0x2c, 0xa9, 0x3f, + 0x20, 0x11, 0xed, 0x20, 0xbe, 0xed, 0x8a, 0xa2, + 0x0a, 0xca, 0xd0, 0xfd, 0xaa, 0x20, 0x85, 0xee, + 0x4c, 0x97, 0xee, 0x78, 0xa9, 0x00, 0x85, 0xa5, + 0x20, 0x85, 0xee, 0x20, 0xa9, 0xee, 0x10, 0xfb, + 0xa9, 0x01, 0x8d, 0x07, 0xdc, 0xa9, 0x19, 0x8d, + 0x0f, 0xdc, 0x20, 0x97, 0xee, 0xad, 0x0d, 0xdc, + 0xad, 0x0d, 0xdc, 0x29, 0x02, 0xd0, 0x07, 0x20, + 0xa9, 0xee, 0x30, 0xf4, 0x10, 0x18, 0xa5, 0xa5, + 0xf0, 0x05, 0xa9, 0x02, 0x4c, 0xb2, 0xed, 0x20, + 0xa0, 0xee, 0x20, 0x85, 0xee, 0xa9, 0x40, 0x20, + 0x1c, 0xfe, 0xe6, 0xa5, 0xd0, 0xca, 0xa9, 0x08, + 0x85, 0xa5, 0xad, 0x00, 0xdd, 0xcd, 0x00, 0xdd, + 0xd0, 0xf8, 0x0a, 0x10, 0xf5, 0x66, 0xa4, 0xad, + 0x00, 0xdd, 0xcd, 0x00, 0xdd, 0xd0, 0xf8, 0x0a, + 0x30, 0xf5, 0xc6, 0xa5, 0xd0, 0xe4, 0x20, 0xa0, + 0xee, 0x24, 0x90, 0x50, 0x03, 0x20, 0x06, 0xee, + 0xa5, 0xa4, 0x58, 0x18, 0x60, 0xad, 0x00, 0xdd, + 0x29, 0xef, 0x8d, 0x00, 0xdd, 0x60, 0xad, 0x00, + 0xdd, 0x09, 0x10, 0x8d, 0x00, 0xdd, 0x60, 0xad, + 0x00, 0xdd, 0x29, 0xdf, 0x8d, 0x00, 0xdd, 0x60, + 0xad, 0x00, 0xdd, 0x09, 0x20, 0x8d, 0x00, 0xdd, + 0x60, 0xad, 0x00, 0xdd, 0xcd, 0x00, 0xdd, 0xd0, + 0xf8, 0x0a, 0x60, 0x8a, 0xa2, 0xb8, 0xca, 0xd0, + 0xfd, 0xaa, 0x60, 0xa5, 0xb4, 0xf0, 0x47, 0x30, + 0x3f, 0x46, 0xb6, 0xa2, 0x00, 0x90, 0x01, 0xca, + 0x8a, 0x45, 0xbd, 0x85, 0xbd, 0xc6, 0xb4, 0xf0, + 0x06, 0x8a, 0x29, 0x04, 0x85, 0xb5, 0x60, 0xa9, + 0x20, 0x2c, 0x94, 0x02, 0xf0, 0x14, 0x30, 0x1c, + 0x70, 0x14, 0xa5, 0xbd, 0xd0, 0x01, 0xca, 0xc6, + 0xb4, 0xad, 0x93, 0x02, 0x10, 0xe3, 0xc6, 0xb4, + 0xd0, 0xdf, 0xe6, 0xb4, 0xd0, 0xf0, 0xa5, 0xbd, + 0xf0, 0xed, 0xd0, 0xea, 0x70, 0xe9, 0x50, 0xe6, + 0xe6, 0xb4, 0xa2, 0xff, 0xd0, 0xcb, 0xad, 0x94, + 0x02, 0x4a, 0x90, 0x07, 0x2c, 0x01, 0xdd, 0x10, + 0x1d, 0x50, 0x1e, 0xa9, 0x00, 0x85, 0xbd, 0x85, + 0xb5, 0xae, 0x98, 0x02, 0x86, 0xb4, 0xac, 0x9d, + 0x02, 0xcc, 0x9e, 0x02, 0xf0, 0x13, 0xb1, 0xf9, + 0x85, 0xb6, 0xee, 0x9d, 0x02, 0x60, 0xa9, 0x40, + 0x2c, 0xa9, 0x10, 0x0d, 0x97, 0x02, 0x8d, 0x97, + 0x02, 0xa9, 0x01, 0x8d, 0x0d, 0xdd, 0x4d, 0xa1, + 0x02, 0x09, 0x80, 0x8d, 0xa1, 0x02, 0x8d, 0x0d, + 0xdd, 0x60, 0xa2, 0x09, 0xa9, 0x20, 0x2c, 0x93, + 0x02, 0xf0, 0x01, 0xca, 0x50, 0x02, 0xca, 0xca, + 0x60, 0xa6, 0xa9, 0xd0, 0x33, 0xc6, 0xa8, 0xf0, + 0x36, 0x30, 0x0d, 0xa5, 0xa7, 0x45, 0xab, 0x85, + 0xab, 0x46, 0xa7, 0x66, 0xaa, 0x60, 0xc6, 0xa8, + 0xa5, 0xa7, 0xf0, 0x67, 0xad, 0x93, 0x02, 0x0a, + 0xa9, 0x01, 0x65, 0xa8, 0xd0, 0xef, 0xa9, 0x90, + 0x8d, 0x0d, 0xdd, 0x0d, 0xa1, 0x02, 0x8d, 0xa1, + 0x02, 0x85, 0xa9, 0xa9, 0x02, 0x4c, 0x3b, 0xef, + 0xa5, 0xa7, 0xd0, 0xea, 0x4c, 0xd3, 0xe4, 0xac, + 0x9b, 0x02, 0xc8, 0xcc, 0x9c, 0x02, 0xf0, 0x2a, + 0x8c, 0x9b, 0x02, 0x88, 0xa5, 0xaa, 0xae, 0x98, + 0x02, 0xe0, 0x09, 0xf0, 0x04, 0x4a, 0xe8, 0xd0, + 0xf8, 0x91, 0xf7, 0xa9, 0x20, 0x2c, 0x94, 0x02, + 0xf0, 0xb4, 0x30, 0xb1, 0xa5, 0xa7, 0x45, 0xab, + 0xf0, 0x03, 0x70, 0xa9, 0x2c, 0x50, 0xa6, 0xa9, + 0x01, 0x2c, 0xa9, 0x04, 0x2c, 0xa9, 0x80, 0x2c, + 0xa9, 0x02, 0x0d, 0x97, 0x02, 0x8d, 0x97, 0x02, + 0x4c, 0x7e, 0xef, 0xa5, 0xaa, 0xd0, 0xf1, 0xf0, + 0xec, 0x85, 0x9a, 0xad, 0x94, 0x02, 0x4a, 0x90, + 0x29, 0xa9, 0x02, 0x2c, 0x01, 0xdd, 0x10, 0x1d, + 0xd0, 0x20, 0xad, 0xa1, 0x02, 0x29, 0x02, 0xd0, + 0xf9, 0x2c, 0x01, 0xdd, 0x70, 0xfb, 0xad, 0x01, + 0xdd, 0x09, 0x02, 0x8d, 0x01, 0xdd, 0x2c, 0x01, + 0xdd, 0x70, 0x07, 0x30, 0xf9, 0xa9, 0x40, 0x8d, + 0x97, 0x02, 0x18, 0x60, 0x20, 0x28, 0xf0, 0xac, + 0x9e, 0x02, 0xc8, 0xcc, 0x9d, 0x02, 0xf0, 0xf4, + 0x8c, 0x9e, 0x02, 0x88, 0xa5, 0x9e, 0x91, 0xf9, + 0xad, 0xa1, 0x02, 0x4a, 0xb0, 0x1e, 0xa9, 0x10, + 0x8d, 0x0e, 0xdd, 0xad, 0x99, 0x02, 0x8d, 0x04, + 0xdd, 0xad, 0x9a, 0x02, 0x8d, 0x05, 0xdd, 0xa9, + 0x81, 0x20, 0x3b, 0xef, 0x20, 0x06, 0xef, 0xa9, + 0x11, 0x8d, 0x0e, 0xdd, 0x60, 0x85, 0x99, 0xad, + 0x94, 0x02, 0x4a, 0x90, 0x28, 0x29, 0x08, 0xf0, + 0x24, 0xa9, 0x02, 0x2c, 0x01, 0xdd, 0x10, 0xad, + 0xf0, 0x22, 0xad, 0xa1, 0x02, 0x4a, 0xb0, 0xfa, + 0xad, 0x01, 0xdd, 0x29, 0xfd, 0x8d, 0x01, 0xdd, + 0xad, 0x01, 0xdd, 0x29, 0x04, 0xf0, 0xf9, 0xa9, + 0x90, 0x18, 0x4c, 0x3b, 0xef, 0xad, 0xa1, 0x02, + 0x29, 0x12, 0xf0, 0xf3, 0x18, 0x60, 0xad, 0x97, + 0x02, 0xac, 0x9c, 0x02, 0xcc, 0x9b, 0x02, 0xf0, + 0x0b, 0x29, 0xf7, 0x8d, 0x97, 0x02, 0xb1, 0xf7, + 0xee, 0x9c, 0x02, 0x60, 0x09, 0x08, 0x8d, 0x97, + 0x02, 0xa9, 0x00, 0x60, 0x48, 0xad, 0xa1, 0x02, + 0xf0, 0x11, 0xad, 0xa1, 0x02, 0x29, 0x03, 0xd0, + 0xf9, 0xa9, 0x10, 0x8d, 0x0d, 0xdd, 0xa9, 0x00, + 0x8d, 0xa1, 0x02, 0x68, 0x60, 0x0d, 0x49, 0x2f, + 0x4f, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x20, + 0xa3, 0x0d, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, + 0x49, 0x4e, 0x47, 0xa0, 0x46, 0x4f, 0x52, 0xa0, + 0x0d, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x50, + 0x4c, 0x41, 0x59, 0x20, 0x4f, 0x4e, 0x20, 0x54, + 0x41, 0x50, 0xc5, 0x50, 0x52, 0x45, 0x53, 0x53, + 0x20, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x20, + 0x26, 0x20, 0x50, 0x4c, 0x41, 0x59, 0x20, 0x4f, + 0x4e, 0x20, 0x54, 0x41, 0x50, 0xc5, 0x0d, 0x4c, + 0x4f, 0x41, 0x44, 0x49, 0x4e, 0xc7, 0x0d, 0x53, + 0x41, 0x56, 0x49, 0x4e, 0x47, 0xa0, 0x0d, 0x56, + 0x45, 0x52, 0x49, 0x46, 0x59, 0x49, 0x4e, 0xc7, + 0x0d, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0xa0, 0x0d, + 0x4f, 0x4b, 0x8d, 0x24, 0x9d, 0x10, 0x0d, 0xb9, + 0xbd, 0xf0, 0x08, 0x29, 0x7f, 0x20, 0xd2, 0xff, + 0xc8, 0x28, 0x10, 0xf3, 0x18, 0x60, 0xa5, 0x99, + 0xd0, 0x08, 0xa5, 0xc6, 0xf0, 0x0f, 0x78, 0x4c, + 0xb4, 0xe5, 0xc9, 0x02, 0xd0, 0x18, 0x84, 0x97, + 0x20, 0x86, 0xf0, 0xa4, 0x97, 0x18, 0x60, 0xa5, + 0x99, 0xd0, 0x0b, 0xa5, 0xd3, 0x85, 0xca, 0xa5, + 0xd6, 0x85, 0xc9, 0x4c, 0x32, 0xe6, 0xc9, 0x03, + 0xd0, 0x09, 0x85, 0xd0, 0xa5, 0xd5, 0x85, 0xc8, + 0x4c, 0x32, 0xe6, 0xb0, 0x38, 0xc9, 0x02, 0xf0, + 0x3f, 0x86, 0x97, 0x20, 0x99, 0xf1, 0xb0, 0x16, + 0x48, 0x20, 0x99, 0xf1, 0xb0, 0x0d, 0xd0, 0x05, + 0xa9, 0x40, 0x20, 0x1c, 0xfe, 0xc6, 0xa6, 0xa6, + 0x97, 0x68, 0x60, 0xaa, 0x68, 0x8a, 0xa6, 0x97, + 0x60, 0x20, 0x0d, 0xf8, 0xd0, 0x0b, 0x20, 0x41, + 0xf8, 0xb0, 0x11, 0xa9, 0x00, 0x85, 0xa6, 0xf0, + 0xf0, 0xb1, 0xb2, 0x18, 0x60, 0xa5, 0x90, 0xf0, + 0x04, 0xa9, 0x0d, 0x18, 0x60, 0x4c, 0x13, 0xee, + 0x20, 0x4e, 0xf1, 0xb0, 0xf7, 0xc9, 0x00, 0xd0, + 0xf2, 0xad, 0x97, 0x02, 0x29, 0x60, 0xd0, 0xe9, + 0xf0, 0xee, 0x48, 0xa5, 0x9a, 0xc9, 0x03, 0xd0, + 0x04, 0x68, 0x4c, 0x16, 0xe7, 0x90, 0x04, 0x68, + 0x4c, 0xdd, 0xed, 0x4a, 0x68, 0x85, 0x9e, 0x8a, + 0x48, 0x98, 0x48, 0x90, 0x23, 0x20, 0x0d, 0xf8, + 0xd0, 0x0e, 0x20, 0x64, 0xf8, 0xb0, 0x0e, 0xa9, + 0x02, 0xa0, 0x00, 0x91, 0xb2, 0xc8, 0x84, 0xa6, + 0xa5, 0x9e, 0x91, 0xb2, 0x18, 0x68, 0xa8, 0x68, + 0xaa, 0xa5, 0x9e, 0x90, 0x02, 0xa9, 0x00, 0x60, + 0x20, 0x17, 0xf0, 0x4c, 0xfc, 0xf1, 0x20, 0x0f, + 0xf3, 0xf0, 0x03, 0x4c, 0x01, 0xf7, 0x20, 0x1f, + 0xf3, 0xa5, 0xba, 0xf0, 0x16, 0xc9, 0x03, 0xf0, + 0x12, 0xb0, 0x14, 0xc9, 0x02, 0xd0, 0x03, 0x4c, + 0x4d, 0xf0, 0xa6, 0xb9, 0xe0, 0x60, 0xf0, 0x03, + 0x4c, 0x0a, 0xf7, 0x85, 0x99, 0x18, 0x60, 0xaa, + 0x20, 0x09, 0xed, 0xa5, 0xb9, 0x10, 0x06, 0x20, + 0xcc, 0xed, 0x4c, 0x48, 0xf2, 0x20, 0xc7, 0xed, + 0x8a, 0x24, 0x90, 0x10, 0xe6, 0x4c, 0x07, 0xf7, + 0x20, 0x0f, 0xf3, 0xf0, 0x03, 0x4c, 0x01, 0xf7, + 0x20, 0x1f, 0xf3, 0xa5, 0xba, 0xd0, 0x03, 0x4c, + 0x0d, 0xf7, 0xc9, 0x03, 0xf0, 0x0f, 0xb0, 0x11, + 0xc9, 0x02, 0xd0, 0x03, 0x4c, 0xe1, 0xef, 0xa6, + 0xb9, 0xe0, 0x60, 0xf0, 0xea, 0x85, 0x9a, 0x18, + 0x60, 0xaa, 0x20, 0x0c, 0xed, 0xa5, 0xb9, 0x10, + 0x05, 0x20, 0xbe, 0xed, 0xd0, 0x03, 0x20, 0xb9, + 0xed, 0x8a, 0x24, 0x90, 0x10, 0xe7, 0x4c, 0x07, + 0xf7, 0x20, 0x14, 0xf3, 0xf0, 0x02, 0x18, 0x60, + 0x20, 0x1f, 0xf3, 0x8a, 0x48, 0xa5, 0xba, 0xf0, + 0x50, 0xc9, 0x03, 0xf0, 0x4c, 0xb0, 0x47, 0xc9, + 0x02, 0xd0, 0x1d, 0x68, 0x20, 0xf2, 0xf2, 0x20, + 0x83, 0xf4, 0x20, 0x27, 0xfe, 0xa5, 0xf8, 0xf0, + 0x01, 0xc8, 0xa5, 0xfa, 0xf0, 0x01, 0xc8, 0xa9, + 0x00, 0x85, 0xf8, 0x85, 0xfa, 0x4c, 0x7d, 0xf4, + 0xa5, 0xb9, 0x29, 0x0f, 0xf0, 0x23, 0x20, 0xd0, + 0xf7, 0xa9, 0x00, 0x38, 0x20, 0xdd, 0xf1, 0x20, + 0x64, 0xf8, 0x90, 0x04, 0x68, 0xa9, 0x00, 0x60, + 0xa5, 0xb9, 0xc9, 0x62, 0xd0, 0x0b, 0xa9, 0x05, + 0x20, 0x6a, 0xf7, 0x4c, 0xf1, 0xf2, 0x20, 0x42, + 0xf6, 0x68, 0xaa, 0xc6, 0x98, 0xe4, 0x98, 0xf0, + 0x14, 0xa4, 0x98, 0xb9, 0x59, 0x02, 0x9d, 0x59, + 0x02, 0xb9, 0x63, 0x02, 0x9d, 0x63, 0x02, 0xb9, + 0x6d, 0x02, 0x9d, 0x6d, 0x02, 0x18, 0x60, 0xa9, + 0x00, 0x85, 0x90, 0x8a, 0xa6, 0x98, 0xca, 0x30, + 0x15, 0xdd, 0x59, 0x02, 0xd0, 0xf8, 0x60, 0xbd, + 0x59, 0x02, 0x85, 0xb8, 0xbd, 0x63, 0x02, 0x85, + 0xba, 0xbd, 0x6d, 0x02, 0x85, 0xb9, 0x60, 0xa9, + 0x00, 0x85, 0x98, 0xa2, 0x03, 0xe4, 0x9a, 0xb0, + 0x03, 0x20, 0xfe, 0xed, 0xe4, 0x99, 0xb0, 0x03, + 0x20, 0xef, 0xed, 0x86, 0x9a, 0xa9, 0x00, 0x85, + 0x99, 0x60, 0xa6, 0xb8, 0xd0, 0x03, 0x4c, 0x0a, + 0xf7, 0x20, 0x0f, 0xf3, 0xd0, 0x03, 0x4c, 0xfe, + 0xf6, 0xa6, 0x98, 0xe0, 0x0a, 0x90, 0x03, 0x4c, + 0xfb, 0xf6, 0xe6, 0x98, 0xa5, 0xb8, 0x9d, 0x59, + 0x02, 0xa5, 0xb9, 0x09, 0x60, 0x85, 0xb9, 0x9d, + 0x6d, 0x02, 0xa5, 0xba, 0x9d, 0x63, 0x02, 0xf0, + 0x5a, 0xc9, 0x03, 0xf0, 0x56, 0x90, 0x05, 0x20, + 0xd5, 0xf3, 0x90, 0x4f, 0xc9, 0x02, 0xd0, 0x03, + 0x4c, 0x09, 0xf4, 0x20, 0xd0, 0xf7, 0xb0, 0x03, + 0x4c, 0x13, 0xf7, 0xa5, 0xb9, 0x29, 0x0f, 0xd0, + 0x1f, 0x20, 0x17, 0xf8, 0xb0, 0x36, 0x20, 0xaf, + 0xf5, 0xa5, 0xb7, 0xf0, 0x0a, 0x20, 0xea, 0xf7, + 0x90, 0x18, 0xf0, 0x28, 0x4c, 0x04, 0xf7, 0x20, + 0x2c, 0xf7, 0xf0, 0x20, 0x90, 0x0c, 0xb0, 0xf4, + 0x20, 0x38, 0xf8, 0xb0, 0x17, 0xa9, 0x04, 0x20, + 0x6a, 0xf7, 0xa9, 0xbf, 0xa4, 0xb9, 0xc0, 0x60, + 0xf0, 0x07, 0xa0, 0x00, 0xa9, 0x02, 0x91, 0xb2, + 0x98, 0x85, 0xa6, 0x18, 0x60, 0xa5, 0xb9, 0x30, + 0xfa, 0xa4, 0xb7, 0xf0, 0xf6, 0xa9, 0x00, 0x85, + 0x90, 0xa5, 0xba, 0x20, 0x0c, 0xed, 0xa5, 0xb9, + 0x09, 0xf0, 0x20, 0xb9, 0xed, 0xa5, 0x90, 0x10, + 0x05, 0x68, 0x68, 0x4c, 0x07, 0xf7, 0xa5, 0xb7, + 0xf0, 0x0c, 0xa0, 0x00, 0xb1, 0xbb, 0x20, 0xdd, + 0xed, 0xc8, 0xc4, 0xb7, 0xd0, 0xf6, 0x4c, 0x54, + 0xf6, 0x20, 0x83, 0xf4, 0x8c, 0x97, 0x02, 0xc4, + 0xb7, 0xf0, 0x0a, 0xb1, 0xbb, 0x99, 0x93, 0x02, + 0xc8, 0xc0, 0x04, 0xd0, 0xf2, 0x20, 0x4a, 0xef, + 0x8e, 0x98, 0x02, 0xad, 0x93, 0x02, 0x29, 0x0f, + 0xf0, 0x1c, 0x0a, 0xaa, 0xad, 0xa6, 0x02, 0xd0, + 0x09, 0xbc, 0xc1, 0xfe, 0xbd, 0xc0, 0xfe, 0x4c, + 0x40, 0xf4, 0xbc, 0xeb, 0xe4, 0xbd, 0xea, 0xe4, + 0x8c, 0x96, 0x02, 0x8d, 0x95, 0x02, 0xad, 0x95, + 0x02, 0x0a, 0x20, 0x2e, 0xff, 0xad, 0x94, 0x02, + 0x4a, 0x90, 0x09, 0xad, 0x01, 0xdd, 0x0a, 0xb0, + 0x03, 0x20, 0x0d, 0xf0, 0xad, 0x9b, 0x02, 0x8d, + 0x9c, 0x02, 0xad, 0x9e, 0x02, 0x8d, 0x9d, 0x02, + 0x20, 0x27, 0xfe, 0xa5, 0xf8, 0xd0, 0x05, 0x88, + 0x84, 0xf8, 0x86, 0xf7, 0xa5, 0xfa, 0xd0, 0x05, + 0x88, 0x84, 0xfa, 0x86, 0xf9, 0x38, 0xa9, 0xf0, + 0x4c, 0x2d, 0xfe, 0xa9, 0x7f, 0x8d, 0x0d, 0xdd, + 0xa9, 0x06, 0x8d, 0x03, 0xdd, 0x8d, 0x01, 0xdd, + 0xa9, 0x04, 0x0d, 0x00, 0xdd, 0x8d, 0x00, 0xdd, + 0xa0, 0x00, 0x8c, 0xa1, 0x02, 0x60, 0x86, 0xc3, + 0x84, 0xc4, 0x6c, 0x30, 0x03, 0x85, 0x93, 0xa9, + 0x00, 0x85, 0x90, 0xa5, 0xba, 0xd0, 0x03, 0x4c, + 0x13, 0xf7, 0xc9, 0x03, 0xf0, 0xf9, 0x90, 0x7b, + 0xa4, 0xb7, 0xd0, 0x03, 0x4c, 0x10, 0xf7, 0xa6, + 0xb9, 0x20, 0xaf, 0xf5, 0xa9, 0x60, 0x85, 0xb9, + 0x20, 0xd5, 0xf3, 0xa5, 0xba, 0x20, 0x09, 0xed, + 0xa5, 0xb9, 0x20, 0xc7, 0xed, 0x20, 0x13, 0xee, + 0x85, 0xae, 0xa5, 0x90, 0x4a, 0x4a, 0xb0, 0x50, + 0x20, 0x13, 0xee, 0x85, 0xaf, 0x8a, 0xd0, 0x08, + 0xa5, 0xc3, 0x85, 0xae, 0xa5, 0xc4, 0x85, 0xaf, + 0x20, 0xd2, 0xf5, 0xa9, 0xfd, 0x25, 0x90, 0x85, + 0x90, 0x20, 0xe1, 0xff, 0xd0, 0x03, 0x4c, 0x33, + 0xf6, 0x20, 0x13, 0xee, 0xaa, 0xa5, 0x90, 0x4a, + 0x4a, 0xb0, 0xe8, 0x8a, 0xa4, 0x93, 0xf0, 0x0c, + 0xa0, 0x00, 0xd1, 0xae, 0xf0, 0x08, 0xa9, 0x10, + 0x20, 0x1c, 0xfe, 0x2c, 0x91, 0xae, 0xe6, 0xae, + 0xd0, 0x02, 0xe6, 0xaf, 0x24, 0x90, 0x50, 0xcb, + 0x20, 0xef, 0xed, 0x20, 0x42, 0xf6, 0x90, 0x79, + 0x4c, 0x04, 0xf7, 0x4a, 0xb0, 0x03, 0x4c, 0x13, + 0xf7, 0x20, 0xd0, 0xf7, 0xb0, 0x03, 0x4c, 0x13, + 0xf7, 0x20, 0x17, 0xf8, 0xb0, 0x68, 0x20, 0xaf, + 0xf5, 0xa5, 0xb7, 0xf0, 0x09, 0x20, 0xea, 0xf7, + 0x90, 0x0b, 0xf0, 0x5a, 0xb0, 0xda, 0x20, 0x2c, + 0xf7, 0xf0, 0x53, 0xb0, 0xd3, 0xa5, 0x90, 0x29, + 0x10, 0x38, 0xd0, 0x4a, 0xe0, 0x01, 0xf0, 0x11, + 0xe0, 0x03, 0xd0, 0xdd, 0xa0, 0x01, 0xb1, 0xb2, + 0x85, 0xc3, 0xc8, 0xb1, 0xb2, 0x85, 0xc4, 0xb0, + 0x04, 0xa5, 0xb9, 0xd0, 0xef, 0xa0, 0x03, 0xb1, + 0xb2, 0xa0, 0x01, 0xf1, 0xb2, 0xaa, 0xa0, 0x04, + 0xb1, 0xb2, 0xa0, 0x02, 0xf1, 0xb2, 0xa8, 0x18, + 0x8a, 0x65, 0xc3, 0x85, 0xae, 0x98, 0x65, 0xc4, + 0x85, 0xaf, 0xa5, 0xc3, 0x85, 0xc1, 0xa5, 0xc4, + 0x85, 0xc2, 0x20, 0xd2, 0xf5, 0x20, 0x4a, 0xf8, + 0x24, 0x18, 0xa6, 0xae, 0xa4, 0xaf, 0x60, 0xa5, + 0x9d, 0x10, 0x1e, 0xa0, 0x0c, 0x20, 0x2f, 0xf1, + 0xa5, 0xb7, 0xf0, 0x15, 0xa0, 0x17, 0x20, 0x2f, + 0xf1, 0xa4, 0xb7, 0xf0, 0x0c, 0xa0, 0x00, 0xb1, + 0xbb, 0x20, 0xd2, 0xff, 0xc8, 0xc4, 0xb7, 0xd0, + 0xf6, 0x60, 0xa0, 0x49, 0xa5, 0x93, 0xf0, 0x02, + 0xa0, 0x59, 0x4c, 0x2b, 0xf1, 0x86, 0xae, 0x84, + 0xaf, 0xaa, 0xb5, 0x00, 0x85, 0xc1, 0xb5, 0x01, + 0x85, 0xc2, 0x6c, 0x32, 0x03, 0xa5, 0xba, 0xd0, + 0x03, 0x4c, 0x13, 0xf7, 0xc9, 0x03, 0xf0, 0xf9, + 0x90, 0x5f, 0xa9, 0x61, 0x85, 0xb9, 0xa4, 0xb7, + 0xd0, 0x03, 0x4c, 0x10, 0xf7, 0x20, 0xd5, 0xf3, + 0x20, 0x8f, 0xf6, 0xa5, 0xba, 0x20, 0x0c, 0xed, + 0xa5, 0xb9, 0x20, 0xb9, 0xed, 0xa0, 0x00, 0x20, + 0x8e, 0xfb, 0xa5, 0xac, 0x20, 0xdd, 0xed, 0xa5, + 0xad, 0x20, 0xdd, 0xed, 0x20, 0xd1, 0xfc, 0xb0, + 0x16, 0xb1, 0xac, 0x20, 0xdd, 0xed, 0x20, 0xe1, + 0xff, 0xd0, 0x07, 0x20, 0x42, 0xf6, 0xa9, 0x00, + 0x38, 0x60, 0x20, 0xdb, 0xfc, 0xd0, 0xe5, 0x20, + 0xfe, 0xed, 0x24, 0xb9, 0x30, 0x11, 0xa5, 0xba, + 0x20, 0x0c, 0xed, 0xa5, 0xb9, 0x29, 0xef, 0x09, + 0xe0, 0x20, 0xb9, 0xed, 0x20, 0xfe, 0xed, 0x18, + 0x60, 0x4a, 0xb0, 0x03, 0x4c, 0x13, 0xf7, 0x20, + 0xd0, 0xf7, 0x90, 0x8d, 0x20, 0x38, 0xf8, 0xb0, + 0x25, 0x20, 0x8f, 0xf6, 0xa2, 0x03, 0xa5, 0xb9, + 0x29, 0x01, 0xd0, 0x02, 0xa2, 0x01, 0x8a, 0x20, + 0x6a, 0xf7, 0xb0, 0x12, 0x20, 0x67, 0xf8, 0xb0, + 0x0d, 0xa5, 0xb9, 0x29, 0x02, 0xf0, 0x06, 0xa9, + 0x05, 0x20, 0x6a, 0xf7, 0x24, 0x18, 0x60, 0xa5, + 0x9d, 0x10, 0xfb, 0xa0, 0x51, 0x20, 0x2f, 0xf1, + 0x4c, 0xc1, 0xf5, 0xa2, 0x00, 0xe6, 0xa2, 0xd0, + 0x06, 0xe6, 0xa1, 0xd0, 0x02, 0xe6, 0xa0, 0x38, + 0xa5, 0xa2, 0xe9, 0x01, 0xa5, 0xa1, 0xe9, 0x1a, + 0xa5, 0xa0, 0xe9, 0x4f, 0x90, 0x06, 0x86, 0xa0, + 0x86, 0xa1, 0x86, 0xa2, 0xad, 0x01, 0xdc, 0xcd, + 0x01, 0xdc, 0xd0, 0xf8, 0xaa, 0x30, 0x13, 0xa2, + 0xbd, 0x8e, 0x00, 0xdc, 0xae, 0x01, 0xdc, 0xec, + 0x01, 0xdc, 0xd0, 0xf8, 0x8d, 0x00, 0xdc, 0xe8, + 0xd0, 0x02, 0x85, 0x91, 0x60, 0x78, 0xa5, 0xa2, + 0xa6, 0xa1, 0xa4, 0xa0, 0x78, 0x85, 0xa2, 0x86, + 0xa1, 0x84, 0xa0, 0x58, 0x60, 0xa5, 0x91, 0xc9, + 0x7f, 0xd0, 0x07, 0x08, 0x20, 0xcc, 0xff, 0x85, + 0xc6, 0x28, 0x60, 0xa9, 0x01, 0x2c, 0xa9, 0x02, + 0x2c, 0xa9, 0x03, 0x2c, 0xa9, 0x04, 0x2c, 0xa9, + 0x05, 0x2c, 0xa9, 0x06, 0x2c, 0xa9, 0x07, 0x2c, + 0xa9, 0x08, 0x2c, 0xa9, 0x09, 0x48, 0x20, 0xcc, + 0xff, 0xa0, 0x00, 0x24, 0x9d, 0x50, 0x0a, 0x20, + 0x2f, 0xf1, 0x68, 0x48, 0x09, 0x30, 0x20, 0xd2, + 0xff, 0x68, 0x38, 0x60, 0xa5, 0x93, 0x48, 0x20, + 0x41, 0xf8, 0x68, 0x85, 0x93, 0xb0, 0x32, 0xa0, + 0x00, 0xb1, 0xb2, 0xc9, 0x05, 0xf0, 0x2a, 0xc9, + 0x01, 0xf0, 0x08, 0xc9, 0x03, 0xf0, 0x04, 0xc9, + 0x04, 0xd0, 0xe1, 0xaa, 0x24, 0x9d, 0x10, 0x17, + 0xa0, 0x63, 0x20, 0x2f, 0xf1, 0xa0, 0x05, 0xb1, + 0xb2, 0x20, 0xd2, 0xff, 0xc8, 0xc0, 0x15, 0xd0, + 0xf6, 0xa5, 0xa1, 0x20, 0xe0, 0xe4, 0xea, 0x18, + 0x88, 0x60, 0x85, 0x9e, 0x20, 0xd0, 0xf7, 0x90, + 0x5e, 0xa5, 0xc2, 0x48, 0xa5, 0xc1, 0x48, 0xa5, + 0xaf, 0x48, 0xa5, 0xae, 0x48, 0xa0, 0xbf, 0xa9, + 0x20, 0x91, 0xb2, 0x88, 0xd0, 0xfb, 0xa5, 0x9e, + 0x91, 0xb2, 0xc8, 0xa5, 0xc1, 0x91, 0xb2, 0xc8, + 0xa5, 0xc2, 0x91, 0xb2, 0xc8, 0xa5, 0xae, 0x91, + 0xb2, 0xc8, 0xa5, 0xaf, 0x91, 0xb2, 0xc8, 0x84, + 0x9f, 0xa0, 0x00, 0x84, 0x9e, 0xa4, 0x9e, 0xc4, + 0xb7, 0xf0, 0x0c, 0xb1, 0xbb, 0xa4, 0x9f, 0x91, + 0xb2, 0xe6, 0x9e, 0xe6, 0x9f, 0xd0, 0xee, 0x20, + 0xd7, 0xf7, 0xa9, 0x69, 0x85, 0xab, 0x20, 0x6b, + 0xf8, 0xa8, 0x68, 0x85, 0xae, 0x68, 0x85, 0xaf, + 0x68, 0x85, 0xc1, 0x68, 0x85, 0xc2, 0x98, 0x60, + 0xa6, 0xb2, 0xa4, 0xb3, 0xc0, 0x02, 0x60, 0x20, + 0xd0, 0xf7, 0x8a, 0x85, 0xc1, 0x18, 0x69, 0xc0, + 0x85, 0xae, 0x98, 0x85, 0xc2, 0x69, 0x00, 0x85, + 0xaf, 0x60, 0x20, 0x2c, 0xf7, 0xb0, 0x1d, 0xa0, + 0x05, 0x84, 0x9f, 0xa0, 0x00, 0x84, 0x9e, 0xc4, + 0xb7, 0xf0, 0x10, 0xb1, 0xbb, 0xa4, 0x9f, 0xd1, + 0xb2, 0xd0, 0xe7, 0xe6, 0x9e, 0xe6, 0x9f, 0xa4, + 0x9e, 0xd0, 0xec, 0x18, 0x60, 0x20, 0xd0, 0xf7, + 0xe6, 0xa6, 0xa4, 0xa6, 0xc0, 0xc0, 0x60, 0x20, + 0x2e, 0xf8, 0xf0, 0x1a, 0xa0, 0x1b, 0x20, 0x2f, + 0xf1, 0x20, 0xd0, 0xf8, 0x20, 0x2e, 0xf8, 0xd0, + 0xf8, 0xa0, 0x6a, 0x4c, 0x2f, 0xf1, 0xa9, 0x10, + 0x24, 0x01, 0xd0, 0x02, 0x24, 0x01, 0x18, 0x60, + 0x20, 0x2e, 0xf8, 0xf0, 0xf9, 0xa0, 0x2e, 0xd0, + 0xdd, 0xa9, 0x00, 0x85, 0x90, 0x85, 0x93, 0x20, + 0xd7, 0xf7, 0x20, 0x17, 0xf8, 0xb0, 0x1f, 0x78, + 0xa9, 0x00, 0x85, 0xaa, 0x85, 0xb4, 0x85, 0xb0, + 0x85, 0x9e, 0x85, 0x9f, 0x85, 0x9c, 0xa9, 0x90, + 0xa2, 0x0e, 0xd0, 0x11, 0x20, 0xd7, 0xf7, 0xa9, + 0x14, 0x85, 0xab, 0x20, 0x38, 0xf8, 0xb0, 0x6c, + 0x78, 0xa9, 0x82, 0xa2, 0x08, 0xa0, 0x7f, 0x8c, + 0x0d, 0xdc, 0x8d, 0x0d, 0xdc, 0xad, 0x0e, 0xdc, + 0x09, 0x19, 0x8d, 0x0f, 0xdc, 0x29, 0x91, 0x8d, + 0xa2, 0x02, 0x20, 0xa4, 0xf0, 0xad, 0x11, 0xd0, + 0x29, 0xef, 0x8d, 0x11, 0xd0, 0xad, 0x14, 0x03, + 0x8d, 0x9f, 0x02, 0xad, 0x15, 0x03, 0x8d, 0xa0, + 0x02, 0x20, 0xbd, 0xfc, 0xa9, 0x02, 0x85, 0xbe, + 0x20, 0x97, 0xfb, 0xa5, 0x01, 0x29, 0x1f, 0x85, + 0x01, 0x85, 0xc0, 0xa2, 0xff, 0xa0, 0xff, 0x88, + 0xd0, 0xfd, 0xca, 0xd0, 0xf8, 0x58, 0xad, 0xa0, + 0x02, 0xcd, 0x15, 0x03, 0x18, 0xf0, 0x15, 0x20, + 0xd0, 0xf8, 0x20, 0xbc, 0xf6, 0x4c, 0xbe, 0xf8, + 0x20, 0xe1, 0xff, 0x18, 0xd0, 0x0b, 0x20, 0x93, + 0xfc, 0x38, 0x68, 0x68, 0xa9, 0x00, 0x8d, 0xa0, + 0x02, 0x60, 0x86, 0xb1, 0xa5, 0xb0, 0x0a, 0x0a, + 0x18, 0x65, 0xb0, 0x18, 0x65, 0xb1, 0x85, 0xb1, + 0xa9, 0x00, 0x24, 0xb0, 0x30, 0x01, 0x2a, 0x06, + 0xb1, 0x2a, 0x06, 0xb1, 0x2a, 0xaa, 0xad, 0x06, + 0xdc, 0xc9, 0x16, 0x90, 0xf9, 0x65, 0xb1, 0x8d, + 0x04, 0xdc, 0x8a, 0x6d, 0x07, 0xdc, 0x8d, 0x05, + 0xdc, 0xad, 0xa2, 0x02, 0x8d, 0x0e, 0xdc, 0x8d, + 0xa4, 0x02, 0xad, 0x0d, 0xdc, 0x29, 0x10, 0xf0, + 0x09, 0xa9, 0xf9, 0x48, 0xa9, 0x2a, 0x48, 0x4c, + 0x43, 0xff, 0x58, 0x60, 0xae, 0x07, 0xdc, 0xa0, + 0xff, 0x98, 0xed, 0x06, 0xdc, 0xec, 0x07, 0xdc, + 0xd0, 0xf2, 0x86, 0xb1, 0xaa, 0x8c, 0x06, 0xdc, + 0x8c, 0x07, 0xdc, 0xa9, 0x19, 0x8d, 0x0f, 0xdc, + 0xad, 0x0d, 0xdc, 0x8d, 0xa3, 0x02, 0x98, 0xe5, + 0xb1, 0x86, 0xb1, 0x4a, 0x66, 0xb1, 0x4a, 0x66, + 0xb1, 0xa5, 0xb0, 0x18, 0x69, 0x3c, 0xc5, 0xb1, + 0xb0, 0x4a, 0xa6, 0x9c, 0xf0, 0x03, 0x4c, 0x60, + 0xfa, 0xa6, 0xa3, 0x30, 0x1b, 0xa2, 0x00, 0x69, + 0x30, 0x65, 0xb0, 0xc5, 0xb1, 0xb0, 0x1c, 0xe8, + 0x69, 0x26, 0x65, 0xb0, 0xc5, 0xb1, 0xb0, 0x17, + 0x69, 0x2c, 0x65, 0xb0, 0xc5, 0xb1, 0x90, 0x03, + 0x4c, 0x10, 0xfa, 0xa5, 0xb4, 0xf0, 0x1d, 0x85, + 0xa8, 0xd0, 0x19, 0xe6, 0xa9, 0xb0, 0x02, 0xc6, + 0xa9, 0x38, 0xe9, 0x13, 0xe5, 0xb1, 0x65, 0x92, + 0x85, 0x92, 0xa5, 0xa4, 0x49, 0x01, 0x85, 0xa4, + 0xf0, 0x2b, 0x86, 0xd7, 0xa5, 0xb4, 0xf0, 0x22, + 0xad, 0xa3, 0x02, 0x29, 0x01, 0xd0, 0x05, 0xad, + 0xa4, 0x02, 0xd0, 0x16, 0xa9, 0x00, 0x85, 0xa4, + 0x8d, 0xa4, 0x02, 0xa5, 0xa3, 0x10, 0x30, 0x30, + 0xbf, 0xa2, 0xa6, 0x20, 0xe2, 0xf8, 0xa5, 0x9b, + 0xd0, 0xb9, 0x4c, 0xbc, 0xfe, 0xa5, 0x92, 0xf0, + 0x07, 0x30, 0x03, 0xc6, 0xb0, 0x2c, 0xe6, 0xb0, + 0xa9, 0x00, 0x85, 0x92, 0xe4, 0xd7, 0xd0, 0x0f, + 0x8a, 0xd0, 0xa0, 0xa5, 0xa9, 0x30, 0xbd, 0xc9, + 0x10, 0x90, 0xb9, 0x85, 0x96, 0xb0, 0xb5, 0x8a, + 0x45, 0x9b, 0x85, 0x9b, 0xa5, 0xb4, 0xf0, 0xd2, + 0xc6, 0xa3, 0x30, 0xc5, 0x46, 0xd7, 0x66, 0xbf, + 0xa2, 0xda, 0x20, 0xe2, 0xf8, 0x4c, 0xbc, 0xfe, + 0xa5, 0x96, 0xf0, 0x04, 0xa5, 0xb4, 0xf0, 0x07, + 0xa5, 0xa3, 0x30, 0x03, 0x4c, 0x97, 0xf9, 0x46, + 0xb1, 0xa9, 0x93, 0x38, 0xe5, 0xb1, 0x65, 0xb0, + 0x0a, 0xaa, 0x20, 0xe2, 0xf8, 0xe6, 0x9c, 0xa5, + 0xb4, 0xd0, 0x11, 0xa5, 0x96, 0xf0, 0x26, 0x85, + 0xa8, 0xa9, 0x00, 0x85, 0x96, 0xa9, 0x81, 0x8d, + 0x0d, 0xdc, 0x85, 0xb4, 0xa5, 0x96, 0x85, 0xb5, + 0xf0, 0x09, 0xa9, 0x00, 0x85, 0xb4, 0xa9, 0x01, + 0x8d, 0x0d, 0xdc, 0xa5, 0xbf, 0x85, 0xbd, 0xa5, + 0xa8, 0x05, 0xa9, 0x85, 0xb6, 0x4c, 0xbc, 0xfe, + 0x20, 0x97, 0xfb, 0x85, 0x9c, 0xa2, 0xda, 0x20, + 0xe2, 0xf8, 0xa5, 0xbe, 0xf0, 0x02, 0x85, 0xa7, + 0xa9, 0x0f, 0x24, 0xaa, 0x10, 0x17, 0xa5, 0xb5, + 0xd0, 0x0c, 0xa6, 0xbe, 0xca, 0xd0, 0x0b, 0xa9, + 0x08, 0x20, 0x1c, 0xfe, 0xd0, 0x04, 0xa9, 0x00, + 0x85, 0xaa, 0x4c, 0xbc, 0xfe, 0x70, 0x31, 0xd0, + 0x18, 0xa5, 0xb5, 0xd0, 0xf5, 0xa5, 0xb6, 0xd0, + 0xf1, 0xa5, 0xa7, 0x4a, 0xa5, 0xbd, 0x30, 0x03, + 0x90, 0x18, 0x18, 0xb0, 0x15, 0x29, 0x0f, 0x85, + 0xaa, 0xc6, 0xaa, 0xd0, 0xdd, 0xa9, 0x40, 0x85, + 0xaa, 0x20, 0x8e, 0xfb, 0xa9, 0x00, 0x85, 0xab, + 0xf0, 0xd0, 0xa9, 0x80, 0x85, 0xaa, 0xd0, 0xca, + 0xa5, 0xb5, 0xf0, 0x0a, 0xa9, 0x04, 0x20, 0x1c, + 0xfe, 0xa9, 0x00, 0x4c, 0x4a, 0xfb, 0x20, 0xd1, + 0xfc, 0x90, 0x03, 0x4c, 0x48, 0xfb, 0xa6, 0xa7, + 0xca, 0xf0, 0x2d, 0xa5, 0x93, 0xf0, 0x0c, 0xa0, + 0x00, 0xa5, 0xbd, 0xd1, 0xac, 0xf0, 0x04, 0xa9, + 0x01, 0x85, 0xb6, 0xa5, 0xb6, 0xf0, 0x4b, 0xa2, + 0x3d, 0xe4, 0x9e, 0x90, 0x3e, 0xa6, 0x9e, 0xa5, + 0xad, 0x9d, 0x01, 0x01, 0xa5, 0xac, 0x9d, 0x00, + 0x01, 0xe8, 0xe8, 0x86, 0x9e, 0x4c, 0x3a, 0xfb, + 0xa6, 0x9f, 0xe4, 0x9e, 0xf0, 0x35, 0xa5, 0xac, + 0xdd, 0x00, 0x01, 0xd0, 0x2e, 0xa5, 0xad, 0xdd, + 0x01, 0x01, 0xd0, 0x27, 0xe6, 0x9f, 0xe6, 0x9f, + 0xa5, 0x93, 0xf0, 0x0b, 0xa5, 0xbd, 0xa0, 0x00, + 0xd1, 0xac, 0xf0, 0x17, 0xc8, 0x84, 0xb6, 0xa5, + 0xb6, 0xf0, 0x07, 0xa9, 0x10, 0x20, 0x1c, 0xfe, + 0xd0, 0x09, 0xa5, 0x93, 0xd0, 0x05, 0xa8, 0xa5, + 0xbd, 0x91, 0xac, 0x20, 0xdb, 0xfc, 0xd0, 0x43, + 0xa9, 0x80, 0x85, 0xaa, 0x78, 0xa2, 0x01, 0x8e, + 0x0d, 0xdc, 0xae, 0x0d, 0xdc, 0xa6, 0xbe, 0xca, + 0x30, 0x02, 0x86, 0xbe, 0xc6, 0xa7, 0xf0, 0x08, + 0xa5, 0x9e, 0xd0, 0x27, 0x85, 0xbe, 0xf0, 0x23, + 0x20, 0x93, 0xfc, 0x20, 0x8e, 0xfb, 0xa0, 0x00, + 0x84, 0xab, 0xb1, 0xac, 0x45, 0xab, 0x85, 0xab, + 0x20, 0xdb, 0xfc, 0x20, 0xd1, 0xfc, 0x90, 0xf2, + 0xa5, 0xab, 0x45, 0xbd, 0xf0, 0x05, 0xa9, 0x20, + 0x20, 0x1c, 0xfe, 0x4c, 0xbc, 0xfe, 0xa5, 0xc2, + 0x85, 0xad, 0xa5, 0xc1, 0x85, 0xac, 0x60, 0xa9, + 0x08, 0x85, 0xa3, 0xa9, 0x00, 0x85, 0xa4, 0x85, + 0xa8, 0x85, 0x9b, 0x85, 0xa9, 0x60, 0xa5, 0xbd, + 0x4a, 0xa9, 0x60, 0x90, 0x02, 0xa9, 0xb0, 0xa2, + 0x00, 0x8d, 0x06, 0xdc, 0x8e, 0x07, 0xdc, 0xad, + 0x0d, 0xdc, 0xa9, 0x19, 0x8d, 0x0f, 0xdc, 0xa5, + 0x01, 0x49, 0x08, 0x85, 0x01, 0x29, 0x08, 0x60, + 0x38, 0x66, 0xb6, 0x30, 0x3c, 0xa5, 0xa8, 0xd0, + 0x12, 0xa9, 0x10, 0xa2, 0x01, 0x20, 0xb1, 0xfb, + 0xd0, 0x2f, 0xe6, 0xa8, 0xa5, 0xb6, 0x10, 0x29, + 0x4c, 0x57, 0xfc, 0xa5, 0xa9, 0xd0, 0x09, 0x20, + 0xad, 0xfb, 0xd0, 0x1d, 0xe6, 0xa9, 0xd0, 0x19, + 0x20, 0xa6, 0xfb, 0xd0, 0x14, 0xa5, 0xa4, 0x49, + 0x01, 0x85, 0xa4, 0xf0, 0x0f, 0xa5, 0xbd, 0x49, + 0x01, 0x85, 0xbd, 0x29, 0x01, 0x45, 0x9b, 0x85, + 0x9b, 0x4c, 0xbc, 0xfe, 0x46, 0xbd, 0xc6, 0xa3, + 0xa5, 0xa3, 0xf0, 0x3a, 0x10, 0xf3, 0x20, 0x97, + 0xfb, 0x58, 0xa5, 0xa5, 0xf0, 0x12, 0xa2, 0x00, + 0x86, 0xd7, 0xc6, 0xa5, 0xa6, 0xbe, 0xe0, 0x02, + 0xd0, 0x02, 0x09, 0x80, 0x85, 0xbd, 0xd0, 0xd9, + 0x20, 0xd1, 0xfc, 0x90, 0x0a, 0xd0, 0x91, 0xe6, + 0xad, 0xa5, 0xd7, 0x85, 0xbd, 0xb0, 0xca, 0xa0, + 0x00, 0xb1, 0xac, 0x85, 0xbd, 0x45, 0xd7, 0x85, + 0xd7, 0x20, 0xdb, 0xfc, 0xd0, 0xbb, 0xa5, 0x9b, + 0x49, 0x01, 0x85, 0xbd, 0x4c, 0xbc, 0xfe, 0xc6, + 0xbe, 0xd0, 0x03, 0x20, 0xca, 0xfc, 0xa9, 0x50, + 0x85, 0xa7, 0xa2, 0x08, 0x78, 0x20, 0xbd, 0xfc, + 0xd0, 0xea, 0xa9, 0x78, 0x20, 0xaf, 0xfb, 0xd0, + 0xe3, 0xc6, 0xa7, 0xd0, 0xdf, 0x20, 0x97, 0xfb, + 0xc6, 0xab, 0x10, 0xd8, 0xa2, 0x0a, 0x20, 0xbd, + 0xfc, 0x58, 0xe6, 0xab, 0xa5, 0xbe, 0xf0, 0x30, + 0x20, 0x8e, 0xfb, 0xa2, 0x09, 0x86, 0xa5, 0x86, + 0xb6, 0xd0, 0x83, 0x08, 0x78, 0xad, 0x11, 0xd0, + 0x09, 0x10, 0x8d, 0x11, 0xd0, 0x20, 0xca, 0xfc, + 0xa9, 0x7f, 0x8d, 0x0d, 0xdc, 0x20, 0xdd, 0xfd, + 0xad, 0xa0, 0x02, 0xf0, 0x09, 0x8d, 0x15, 0x03, + 0xad, 0x9f, 0x02, 0x8d, 0x14, 0x03, 0x28, 0x60, + 0x20, 0x93, 0xfc, 0xf0, 0x97, 0xbd, 0x93, 0xfd, + 0x8d, 0x14, 0x03, 0xbd, 0x94, 0xfd, 0x8d, 0x15, + 0x03, 0x60, 0xa5, 0x01, 0x09, 0x20, 0x85, 0x01, + 0x60, 0x38, 0xa5, 0xac, 0xe5, 0xae, 0xa5, 0xad, + 0xe5, 0xaf, 0x60, 0xe6, 0xac, 0xd0, 0x02, 0xe6, + 0xad, 0x60, 0xa2, 0xff, 0x78, 0x9a, 0xd8, 0x20, + 0x02, 0xfd, 0xd0, 0x03, 0x6c, 0x00, 0x80, 0x8e, + 0x16, 0xd0, 0x20, 0xa3, 0xfd, 0x20, 0x50, 0xfd, + 0x20, 0x15, 0xfd, 0x20, 0x5b, 0xff, 0x58, 0x6c, + 0x00, 0xa0, 0xa2, 0x05, 0xbd, 0x0f, 0xfd, 0xdd, + 0x03, 0x80, 0xd0, 0x03, 0xca, 0xd0, 0xf5, 0x60, + 0xc3, 0xc2, 0xcd, 0x38, 0x30, 0xa2, 0x30, 0xa0, + 0xfd, 0x18, 0x86, 0xc3, 0x84, 0xc4, 0xa0, 0x1f, + 0xb9, 0x14, 0x03, 0xb0, 0x02, 0xb1, 0xc3, 0x91, + 0xc3, 0x99, 0x14, 0x03, 0x88, 0x10, 0xf1, 0x60, + 0x31, 0xea, 0x66, 0xfe, 0x47, 0xfe, 0x4a, 0xf3, + 0x91, 0xf2, 0x0e, 0xf2, 0x50, 0xf2, 0x33, 0xf3, + 0x57, 0xf1, 0xca, 0xf1, 0xed, 0xf6, 0x3e, 0xf1, + 0x2f, 0xf3, 0x66, 0xfe, 0xa5, 0xf4, 0xed, 0xf5, + 0xa9, 0x00, 0xa8, 0x99, 0x02, 0x00, 0x99, 0x00, + 0x02, 0x99, 0x00, 0x03, 0xc8, 0xd0, 0xf4, 0xa2, + 0x3c, 0xa0, 0x03, 0x86, 0xb2, 0x84, 0xb3, 0xa8, + 0xa9, 0x03, 0x85, 0xc2, 0xe6, 0xc2, 0xb1, 0xc1, + 0xaa, 0xa9, 0x55, 0x91, 0xc1, 0xd1, 0xc1, 0xd0, + 0x0f, 0x2a, 0x91, 0xc1, 0xd1, 0xc1, 0xd0, 0x08, + 0x8a, 0x91, 0xc1, 0xc8, 0xd0, 0xe8, 0xf0, 0xe4, + 0x98, 0xaa, 0xa4, 0xc2, 0x18, 0x20, 0x2d, 0xfe, + 0xa9, 0x08, 0x8d, 0x82, 0x02, 0xa9, 0x04, 0x8d, + 0x88, 0x02, 0x60, 0x6a, 0xfc, 0xcd, 0xfb, 0x31, + 0xea, 0x2c, 0xf9, 0xa9, 0x7f, 0x8d, 0x0d, 0xdc, + 0x8d, 0x0d, 0xdd, 0x8d, 0x00, 0xdc, 0xa9, 0x08, + 0x8d, 0x0e, 0xdc, 0x8d, 0x0e, 0xdd, 0x8d, 0x0f, + 0xdc, 0x8d, 0x0f, 0xdd, 0xa2, 0x00, 0x8e, 0x03, + 0xdc, 0x8e, 0x03, 0xdd, 0x8e, 0x18, 0xd4, 0xca, + 0x8e, 0x02, 0xdc, 0xa9, 0x07, 0x8d, 0x00, 0xdd, + 0xa9, 0x3f, 0x8d, 0x02, 0xdd, 0xa9, 0xe7, 0x85, + 0x01, 0xa9, 0x2f, 0x85, 0x00, 0xad, 0xa6, 0x02, + 0xf0, 0x0a, 0xa9, 0x25, 0x8d, 0x04, 0xdc, 0xa9, + 0x40, 0x4c, 0xf3, 0xfd, 0xa9, 0x95, 0x8d, 0x04, + 0xdc, 0xa9, 0x42, 0x8d, 0x05, 0xdc, 0x4c, 0x6e, + 0xff, 0x85, 0xb7, 0x86, 0xbb, 0x84, 0xbc, 0x60, + 0x85, 0xb8, 0x86, 0xba, 0x84, 0xb9, 0x60, 0xa5, + 0xba, 0xc9, 0x02, 0xd0, 0x0d, 0xad, 0x97, 0x02, + 0x48, 0xa9, 0x00, 0x8d, 0x97, 0x02, 0x68, 0x60, + 0x85, 0x9d, 0xa5, 0x90, 0x05, 0x90, 0x85, 0x90, + 0x60, 0x8d, 0x85, 0x02, 0x60, 0x90, 0x06, 0xae, + 0x83, 0x02, 0xac, 0x84, 0x02, 0x8e, 0x83, 0x02, + 0x8c, 0x84, 0x02, 0x60, 0x90, 0x06, 0xae, 0x81, + 0x02, 0xac, 0x82, 0x02, 0x8e, 0x81, 0x02, 0x8c, + 0x82, 0x02, 0x60, 0x78, 0x6c, 0x18, 0x03, 0x48, + 0x8a, 0x48, 0x98, 0x48, 0xa9, 0x7f, 0x8d, 0x0d, + 0xdd, 0xac, 0x0d, 0xdd, 0x30, 0x1c, 0x20, 0x02, + 0xfd, 0xd0, 0x03, 0x6c, 0x02, 0x80, 0x20, 0xbc, + 0xf6, 0x20, 0xe1, 0xff, 0xd0, 0x0c, 0x20, 0x15, + 0xfd, 0x20, 0xa3, 0xfd, 0x20, 0x18, 0xe5, 0x6c, + 0x02, 0xa0, 0x98, 0x2d, 0xa1, 0x02, 0xaa, 0x29, + 0x01, 0xf0, 0x28, 0xad, 0x00, 0xdd, 0x29, 0xfb, + 0x05, 0xb5, 0x8d, 0x00, 0xdd, 0xad, 0xa1, 0x02, + 0x8d, 0x0d, 0xdd, 0x8a, 0x29, 0x12, 0xf0, 0x0d, + 0x29, 0x02, 0xf0, 0x06, 0x20, 0xd6, 0xfe, 0x4c, + 0x9d, 0xfe, 0x20, 0x07, 0xff, 0x20, 0xbb, 0xee, + 0x4c, 0xb6, 0xfe, 0x8a, 0x29, 0x02, 0xf0, 0x06, + 0x20, 0xd6, 0xfe, 0x4c, 0xb6, 0xfe, 0x8a, 0x29, + 0x10, 0xf0, 0x03, 0x20, 0x07, 0xff, 0xad, 0xa1, + 0x02, 0x8d, 0x0d, 0xdd, 0x68, 0xa8, 0x68, 0xaa, + 0x68, 0x40, 0xc1, 0x27, 0x3e, 0x1a, 0xc5, 0x11, + 0x74, 0x0e, 0xed, 0x0c, 0x45, 0x06, 0xf0, 0x02, + 0x46, 0x01, 0xb8, 0x00, 0x71, 0x00, 0xad, 0x01, + 0xdd, 0x29, 0x01, 0x85, 0xa7, 0xad, 0x06, 0xdd, + 0xe9, 0x1c, 0x6d, 0x99, 0x02, 0x8d, 0x06, 0xdd, + 0xad, 0x07, 0xdd, 0x6d, 0x9a, 0x02, 0x8d, 0x07, + 0xdd, 0xa9, 0x11, 0x8d, 0x0f, 0xdd, 0xad, 0xa1, + 0x02, 0x8d, 0x0d, 0xdd, 0xa9, 0xff, 0x8d, 0x06, + 0xdd, 0x8d, 0x07, 0xdd, 0x4c, 0x59, 0xef, 0xad, + 0x95, 0x02, 0x8d, 0x06, 0xdd, 0xad, 0x96, 0x02, + 0x8d, 0x07, 0xdd, 0xa9, 0x11, 0x8d, 0x0f, 0xdd, + 0xa9, 0x12, 0x4d, 0xa1, 0x02, 0x8d, 0xa1, 0x02, + 0xa9, 0xff, 0x8d, 0x06, 0xdd, 0x8d, 0x07, 0xdd, + 0xae, 0x98, 0x02, 0x86, 0xa8, 0x60, 0xaa, 0xad, + 0x96, 0x02, 0x2a, 0xa8, 0x8a, 0x69, 0xc8, 0x8d, + 0x99, 0x02, 0x98, 0x69, 0x00, 0x8d, 0x9a, 0x02, + 0x60, 0xea, 0xea, 0x08, 0x68, 0x29, 0xef, 0x48, + 0x48, 0x8a, 0x48, 0x98, 0x48, 0xba, 0xbd, 0x04, + 0x01, 0x29, 0x10, 0xf0, 0x03, 0x6c, 0x16, 0x03, + 0x6c, 0x14, 0x03, 0x20, 0x18, 0xe5, 0xad, 0x12, + 0xd0, 0xd0, 0xfb, 0xad, 0x19, 0xd0, 0x29, 0x01, + 0x8d, 0xa6, 0x02, 0x4c, 0xdd, 0xfd, 0xa9, 0x81, + 0x8d, 0x0d, 0xdc, 0xad, 0x0e, 0xdc, 0x29, 0x80, + 0x09, 0x11, 0x8d, 0x0e, 0xdc, 0x4c, 0x8e, 0xee, + 0x03, 0x4c, 0x5b, 0xff, 0x4c, 0xa3, 0xfd, 0x4c, + 0x50, 0xfd, 0x4c, 0x15, 0xfd, 0x4c, 0x1a, 0xfd, + 0x4c, 0x18, 0xfe, 0x4c, 0xb9, 0xed, 0x4c, 0xc7, + 0xed, 0x4c, 0x25, 0xfe, 0x4c, 0x34, 0xfe, 0x4c, + 0x87, 0xea, 0x4c, 0x21, 0xfe, 0x4c, 0x13, 0xee, + 0x4c, 0xdd, 0xed, 0x4c, 0xef, 0xed, 0x4c, 0xfe, + 0xed, 0x4c, 0x0c, 0xed, 0x4c, 0x09, 0xed, 0x4c, + 0x07, 0xfe, 0x4c, 0x00, 0xfe, 0x4c, 0xf9, 0xfd, + 0x6c, 0x1a, 0x03, 0x6c, 0x1c, 0x03, 0x6c, 0x1e, + 0x03, 0x6c, 0x20, 0x03, 0x6c, 0x22, 0x03, 0x6c, + 0x24, 0x03, 0x6c, 0x26, 0x03, 0x4c, 0x9e, 0xf4, + 0x4c, 0xdd, 0xf5, 0x4c, 0xe4, 0xf6, 0x4c, 0xdd, + 0xf6, 0x6c, 0x28, 0x03, 0x6c, 0x2a, 0x03, 0x6c, + 0x2c, 0x03, 0x4c, 0x9b, 0xf6, 0x4c, 0x05, 0xe5, + 0x4c, 0x0a, 0xe5, 0x4c, 0x00, 0xe5, 0x52, 0x52, + 0x42, 0x59, 0x43, 0xfe, 0xe2, 0xfc, 0x48, 0xff +}; diff --git a/Src/Makefile b/Src/Makefile index ac5aff8..801e68d 100644 --- a/Src/Makefile +++ b/Src/Makefile @@ -1,136 +1,74 @@ # Makefile.in for Frodo (generic Unix/X11) -# Copyright (C) 1995-1997 Christian Bauer - +include $(DEVKITPPC)/gamecube_rules ## Version information -VERSION = 4 -REVISION = 1 +VERSION = 4 +REVISION = 3 + +## System specific configuration + +#SHELL = /bin/sh + +#prefix = /usr/local +#exec_prefix = ${prefix} +#bindir = ${exec_prefix}/bin +#datadir = ${prefix}/share + +DESTDIR = -CXX = g++ -LIBS = -L/usr/lib -lSDL -lSDL_ttf -lSDL_mixer -lSDL_image -CFLAGS = -g -Wall -Wno-unused -Wno-format -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DHAVE_SDL -I./ -DFRODO_HPUX_REV=0 -DKBD_LANG=0 - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -prefix = /usr/local -exec_prefix = ${prefix} -bindir = ${exec_prefix}/bin -libdir = ${exec_prefix}/lib -sysconfdir = ${prefix}/etc - -.SUFFIXES: .o .cpp .h ## Files -OBJS = main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \ - 1541d64.o 1541t64.o 1541job.o SAM.o menu.o CmdPipe.o char_to_kc.o +GUIOBJS = sdlgui.o file.o dlgFileSelect.o dlgMain.o dlgDrives.o dlgOptions.o dlgVideoSound.o dlgAdvanced.o dlgInput.o +OBJS = $(GUIOBJS) main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o dirent.o\ +1541d64.o 1541t64.o 1541job.o SAM.o SLOBJS = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o -PCOBJS = $(OBJS) C64_PC.o CPUC64_PC.o VIC.o CIA.o CPU1541_PC.o -PCFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 +SLFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 SCOBJS = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o CPU_common.o SCFLAGS = -DFRODO_SC -SRCS = main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ +GUISRCS = sdlgui.cpp file.cpp dlgFileSelect.cpp dlgMain.cpp dlgDrives.cpp dlgOptions.cpp dlgVidoSound.cpp dlgAdvanced.cpp dlgInput.cpp +SRCS = $(GUISRCS) main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp CmdPipe.cpp C64.cpp \ - C64_PC.cpp C64_SC.cpp CPUC64.cpp CPUC64_PC.cpp CPUC64_SC.cpp \ - VIC.cpp VIC_SC.cpp CIA.cpp CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp \ - CPU1541_SC.cpp CPU_common.cpp + C64_SC.cpp CPUC64.cpp CPUC64_SC.cpp VIC.cpp VIC_SC.cpp CIA.cpp \ + CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp CPU1541_SC.cpp CPU_common.cpp -all: Frodo FrodoPC FrodoSC +#CXX = g++ -sysconfig.h: sysconfig.h.Host-SDL - cp $< $@ +CFLAGS = $(SLFLAGS) -g -O2 -fomit-frame-pointer -fno-exceptions $(MACHDEP) -I. -I$(DEVKITPRO)/libogc/include/ -I$(DEVKITPRO)/libogc/include/SDL -DHAVE_SDL -DWII -DR14 -I./ -DKBD_LANG=0 +DEFS = -DHAVE_CONFIG_H -DDATADIR=\"/frodo/\" -DBINDIR=\"/frodo/\" +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map +LIBS = -L$(DEVKITPRO)/libogc/lib/cube -lSDL -logc -lz -lm +CXXFLAGS = $(CFLAGS) -Frodo: sysconfig.h $(SLOBJS) - $(CXX) -o Frodo $(SLOBJS) $(LDFLAGS) $(LIBS) - cp Frodo .. +## Rules +.PHONY: install installdirs uninstall clean distclean depend dep +.SUFFIXES: +.SUFFIXES: .o .cpp .h -FrodoPC: $(PCOBJS) - $(CXX) -o FrodoPC $(PCOBJS) $(LDFLAGS) $(LIBS) - cp FrodoPC .. +all: boot.dol #FrodoSC + +Frodo.elf: $(SLOBJS) + $(CXX) -o Frodo.elf $(CFLAGS) $(LDFLAGS) $(SLOBJS) $(LIBS) +#@powerpc-gekko-objcopy -O binary $< $@ FrodoSC: $(SCOBJS) - $(CXX) -o FrodoSC $(SCOBJS) $(LDFLAGS) $(LIBS) - cp FrodoSC .. + $(CXX) -o FrodoSC $(LDFLAGS) $(SCOBJS) $(LIBS) + +boot.dol: Frodo.dol + cp Frodo.dol boot.dol + +Frodo.dol: Frodo.elf + +uninstall: + rm -f $(DESTDIR)$(bindir)/Frodo + rm -f $(DESTDIR)$(bindir)/FrodoSC + rm -f $(DESTDIR)$(bindir)/Frodo_GUI.tcl + rm -f $(DESTDIR)$(datadir)/frodo/Kernal\ ROM + rmdir $(DESTDIR)$(datadir)/frodo clean: - rm -f $(SLOBJS) $(PCOBJS) $(SCOBJS) sysconfig.h - rm -f Frodo FrodoPC FrodoSC - -distclean: clean - rm -rf autom4te.cache - rm -f Makefile sysconfig.h - rm -f config.cache config.log config.status config.h - -depend dep: - makedepend $(CPPFLAGS) -Y. $(SRCS) 2>/dev/null - -.cpp.o: - $(CC) $(INCLUDES) $(CFLAGS) -o $@ -c $*.cpp - -.cpp.s: - $(CC) $(INCLUDES) $(CFLAGS) $(EXTRAFLAGS) -o $@ -S $*.cpp -g0 - -C64_PC.o: C64.cpp C64.h C64_SDL.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -CPUC64_PC.o: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -CPU1541_PC.o: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -C64_SC.o: C64_SC.cpp C64.h C64_SDL.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -CPUC64_SC.o: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -CPU1541_SC.o: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.i CPU_common.h 1541job.h C64.h CIA.h Display.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -VIC_SC.o: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -CIA_SC.o: CIA_SC.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp + rm -f $(SLOBJS) $(SCOBJS) + rm -f Frodo FrodoSC + rm -f core* *.core *~ *.bak #------------------------------------------------------------------------- # DO NOT DELETE THIS LINE -- make depend depends on it. - -main.o: sysdeps.h sysconfig.h main.h C64.h Display.h Prefs.h SAM.h main_x.i -Display.o: sysdeps.h sysconfig.h Display.h main.h Prefs.h Display_SDL.i -Prefs.o: sysdeps.h sysconfig.h Prefs.h Display.h C64.h main.h -SID.o: sysdeps.h sysconfig.h SID.h Prefs.h SID_linux.i -REU.o: sysdeps.h sysconfig.h REU.h CPUC64.h C64.h Prefs.h -IEC.o: sysdeps.h sysconfig.h IEC.h 1541fs.h 1541d64.h 1541t64.h Prefs.h -IEC.o: Display.h -1541fs.o: sysdeps.h sysconfig.h 1541fs.h IEC.h main.h Prefs.h -1541d64.o: sysdeps.h sysconfig.h 1541d64.h IEC.h Prefs.h -1541t64.o: sysdeps.h sysconfig.h 1541t64.h IEC.h Prefs.h -1541job.o: sysdeps.h sysconfig.h 1541job.h CPU1541.h CIA.h Prefs.h C64.h -SAM.o: sysdeps.h sysconfig.h SAM.h C64.h CPUC64.h CPU1541.h CIA.h Prefs.h -SAM.o: VIC.h SID.h -CmdPipe.o: CmdPipe.h -C64.o: sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h Prefs.h VIC.h C64_SDL.i -C64.o: SID.h REU.h IEC.h 1541job.h Display.h -C64_PC.o: C64.cpp sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h -C64_PC.o: Prefs.h VIC.h SID.h REU.h IEC.h 1541job.h Display.h -C64_SC.o: C64.cpp sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h -C64_SC.o: Prefs.h VIC.h SID.h REU.h IEC.h 1541job.h Display.h -CPUC64.o: sysdeps.h sysconfig.h CPUC64.h C64.h VIC.h SID.h CIA.h Prefs.h -CPUC64.o: REU.h IEC.h Display.h Version.h CPU_emulline.i -CPUC64_PC.o: CPUC64.cpp sysdeps.h sysconfig.h CPUC64.h C64.h VIC.h SID.h -CPUC64_PC.o: CIA.h Prefs.h REU.h IEC.h Display.h Version.h CPU_emulline.i -CPUC64_SC.o: sysdeps.h sysconfig.h CPUC64.h C64.h CPU_common.h VIC.h SID.h -CPUC64_SC.o: CIA.h Prefs.h REU.h IEC.h Display.h Version.h CPU_emulcycle.i -VIC.o: sysdeps.h sysconfig.h VIC.h C64.h CPUC64.h Display.h Prefs.h -VIC_SC.o: sysdeps.h sysconfig.h VIC.h C64.h CPUC64.h Display.h Prefs.h -CIA.o: sysdeps.h sysconfig.h CIA.h Prefs.h CPUC64.h C64.h CPU1541.h VIC.h -CIA_SC.o: sysdeps.h sysconfig.h CIA.h Prefs.h CPUC64.h C64.h CPU1541.h VIC.h -CPU1541.o: sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h 1541job.h -CPU1541.o: Display.h CPU_emulline.i -CPU1541_PC.o: CPU1541.cpp sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h -CPU1541_PC.o: 1541job.h Display.h CPU_emulline.i -CPU1541_SC.o: sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h -CPU1541_SC.o: CPU_common.h 1541job.h Display.h CPU_emulcycle.i -CPU_common.o: sysdeps.h sysconfig.h CPU_common.h diff --git a/Src/Makefile.Amiga b/Src/Makefile.Amiga index 265fc42..29e476b 100644 --- a/Src/Makefile.Amiga +++ b/Src/Makefile.Amiga @@ -1,9 +1,8 @@ -# Makefile.in for Frodo (AmigaOS with GCC) -# Copyright (C) 1995-1997 Christian Bauer +# Makefile for Frodo (AmigaOS with GCC) ## Version information VERSION = 4 -REVISION = 1 +REVISION = 2 CXX = gcc CFLAGS = -O2 -I./ -fomit-frame-pointer -m68040 -m68881 @@ -15,8 +14,7 @@ LIBRARIES = OBJS = main.o Display.o Prefs.o AmigaGUI.o SID.o REU.o IEC.o 1541fs.o \ 1541d64.o 1541t64.o 1541job.o SAM.o SLOBJS = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o -PCOBJS = $(OBJS) C64_PC.o CPUC64_PC.o VIC.o CIA.o CPU1541_PC.o -PCFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 +SLFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 SCOBJS = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o CPU_common.o SCFLAGS = -DFRODO_SC @@ -24,64 +22,57 @@ Frodo: $(SLOBJS) $(CXX) -o Frodo $(SLOBJS) $(LDFLAGS) $(LIBRARIES) copy Frodo / -FrodoPC: $(PCOBJS) - $(CXX) -o FrodoPC $(PCOBJS) $(LDFLAGS) $(LIBRARIES) - copy FrodoPC / - FrodoSC: $(SCOBJS) $(CXX) -o FrodoSC $(SCOBJS) $(LDFLAGS) $(LIBRARIES) copy FrodoSC / -all: Frodo FrodoPC FrodoSC +all: Frodo FrodoSC clean: - @-delete $(SLOBJS) $(PCOBJS) $(SCOBJS) - @-delete -f Frodo FrodoPC FrodoSC + @-delete $(SLOBJS) $(SCOBJS) + @-delete -f Frodo FrodoSC .cpp.o: $(CXX) $(INCLUDES) $(CFLAGS) -o $@ -c $*.cpp .c.o: $(CXX) $(INCLUDES) $(CFLAGS) -o $@ -c $*.c - -.cpp.s: - $(CXX) $(INCLUDES) $(CFLAGS) -o $@ -S $*.cpp -g0 -C64_SC.o: C64.cpp C64.h C64_Amiga.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h +C64.o: C64.cpp + $(CXX) $(INCLUDES) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp + +C64_SC.o: C64.cpp $(CXX) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -CPUC64_SC.o: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h +CPUC64.o: CPUC64.cpp + $(CXX) $(INCLUDES) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp + +CPUC64_SC.o: CPUC64_SC.cpp $(CXX) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -CPU1541_SC.o: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.i CPU_common.h 1541job.h C64.h CIA.h Display.h +CPU1541.o: CPU1541.cpp + $(CXX) $(INCLUDES) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp + +CPU1541_SC.o: CPU1541_SC.cpp $(CXX) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -VIC_SC.o: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h +VIC_SC.o: VIC_SC.cpp $(CXX) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -CIA_SC.o: CIA_SC.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h +CIA_SC.o: CIA_SC.cpp $(CXX) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -C64_PC.o: C64.cpp C64.h C64_Amiga.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CXX) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -CPUC64_PC.o: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CXX) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -CPU1541_PC.o: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h - $(CXX) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - ## Dependencies -main.o: main.cpp main.h main_Amiga.i C64.h Display.h Prefs.h SAM.h -C64.o: C64.cpp C64.h C64_Amiga.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h +main.o: main.cpp main.h main_Amiga.h C64.h Display.h Prefs.h SAM.h +C64.o: C64.cpp C64.h C64_Amiga.h CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h CmdPipe.o: CmdPipe.h -Display.o: Display.cpp Display.h Display_Amiga.i main.h Prefs.h Version.h -Prefs.o: Prefs.cpp Prefs.h Prefs_Amiga.i Display.h main.h -CPUC64.o: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h -CPU1541.o: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h +Display.o: Display.cpp Display.h Display_Amiga.h main.h Prefs.h Version.h +Prefs.o: Prefs.cpp Prefs.h Prefs_Amiga.h Display.h main.h +CPUC64.o: CPUC64.cpp CPUC64.h CPU_emulline.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h +CPU1541.o: CPU1541.cpp CPU1541.h CPU_emulline.h 1541job.h C64.h CIA.h Display.h CPU_common.o: CPU_common.cpp CPU_common.h VIC.o: VIC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h -SID.o: SID.cpp SID.h SID_Amiga.i Prefs.h +SID.o: SID.cpp SID.h SID_Amiga.h Prefs.h CIA.o: CIA.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h IEC.o: IEC.cpp IEC.h 1541fs.h 1541d64.h 1541t64.h Prefs.h Display.h 1541fs.o: 1541fs.cpp 1541fs.h IEC.h main.h Prefs.h diff --git a/Src/Makefile.BeOS b/Src/Makefile.BeOS new file mode 100644 index 0000000..ec7ed10 --- /dev/null +++ b/Src/Makefile.BeOS @@ -0,0 +1,117 @@ +## BeOS Generic Makefile v2.1 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= Frodo + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= APP + +# add support for new Pe and Eddie features +# to fill in generic makefile + +#%{ +# @src->@ + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. +SRCS = main.cpp Prefs.cpp SAM.cpp Display.cpp C64.cpp CPUC64.cpp CPU1541.cpp \ + VIC.cpp SID.cpp CIA.cpp REU.cpp IEC.cpp 1541fs.cpp 1541d64.cpp 1541t64.cpp 1541job.cpp + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS= Frodo.rsrc + +# @<-src@ +#%} + +# end support for Pe and Eddie + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS=be media game device tracker + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS= + +# additional paths to look for system headers +# thes use the form: #include

    +# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE= FULL + +# specify any preprocessor symbols to be defined. The symbols will not +# have their values set automatically; you must supply the value (if any) +# to use. For example, setting DEFINES to "DEBUG=1" will cause the +# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG" +# would pass "-DDEBUG" on the compiler's command line. +DEFINES= PRECISE_CPU_CYCLES=1 PRECISE_CIA_CYCLES=1 PC_IS_POINTER=0 + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = supress all warnings +# ALL = enable all warnings +WARNINGS = + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = + +# specify debug settings +# if TRUE will allow application to be run from +# a source-level debugger +DEBUGGER = + +# specify additional compiler flags for all files +COMPILER_FLAGS = + +# specify additional linker flags +LINKER_FLAGS = + + +## include the makefile-engine +include /boot/develop/etc/makefile-engine + + +## Custom stuff for Frodo +sysconfig.h: sysconfig.h.Be + ln -s sysconfig.h.Be sysconfig.h + +main.cpp: sysconfig.h diff --git a/Src/Makefile.BeOS.SC b/Src/Makefile.BeOS.SC new file mode 100644 index 0000000..6af4235 --- /dev/null +++ b/Src/Makefile.BeOS.SC @@ -0,0 +1,118 @@ +## BeOS Generic Makefile v2.1 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= FrodoSC + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= APP + +# add support for new Pe and Eddie features +# to fill in generic makefile + +#%{ +# @src->@ + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. +SRCS = main.cpp Prefs.cpp SAM.cpp Display.cpp C64_SC.cpp CPUC64_SC.cpp CPU1541_SC.cpp \ + CPU_common.cpp VIC_SC.cpp SID.cpp CIA_SC.cpp REU.cpp IEC.cpp 1541fs.cpp 1541d64.cpp \ + 1541t64.cpp 1541job.cpp + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS= Frodo.rsrc + +# @<-src@ +#%} + +# end support for Pe and Eddie + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS=be media game device tracker + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS= + +# additional paths to look for system headers +# thes use the form: #include
    +# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE= FULL + +# specify any preprocessor symbols to be defined. The symbols will not +# have their values set automatically; you must supply the value (if any) +# to use. For example, setting DEFINES to "DEBUG=1" will cause the +# compiler option "-DDEBUG=1" to be used. Setting DEFINES to "DEBUG" +# would pass "-DDEBUG" on the compiler's command line. +DEFINES= FRODO_SC + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = supress all warnings +# ALL = enable all warnings +WARNINGS = + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = + +# specify debug settings +# if TRUE will allow application to be run from +# a source-level debugger +DEBUGGER = + +# specify additional compiler flags for all files +COMPILER_FLAGS = + +# specify additional linker flags +LINKER_FLAGS = + + +## include the makefile-engine +include /boot/develop/etc/makefile-engine + + +## Custom stuff for Frodo +sysconfig.h: sysconfig.h.Be + ln -s sysconfig.h.Be sysconfig.h + +main.cpp: sysconfig.h diff --git a/Src/Makefile.WIN32 b/Src/Makefile.WIN32 index a48a563..7f7d79d 100644 --- a/Src/Makefile.WIN32 +++ b/Src/Makefile.WIN32 @@ -1,10 +1,8 @@ -# Makefile.in for Frodo (WIN32 DirectX with MSVC++) -# Copyright (C) 1994-1997 Christian Bauer -# WIN32 code by J. Richard Sladkey +# Makefile for Frodo (WIN32 DirectX with MSVC++) ## Version information VERSION = 4 -REVISION = 1 +REVISION = 2 # Choose static (L) or dynamic (D) version of C library LIBC = L @@ -65,13 +63,13 @@ clean: .c.obj: $(CXX) $(ALLCFLAGS) -o $@ -c $*.c -C64_SC.obj: C64.cpp C64.h C64_WIN32.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h +C64_SC.obj: C64.cpp C64.h C64_WIN32.h CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h $(CXX) $(ALLSCCFLAGS) -Fo$@ -c $*.cpp -CPUC64_SC.obj: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h +CPUC64_SC.obj: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.h CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h $(CXX) $(ALLSCCFLAGS) -Fo$@ -c $*.cpp -CPU1541_SC.obj: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.i CPU_common.h 1541job.h C64.h CIA.h Display.h +CPU1541_SC.obj: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.h CPU_common.h 1541job.h C64.h CIA.h Display.h $(CXX) $(ALLSCCFLAGS) -Fo$@ -c $*.cpp VIC_SC.obj: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h @@ -80,26 +78,28 @@ VIC_SC.obj: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h CIA_SC.obj: CIA_SC.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h $(CXX) $(ALLSCCFLAGS) -Fo$@ -c $*.cpp -C64_PC.obj: C64.cpp C64.h C64_WIN32.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h +C64_PC.obj: C64.cpp C64.h C64_WIN32.h CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h $(CXX) $(ALLPCCFLAGS) -Fo$@ -c $*.cpp -CPUC64_PC.obj: CPUC64.cpp CPUC64.h CPU_emulline.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h +CPUC64_PC.obj: CPUC64.cpp CPUC64.h CPU_emulline.h CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h $(CXX) $(ALLPCCFLAGS) -DPC_IS_POINTER=0 -Fo$@ -c $*.cpp -CPU1541_PC.obj: CPU1541_PC.cpp CPU1541.h CPU_emulline.i CPU_common.h 1541job.h C64.h CIA.h Display.h +CPU1541_PC.obj: CPU1541_PC.cpp CPU1541.h CPU_emulline.h CPU_common.h 1541job.h C64.h CIA.h Display.h $(CXX) $(ALLPCCFLAGS) -Fo$@ -c $*.cpp +ndir.obj: ndir.c ndir.h + $(CXX) $(ALLPCCFLAGS) -Fo$@ -c ndir.c ## Dependencies -main.obj: main.cpp main.h main_WIN32.i C64.h Display.h Prefs.h SAM.h -C64.obj: C64.cpp C64.h C64_WIN32.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h +main.obj: main.cpp main.h main_WIN32.h C64.h Display.h Prefs.h SAM.h +C64.obj: C64.cpp C64.h C64_WIN32.h CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h CmdPipe.obj: CmdPipe.h -Display.obj: Display.cpp Display.h Display_WIN32.i main.h Prefs.h Version.h resource.h -Prefs.obj: Prefs.cpp Prefs.h Prefs_WIN32.i Display.h main.h resource.h -CPUC64.obj: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h -CPU1541.obj: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h +Display.obj: Display.cpp Display.h Display_WIN32.h main.h Prefs.h Version.h resource.h +Prefs.obj: Prefs.cpp Prefs.h Prefs_WIN32.h Display.h main.h resource.h +CPUC64.obj: CPUC64.cpp CPUC64.h CPU_emulline.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h +CPU1541.obj: CPU1541.cpp CPU1541.h CPU_emulline.h 1541job.h C64.h CIA.h Display.h CPU_common.obj: CPU_common.cpp CPU_common.h VIC.obj: VIC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h -SID.obj: SID.cpp SID.h SID_WIN32.i Prefs.h main.h +SID.obj: SID.cpp SID.h SID_WIN32.h Prefs.h main.h CIA.obj: CIA.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h IEC.obj: IEC.cpp IEC.h 1541fs.h 1541d64.h 1541t64.h Prefs.h Display.h 1541fs.obj: 1541fs.cpp 1541fs.h IEC.h main.h Prefs.h diff --git a/Src/Makefile.bak b/Src/Makefile.bak deleted file mode 100644 index 1660ec4..0000000 --- a/Src/Makefile.bak +++ /dev/null @@ -1,136 +0,0 @@ -# Makefile.in for Frodo (generic Unix/X11) -# Copyright (C) 1995-1997 Christian Bauer - -## Version information -VERSION = 4 -REVISION = 1 - - -CXX = g++ -LIBS = -L/usr/lib -lSDL -lSDL_ttf -lSDL_mixer -lSDL_image -CFLAGS = -O2 -g -fomit-frame-pointer -Wall -Wno-unused -Wno-format -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DHAVE_SDL -fno-strength-reduce -DREGPARAM="__attribute__((regparm(3)))" -I./ -DFRODO_HPUX_REV=0 -DKBD_LANG=0 - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -prefix = /usr/local -exec_prefix = ${prefix} -bindir = ${exec_prefix}/bin -libdir = ${exec_prefix}/lib -sysconfdir = ${prefix}/etc - -.SUFFIXES: .o .cpp .h - -## Files -OBJS = main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \ - 1541d64.o 1541t64.o 1541job.o SAM.o menu.o CmdPipe.o char_to_kc.o -SLOBJS = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o -PCOBJS = $(OBJS) C64_PC.o CPUC64_PC.o VIC.o CIA.o CPU1541_PC.o -PCFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 -SCOBJS = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o CPU_common.o -SCFLAGS = -DFRODO_SC -SRCS = main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ - 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp CmdPipe.cpp C64.cpp \ - C64_PC.cpp C64_SC.cpp CPUC64.cpp CPUC64_PC.cpp CPUC64_SC.cpp \ - VIC.cpp VIC_SC.cpp CIA.cpp CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp \ - CPU1541_SC.cpp CPU_common.cpp - -all: Frodo FrodoPC FrodoSC - -sysconfig.h: sysconfig.h.Host-SDL - cp $< $@ - -Frodo: sysconfig.h $(SLOBJS) - $(CXX) -o Frodo $(SLOBJS) $(LDFLAGS) $(LIBS) - cp Frodo .. - -FrodoPC: $(PCOBJS) - $(CXX) -o FrodoPC $(PCOBJS) $(LDFLAGS) $(LIBS) - cp FrodoPC .. - -FrodoSC: $(SCOBJS) - $(CXX) -o FrodoSC $(SCOBJS) $(LDFLAGS) $(LIBS) - cp FrodoSC .. - -clean: - rm -f $(SLOBJS) $(PCOBJS) $(SCOBJS) sysconfig.h - rm -f Frodo FrodoPC FrodoSC - -distclean: clean - rm -rf autom4te.cache - rm -f Makefile sysconfig.h - rm -f config.cache config.log config.status config.h - -depend dep: - makedepend $(CPPFLAGS) -Y. $(SRCS) 2>/dev/null - -.cpp.o: - $(CC) $(INCLUDES) $(CFLAGS) -o $@ -c $*.cpp - -.cpp.s: - $(CC) $(INCLUDES) $(CFLAGS) $(EXTRAFLAGS) -o $@ -S $*.cpp -g0 - -C64_PC.o: C64.cpp C64.h C64_SDL.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -CPUC64_PC.o: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -CPU1541_PC.o: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp - -C64_SC.o: C64_SC.cpp C64.h C64_SDL.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -CPUC64_SC.o: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -CPU1541_SC.o: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.i CPU_common.h 1541job.h C64.h CIA.h Display.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -VIC_SC.o: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -CIA_SC.o: CIA_SC.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp - -#------------------------------------------------------------------------- -# DO NOT DELETE THIS LINE -- make depend depends on it. - -main.o: sysdeps.h sysconfig.h main.h C64.h Display.h Prefs.h SAM.h -Display.o: sysdeps.h sysconfig.h Display.h main.h Prefs.h -Prefs.o: sysdeps.h sysconfig.h Prefs.h Display.h C64.h main.h -SID.o: sysdeps.h sysconfig.h SID.h Prefs.h SID_SDL.i -REU.o: sysdeps.h sysconfig.h REU.h CPUC64.h C64.h Prefs.h -IEC.o: sysdeps.h sysconfig.h IEC.h 1541fs.h 1541d64.h 1541t64.h Prefs.h -IEC.o: Display.h -1541fs.o: sysdeps.h sysconfig.h 1541fs.h IEC.h main.h Prefs.h -1541d64.o: sysdeps.h sysconfig.h 1541d64.h IEC.h Prefs.h -1541t64.o: sysdeps.h sysconfig.h 1541t64.h IEC.h Prefs.h -1541job.o: sysdeps.h sysconfig.h 1541job.h CPU1541.h CIA.h Prefs.h C64.h -SAM.o: sysdeps.h sysconfig.h SAM.h C64.h CPUC64.h CPU1541.h CIA.h Prefs.h -SAM.o: VIC.h SID.h -CmdPipe.o: CmdPipe.h -C64.o: sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h Prefs.h VIC.h C64_SDL.i -C64.o: SID.h REU.h IEC.h 1541job.h Display.h -C64_PC.o: C64.cpp sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h -C64_PC.o: Prefs.h VIC.h SID.h REU.h IEC.h 1541job.h Display.h -C64_SC.o: C64.cpp sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h -C64_SC.o: Prefs.h VIC.h SID.h REU.h IEC.h 1541job.h Display.h -CPUC64.o: sysdeps.h sysconfig.h CPUC64.h C64.h VIC.h SID.h CIA.h Prefs.h -CPUC64.o: REU.h IEC.h Display.h Version.h CPU_emulline.i -CPUC64_PC.o: CPUC64.cpp sysdeps.h sysconfig.h CPUC64.h C64.h VIC.h SID.h -CPUC64_PC.o: CIA.h Prefs.h REU.h IEC.h Display.h Version.h CPU_emulline.i -CPUC64_SC.o: sysdeps.h sysconfig.h CPUC64.h C64.h CPU_common.h VIC.h SID.h -CPUC64_SC.o: CIA.h Prefs.h REU.h IEC.h Display.h Version.h CPU_emulcycle.i -VIC.o: sysdeps.h sysconfig.h VIC.h C64.h CPUC64.h Display.h Prefs.h -VIC_SC.o: sysdeps.h sysconfig.h VIC.h C64.h CPUC64.h Display.h Prefs.h -CIA.o: sysdeps.h sysconfig.h CIA.h Prefs.h CPUC64.h C64.h CPU1541.h VIC.h -CIA_SC.o: sysdeps.h sysconfig.h CIA.h Prefs.h CPUC64.h C64.h CPU1541.h VIC.h -CPU1541.o: sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h 1541job.h -CPU1541.o: Display.h CPU_emulline.i -CPU1541_PC.o: CPU1541.cpp sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h -CPU1541_PC.o: 1541job.h Display.h CPU_emulline.i -CPU1541_SC.o: sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h -CPU1541_SC.o: CPU_common.h 1541job.h Display.h CPU_emulcycle.i -CPU_common.o: sysdeps.h sysconfig.h CPU_common.h diff --git a/Src/Makefile.in b/Src/Makefile.in index e848b47..95a2030 100644 --- a/Src/Makefile.in +++ b/Src/Makefile.in @@ -1,57 +1,83 @@ # Makefile.in for Frodo (generic Unix/X11) -# Copyright (C) 1995-1997 Christian Bauer ## Version information -VERSION = 4 -REVISION = 1 +VERSION = 4 +REVISION = 3 +## System specific configuration @SET_MAKE@ -CXX = @CXX@ -LIBS = @LIBS@ -CFLAGS = @CFLAGS@ -I./ -DFRODO_HPUX_REV=@HPUX_REV@ -DKBD_LANG=@KBD_LANG@ +SHELL = /bin/sh -INSTALL = @INSTALL@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +bindir = @bindir@ +datadir = @datadir@ + +DESTDIR = + +CXX = @CXX@ +CFLAGS = @CFLAGS@ @GLADE_CFLAGS@ @OSSO_CFLAGS@ -I./ -DKBD_LANG=@KBD_LANG@ +DEFS = @DEFS@ -DDATADIR=\"$(datadir)/frodo/\" -DBINDIR=\"$(bindir)/\" +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ @GLADE_LIBS@ @OSSO_LIBS@ +INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -sysconfdir = @sysconfdir@ - -.SUFFIXES: .o .cpp .h +INSTALL_DATA = @INSTALL_DATA@ ## Files -OBJS = main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \ +GUIOBJS = @GUIOBJS@ +OBJS = $(GUIOBJS) main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \ 1541d64.o 1541t64.o 1541job.o SAM.o CmdPipe.o SLOBJS = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o -PCOBJS = $(OBJS) C64_PC.o CPUC64_PC.o VIC.o CIA.o CPU1541_PC.o -PCFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 +SLFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 SCOBJS = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o CPU_common.o SCFLAGS = -DFRODO_SC -SRCS = main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ +GUISRCS = @GUISRCS@ +SRCS = $(GUISRCS) main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp CmdPipe.cpp C64.cpp \ - C64_PC.cpp C64_SC.cpp CPUC64.cpp CPUC64_PC.cpp CPUC64_SC.cpp \ - VIC.cpp VIC_SC.cpp CIA.cpp CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp \ - CPU1541_SC.cpp CPU_common.cpp + C64_SC.cpp CPUC64.cpp CPUC64_SC.cpp VIC.cpp VIC_SC.cpp CIA.cpp \ + CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp CPU1541_SC.cpp CPU_common.cpp -all: Frodo FrodoPC FrodoSC +## Rules +.PHONY: install installdirs uninstall clean distclean depend dep +.SUFFIXES: +.SUFFIXES: .o .cpp .h + +all: Frodo FrodoSC Frodo: $(SLOBJS) - $(CXX) -o Frodo $(SLOBJS) $(LDFLAGS) $(LIBS) - cp Frodo .. - -FrodoPC: $(PCOBJS) - $(CXX) -o FrodoPC $(PCOBJS) $(LDFLAGS) $(LIBS) - cp FrodoPC .. + $(CXX) -o Frodo $(LDFLAGS) $(SLOBJS) $(LIBS) FrodoSC: $(SCOBJS) - $(CXX) -o FrodoSC $(SCOBJS) $(LDFLAGS) $(LIBS) - cp FrodoSC .. + $(CXX) -o FrodoSC $(LDFLAGS) $(SCOBJS) $(LIBS) + +install: Frodo FrodoSC installdirs + $(INSTALL_PROGRAM) Frodo $(DESTDIR)$(bindir)/Frodo + $(INSTALL_PROGRAM) FrodoSC $(DESTDIR)$(bindir)/FrodoSC + $(INSTALL_PROGRAM) Frodo_GUI.tcl $(DESTDIR)$(bindir)/Frodo_GUI.tcl + $(INSTALL_DATA) ../Kernal\ ROM $(DESTDIR)$(datadir)/frodo/Kernal\ ROM + $(INSTALL_DATA) glade/Frodo.glade $(DESTDIR)$(datadir)/frodo/Frodo.glade + $(INSTALL_DATA) maemo/frodo.desktop $(DESTDIR)$(datadir)/applications/hildon/frodo.desktop + $(INSTALL_DATA) maemo/frodo.service $(DESTDIR)$(datadir)/dbus-1/services/frodo.service + $(INSTALL_DATA) maemo/frodo.service $(DESTDIR)$(datadir)/dbus-1/services/frodo.service + $(INSTALL_DATA) maemo/Frodo_26_26.png $(DESTDIR)$(datadir)/icons/hicolor/26x26/hildon/frodo.png + $(INSTALL_DATA) maemo/Frodo_40_40.png $(DESTDIR)$(datadir)/icons/hicolor/40x40/hildon/frodo.png + $(INSTALL_DATA) maemo/Frodo_64_64.png $(DESTDIR)$(datadir)/icons/hicolor/scalable/hildon/frodo.png + +installdirs: + $(SHELL) mkinstalldirs $(DESTDIR)$(bindir) $(DESTDIR)$(datadir)/frodo $(DESTDIR)$(datadir)/applications/hildon $(DESTDIR)$(datadir)/dbus-1/services $(DESTDIR)$(datadir)/icons/hicolor/26x26/hildon $(DESTDIR)$(datadir)/icons/hicolor/40x40/hildon $(DESTDIR)$(datadir)/icons/hicolor/scalable/hildon + +uninstall: + rm -f $(DESTDIR)$(bindir)/Frodo + rm -f $(DESTDIR)$(bindir)/FrodoSC + rm -f $(DESTDIR)$(bindir)/Frodo_GUI.tcl + rm -f $(DESTDIR)$(datadir)/frodo/Kernal\ ROM + rmdir $(DESTDIR)$(datadir)/frodo clean: - rm -f $(SLOBJS) $(PCOBJS) $(SCOBJS) - rm -f Frodo FrodoPC FrodoSC + rm -f $(SLOBJS) $(SCOBJS) + rm -f Frodo FrodoSC + rm -f core* *.core *~ *.bak distclean: clean rm -rf autom4te.cache @@ -62,34 +88,31 @@ depend dep: makedepend $(CPPFLAGS) -Y. $(SRCS) 2>/dev/null .cpp.o: - $(CC) $(INCLUDES) $(CFLAGS) -o $@ -c $*.cpp - -.cpp.s: - $(CC) $(INCLUDES) $(CFLAGS) $(EXTRAFLAGS) -o $@ -S $*.cpp -g0 + $(CXX) $(DEFS) $(CFLAGS) -o $@ -c $*.cpp -C64_PC.o: C64.cpp C64.h C64_x.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp +C64.o: C64.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp -CPUC64_PC.o: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp +C64_SC.o: C64_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -CPU1541_PC.o: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h - $(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp +CPUC64.o: CPUC64.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp -C64_SC.o: C64_SC.cpp C64.h C64_x.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp +CPUC64_SC.o: CPUC64_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -CPUC64_SC.o: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp +CPU1541.o: CPU1541.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp -CPU1541_SC.o: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.i CPU_common.h 1541job.h C64.h CIA.h Display.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp +CPU1541_SC.o: CPU1541_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -VIC_SC.o: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp +VIC_SC.o: VIC_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp -CIA_SC.o: CIA_SC.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h - $(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp +CIA_SC.o: CIA_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp #------------------------------------------------------------------------- # DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/Src/Makefile.wii b/Src/Makefile.wii new file mode 100644 index 0000000..43799c2 --- /dev/null +++ b/Src/Makefile.wii @@ -0,0 +1,78 @@ +# Makefile.in for Frodo (generic Unix/X11) +include $(DEVKITPPC)/wii_rules +## Version information +VERSION = 4 +REVISION = 3 + +## System specific configuration + +#SHELL = /bin/sh + +#prefix = /usr/local +#exec_prefix = ${prefix} +#bindir = ${exec_prefix}/bin +#datadir = ${prefix}/share + +DESTDIR = + + + +## Files +GUIOBJS = sdlgui.o file.o dlgFileSelect.o dlgMain.o dlgDrives.o dlgOptions.o dlgVideoSound.o dlgAdvanced.o dlgInput.o +OBJS = $(GUIOBJS) main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \ +1541d64.o 1541t64.o 1541job.o SAM.o +SLOBJS = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o +SLFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 +SCOBJS = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o CPU_common.o +SCFLAGS = -DFRODO_SC +GUISRCS = sdlgui.cpp file.cpp dlgFileSelect.cpp dlgMain.cpp dlgDrives.cpp dlgOptions.cpp dlgVidoSound.cpp dlgAdvanced.cpp dlgInput.cpp +SRCS = $(GUISRCS) main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ + 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp CmdPipe.cpp C64.cpp \ + C64_SC.cpp CPUC64.cpp CPUC64_SC.cpp VIC.cpp VIC_SC.cpp CIA.cpp \ + CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp CPU1541_SC.cpp CPU_common.cpp +#CXX = g++ + +CFLAGS = $(SLFLAGS) -g -O0 -fomit-frame-pointer -fno-exceptions $(MACHDEP) -I. -I$(DEVKITPRO)/libogc/include/ -I$(DEVKITPRO)/libogc/include/SDL -DHAVE_SDL -DWII -I./ -DKBD_LANG=0 +DEFS = -DHAVE_CONFIG_H -DDATADIR=\"/frodo/\" -DBINDIR=\"/frodo/\" +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map +LIBS = -L$(DEVKITPRO)/libogc/lib/wii -lSDL -lwiiuse -lbte -ldb -lfat -logc -lz -lm +CXXFLAGS = $(CFLAGS) + +## Rules +.PHONY: install installdirs uninstall clean distclean depend dep +.SUFFIXES: +.SUFFIXES: .o .cpp .h + +all: boot.dol #FrodoSC + +Frodo.elf: $(SLOBJS) + $(CXX) -o Frodo.elf $(CFLAGS) $(LDFLAGS) $(SLOBJS) $(LIBS) +#@powerpc-gekko-objcopy -O binary $< $@ + +FrodoSC: $(SCOBJS) + $(CXX) -o FrodoSC $(LDFLAGS) $(SCOBJS) $(LIBS) + +boot.dol: Frodo.dol + cp Frodo.dol boot.dol + +Frodo.dol: Frodo.elf + +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +uninstall: + rm -f $(DESTDIR)$(bindir)/Frodo + rm -f $(DESTDIR)$(bindir)/FrodoSC + rm -f $(DESTDIR)$(bindir)/Frodo_GUI.tcl + rm -f $(DESTDIR)$(datadir)/frodo/Kernal\ ROM + rmdir $(DESTDIR)$(datadir)/frodo + +clean: + rm -f $(SLOBJS) $(SCOBJS) + rm -f Frodo FrodoSC + rm -f core* *.core *~ *.bak + +#------------------------------------------------------------------------- +# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/Src/MakefileRO b/Src/MakefileRO index c7d9aef..7927d0c 100644 --- a/Src/MakefileRO +++ b/Src/MakefileRO @@ -1,18 +1,14 @@ -# Makefile.in for Frodo (RISC OS with GCC) -# Copyright (C) 1995-1997 Christian Bauer -# Acorn port 1997 by Andreas Dehmel +# Makefile for Frodo (RISC OS with GCC) ## Version information VERSION = 4 -REVISION = 0 +REVISION = 2 CXX = gcc CFLAGS = -O2 CFLAGSO = -O3 SCFLAGS = -O2 -DFRODO_SC SCFLAGSO = -O3 -DFRODO_SC -PCFLAGS = -O2 -DFRODO_PC -PCFLAGSO = -O3 -DFRODO_PC LIBRARIES = GCC:o.libgcc C:o.stubs LINK = drlink @@ -23,24 +19,18 @@ OBJS = o.Prefs o.REU o.IEC o.1541fs o.1541d64 o.1541t64 o.1541job o.SAM o.ROli SLOBJS = $(OBJS) o.C64 o.CPUC64 o.VIC o.CIA o.CPU1541 o.Display o.SID o.main o.AcornGUI SCOBJS = $(OBJS) o.C64_SC o.CPUC64_SC o.VIC_SC o.CIA_SC o.CPU1541_SC o.CPU_common o.Display_SC\ o.main_SC o.SID_SC o.AcornGUI_SC -PCOBJS = $(OBJS) o.C64_PC o.CPUC64_PC o.VIC o.CIA o.CPU1541_PC o.Display o.main_PC o.SID\ - o.AcornGUI_PC - -all: Frodo FrodoSC FrodoPC +all: Frodo FrodoSC Frodo: $(SLOBJS) $(LINK) -o Frodo $(LIBRARIES) $(SLOBJS) $(LDFLAGS) -FrodoSC: $(SCOBJS) - $(LINK) -o FrodoSC $(LIBRARIES) $(SCOBJS) $(LDFLAGS) - FrodoPC: $(PCOBJS) $(LINK) -o FrodoPC $(LIBRARIES) $(PCOBJS) $(LDFLAGS) # SC objects -o.C64_SC: cc.C64 h.C64 i.C64_Acorn h.CPUC64 h.CPU1541 h.VIC h.SID h.CIA h.REU \ +o.C64_SC: cc.C64_SC h.C64 i.C64_Acorn h.CPUC64 h.CPU1541 h.VIC h.SID h.CIA h.REU \ h.IEC h.1541job h.Display h.Prefs h.ROlib h.AcornGUI i.OldSnap $(CXX) $(INCLUDES) $(SCFLAGS) -c C64_SC.cc @@ -73,30 +63,6 @@ o.SID_SC: cc.SID_SC cc.SID h.SID i.SID_Acorn h.Prefs h.ROlib h.C64 i.FixPoint o.AcornGUI_SC: cc.AcornGUI_SC cc.AcornGUI h.AcornGUI h.ROlib h.main h.Prefs h.C64 h.VIC\ h.Version $(CXX) $(INCLUDES) $(SCFLAGS) -c AcornGUI_SC.cc - - -# PC objects -o.C64_PC: cc.C64 h.C64 i.C64_Acorn h.CPUC64 h.CPU1541 h.VIC h.SID h.CIA h.REU \ - h.IEC h.1541job h.Display h.Prefs h.ROlib h.AcornGUI i.OldSnap - $(CXX) $(INCLUDES) $(PCFLAGS) -c C64_PC.cc - -o.CPUC64_PC: cc.CPUC64_PC cc.CPUC64 h.CPUC64 i.CPU_emulline h.C64 h.VIC h.SID h.CIA \ - h.REU h.IEC h.Display h.Version h.ROlib - $(CXX) $(INCLUDES) $(PCFLAGSO) -c CPUC64_PC.cc - -o.CPU1541_PC: cc.CPU1541_PC cc.CPU1541 h.CPU1541 i.CPU_emulline h.1541job h.C64 h.CIA \ - h.Display h.ROlib - $(CXX) $(INCLUDES) $(PCFLAGSO) -c CPU1541_PC.cc - -## These were added for RISC OS -- same source code, but different object files needed! -o.main_PC: cc.main_PC cc.main h.main i.main_Acorn h.C64 h.Display h.Prefs h.SAM h.ROlib\ - h.AcornGUI - $(CXX) $(INCLUDES) $(PCFLAGS) -c main_PC.cc - -o.AcornGUI_PC: cc.AcornGUI_PC cc.AcornGUI h.AcornGUI h.ROlib h.main h.Prefs h.C64 h.VIC\ - h.Version - $(CXX) $(INCLUDES) $(PCFLAGS) -c AcornGUI_PC.cc - ## Dependencies o.main: cc.main h.main i.main_Acorn h.C64 h.Display h.Prefs h.SAM h.ROlib h.AcornGUI diff --git a/Src/ORGMakefile b/Src/ORGMakefile new file mode 100644 index 0000000..5af0a62 --- /dev/null +++ b/Src/ORGMakefile @@ -0,0 +1,118 @@ +# Makefile.in for Frodo (generic Unix/X11) + +## Version information +VERSION = 4 +REVISION = 3 + +## System specific configuration + +SHELL = /bin/sh + +prefix = /usr/local +exec_prefix = ${prefix} +bindir = ${exec_prefix}/bin +datadir = ${prefix}/share + +DESTDIR = + +CXX = g++ +CFLAGS = -g -O2 -fomit-frame-pointer -fno-exceptions -I/c/Dev-Cpp/include/SDL -Dmain=SDL_main -DHAVE_SDL -DWII -I./ -DKBD_LANG=0 +DEFS = -DHAVE_CONFIG_H -DDATADIR=\"$(datadir)/frodo/\" -DBINDIR=\"$(bindir)/\" +LDFLAGS = +LIBS = -L/c/Dev-Cpp/lib -lmingw32 -lSDLmain -lSDL -mwindows +INSTALL = /bin/install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 + +## Files +GUIOBJS = +OBJS = $(GUIOBJS) main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \ + 1541d64.o 1541t64.o 1541job.o SAM.o CmdPipe.o +SLOBJS = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o +SLFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0 +SCOBJS = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o CPU_common.o +SCFLAGS = -DFRODO_SC +GUISRCS = +SRCS = $(GUISRCS) main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \ + 1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp CmdPipe.cpp C64.cpp \ + C64_SC.cpp CPUC64.cpp CPUC64_SC.cpp VIC.cpp VIC_SC.cpp CIA.cpp \ + CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp CPU1541_SC.cpp CPU_common.cpp + +## Rules +.PHONY: install installdirs uninstall clean distclean depend dep +.SUFFIXES: +.SUFFIXES: .o .cpp .h + +all: Frodo FrodoSC + +Frodo: $(SLOBJS) + $(CXX) -o Frodo $(LDFLAGS) $(SLOBJS) $(LIBS) + +FrodoSC: $(SCOBJS) + $(CXX) -o FrodoSC $(LDFLAGS) $(SCOBJS) $(LIBS) + +install: Frodo FrodoSC installdirs + $(INSTALL_PROGRAM) Frodo $(DESTDIR)$(bindir)/Frodo + $(INSTALL_PROGRAM) FrodoSC $(DESTDIR)$(bindir)/FrodoSC + $(INSTALL_PROGRAM) Frodo_GUI.tcl $(DESTDIR)$(bindir)/Frodo_GUI.tcl + $(INSTALL_DATA) ../Kernal\ ROM $(DESTDIR)$(datadir)/frodo/Kernal\ ROM + $(INSTALL_DATA) glade/Frodo.glade $(DESTDIR)$(datadir)/frodo/Frodo.glade + $(INSTALL_DATA) maemo/frodo.desktop $(DESTDIR)$(datadir)/applications/hildon/frodo.desktop + $(INSTALL_DATA) maemo/frodo.service $(DESTDIR)$(datadir)/dbus-1/services/frodo.service + $(INSTALL_DATA) maemo/frodo.service $(DESTDIR)$(datadir)/dbus-1/services/frodo.service + $(INSTALL_DATA) maemo/Frodo_26_26.png $(DESTDIR)$(datadir)/icons/hicolor/26x26/hildon/frodo.png + $(INSTALL_DATA) maemo/Frodo_40_40.png $(DESTDIR)$(datadir)/icons/hicolor/40x40/hildon/frodo.png + $(INSTALL_DATA) maemo/Frodo_64_64.png $(DESTDIR)$(datadir)/icons/hicolor/scalable/hildon/frodo.png + +installdirs: + $(SHELL) mkinstalldirs $(DESTDIR)$(bindir) $(DESTDIR)$(datadir)/frodo $(DESTDIR)$(datadir)/applications/hildon $(DESTDIR)$(datadir)/dbus-1/services $(DESTDIR)$(datadir)/icons/hicolor/26x26/hildon $(DESTDIR)$(datadir)/icons/hicolor/40x40/hildon $(DESTDIR)$(datadir)/icons/hicolor/scalable/hildon + +uninstall: + rm -f $(DESTDIR)$(bindir)/Frodo + rm -f $(DESTDIR)$(bindir)/FrodoSC + rm -f $(DESTDIR)$(bindir)/Frodo_GUI.tcl + rm -f $(DESTDIR)$(datadir)/frodo/Kernal\ ROM + rmdir $(DESTDIR)$(datadir)/frodo + +clean: + rm -f $(SLOBJS) $(SCOBJS) + rm -f Frodo FrodoSC + rm -f core* *.core *~ *.bak + +distclean: clean + rm -rf autom4te.cache + rm -f Makefile sysconfig.h + rm -f config.cache config.log config.status config.h + +depend dep: + makedepend $(CPPFLAGS) -Y. $(SRCS) 2>/dev/null + +.cpp.o: + $(CXX) $(DEFS) $(CFLAGS) -o $@ -c $*.cpp + +C64.o: C64.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp + +C64_SC.o: C64_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp + +CPUC64.o: CPUC64.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp + +CPUC64_SC.o: CPUC64_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp + +CPU1541.o: CPU1541.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SLFLAGS) -o $@ -c $*.cpp + +CPU1541_SC.o: CPU1541_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp + +VIC_SC.o: VIC_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp + +CIA_SC.o: CIA_SC.cpp + $(CXX) $(DEFS) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp + +#------------------------------------------------------------------------- +# DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/Src/Prefs.cpp b/Src/Prefs.cpp index 8353ee8..a8c7771 100644 --- a/Src/Prefs.cpp +++ b/Src/Prefs.cpp @@ -1,7 +1,21 @@ /* * Prefs.cpp - Global preferences * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "sysdeps.h" @@ -29,16 +43,13 @@ Prefs::Prefs() BadLineCycles = 23; CIACycles = 63; FloppyCycles = 64; - SkipFrames = 0; + SkipFrames = 1; LatencyMin = 80; LatencyMax = 120; LatencyAvg = 280; ScalingNumerator = 2; ScalingDenominator = 2; - for (int i=0; i<4; i++) - DriveType[i] = DRVTYPE_DIR; - strcpy(DrivePath[0], "64prgs"); strcpy(DrivePath[1], ""); strcpy(DrivePath[2], ""); @@ -47,19 +58,19 @@ Prefs::Prefs() strcpy(ViewPort, "Default"); strcpy(DisplayMode, "Default"); - SIDType = SIDTYPE_NONE; + SIDType = SIDTYPE_DIGITAL; REUSize = REU_NONE; DisplayType = DISPTYPE_WINDOW; + Joystick1Port = 1; + Joystick2Port = 1; SpritesOn = true; SpriteCollisions = true; - Joystick1On = false; - Joystick2On = false; JoystickSwap = false; - LimitSpeed = false; - FastReset = false; + LimitSpeed = true; + FastReset = true; CIAIRQHack = false; - MapSlash = true; + MapSlash = false; Emul1541Proc = false; SIDFilters = true; DoubleScan = true; @@ -72,14 +83,6 @@ Prefs::Prefs() AlwaysCopy = false; SystemKeys = true; ShowLEDs = true; - -#ifdef HAVE_SDL - for (int i = 0; i < N_WIIMOTE_BINDINGS; i++) - this->JoystickKeyBinding[i] = -1; - - this->DisplayOption = 0; - this->MsPerFrame = 38; -#endif } @@ -100,10 +103,6 @@ bool Prefs::operator==(const Prefs &rhs) const && LatencyAvg == rhs.LatencyAvg && ScalingNumerator == rhs.ScalingNumerator && ScalingDenominator == rhs.ScalingNumerator - && DriveType[0] == rhs.DriveType[0] - && DriveType[1] == rhs.DriveType[1] - && DriveType[2] == rhs.DriveType[2] - && DriveType[3] == rhs.DriveType[3] && strcmp(DrivePath[0], rhs.DrivePath[0]) == 0 && strcmp(DrivePath[1], rhs.DrivePath[1]) == 0 && strcmp(DrivePath[2], rhs.DrivePath[2]) == 0 @@ -115,8 +114,8 @@ bool Prefs::operator==(const Prefs &rhs) const && DisplayType == rhs.DisplayType && SpritesOn == rhs.SpritesOn && SpriteCollisions == rhs.SpriteCollisions - && Joystick1On == rhs.Joystick1On - && Joystick2On == rhs.Joystick2On + && Joystick1Port == rhs.Joystick1Port + && Joystick2Port == rhs.Joystick2Port && JoystickSwap == rhs.JoystickSwap && LimitSpeed == rhs.LimitSpeed && FastReset == rhs.FastReset @@ -134,23 +133,6 @@ bool Prefs::operator==(const Prefs &rhs) const && AlwaysCopy == rhs.AlwaysCopy && SystemKeys == rhs.SystemKeys && ShowLEDs == rhs.ShowLEDs -#ifdef HAVE_SDL - && this->JoystickKeyBinding[0] == rhs.JoystickKeyBinding[0] - && this->JoystickKeyBinding[1] == rhs.JoystickKeyBinding[1] - && this->JoystickKeyBinding[2] == rhs.JoystickKeyBinding[2] - && this->JoystickKeyBinding[3] == rhs.JoystickKeyBinding[3] - && this->JoystickKeyBinding[4] == rhs.JoystickKeyBinding[4] - && this->JoystickKeyBinding[5] == rhs.JoystickKeyBinding[5] - && this->JoystickKeyBinding[6] == rhs.JoystickKeyBinding[6] - && this->JoystickKeyBinding[7] == rhs.JoystickKeyBinding[7] - && this->JoystickKeyBinding[8] == rhs.JoystickKeyBinding[8] - && this->JoystickKeyBinding[9] == rhs.JoystickKeyBinding[9] - && this->JoystickKeyBinding[10] == rhs.JoystickKeyBinding[10] - && this->JoystickKeyBinding[11] == rhs.JoystickKeyBinding[11] - && this->JoystickKeyBinding[12] == rhs.JoystickKeyBinding[12] - && this->DisplayOption == rhs.DisplayOption - && this->MsPerFrame == rhs.MsPerFrame -#endif ); } @@ -176,10 +158,6 @@ void Prefs::Check(void) if (DisplayType < DISPTYPE_WINDOW || DisplayType > DISPTYPE_SCREEN) DisplayType = DISPTYPE_WINDOW; - - for (int i=0; i<4; i++) - if (DriveType[i] < DRVTYPE_DIR || DriveType[i] > DRVTYPE_T64) - DriveType[i] = DRVTYPE_DIR; } @@ -215,34 +193,6 @@ void Prefs::Load(char *filename) ScalingNumerator = atoi(value); else if (!strcmp(keyword, "ScalingDenominator")) ScalingDenominator = atoi(value); - else if (!strcmp(keyword, "DriveType8")) - if (!strcmp(value, "DIR")) - DriveType[0] = DRVTYPE_DIR; - else if (!strcmp(value, "D64")) - DriveType[0] = DRVTYPE_D64; - else - DriveType[0] = DRVTYPE_T64; - else if (!strcmp(keyword, "DriveType9")) - if (!strcmp(value, "DIR")) - DriveType[1] = DRVTYPE_DIR; - else if (!strcmp(value, "D64")) - DriveType[1] = DRVTYPE_D64; - else - DriveType[1] = DRVTYPE_T64; - else if (!strcmp(keyword, "DriveType10")) - if (!strcmp(value, "DIR")) - DriveType[2] = DRVTYPE_DIR; - else if (!strcmp(value, "D64")) - DriveType[2] = DRVTYPE_D64; - else - DriveType[2] = DRVTYPE_T64; - else if (!strcmp(keyword, "DriveType11")) - if (!strcmp(value, "DIR")) - DriveType[3] = DRVTYPE_DIR; - else if (!strcmp(value, "D64")) - DriveType[3] = DRVTYPE_D64; - else - DriveType[3] = DRVTYPE_T64; else if (!strcmp(keyword, "DrivePath8")) strcpy(DrivePath[0], value); else if (!strcmp(keyword, "DrivePath9")) @@ -273,14 +223,14 @@ void Prefs::Load(char *filename) REUSize = REU_NONE; } else if (!strcmp(keyword, "DisplayType")) DisplayType = strcmp(value, "SCREEN") ? DISPTYPE_WINDOW : DISPTYPE_SCREEN; + else if (!strcmp(keyword, "Joystick1Port")) + Joystick1Port = atoi(value); + else if (!strcmp(keyword, "Joystick2Port")) + Joystick2Port = atoi(value); else if (!strcmp(keyword, "SpritesOn")) SpritesOn = !strcmp(value, "TRUE"); else if (!strcmp(keyword, "SpriteCollisions")) SpriteCollisions = !strcmp(value, "TRUE"); - else if (!strcmp(keyword, "Joystick1On")) - Joystick1On = !strcmp(value, "TRUE"); - else if (!strcmp(keyword, "Joystick2On")) - Joystick2On = !strcmp(value, "TRUE"); else if (!strcmp(keyword, "JoystickSwap")) JoystickSwap = !strcmp(value, "TRUE"); else if (!strcmp(keyword, "LimitSpeed")) @@ -315,38 +265,6 @@ void Prefs::Load(char *filename) SystemKeys = !strcmp(value, "TRUE"); else if (!strcmp(keyword, "ShowLEDs")) ShowLEDs = !strcmp(value, "TRUE"); -#if defined(HAVE_SDL) - else if (!strcmp(keyword, "JoystickKeyBinding0")) - JoystickKeyBinding[0] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding1")) - JoystickKeyBinding[1] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding2")) - JoystickKeyBinding[2] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding3")) - JoystickKeyBinding[3] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding4")) - JoystickKeyBinding[4] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding5")) - JoystickKeyBinding[5] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding6")) - JoystickKeyBinding[6] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding7")) - JoystickKeyBinding[7] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding8")) - JoystickKeyBinding[8] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding9")) - JoystickKeyBinding[9] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding10")) - JoystickKeyBinding[10] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding11")) - JoystickKeyBinding[11] = atoi(value); - else if (!strcmp(keyword, "JoystickKeyBinding12")) - JoystickKeyBinding[12] = atoi(value); - else if (!strcmp(keyword, "DisplayOption")) - DisplayOption = atoi(value); - else if (!strcmp(keyword, "MsPerFrame")) - MsPerFrame = atoi(value); -#endif } } fclose(file); @@ -377,21 +295,8 @@ bool Prefs::Save(char *filename) fprintf(file, "LatencyAvg = %d\n", LatencyAvg); fprintf(file, "ScalingNumerator = %d\n", ScalingNumerator); fprintf(file, "ScalingDenominator = %d\n", ScalingDenominator); - for (int i=0; i<4; i++) { - fprintf(file, "DriveType%d = ", i+8); - switch (DriveType[i]) { - case DRVTYPE_DIR: - fprintf(file, "DIR\n"); - break; - case DRVTYPE_D64: - fprintf(file, "D64\n"); - break; - case DRVTYPE_T64: - fprintf(file, "T64\n"); - break; - } + for (int i=0; i<4; i++) fprintf(file, "DrivePath%d = %s\n", i+8, DrivePath[i]); - } fprintf(file, "ViewPort = %s\n", ViewPort); fprintf(file, "DisplayMode = %s\n", DisplayMode); fprintf(file, "SIDType = "); @@ -422,10 +327,10 @@ bool Prefs::Save(char *filename) break; }; fprintf(file, "DisplayType = %s\n", DisplayType == DISPTYPE_WINDOW ? "WINDOW" : "SCREEN"); + fprintf(file, "Joystick1Port = %d\n", Joystick1Port); + fprintf(file, "Joystick2Port = %d\n", Joystick2Port); fprintf(file, "SpritesOn = %s\n", SpritesOn ? "TRUE" : "FALSE"); fprintf(file, "SpriteCollisions = %s\n", SpriteCollisions ? "TRUE" : "FALSE"); - fprintf(file, "Joystick1On = %s\n", Joystick1On ? "TRUE" : "FALSE"); - fprintf(file, "Joystick2On = %s\n", Joystick2On ? "TRUE" : "FALSE"); fprintf(file, "JoystickSwap = %s\n", JoystickSwap ? "TRUE" : "FALSE"); fprintf(file, "LimitSpeed = %s\n", LimitSpeed ? "TRUE" : "FALSE"); fprintf(file, "FastReset = %s\n", FastReset ? "TRUE" : "FALSE"); @@ -443,14 +348,6 @@ bool Prefs::Save(char *filename) fprintf(file, "AlwaysCopy = %s\n", AlwaysCopy ? "TRUE" : "FALSE"); fprintf(file, "SystemKeys = %s\n", SystemKeys ? "TRUE" : "FALSE"); fprintf(file, "ShowLEDs = %s\n", ShowLEDs ? "TRUE" : "FALSE"); -#if defined(HAVE_SDL) - for (int i = 0; i < N_WIIMOTE_BINDINGS; i++) - fprintf(file, "JoystickKeyBinding%d = %d\n", - i, JoystickKeyBinding[i]); - - fprintf(file, "DisplayOption = %d\n", DisplayOption); - fprintf(file, "MsPerFrame = %d\n", MsPerFrame); -#endif fclose(file); ThePrefsOnDisk = *this; return true; @@ -460,13 +357,17 @@ bool Prefs::Save(char *filename) #ifdef __BEOS__ -#include "Prefs_Be.i" +#include "Prefs_Be.h" #endif #ifdef AMIGA -#include "Prefs_Amiga.i" +#include "Prefs_Amiga.h" #endif #ifdef WIN32 -#include "Prefs_WIN32.i" +#include "Prefs_WIN32.h" +#endif + +#ifdef HAVE_GLADE +#include "Prefs_glade.h" #endif diff --git a/Src/Prefs.h b/Src/Prefs.h index 350ebe6..0f081ff 100644 --- a/Src/Prefs.h +++ b/Src/Prefs.h @@ -1,21 +1,27 @@ /* * Prefs.h - Global preferences * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _PREFS_H #define _PREFS_H -// Drive types -enum { - DRVTYPE_DIR, // 1541 emulation in host file system - DRVTYPE_D64, // 1541 emulation in .d64 file - DRVTYPE_T64 // 1541 emulation in .t64 file -}; - - // SID types enum { SIDTYPE_NONE, // SID emulation off @@ -33,30 +39,12 @@ enum { }; -// Display types (BeOS) +// Display types enum { - DISPTYPE_WINDOW, // BWindow - DISPTYPE_SCREEN // BWindowScreen + DISPTYPE_WINDOW, // Window + DISPTYPE_SCREEN // Fullscreen }; -// Key bindings (WII) -enum { - WIIMOTE_A, - WIIMOTE_B, - WIIMOTE_PLUS, - WIIMOTE_MINUS, - WIIMOTE_1, - CLASSIC_X, - CLASSIC_Y, - CLASSIC_B, - CLASSIC_L, - CLASSIC_R, - CLASSIC_ZR, - CLASSIC_ZL, - N_WIIMOTE_BINDINGS -}; - - // Preferences data class Prefs { @@ -76,8 +64,6 @@ public: int FloppyCycles; // Available 1541 CPU cycles per line int SkipFrames; // Draw every n-th frame - int DriveType[4]; // Type of drive 8..11 - char DrivePath[4][256]; // Path for drive 8..11 char ViewPort[256]; // Size of the C64 screen to display (Win32) @@ -86,6 +72,8 @@ public: int SIDType; // SID emulation type int REUSize; // Size of REU int DisplayType; // Display type (BeOS) + int Joystick1Port; // Port that joystick 1 is connected to (0 = no joystick, all other values are system dependant) + int Joystick2Port; // Port that joystick 2 is connected to int LatencyMin; // Min msecs ahead of sound buffer (Win32) int LatencyMax; // Max msecs ahead of sound buffer (Win32) int LatencyAvg; // Averaging interval in msecs (Win32) @@ -94,8 +82,6 @@ public: bool SpritesOn; // Sprite display is on bool SpriteCollisions; // Sprite collision detection is on - bool Joystick1On; // Joystick connected to port 1 of host - bool Joystick2On; // Joystick connected to port 2 of host bool JoystickSwap; // Swap joysticks 1<->2 bool LimitSpeed; // Limit speed to 100% bool FastReset; // Skip RAM test on reset @@ -104,6 +90,7 @@ public: bool Emul1541Proc; // Enable processor-level 1541 emulation bool SIDFilters; // Emulate SID filters bool DoubleScan; // Double scan lines (BeOS, if DisplayType == DISPTYPE_SCREEN) + bool JoystickGeekPort; // Enable GeekPort joystick adapter bool HideCursor; // Hide mouse cursor when visible (Win32) bool DirectSound; // Use direct sound (instead of wav) (Win32) bool ExclusiveSound; // Use exclusive mode with direct sound (Win32) @@ -132,12 +119,6 @@ private: static char *edit_prefs_name; static HWND hDlg; #endif - -#ifdef HAVE_SDL - int JoystickKeyBinding[N_WIIMOTE_BINDINGS]; - int DisplayOption; - int MsPerFrame; -#endif }; diff --git a/Src/Prefs_Amiga.i b/Src/Prefs_Amiga.h similarity index 85% rename from Src/Prefs_Amiga.i rename to Src/Prefs_Amiga.h index e560d83..a1248f8 100644 --- a/Src/Prefs_Amiga.i +++ b/Src/Prefs_Amiga.h @@ -1,7 +1,21 @@ /* - * Prefs_Amiga.i - Global preferences, Amiga specific stuff + * Prefs_Amiga.h - Global preferences, Amiga specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -123,11 +137,6 @@ static void set_values(void) GT_SetGadgetAttrs(PrefsGadgets[GDX_DrivePath10], PrefsWnd, NULL, GTST_String, (ULONG)prefs->DrivePath[2], TAG_DONE); GT_SetGadgetAttrs(PrefsGadgets[GDX_DrivePath11], PrefsWnd, NULL, GTST_String, (ULONG)prefs->DrivePath[3], TAG_DONE); - GT_SetGadgetAttrs(PrefsGadgets[GDX_DriveType8], PrefsWnd, NULL, GTCY_Active, prefs->DriveType[0], TAG_DONE); - GT_SetGadgetAttrs(PrefsGadgets[GDX_DriveType9], PrefsWnd, NULL, GTCY_Active, prefs->DriveType[1], TAG_DONE); - GT_SetGadgetAttrs(PrefsGadgets[GDX_DriveType10], PrefsWnd, NULL, GTCY_Active, prefs->DriveType[2], TAG_DONE); - GT_SetGadgetAttrs(PrefsGadgets[GDX_DriveType11], PrefsWnd, NULL, GTCY_Active, prefs->DriveType[3], TAG_DONE); - GT_SetGadgetAttrs(PrefsGadgets[GDX_MapSlash], PrefsWnd, NULL, GTCB_Checked, prefs->MapSlash, TAG_DONE); GT_SetGadgetAttrs(PrefsGadgets[GDX_Emul1541Proc], PrefsWnd, NULL, GTCB_Checked, prefs->Emul1541Proc, TAG_DONE); @@ -234,26 +243,6 @@ int REUSizeClicked(void) prefs->REUSize = PrefsMsg.Code; } -int DriveType8Clicked(void) -{ - prefs->DriveType[0] = PrefsMsg.Code; -} - -int DriveType9Clicked(void) -{ - prefs->DriveType[1] = PrefsMsg.Code; -} - -int DriveType10Clicked(void) -{ - prefs->DriveType[2] = PrefsMsg.Code; -} - -int DriveType11Clicked(void) -{ - prefs->DriveType[3] = PrefsMsg.Code; -} - void get_drive(int i) { bool result = FALSE; @@ -281,24 +270,14 @@ void get_drive(int i) strncpy(file, s, 255); *s = 0; - if (prefs->DriveType[i] == DRVTYPE_D64) - result = AslRequestTags(drive_req, - ASLFR_TitleText, (ULONG)"Frodo: Select disk image file", - ASLFR_DrawersOnly, FALSE, - ASLFR_DoPatterns, TRUE, - ASLFR_InitialPattern, (ULONG)"#?.(d64|x64)", - ASLFR_InitialDrawer, (ULONG)dir, - ASLFR_InitialFile, (ULONG)file, - TAG_DONE); - else - result = AslRequestTags(drive_req, - ASLFR_TitleText, (ULONG)"Frodo: Select archive file", - ASLFR_DrawersOnly, FALSE, - ASLFR_DoPatterns, TRUE, - ASLFR_InitialPattern, (ULONG)"#?.(t64|LNX)", - ASLFR_InitialDrawer, (ULONG)dir, - ASLFR_InitialFile, (ULONG)file, - TAG_DONE); + result = AslRequestTags(drive_req, + ASLFR_TitleText, (ULONG)"Frodo: Select disk image or archive file", + ASLFR_DrawersOnly, FALSE, + ASLFR_DoPatterns, TRUE, + ASLFR_InitialPattern, (ULONG)"#?.(d64|x64|t64|LNX|P00)", + ASLFR_InitialDrawer, (ULONG)dir, + ASLFR_InitialFile, (ULONG)file, + TAG_DONE); } if (result) { @@ -390,7 +369,6 @@ int PrefsSave(void) { get_values(); prefs->Save(path); - } int PrefsOK(void) diff --git a/Src/Prefs_Be.i b/Src/Prefs_Be.h similarity index 84% rename from Src/Prefs_Be.i rename to Src/Prefs_Be.h index 387c8c4..dfe18a5 100644 --- a/Src/Prefs_Be.i +++ b/Src/Prefs_Be.h @@ -1,7 +1,21 @@ /* - * Prefs_Be.i - Global preferences, Be specific stuff + * Prefs_Be.h - Global preferences, Be specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -20,8 +34,8 @@ const uint32 MSG_OK = 'okok'; const uint32 MSG_CANCEL = 'cncl'; const uint32 MSG_SPRITES_ON = 'spon'; const uint32 MSG_SPRITE_COLLISIONS = 'scol'; -const uint32 MSG_JOYSTICK_1_ON = 'joy1'; -const uint32 MSG_JOYSTICK_2_ON = 'joy2'; +const uint32 MSG_JOYSTICK_1_PORT = 'joy1'; +const uint32 MSG_JOYSTICK_2_PORT = 'joy2'; const uint32 MSG_JOYSTICK_SWAP = 'jswp'; const uint32 MSG_LIMIT_SPEED = 'lmit'; const uint32 MSG_FAST_RESET = 'frst'; @@ -30,10 +44,6 @@ const uint32 MSG_SID_FILTERS = 'filt'; const uint32 MSG_DOUBLE_SCAN = 'dbls'; const uint32 MSG_MAP_SLASH = 'mpsl'; const uint32 MSG_EMUL_1541_PROC = '15pr'; -const uint32 MSG_DRVTYPE_8 = 'drt8'; -const uint32 MSG_DRVTYPE_9 = 'drt9'; -const uint32 MSG_DRVTYPE_10 = 'drt:'; -const uint32 MSG_DRVTYPE_11 = 'drt;'; const uint32 MSG_GETDRIVE_8 = 'gtd8'; const uint32 MSG_GETDRIVE_9 = 'gtd9'; const uint32 MSG_GETDRIVE_10 = 'gtd:'; @@ -68,11 +78,11 @@ public: private: BCheckBox *make_checkbox(BRect frame, char *label, uint32 what, BView *parent); NumberControl *make_number_entry(BRect frame, char *label_text, BView *parent); - BPopUpMenu *make_drvtype_popup(BRect frame, uint32 what, BView *parent); PathControl *make_path_entry(BRect frame, char *label, BView *parent); BPopUpMenu *make_sidtype_popup(BRect frame, char *label_text, uint32 what, BView *parent); BPopUpMenu *make_reusize_popup(BRect frame, char *label_text, uint32 what, BView *parent); BPopUpMenu *make_disptype_popup(BRect frame, char *label_text, uint32 what, BView *parent); + BPopUpMenu *make_joystick_popup(BRect frame, char *label_text, uint32 what, BView *parent); void set_values(void); void get_values(void); void ghost_controls(void); @@ -93,15 +103,14 @@ private: NumberControl *g_cia_cycles; NumberControl *g_floppy_cycles; NumberControl *g_skip_frames; - BPopUpMenu *g_drive_type[4]; PathControl *g_drive_path[4]; BPopUpMenu *g_sid_type; BPopUpMenu *g_reu_size; BPopUpMenu *g_display_type; + BPopUpMenu *g_joystick_1_port; + BPopUpMenu *g_joystick_2_port; BCheckBox *g_sprites_on; BCheckBox *g_sprite_collisions; - BCheckBox *g_joystick_1_on; - BCheckBox *g_joystick_2_on; BCheckBox *g_joystick_swap; BCheckBox *g_limit_speed; BCheckBox *g_fast_reset; @@ -245,7 +254,7 @@ PrefsWindow::PrefsWindow(Prefs *p, bool start, char *path) : BWindow(BRect(0, 0, bar->AddItem(menu); AddChild(bar); SetKeyMenuBar(bar); - int mbar_height = bar->Frame().bottom + 1; + int mbar_height = int(bar->Frame().bottom) + 1; // Resize window to fit menu bar ResizeBy(0, mbar_height); @@ -257,28 +266,28 @@ PrefsWindow::PrefsWindow(Prefs *p, bool start, char *path) : BWindow(BRect(0, 0, top->SetViewColor(fill_color); // Checkboxes - g_sprites_on = make_checkbox(BRect(10, 10, 160, 21), "Sprite display", MSG_SPRITES_ON, top); - g_sprite_collisions = make_checkbox(BRect(10, 25, 160, 36), "Sprite collisions", MSG_SPRITE_COLLISIONS, top); - g_joystick_1_on = make_checkbox(BRect(10, 40, 160, 51), "Joystick on port 1", MSG_JOYSTICK_1_ON, top); - g_joystick_2_on = make_checkbox(BRect(10, 55, 160, 66), "Joystick on port 2", MSG_JOYSTICK_2_ON, top); - g_joystick_swap = make_checkbox(BRect(10, 70, 160, 81), "Swap joysticks", MSG_JOYSTICK_SWAP, top); - g_limit_speed = make_checkbox(BRect(10, 85, 160, 96), "Limit speed", MSG_LIMIT_SPEED, top); - g_fast_reset = make_checkbox(BRect(10, 100, 160, 111), "Fast reset", MSG_FAST_RESET, top); - g_cia_irq_hack = make_checkbox(BRect(10, 115, 160, 126), "Clear CIA ICR on write", MSG_CIA_IRQ_HACK, top); - g_sid_filters = make_checkbox(BRect(10, 130, 160, 141), "SID filters", MSG_SID_FILTERS, top); - g_double_scan = make_checkbox(BRect(10, 145, 160, 156), "Doublescan lines", MSG_DOUBLE_SCAN, top); + g_sprites_on = make_checkbox(BRect(10, 10, 180, 21), "Sprite display", MSG_SPRITES_ON, top); + g_sprite_collisions = make_checkbox(BRect(10, 25, 180, 36), "Sprite collisions", MSG_SPRITE_COLLISIONS, top); + g_limit_speed = make_checkbox(BRect(10, 40, 180, 51), "Limit speed", MSG_LIMIT_SPEED, top); + g_fast_reset = make_checkbox(BRect(10, 55, 180, 66), "Fast reset", MSG_FAST_RESET, top); + g_cia_irq_hack = make_checkbox(BRect(10, 70, 180, 81), "Clear CIA ICR on write", MSG_CIA_IRQ_HACK, top); + g_sid_filters = make_checkbox(BRect(10, 85, 180, 96), "SID filters", MSG_SID_FILTERS, top); + g_double_scan = make_checkbox(BRect(10, 100, 180, 111), "Doublescan lines", MSG_DOUBLE_SCAN, top); + g_joystick_swap = make_checkbox(BRect(10, 115, 180, 126), "Swap joysticks", MSG_JOYSTICK_SWAP, top); + g_joystick_1_port = make_joystick_popup(BRect(10, 130, 180, 145), "Joystick 1", MSG_JOYSTICK_1_PORT, top); + g_joystick_2_port = make_joystick_popup(BRect(10, 150, 180, 165), "Joystick 2", MSG_JOYSTICK_2_PORT, top); // Number entry fields - g_normal_cycles = make_number_entry(BRect(160, 10, 390, 26), "Cycles per line (CPU)", top); - g_bad_line_cycles = make_number_entry(BRect(160, 30, 390, 46), "Cycles per Bad Line (CPU)", top); - g_cia_cycles = make_number_entry(BRect(160, 50, 390, 66), "Cycles per line (CIA)", top); - g_floppy_cycles = make_number_entry(BRect(160, 70, 390, 86), "Cycles per line (1541)", top); - g_skip_frames = make_number_entry(BRect(160, 90, 390, 106), "Draw every n-th frame", top); + g_normal_cycles = make_number_entry(BRect(180, 10, 390, 26), "Cycles per line (CPU)", top); + g_bad_line_cycles = make_number_entry(BRect(180, 30, 390, 46), "Cycles per Bad Line (CPU)", top); + g_cia_cycles = make_number_entry(BRect(180, 50, 390, 66), "Cycles per line (CIA)", top); + g_floppy_cycles = make_number_entry(BRect(180, 70, 390, 86), "Cycles per line (1541)", top); + g_skip_frames = make_number_entry(BRect(180, 90, 390, 106), "Draw every n-th frame", top); // Popup fields - g_display_type = make_disptype_popup(BRect(160, 110, 390, 126), "Display type", MSG_DISPLAY_TYPE, top); - g_sid_type = make_sidtype_popup(BRect(160, 130, 390, 146), "SID emulation type", MSG_SID_TYPE, top); - g_reu_size = make_reusize_popup(BRect(160, 150, 390, 166), "REU size", MSG_REU_SIZE, top); + g_display_type = make_disptype_popup(BRect(180, 110, 390, 126), "Display type", MSG_DISPLAY_TYPE, top); + g_sid_type = make_sidtype_popup(BRect(180, 130, 390, 146), "SID emulation type", MSG_SID_TYPE, top); + g_reu_size = make_reusize_popup(BRect(180, 150, 390, 166), "REU size", MSG_REU_SIZE, top); // Prepare on/off pictures for file panel buttons BView *view = new BView(BRect(0, 0, 19, 15), "", B_FOLLOW_NONE, 0); @@ -332,7 +341,6 @@ PrefsWindow::PrefsWindow(Prefs *p, bool start, char *path) : BWindow(BRect(0, 0, sprintf(str, "%d", i+8); g_drive_path[i] = make_path_entry(BRect(10, 14+i*20, 299, 30+i*20), str, drvbox); drvbox->AddChild(new BPictureButton(BRect(304, 16+i*20, 323, 31+i*20), "", new BPicture(*on), new BPicture(*off), new BMessage(MSG_GETDRIVE_8 + i))); - g_drive_type[i] = make_drvtype_popup(BRect(329, 14+i*20, 373, 30+i*20), MSG_DRVTYPE_8 + i, drvbox); } g_map_slash = make_checkbox(BRect(10, 94, 300, 110), "Map '/'<->'\\' in filenames", MSG_MAP_SLASH, drvbox); @@ -356,6 +364,7 @@ PrefsWindow::PrefsWindow(Prefs *p, bool start, char *path) : BWindow(BRect(0, 0, save_panel->Window()->SetTitle("Frodo: Save preferences"); file_panel = new BFilePanel(B_OPEN_PANEL, &this_messenger, NULL, 0, false, new BMessage(MSG_DRIVE_PANEL_RETURNED)); file_panel->SetPanelDirectory(&AppDirectory); + file_panel->Window()->SetTitle("Frodo: Select disk image or archive file"); dir_panel = new BFilePanel(B_OPEN_PANEL, &this_messenger, NULL, B_DIRECTORY_NODE, false, new BMessage(MSG_DRIVE_PANEL_RETURNED)); dir_panel->SetPanelDirectory(&AppDirectory); dir_panel->Window()->SetTitle("Frodo: Select directory"); @@ -394,24 +403,6 @@ NumberControl *PrefsWindow::make_number_entry(BRect frame, char *label_text, BVi } -/* - * Create drive type popup menu - */ - -BPopUpMenu *PrefsWindow::make_drvtype_popup(BRect frame, uint32 what, BView *parent) -{ - BPopUpMenu *popup = new BPopUpMenu("drive_type popup", true, true); - popup->AddItem(new BMenuItem("Dir", new BMessage(what))); - popup->AddItem(new BMenuItem("D64", new BMessage(what))); - popup->AddItem(new BMenuItem("T64", new BMessage(what))); - popup->SetTargetForItems(this); - BMenuField *menu_field = new BMenuField(frame, "drive_type", NULL, popup); - menu_field->SetDivider(0); - parent->AddChild(menu_field); - return popup; -} - - /* * Create path entry field */ @@ -441,7 +432,7 @@ BPopUpMenu *PrefsWindow::make_disptype_popup(BRect frame, char *label_text, uint popup->AddItem(new BMenuItem("Screen", new BMessage(what))); popup->SetTargetForItems(this); BMenuField *menu_field = new BMenuField(frame, "display_type", label_text, popup); - menu_field->SetDivider(frame.Width()-55); + menu_field->SetDivider(frame.Width()-75); menu_field->SetAlignment(B_ALIGN_RIGHT); parent->AddChild(menu_field); return popup; @@ -459,7 +450,7 @@ BPopUpMenu *PrefsWindow::make_sidtype_popup(BRect frame, char *label_text, uint3 popup->AddItem(new BMenuItem("Digital", new BMessage(what))); popup->SetTargetForItems(this); BMenuField *menu_field = new BMenuField(frame, "sid_type", label_text, popup); - menu_field->SetDivider(frame.Width()-55); + menu_field->SetDivider(frame.Width()-75); menu_field->SetAlignment(B_ALIGN_RIGHT); parent->AddChild(menu_field); return popup; @@ -479,7 +470,28 @@ BPopUpMenu *PrefsWindow::make_reusize_popup(BRect frame, char *label_text, uint3 popup->AddItem(new BMenuItem("512K", new BMessage(what))); popup->SetTargetForItems(this); BMenuField *menu_field = new BMenuField(frame, "reu_size", label_text, popup); - menu_field->SetDivider(frame.Width()-55); + menu_field->SetDivider(frame.Width()-75); + menu_field->SetAlignment(B_ALIGN_RIGHT); + parent->AddChild(menu_field); + return popup; +} + + +/* + * Create joystick port popup + */ + +BPopUpMenu *PrefsWindow::make_joystick_popup(BRect frame, char *label_text, uint32 what, BView *parent) +{ + BPopUpMenu *popup = new BPopUpMenu("joystick popup", true, true); + popup->AddItem(new BMenuItem("None", new BMessage(what))); + popup->AddItem(new BMenuItem("Joystick Port 1", new BMessage(what))); + popup->AddItem(new BMenuItem("Joystick Port 2", new BMessage(what))); + popup->AddItem(new BMenuItem("GeekPort A", new BMessage(what))); + popup->AddItem(new BMenuItem("GeekPort B", new BMessage(what))); + popup->SetTargetForItems(this); + BMenuField *menu_field = new BMenuField(frame, "joystick", label_text, popup); + menu_field->SetDivider(60); menu_field->SetAlignment(B_ALIGN_RIGHT); parent->AddChild(menu_field); return popup; @@ -500,10 +512,8 @@ void PrefsWindow::set_values(void) g_floppy_cycles->SetValue(prefs->FloppyCycles); g_skip_frames->SetValue(prefs->SkipFrames); - for (int i=0; i<4; i++) { - g_drive_type[i]->ItemAt(prefs->DriveType[i])->SetMarked(true); + for (int i=0; i<4; i++) g_drive_path[i]->SetText(prefs->DrivePath[i]); - } g_sid_type->ItemAt(prefs->SIDType)->SetMarked(true); g_reu_size->ItemAt(prefs->REUSize)->SetMarked(true); @@ -511,8 +521,8 @@ void PrefsWindow::set_values(void) g_sprites_on->SetValue(prefs->SpritesOn ? B_CONTROL_ON : B_CONTROL_OFF); g_sprite_collisions->SetValue(prefs->SpriteCollisions ? B_CONTROL_ON : B_CONTROL_OFF); - g_joystick_1_on->SetValue(prefs->Joystick1On ? B_CONTROL_ON : B_CONTROL_OFF); - g_joystick_2_on->SetValue(prefs->Joystick2On ? B_CONTROL_ON : B_CONTROL_OFF); + g_joystick_1_port->ItemAt(prefs->Joystick1Port)->SetMarked(true); + g_joystick_2_port->ItemAt(prefs->Joystick2Port)->SetMarked(true); g_joystick_swap->SetValue(prefs->JoystickSwap ? B_CONTROL_ON : B_CONTROL_OFF); g_limit_speed->SetValue(prefs->LimitSpeed ? B_CONTROL_ON : B_CONTROL_OFF); g_fast_reset->SetValue(prefs->FastReset ? B_CONTROL_ON : B_CONTROL_OFF); @@ -601,12 +611,12 @@ void PrefsWindow::MessageReceived(BMessage *msg) prefs->SpriteCollisions = !prefs->SpriteCollisions; break; - case MSG_JOYSTICK_1_ON: - prefs->Joystick1On = !prefs->Joystick1On; + case MSG_JOYSTICK_1_PORT: + prefs->Joystick1Port = msg->FindInt32("index"); break; - case MSG_JOYSTICK_2_ON: - prefs->Joystick2On = !prefs->Joystick2On; + case MSG_JOYSTICK_2_PORT: + prefs->Joystick2Port = msg->FindInt32("index"); break; case MSG_JOYSTICK_SWAP: @@ -654,28 +664,15 @@ void PrefsWindow::MessageReceived(BMessage *msg) prefs->Emul1541Proc = !prefs->Emul1541Proc; break; - case MSG_DRVTYPE_8: - case MSG_DRVTYPE_9: - case MSG_DRVTYPE_10: - case MSG_DRVTYPE_11: - prefs->DriveType[msg->what & 3] = msg->FindInt32("index"); - break; - case MSG_GETDRIVE_8: case MSG_GETDRIVE_9: case MSG_GETDRIVE_10: case MSG_GETDRIVE_11: panel_drive_num = msg->what & 3; - file_panel->Hide(); - dir_panel->Hide(); - if (prefs->DriveType[panel_drive_num] == DRVTYPE_D64) { - file_panel->Window()->SetTitle("Frodo: Select disk image file"); - file_panel->Show(); - } else if (prefs->DriveType[panel_drive_num] == DRVTYPE_T64) { - file_panel->Window()->SetTitle("Frodo: Select archive file"); - file_panel->Show(); - } else - dir_panel->Show(); +// file_panel->Hide(); +// dir_panel->Hide(); + file_panel->Show(); +// dir_panel->Show(); break; case MSG_DRIVE_PANEL_RETURNED: { // Drive path file panel returned @@ -761,7 +758,7 @@ bool PrefsWindow::FilterKeyDown(uint32 *aChar, BView **target) if (*aChar == B_ESCAPE) { // Flash Cancel button g_cancel->SetValue(B_CONTROL_ON); - snooze(100000.0); + snooze(100000); PostMessage(MSG_CANCEL); } return true; diff --git a/Src/Prefs_WIN32.i b/Src/Prefs_WIN32.h similarity index 93% rename from Src/Prefs_WIN32.i rename to Src/Prefs_WIN32.h index c2b5552..91671b7 100644 --- a/Src/Prefs_WIN32.i +++ b/Src/Prefs_WIN32.h @@ -1,8 +1,21 @@ /* - * Prefs_WIN32.i - Global preferences, WIN32 specific stuff + * Prefs_WIN32.h - Global preferences, WIN32 specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * WIN32 code by J. Richard Sladkey + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include diff --git a/Src/Prefs_glade.h b/Src/Prefs_glade.h new file mode 100644 index 0000000..13fabdb --- /dev/null +++ b/Src/Prefs_glade.h @@ -0,0 +1,250 @@ +/* + * Prefs_glade.h - Global preferences, Glade/Gnome/Gtk+ specific stuff + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +#include +#include + +#include + + +// Glade XML tree +static GladeXML *xml = NULL; + +// Result of ShowEditor() +static bool result = false; + +// Pointer to preferences being edited +static Prefs *prefs = NULL; + +// Prefs file name +static char *prefs_path = NULL; + +// Prototypes +static void set_values(); +static void get_values(); +static void ghost_widgets(); + + +/* + * Show preferences editor (synchronously) + * prefs_name points to the file name of the preferences (which may be changed) + */ + +bool Prefs::ShowEditor(bool startup, char *path) +{ + prefs = this; + prefs_path = path; + + // Load XML user interface file on startup + if (startup) { + xml = glade_xml_new(DATADIR "Frodo.glade", NULL, NULL); + if (xml) { + glade_xml_signal_autoconnect(xml); + set_values(); + } + } + + // No XML means no prefs editor + if (!xml) + return startup; + + // Run editor + result = false; + gtk_main(); + return result; +} + + +/* + * Set the values of the widgets + */ + +static void create_joystick_menu(const char *widget_name) +{ + GtkWidget *w = glade_xml_get_widget(xml, widget_name); + gtk_option_menu_remove_menu(GTK_OPTION_MENU(w)); + + GtkWidget *menu = gtk_menu_new(); + + for (int i = -1; i < SDL_NumJoysticks(); ++i) { + GtkWidget *item = gtk_menu_item_new_with_label(i < 0 ? "None" : SDL_JoystickName(i)); + gtk_widget_show(item); + gtk_menu_append(GTK_MENU(menu), item); + } + + gtk_option_menu_set_menu(GTK_OPTION_MENU(w), menu); +} + +static void set_values() +{ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "emul1541_proc")), prefs->Emul1541Proc); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "map_slash")), prefs->MapSlash); + + gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive8_path")))), prefs->DrivePath[0]); + gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive9_path")))), prefs->DrivePath[1]); + gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive10_path")))), prefs->DrivePath[2]); + gtk_entry_set_text(GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, "drive11_path")))), prefs->DrivePath[3]); + + gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "display_type")), prefs->DisplayType); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprites_on")), prefs->SpritesOn); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprite_collisions")), prefs->SpriteCollisions); + + gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "sid_type")), prefs->SIDType); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sid_filters")), prefs->SIDFilters); + + create_joystick_menu("joystick1_port"); + create_joystick_menu("joystick2_port"); + + gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick1_port")), prefs->Joystick1Port); + gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick2_port")), prefs->Joystick2Port); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "joystick_swap")), prefs->JoystickSwap); + + gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "skip_frames")), prefs->SkipFrames); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "limit_speed")), prefs->LimitSpeed); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "fast_reset")), prefs->FastReset); + + gtk_option_menu_set_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "reu_size")), prefs->REUSize); + + gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "normal_cycles")), prefs->NormalCycles); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "bad_line_cycles")), prefs->BadLineCycles); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "cia_cycles")), prefs->CIACycles); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "floppy_cycles")), prefs->FloppyCycles); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "cia_irq_hack")), prefs->CIAIRQHack); + + ghost_widgets(); +} + + +/* + * Get the values of the widgets + */ + +static void get_drive_path(int num, const char *widget_name) +{ + prefs->DrivePath[num][0] = 0; + const char *path = gnome_file_entry_get_full_path(GNOME_FILE_ENTRY(glade_xml_get_widget(xml, widget_name)), false); + if (path) + strncpy(prefs->DrivePath[num], path, 255); + prefs->DrivePath[num][255] = 0; +} + +static void get_values() +{ + prefs->Emul1541Proc = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "emul1541_proc"))); + prefs->MapSlash = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "map_slash"))); + + get_drive_path(0, "drive8_path"); + get_drive_path(1, "drive9_path"); + get_drive_path(2, "drive10_path"); + get_drive_path(3, "drive11_path"); + + prefs->DisplayType = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "display_type"))); + prefs->SpritesOn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprites_on"))); + prefs->SpriteCollisions = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sprite_collisions"))); + + prefs->SIDType = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "sid_type"))); + prefs->SIDFilters = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sid_filters"))); + + prefs->Joystick1Port = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick1_port"))); + prefs->Joystick2Port = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "joystick2_port"))); + prefs->JoystickSwap = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "joystick_swap"))); + + prefs->SkipFrames = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "skip_frames"))); + prefs->LimitSpeed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "limit_speed"))); + prefs->FastReset = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "fast_reset"))); + + prefs->REUSize = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "reu_size"))); + + prefs->NormalCycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "normal_cycles"))); + prefs->BadLineCycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "bad_line_cycles"))); + prefs->CIACycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "cia_cycles"))); + prefs->FloppyCycles = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(glade_xml_get_widget(xml, "floppy_cycles"))); + + prefs->CIAIRQHack = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "cia_irq_hack"))); +} + + +/* + * Ghost/unghost widgets + */ + +static void ghost_widget(const char *name, bool ghosted) +{ + gtk_widget_set_sensitive(glade_xml_get_widget(xml, name), !ghosted); +} + +static void ghost_widgets() +{ + ghost_widget("drive9_path", prefs->Emul1541Proc); + ghost_widget("drive10_path", prefs->Emul1541Proc); + ghost_widget("drive11_path", prefs->Emul1541Proc); + + ghost_widget("sid_filters", prefs->SIDType != SIDTYPE_DIGITAL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xml, "sid_filters")), prefs->SIDType == SIDTYPE_DIGITAL ? prefs->SIDFilters : (prefs->SIDType == SIDTYPE_SIDCARD ? true : false)); +} + + +/* + * Signal handlers + */ + +extern "C" gboolean on_prefs_win_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) +{ + return false; +} + +extern "C" void on_ok_clicked(GtkButton *button, gpointer user_data) +{ + result = true; + get_values(); + prefs->Save(prefs_path); + gtk_main_quit(); +} + +extern "C" void on_quit_clicked(GtkButton *button, gpointer user_data) +{ + result = false; + gtk_main_quit(); +} + +extern "C" void on_about_activate(GtkMenuItem *menuitem, gpointer user_data) +{ + GladeXML *about_xml = glade_xml_new(DATADIR "Frodo.glade", "about_win", NULL); + if (about_xml) + gtk_widget_show(glade_xml_get_widget(about_xml, "about_win")); +} + +extern "C" void on_emul1541_proc_toggled(GtkToggleButton *button, gpointer user_data) +{ + prefs->Emul1541Proc = gtk_toggle_button_get_active(button); + ghost_widgets(); +} + +extern "C" void on_sid_type_activate(GtkMenuItem *menuitem, gpointer user_data) +{ + prefs->SIDType = gtk_option_menu_get_history(GTK_OPTION_MENU(glade_xml_get_widget(xml, "sid_type"))); + ghost_widgets(); +} + +extern "C" void on_sid_filters_toggled(GtkToggleButton *button, gpointer user_data) +{ + prefs->SIDFilters = gtk_toggle_button_get_active(button); +} diff --git a/Src/REU.cpp b/Src/REU.cpp index 16c1d6a..01ad360 100644 --- a/Src/REU.cpp +++ b/Src/REU.cpp @@ -1,10 +1,24 @@ /* * REU.cpp - 17xx REU emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Incompatibilities: * ------------------ * diff --git a/Src/REU.h b/Src/REU.h index 941734d..482971a 100644 --- a/Src/REU.h +++ b/Src/REU.h @@ -1,7 +1,21 @@ /* * REU.h - 17xx REU emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _REU_H diff --git a/Src/ROlib.h b/Src/ROlib.h index 8224865..89877f5 100644 --- a/Src/ROlib.h +++ b/Src/ROlib.h @@ -1,13 +1,26 @@ /* - * ROlib.h + * ROlib.h - Defines Classes, variables and OS interface calls for Acorn + * RISC OS computers * - * Defines Classes, variables and OS interface calls for Acorn RISC OS computers. - * (C) 1997 Andreas Dehmel + * (C) 1997 Andreas Dehmel * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ - - #ifndef RO_CUSTOM_LIB #define RO_CUSTOM_LIB @@ -456,7 +469,7 @@ extern _kernel_oserror *OS_ReadC(char *Code); /* returns length of characters read; if length negative ==> terminated by escape */ extern int OS_ReadLine(char *Buffer, int BuffSize, int minasc, int maxasc, int Echo); -/* TRUE ==> escape */ +/* true ==> escape */ extern bool OS_ReadEscapeState(void); /* File related calls */ diff --git a/Src/ROlib.s b/Src/ROlib.s index 88b2029..de8f291 100644 --- a/Src/ROlib.s +++ b/Src/ROlib.s @@ -4,6 +4,21 @@ ;* Assembler interface to RISC OS ;* (C) 1997 Andreas Dehmel ;* +;* Frodo (C) 1994-1997,2002-2005 Christian Bauer +;* +;* 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 a1 rn 0 diff --git a/Src/SAM.cpp b/Src/SAM.cpp index 92c8700..4637e92 100644 --- a/Src/SAM.cpp +++ b/Src/SAM.cpp @@ -1,7 +1,21 @@ /* * SAM.h - Simple Assembler and Monitor With Integrated System Explorer * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "sysdeps.h" @@ -2036,7 +2050,10 @@ static void view_vic_state(void) else fprintf(fout, "Fore "); - fprintf(fout, "\n\nPending interrupts: "); + fprintf(fout, "\nSS Coll: "); dump_spr_flags(vs.mm); + fprintf(fout, "SD Coll: "); dump_spr_flags(vs.md); + + fprintf(fout, "\nPending interrupts: "); dump_vic_ints(vs.irq_flag); fprintf(fout, "Enabled interrupts: "); dump_vic_ints(vs.irq_mask); diff --git a/Src/SAM.h b/Src/SAM.h index 3c30fa1..29cb650 100644 --- a/Src/SAM.h +++ b/Src/SAM.h @@ -1,7 +1,21 @@ /* * SAM.h - Simple Assembler and Monitor With Integrated System Explorer * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _SAM_H diff --git a/Src/SID.cpp b/Src/SID.cpp index ae1e88e..4547864 100644 --- a/Src/SID.cpp +++ b/Src/SID.cpp @@ -1,15 +1,28 @@ /* * SID.cpp - 6581 emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Incompatibilities: * ------------------ * * - Lots of empirically determined constants in the filter calculations - * - Voice 3 cannot be muted */ #include "sysdeps.h" @@ -19,7 +32,7 @@ #include "Prefs.h" #ifdef __BEOS__ -#include +#include #endif #ifdef AMIGA @@ -64,13 +77,9 @@ class DigitalPlayer; #define ldSINTAB 9 // size of sinus table (0 to 90 degrees) #endif -#if defined(HAVE_SDL) -#include -#endif - #ifdef USE_FIXPOINT_MATHS -#include "FixPoint.i" +#include "FixPoint.h" #endif @@ -269,10 +278,8 @@ void MOS6581::SetState(MOS6581State *ss) #if defined(AMIGA) || defined(__riscos__) const uint32 SAMPLE_FREQ = 22050; // Sample output frequency in Hz -#elif defined(GEKKO) -const uint32 SAMPLE_FREQ = 48000; #else -const uint32 SAMPLE_FREQ = 44100; // Sample output frequency in Hz +const uint32 SAMPLE_FREQ = 32000; // Sample output frequency in Hz #endif const uint32 SID_FREQ = 985248; // SID frequency in Hz const uint32 CALC_FREQ = 50; // Frequency at which calc_buffer is called in Hz (should be 50Hz) @@ -341,6 +348,7 @@ struct DRVoice { // The following bit is set for the modulating // voice, not for the modulated one (as the SID bits) bool sync; // Sync modulation bit + bool mute; // Voice muted (voice 3 only) }; // Renderer class @@ -359,19 +367,22 @@ public: virtual void NewPrefs(Prefs *prefs); virtual void Pause(void); virtual void Resume(void); - +#ifdef WII + void calc_buffer(int16 *buf, long count); +#endif private: void init_sound(void); void calc_filter(void); #ifdef __riscos__ void calc_buffer(uint8 *buf, long count); #else +#ifndef WII void calc_buffer(int16 *buf, long count); +#endif #endif bool ready; // Flag: Renderer has initialized and is ready uint8 volume; // Master volume - bool v3_mute; // Voice 3 muted static uint16 TriTable[0x1000*2]; // Tables for certain waveforms static const uint16 TriSawTable[0x100]; @@ -410,11 +421,10 @@ private: int sample_in_ptr; // Index in sample_buf for writing #ifdef __BEOS__ - static bool stream_func(void *arg, char *buf, size_t count, void *header); + static void buffer_proc(void *cookie, void *buffer, size_t size, const media_raw_audio_format &format); C64 *the_c64; // Pointer to C64 object - BDACStream *the_stream; // Pointer to stream - BSubscriber *the_sub; // Pointer to subscriber - bool in_stream; // Flag: Subscriber has entered stream + BSoundPlayer *the_player; // Pointer to sound player + bool player_stopped; // Flag: player stopped #endif #ifdef AMIGA @@ -435,13 +445,11 @@ private: #endif #ifdef HAVE_SDL - void fill_audio(Uint8 *stream, int len); - static void fill_audio_helper(void *udata, Uint8 *stream, int len); - - SDL_AudioSpec spec; + int sndbufsize; + int16 *sound_buffer; #endif -#if defined(__linux__) || defined(HAVE_SDL) +#ifdef __linux__ int devfd, sndbufsize, buffer_rate; int16 *sound_buffer; #endif @@ -450,13 +458,13 @@ private: int fd; audio_info status; uint_t sent_samples,delta_samples; - WORD *sound_calc_buf; + int16 *sound_calc_buf; #endif #ifdef __hpux int fd; audio_status status; - int16 * sound_calc_buf; + int16 *sound_calc_buf; int linecnt; #endif @@ -876,7 +884,6 @@ DigitalRenderer::DigitalRenderer() void DigitalRenderer::Reset(void) { volume = 0; - v3_mute = false; for (int v=0; v<3; v++) { voice[v].wave = WAVE_NONE; @@ -886,7 +893,7 @@ void DigitalRenderer::Reset(void) voice[v].eg_level = voice[v].s_level = 0; voice[v].a_add = voice[v].d_sub = voice[v].r_sub = EGTable[0]; voice[v].gate = voice[v].ring = voice[v].test = false; - voice[v].filter = voice[v].sync = false; + voice[v].filter = voice[v].sync = voice[v].mute = false; } f_type = FILT_NONE; @@ -965,7 +972,7 @@ void DigitalRenderer::WriteRegister(uint16 adr, uint8 byte) voice[v].gate = byte & 1; voice[v].mod_by->sync = byte & 2; voice[v].ring = byte & 4; - if ((voice[v].test = byte & 8)) + if ((voice[v].test = byte & 8) != 0) voice[v].count = 0; break; @@ -1004,7 +1011,7 @@ void DigitalRenderer::WriteRegister(uint16 adr, uint8 byte) case 24: volume = byte & 0xf; - v3_mute = byte & 0x80; + voice[2].mute = byte & 0x80; if (((byte >> 4) & 7) != f_type) { f_type = (byte >> 4) & 7; #ifdef USE_FIXPOINT_MATHS @@ -1199,22 +1206,16 @@ void DigitalRenderer::calc_buffer(int16 *buf, long count) #ifdef __riscos__ // on RISC OS we have 8 bit logarithmic sound DigitalRenderer_GetTables(&LinToLog, &LogScale); // get translation tables -#else -#ifdef __BEOS__ - count >>= 2; // 16 bit stereo output, count is in bytes #else count >>= 1; // 16 bit mono output, count is in bytes -#endif #endif while (count--) { - int32 sum_output; - int32 sum_output_filter = 0; - // Get current master volume from sample buffer, // calculate sampled voice uint8 master_volume = sample_buf[(sample_count >> 16) % SAMPLE_BUF_SIZE]; sample_count += ((0x138 * 50) << 16) / SAMPLE_FREQ; - sum_output = SampleTab[master_volume] << 8; + int32 sum_output = SampleTab[master_volume] << 8; + int32 sum_output_filter = 0; // Loop for all three voices for (int j=0; j<3; j++) { @@ -1254,6 +1255,8 @@ void DigitalRenderer::calc_buffer(int16 *buf, long count) envelope = (v->eg_level * master_volume) >> 20; // Waveform generator + if (v->mute) + continue; uint16 output; if (!v->test) @@ -1334,21 +1337,7 @@ void DigitalRenderer::calc_buffer(int16 *buf, long count) } // Write to buffer -#ifdef __BEOS__ - int16 audio_data = (sum_output + sum_output_filter) >> 10; - int val = *buf + audio_data; - if (val > 32767) - val = 32767; - if (val < -32768) - val = -32768; - *buf++ = val; - val = *buf + audio_data; - if (val > 32767) - val = 32767; - if (val < -32768) - val = -32768; - *buf++ = val; -#elif defined(__riscos__) // lookup in 8k (13bit) translation table +#if defined(__riscos__) // lookup in 8k (13bit) translation table *buf++ = LinToLog[((sum_output + sum_output_filter) >> 13) & 0x1fff]; #else *buf++ = (sum_output + sum_output_filter) >> 10; @@ -1359,31 +1348,31 @@ void DigitalRenderer::calc_buffer(int16 *buf, long count) // Manufacturer independent sound is still just a dream... #if defined(__BEOS__) -#include "SID_Be.i" +#include "SID_Be.h" #elif defined(AMIGA) -#include "SID_Amiga.i" +#include "SID_Amiga.h" -#elif defined(GEKKO) -#include "SID_wii.i" +#elif defined(HAVE_SDL) +#include "SID_SDL.h" #elif defined(__linux__) -#include "SID_linux.i" +#include "SID_linux.h" #elif defined(SUN) -#include "SID_sun.i" +#include "SID_sun.h" #elif defined(__hpux) -#include "SID_hp.i" +#include "SID_hp.h" #elif defined(__mac__) -#include "SID_mac.i" +#include "SID_mac.h" #elif defined(WIN32) -#include "SID_WIN32.i" +#include "SID_WIN32.h" #elif defined(__riscos__) -#include "SID_Acorn.i" +#include "SID_Acorn.h" #else // No sound void DigitalRenderer::init_sound(void) {ready = false;} @@ -1411,11 +1400,15 @@ void MOS6581::open_close_renderer(int old_type, int new_type) #if defined(__BEOS__) || defined(__riscos__) the_renderer = new DigitalRenderer(the_c64); #else - the_renderer = new DigitalRenderer(); + the_renderer = new DigitalRenderer; #endif #ifdef AMIGA else if (new_type == SIDTYPE_SIDCARD) - the_renderer = new SIDCardRenderer(); + the_renderer = new SIDCardRenderer; +#endif +#ifdef __linux__ + else if (new_type == SIDTYPE_SIDCARD) + the_renderer = new CatweaselRenderer; #endif else the_renderer = NULL; diff --git a/Src/SID.h b/Src/SID.h index cd77bf6..4286907 100644 --- a/Src/SID.h +++ b/Src/SID.h @@ -1,7 +1,21 @@ /* * SID.h - 6581 emulation * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _SID_H diff --git a/Src/SID_Acorn.i b/Src/SID_Acorn.h similarity index 67% rename from Src/SID_Acorn.i rename to Src/SID_Acorn.h index 02dff4a..8b81eb2 100644 --- a/Src/SID_Acorn.i +++ b/Src/SID_Acorn.h @@ -1,16 +1,26 @@ /* - * SID_Acorn.i + * SID_Acorn.h - 6581 emulation, RISC OS specific stuff * - * RISC OS specific parts of the sound emulation - * Frodo (C) 1994-1997,2002 Christian Bauer - * Acorn port by Andreas Dehmel, 1997 + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 */ #include "C64.h" - void DigitalRenderer::init_sound(void) { _kernel_oserror *err; diff --git a/Src/SID_Amiga.i b/Src/SID_Amiga.h similarity index 88% rename from Src/SID_Amiga.i rename to Src/SID_Amiga.h index 7ef993d..ae92bb7 100644 --- a/Src/SID_Amiga.i +++ b/Src/SID_Amiga.h @@ -1,7 +1,21 @@ /* - * SID_Amiga.i - 6581 emulation, Amiga specific stuff + * SID_Amiga.h - 6581 emulation, Amiga specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include diff --git a/Src/SID_Be.h b/Src/SID_Be.h new file mode 100644 index 0000000..7f8ac7f --- /dev/null +++ b/Src/SID_Be.h @@ -0,0 +1,102 @@ +/* + * SID_Be.h - 6581 emulation, Be specific stuff + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +#include "C64.h" + + +/* + * Initialization, open subscriber + */ + +#if B_HOST_IS_LENDIAN +const media_raw_audio_format audio_format = {SAMPLE_FREQ, 1, media_raw_audio_format::B_AUDIO_SHORT, B_MEDIA_LITTLE_ENDIAN, SAMPLE_FREQ / CALC_FREQ * 2}; +#else +const media_raw_audio_format audio_format = {SAMPLE_FREQ, 1, media_raw_audio_format::B_AUDIO_SHORT, B_MEDIA_BIG_ENDIAN, SAMPLE_FREQ / CALC_FREQ * 2}; +#endif + +void DigitalRenderer::init_sound(void) +{ + the_player = new BSoundPlayer(&audio_format, "Frodo", buffer_proc, NULL, this); + the_player->SetHasData(true); + the_player->Start(); + player_stopped = false; + ready = true; +} + + +/* + * Destructor, close subscriber + */ + +DigitalRenderer::~DigitalRenderer() +{ + if (the_player) { + the_player->Stop(); + delete the_player; + } +} + + +/* + * Sample volume (for sampled voice) + */ + +void DigitalRenderer::EmulateLine(void) +{ + sample_buf[sample_in_ptr] = volume; + sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; +} + + +/* + * Pause sound output + */ + +void DigitalRenderer::Pause(void) +{ + if (!player_stopped) { + the_player->Stop(); + player_stopped = true; + } +} + + +/* + * Resume sound output + */ + +void DigitalRenderer::Resume(void) +{ + if (player_stopped) { + the_player->Start(); + player_stopped = false; + } +} + + +/* + * Stream function + */ + +void DigitalRenderer::buffer_proc(void *cookie, void *buffer, size_t size, const media_raw_audio_format &format) +{ + ((DigitalRenderer *)cookie)->calc_buffer((int16 *)buffer, size); + ((DigitalRenderer *)cookie)->the_c64->SoundSync(); +} diff --git a/Src/SID_Be.i b/Src/SID_Be.i deleted file mode 100644 index e0eb852..0000000 --- a/Src/SID_Be.i +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SID_Be.i - 6581 emulation, Be specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - */ - -#include - -#include "C64.h" - - -/* - * Initialization, open subscriber - */ - -void DigitalRenderer::init_sound(void) -{ - in_stream = false; - - the_stream = new BDACStream(); - the_sub = new BSubscriber("Frodo SID emulation"); - ready = the_sub->Subscribe(the_stream) == B_NO_ERROR; - if (ready) { - the_stream->SetSamplingRate(SAMPLE_FREQ); - the_stream->SetStreamBuffers(SAMPLE_FREQ / CALC_FREQ * 4, 4); // Must be called after EnterStream() - the_sub->EnterStream(NULL, true, this, stream_func, NULL, true); - in_stream = true; - } -} - - -/* - * Destructor, close subscriber - */ - -DigitalRenderer::~DigitalRenderer() -{ - if (ready) { - if (in_stream) { - the_sub->ExitStream(true); - in_stream = false; - } - the_stream->SetStreamBuffers(4096, 8); - the_sub->Unsubscribe(); - ready = false; - } - delete the_sub; - delete the_stream; -} - - -/* - * Sample volume (for sampled voice) - */ - -void DigitalRenderer::EmulateLine(void) -{ - sample_buf[sample_in_ptr] = volume; - sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; -} - - -/* - * Pause sound output - */ - -void DigitalRenderer::Pause(void) -{ - if (in_stream) { - the_sub->ExitStream(true); - in_stream = false; - } -} - - -/* - * Resume sound output - */ - -void DigitalRenderer::Resume(void) -{ - if (!in_stream) { - the_sub->EnterStream(NULL, true, this, stream_func, NULL, true); - in_stream = true; - } -} - - -/* - * Stream function - */ - -bool DigitalRenderer::stream_func(void *arg, char *buf, size_t count, void *header) -{ - ((DigitalRenderer *)arg)->calc_buffer((int16 *)buf, count); - ((DigitalRenderer *)arg)->the_c64->SoundSync(); - return true; -} diff --git a/Src/SID_SDL.h b/Src/SID_SDL.h new file mode 100644 index 0000000..c41f416 --- /dev/null +++ b/Src/SID_SDL.h @@ -0,0 +1,186 @@ +/* + * SID_linux.h - 6581 emulation, Linux specific stuff + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +//#include +//#include +//#include +//#include + +#include + +#include "VIC.h" + +SDL_AudioSpec *sdl_audio_desired, *sdl_audio; +int16 *sdl_buffer ATTRIBUTE_ALIGN(32); +DigitalRenderer* p; +bool paused = false; + +void fill_audio(void *udata, Uint8 *stream, int len) { + + if(paused == true) { + + memset(stream, 0x0, len); + + } else + + { + + // memcpy(stream, sbuffer, len); + p->calc_buffer((int16*)stream, len); + + } + +} + +/* + * Initialization + */ + +void DigitalRenderer::init_sound(void) +{ + int arg; + unsigned long format; + + ready = false; + p = this; + sndbufsize=0x138*4; + + sdl_audio_desired = (SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec)); + sdl_audio = (SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec)); + + sdl_audio_desired->freq=32000; + sdl_audio_desired->format=AUDIO_S16MSB; + sdl_audio_desired->channels=2; + sdl_audio_desired->samples=sndbufsize/2; + sdl_audio_desired->callback=fill_audio; + sdl_audio_desired->userdata=NULL; + + if (SDL_OpenAudio(sdl_audio_desired, sdl_audio) < 0) { + fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); + } + free(sdl_audio_desired); + SDL_PauseAudio(0); + + /*devfd = open("/dev/dsp", O_WRONLY); + if (devfd < 0) + return; + + ioctl(devfd, SNDCTL_DSP_GETFMTS, &format); + if (!(format & AFMT_S16_LE)) + return; + format = AFMT_S16_LE; + ioctl(devfd, SNDCTL_DSP_SETFMT, &format);*/ + + // Buffer size: 2^9 == 512 bytes. Note that too large buffers will not work + // very well: The speed of the C64 is slowed down to an average speed of + // 100% by the blocking write() call in EmulateLine(). If you use a buffer + // of, say 4096 bytes, that will happen only about every 4 frames, which + // means that the emulation runs much faster in some frames, and much + // slower in others. + // On really fast machines, it might make sense to use an even smaller + // buffer size. + /*arg = 0x00100009; + ioctl(devfd, SNDCTL_DSP_SETFRAGMENT, &arg); + arg = 0; + ioctl(devfd, SNDCTL_DSP_STEREO, &arg); + arg = 44100; + ioctl(devfd, SNDCTL_DSP_SPEED, &arg); + ioctl(devfd, SOUND_PCM_READ_RATE, &arg); + if (arg < 43000 || arg > 45000) + return;*/ + + /*ioctl(devfd, SNDCTL_DSP_GETBLKSIZE, &sndbufsize);*/ + sound_buffer = new int16[sndbufsize]; + sdl_buffer=sound_buffer; + ready = true; +} + + +/* + * Destructor + */ + +DigitalRenderer::~DigitalRenderer() +{ + free(sdl_audio); + SDL_CloseAudio(); + + /*if (devfd >= 0) + close(devfd);*/ +} + + +/* + * Pause sound output + */ + +void DigitalRenderer::Pause(void) +{ + SDL_PauseAudio(1); + paused = true; + +} + + +/* + * Resume sound output + */ + +void DigitalRenderer::Resume(void) +{ + SDL_PauseAudio(0); + paused = false; + +} + + +/* + * Fill buffer, sample volume (for sampled voice) + */ + +void DigitalRenderer::EmulateLine(void) +{ + static int divisor = 0; + static int to_output = 0; + static int buffer_pos = 0; + + if (!ready) + return; + + sample_buf[sample_in_ptr] = volume; + sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; +/* + // Now see how many samples have to be added for this line + divisor += SAMPLE_FREQ; + while (divisor >= 0) + divisor -= TOTAL_RASTERS*SCREEN_FREQ, to_output++; + + // Calculate the sound data only when we have enough to fill + // the buffer entirely + if ((buffer_pos + to_output) >= sndbufsize) { + int datalen = sndbufsize - buffer_pos; + to_output -= datalen; + calc_buffer(sound_buffer + buffer_pos, datalen*2); + //write(devfd, sound_buffer, sndbufsize*2); + buffer_pos = 0; + } +*/ +} + diff --git a/Src/SID_SDL.i b/Src/SID_SDL.i deleted file mode 100644 index cef132f..0000000 --- a/Src/SID_SDL.i +++ /dev/null @@ -1,142 +0,0 @@ -/* - * SID_linux.i - 6581 emulation, Linux specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Linux sound stuff by Bernd Schmidt - */ - -#include -#include -#include -#include - -#include "VIC.h" - -static int divisor = 0; -static int to_output = 0; - -void DigitalRenderer::fill_audio(Uint8 *stream, int len) -{ - int cnt = 0; - int bytes_to_write = to_output * sizeof(Uint16); - int buf_size = this->sndbufsize * sizeof(Uint16); - - /* Wii is stereo-only, so divide the buffer by two */ - memset(stream, 0, len); - len = len / 2; - if (to_output <= 0) - return; - - while (cnt < bytes_to_write && cnt < len) - { - int datalen = buf_size; - static Uint16 real_buf[4096]; - int i; - - if (datalen > bytes_to_write) - datalen = bytes_to_write; - - if (datalen > len - cnt) - datalen = len - cnt; - - calc_buffer(sound_buffer, datalen); - /* ... and calculate a real stereo buffer */ - for (i = 0; i < datalen; i++) - { - real_buf[i*2] = sound_buffer[i]; - real_buf[i*2+1] = sound_buffer[i]; - } - /* and output it */ - memcpy(stream + cnt*2, (Uint8*)real_buf, datalen * 2); - cnt += datalen; - } - if (to_output - cnt / 2 <= 0) - to_output = 0; - else - to_output -= cnt / 2; -} - -void DigitalRenderer::fill_audio_helper(void *udata, Uint8 *stream, int len) -{ - DigitalRenderer *p_this = (DigitalRenderer *)udata; - - p_this->fill_audio(stream, len); -} - -/* - * Initialization - */ - -void DigitalRenderer::init_sound(void) -{ - this->sndbufsize = 512; - - /* Set the audio format */ - this->spec.freq = 44100; - this->spec.format = AUDIO_S16SYS; - this->spec.channels = 2; /* 1 = mono, 2 = stereo */ - this->spec.samples = 512; - this->spec.callback = this->fill_audio_helper; - this->spec.userdata = (void*)this; - - ready = false; - if ( SDL_OpenAudio(&this->spec, NULL) < 0 ) { - fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); - return ; - } - - this->sound_buffer = new int16[this->sndbufsize]; - ready = true; - SDL_PauseAudio(0); -} - - -/* - * Destructor - */ - -DigitalRenderer::~DigitalRenderer() -{ - SDL_CloseAudio(); -} - - -/* - * Pause sound output - */ - -void DigitalRenderer::Pause(void) -{ - SDL_PauseAudio(1); -} - - -/* - * Resume sound output - */ - -void DigitalRenderer::Resume(void) -{ - SDL_PauseAudio(0); -} - - -/* - * Fill buffer, sample volume (for sampled voice) - */ - -void DigitalRenderer::EmulateLine(void) -{ - if (!ready) - return; - - sample_buf[sample_in_ptr] = volume; - sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; - - /* - * Now see how many samples have to be added for this line - */ - divisor += SAMPLE_FREQ; - while (divisor >= 0) - divisor -= TOTAL_RASTERS*SCREEN_FREQ, to_output++; -} diff --git a/Src/SID_WIN32.i b/Src/SID_WIN32.h similarity index 93% rename from Src/SID_WIN32.i rename to Src/SID_WIN32.h index f765f01..c6da330 100644 --- a/Src/SID_WIN32.i +++ b/Src/SID_WIN32.h @@ -1,8 +1,21 @@ /* - * SID_WIN32.i - 6581 emulation, WIN32 specific stuff + * SID_WIN32.h - 6581 emulation, WIN32 specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * WIN32 code by J. Richard Sladkey + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include diff --git a/Src/SID_hp.i b/Src/SID_hp.h similarity index 82% rename from Src/SID_hp.i rename to Src/SID_hp.h index d08e0e6..b82cc7b 100644 --- a/Src/SID_hp.i +++ b/Src/SID_hp.h @@ -1,7 +1,21 @@ /* - * SID_hp.i - 6581 emulation, HP-UX specific stuff + * SID_hp.h - 6581 emulation, HP-UX specific stuff * - * Lutz Vieweg + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ extern "C" { diff --git a/Src/SID_linux.h b/Src/SID_linux.h new file mode 100644 index 0000000..43f31d1 --- /dev/null +++ b/Src/SID_linux.h @@ -0,0 +1,217 @@ +/* + * SID_linux.h - 6581 emulation, Linux specific stuff + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +#include +#include +#include +#include + +// Catweasel ioctls (included here for convenience) +#include +#define CWSID_IOCTL_TYPE ('S') +#define CWSID_IOCTL_RESET _IO(CWSID_IOCTL_TYPE, 0) +#define CWSID_IOCTL_CARDTYPE _IOR(CWSID_IOCTL_TYPE, 4, int) +#define CWSID_IOCTL_PAL _IO(CWSID_IOCTL_TYPE, 0x11) +#define CWSID_IOCTL_NTSC _IO(CWSID_IOCTL_TYPE, 0x12) +#define CWSID_IOCTL_DOUBLEBUFFER _IOW(CWSID_IOCTL_TYPE, 0x21, int) +#define CWSID_IOCTL_DELAY _IOW(CWSID_IOCTL_TYPE, 0x22, int) +#define CWSID_MAGIC 0x100 +#define HAVE_CWSID 1 + +#include "VIC.h" + + +/* + * Initialization + */ + +void DigitalRenderer::init_sound(void) +{ + int arg; + unsigned long format; + + ready = false; + devfd = open("/dev/dsp", O_WRONLY); + if (devfd < 0) + return; + + ioctl(devfd, SNDCTL_DSP_GETFMTS, &format); + if (!(format & AFMT_S16_LE)) + return; + format = AFMT_S16_LE; + ioctl(devfd, SNDCTL_DSP_SETFMT, &format); + + // Buffer size: 2^9 == 512 bytes. Note that too large buffers will not work + // very well: The speed of the C64 is slowed down to an average speed of + // 100% by the blocking write() call in EmulateLine(). If you use a buffer + // of, say 4096 bytes, that will happen only about every 4 frames, which + // means that the emulation runs much faster in some frames, and much + // slower in others. + // On really fast machines, it might make sense to use an even smaller + // buffer size. + arg = 0x00100009; + ioctl(devfd, SNDCTL_DSP_SETFRAGMENT, &arg); + arg = 0; + ioctl(devfd, SNDCTL_DSP_STEREO, &arg); + arg = 44100; + ioctl(devfd, SNDCTL_DSP_SPEED, &arg); + ioctl(devfd, SOUND_PCM_READ_RATE, &arg); + if (arg < 43000 || arg > 45000) + return; + + ioctl(devfd, SNDCTL_DSP_GETBLKSIZE, &sndbufsize); + sound_buffer = new int16[sndbufsize]; + ready = true; +} + + +/* + * Destructor + */ + +DigitalRenderer::~DigitalRenderer() +{ + if (devfd >= 0) + close(devfd); +} + + +/* + * Pause sound output + */ + +void DigitalRenderer::Pause(void) +{ +} + + +/* + * Resume sound output + */ + +void DigitalRenderer::Resume(void) +{ +} + + +/* + * Fill buffer, sample volume (for sampled voice) + */ + +void DigitalRenderer::EmulateLine(void) +{ + static int divisor = 0; + static int to_output = 0; + static int buffer_pos = 0; + + if (!ready) + return; + + sample_buf[sample_in_ptr] = volume; + sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; + + // Now see how many samples have to be added for this line + divisor += SAMPLE_FREQ; + while (divisor >= 0) + divisor -= TOTAL_RASTERS*SCREEN_FREQ, to_output++; + + // Calculate the sound data only when we have enough to fill + // the buffer entirely + if ((buffer_pos + to_output) >= sndbufsize) { + int datalen = sndbufsize - buffer_pos; + to_output -= datalen; + calc_buffer(sound_buffer + buffer_pos, datalen*2); + write(devfd, sound_buffer, sndbufsize*2); + buffer_pos = 0; + } +} + + +/* + * Renderer for Catweasel card + */ + +// Renderer class +class CatweaselRenderer : public SIDRenderer { +public: + CatweaselRenderer(); + virtual ~CatweaselRenderer(); + + virtual void Reset(void); + virtual void EmulateLine(void) {} + virtual void WriteRegister(uint16 adr, uint8 byte); + virtual void NewPrefs(Prefs *prefs) {} + virtual void Pause(void) {} + virtual void Resume(void) {} + +private: + int cwsid_fh; // Catweasel device file handle +}; + +// Constructor: Open Catweasel device and reset SID +CatweaselRenderer::CatweaselRenderer() +{ + cwsid_fh = open("/dev/sid", O_WRONLY); + if (cwsid_fh >= 0) { + int i; + if (ioctl(cwsid_fh, CWSID_IOCTL_CARDTYPE, &i) < 0 || i != CWSID_MAGIC) { + close(cwsid_fh); + cwsid_fh = -1; + } else { + ioctl(cwsid_fh, CWSID_IOCTL_RESET); + ioctl(cwsid_fh, CWSID_IOCTL_DOUBLEBUFFER, 0); + } + } + + Reset(); +} + +// Destructor: Reset SID and close Catweasel device +CatweaselRenderer::~CatweaselRenderer() +{ + Reset(); + + if (cwsid_fh >= 0) { + close(cwsid_fh); + cwsid_fh = -1; + } +} + +// Reset SID +void CatweaselRenderer::Reset(void) +{ + if (cwsid_fh >= 0) { + uint8 zero = 0; + ioctl(cwsid_fh, CWSID_IOCTL_RESET); + lseek(cwsid_fh, 24, SEEK_SET); + write(cwsid_fh, &zero, 1); + } +} + +// Write to register +void CatweaselRenderer::WriteRegister(uint16 adr, uint8 byte) +{ + if (cwsid_fh >= 0 && adr < 0x1a) { + lseek(cwsid_fh, adr, SEEK_SET); + write(cwsid_fh, &byte, 1); + lseek(cwsid_fh, adr, SEEK_SET); + write(cwsid_fh, &byte, 1); + } +} diff --git a/Src/SID_linux.i b/Src/SID_linux.i deleted file mode 100644 index bfb4c4c..0000000 --- a/Src/SID_linux.i +++ /dev/null @@ -1,125 +0,0 @@ -/* - * SID_linux.i - 6581 emulation, Linux specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Linux sound stuff by Bernd Schmidt - */ - -#include -#include -#include -#include - -#include "VIC.h" - - -/* - * Initialization - */ - -void DigitalRenderer::init_sound(void) -{ - int tmp; - unsigned long format; - - sndbufsize = 512; - - ready = false; - devfd = open("/dev/dsp", O_WRONLY); - if (devfd < 0) - return; - - ioctl(devfd, SNDCTL_DSP_GETFMTS, &format); - if (!(format & AFMT_S16_LE)) - return; - format = AFMT_S16_LE; - ioctl(devfd, SNDCTL_DSP_SETFMT, &format); - - /* - * Buffer size: 2^9 == 512 bytes. Note that too large buffers will not work - * very well: The speed of the C64 is slowed down to an average speed of - * 100% by the blocking write() call in EmulateLine(). If you use a buffer - * of, say 4096 bytes, that will happen only about every 4 frames, which - * means that the emulation runs much faster in some frames, and much - * slower in others. - * On really fast machines, it might make sense to use an even smaller - * buffer size. - */ - tmp = 0x00100009; - ioctl(devfd, SNDCTL_DSP_SETFRAGMENT, &tmp); - tmp = 0; - ioctl(devfd, SNDCTL_DSP_STEREO, &tmp); - tmp = 44100; - ioctl(devfd, SNDCTL_DSP_SPEED, &tmp); - ioctl(devfd, SOUND_PCM_READ_RATE, &tmp); - if (tmp < 43000 || tmp > 45000) - return; - - ioctl(devfd, SNDCTL_DSP_GETBLKSIZE, &sndbufsize); - sound_buffer = new int16[sndbufsize]; - ready = true; -} - - -/* - * Destructor - */ - -DigitalRenderer::~DigitalRenderer() -{ - if (devfd >= 0) - close(devfd); -} - - -/* - * Pause sound output - */ - -void DigitalRenderer::Pause(void) -{ -} - - -/* - * Resume sound output - */ - -void DigitalRenderer::Resume(void) -{ -} - - -/* - * Fill buffer, sample volume (for sampled voice) - */ - -void DigitalRenderer::EmulateLine(void) -{ - static int divisor = 0; - static int to_output = 0; - - if (!ready) - return; - - sample_buf[sample_in_ptr] = volume; - sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; - - /* - * Now see how many samples have to be added for this line - */ - divisor += SAMPLE_FREQ; - while (divisor >= 0) - divisor -= TOTAL_RASTERS*SCREEN_FREQ, to_output++; - - /* - * Calculate the sound data only when we have enough to fill - * the buffer entirely. - */ - if (to_output >= sndbufsize) { - int datalen = sndbufsize; - to_output -= datalen; - calc_buffer(sound_buffer, datalen * 2); - write(devfd, sound_buffer, datalen * 2); - } -} diff --git a/Src/SID_sun.i b/Src/SID_sun.i deleted file mode 100644 index dd7ee90..0000000 --- a/Src/SID_sun.i +++ /dev/null @@ -1,153 +0,0 @@ -/* - * SID_sun.i - 6581 emulation, SUN specific stuff - * - * Marc Chabanas - * - * The SID emulation will slow down the entire emulator to 100% after - * it is selected. It is not compatible with the SID filters so these - * have to be disabled if you don't want to see the performance becoming - * as low as 20%. - */ - -extern "C" { - #include - #include - #include "VIC.h" -} - -#define FRAGSIZE (SAMPLE_FREQ/CALC_FREQ) // samples in a fragment -#define MAXBUFFERED (3*FRAGSIZE) // allow ourself a little buffering - -/* - * Initialization - */ - -void DigitalRenderer::init_sound(void) -{ - struct audio_info info; - - ready = false; - - if ((fd = open("/dev/audio", O_WRONLY|O_NDELAY, 0)) < 0) - { - fprintf(stderr, "SID_sun : unable to open /dev/audio.\n"); - return; - } - - AUDIO_INITINFO(&info); - info.play.sample_rate = SAMPLE_FREQ; - info.play.channels = 1; - info.play.precision = 16; - info.play.encoding = AUDIO_ENCODING_LINEAR; - info.play.port = AUDIO_SPEAKER; - if (ioctl(fd, AUDIO_SETINFO, &info)) - { - fprintf(stderr, - "SID_sun : unable to select 16 bits/%d khz linear encoding.\n", - SAMPLE_FREQ); - return; - } - else - { - fprintf(stderr,"SID_sun : selecting 16 bits/%d khz linear encoding.\n", - SAMPLE_FREQ); - } - - sound_calc_buf = new int16[FRAGSIZE]; - sent_samples = 0; - delta_samples = 0; - - ready = true; - return; -} - - -/* - * Destructor - */ - -DigitalRenderer::~DigitalRenderer() -{ - fprintf(stderr,"SID_sun : leaving audio mode.\n"); - if (fd > 0) - { - if (ready) - ioctl(fd, AUDIO_DRAIN); - close(fd); - } -} - - -/* - * Pause sound output - */ - -void DigitalRenderer::Pause(void) -{ -} - - -/* - * Resume sound output - */ - -void DigitalRenderer::Resume(void) -{ -} - -/* - * Fill buffer, sample volume (for sampled voice) - */ - -void DigitalRenderer::EmulateLine(void) -{ - static int divisor = 0; - static int to_output = 0; - - static unsigned int sleeping; - - int ret; - - sample_buf[sample_in_ptr] = volume; - sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; - - /* - * Now see how many samples have to be added for this line - */ - - divisor += SAMPLE_FREQ; - while (divisor >= 0) - divisor -= TOTAL_RASTERS*SCREEN_FREQ, to_output++; - - if (to_output >= FRAGSIZE) /* got enough to send */ - { - calc_buffer(sound_calc_buf, FRAGSIZE*2); - - ret = write (fd,sound_calc_buf, FRAGSIZE*2); - if (ret != FRAGSIZE*2) /* should not happen */ - { - fprintf(stderr,"SID_sun : write to audio device failed. Exit.\n"); - exit(-1); - } - - sent_samples+=FRAGSIZE; - to_output=0; - - if (ioctl(fd, AUDIO_GETINFO, &status)) - { - fprintf(stderr,"SID_sun : get audio status failed. Exit.\n"); - exit(-1); - } - while ((delta_samples = (sent_samples - status.play.samples)) > MAXBUFFERED) - { - sleeping = ((1000000*(delta_samples-MAXBUFFERED))/SAMPLE_FREQ); - usleep(sleeping); - - if (ioctl(fd, AUDIO_GETINFO, &status)) - { - fprintf(stderr,"SID_sun : get audio status failed. Exit.\n"); - exit(-1); - } - } - } -} diff --git a/Src/SID_wii.i b/Src/SID_wii.i deleted file mode 100644 index cdd652a..0000000 --- a/Src/SID_wii.i +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SID_linux.i - 6581 emulation, Linux specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - * Linux sound stuff by Bernd Schmidt - */ - -#include "gcaudio.h" - -#include "VIC.h" - -/* - * Initialization - */ - -void DigitalRenderer::init_sound(void) -{ - this->sndbufsize = 512; - - ready = false; - InitialiseAudio(); - ResetAudio(); - - this->sound_buffer = new int16[this->sndbufsize]; - memset(this->sound_buffer, 0, sizeof(int16) * this->sndbufsize); - ready = true; -} - - -/* - * Destructor - */ - -DigitalRenderer::~DigitalRenderer() -{ - StopAudio(); -} - - -/* - * Pause sound output - */ - -void DigitalRenderer::Pause(void) -{ - StopAudio(); -} - - -/* - * Resume sound output - */ - -void DigitalRenderer::Resume(void) -{ - /* Done by PlayAudio() */ -} - - -/* - * Fill buffer, sample volume (for sampled voice) - */ - -void DigitalRenderer::EmulateLine(void) -{ - static int divisor = 0; - static int to_output = 0; - - if (!ready) - return; - - sample_buf[sample_in_ptr] = volume; - sample_in_ptr = (sample_in_ptr + 1) % SAMPLE_BUF_SIZE; - - /* - * Now see how many samples have to be added for this line - */ - divisor += SAMPLE_FREQ; - while (divisor >= 0) - divisor -= TOTAL_RASTERS*SCREEN_FREQ, to_output++; - - /* - * Calculate the sound data only when we have enough to fill - * the buffer entirely. - */ - if (to_output >= sndbufsize) { - int datalen = sndbufsize; - to_output -= datalen; - calc_buffer(sound_buffer, datalen * 2); - - PlaySound(sound_buffer, datalen); - } -} diff --git a/Src/VIC.cpp b/Src/VIC.cpp index a3b54ac..bed31de 100644 --- a/Src/VIC.cpp +++ b/Src/VIC.cpp @@ -1,10 +1,24 @@ /* * VIC.cpp - 6569R5 emulation (line based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Notes: * ------ * @@ -883,7 +897,7 @@ inline void MOS6569::vblank(void) #ifdef __riscos__ -#include "el_Acorn.i" +#include "el_Acorn.h" #else #ifdef GLOBAL_VARS diff --git a/Src/VIC.h b/Src/VIC.h index 1d47d98..b16d102 100644 --- a/Src/VIC.h +++ b/Src/VIC.h @@ -1,7 +1,21 @@ /* * VIC.h - 6569R5 emulation (line based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _VIC_H diff --git a/Src/VIC_SC.cpp b/Src/VIC_SC.cpp index e39c582..0a48d46 100644 --- a/Src/VIC_SC.cpp +++ b/Src/VIC_SC.cpp @@ -1,10 +1,24 @@ /* * VIC_SC.cpp - 6569R5 emulation (cycle based) * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 + */ - * +/* * Incompatibilities: * ------------------ * @@ -303,14 +317,14 @@ void MOS6569::ReInitColors(void) // Build inverse color table. uint8 xlate_colors[256]; memset(xlate_colors, 0, sizeof(xlate_colors)); - for (i = 0; i < 16; i++) + for (i=0; i<16; i++) xlate_colors[colors[i]] = i; // Get the new colors. the_display->InitColors(colors); // Build color translation table. - for (i = 0; i < 256; i++) + for (i=0; i<256; i++) xlate_colors[i] = colors[xlate_colors[i]]; // Translate all the old colors variables. @@ -321,17 +335,17 @@ void MOS6569::ReInitColors(void) b3c_color = colors[b3c]; mm0_color = colors[mm0]; mm1_color = colors[mm1]; - for (i = 0; i < 8; i++) + for (i=0; i<8; i++) spr_color[i] = colors[sc[i]]; // Translate the border color sample buffer. - for (int x = 0; x < sizeof(border_color_sample); x++) + for (unsigned x = 0; x < sizeof(border_color_sample); x++) border_color_sample[x] = xlate_colors[border_color_sample[x]]; // Translate the chunky buffer. uint8 *scanline = the_display->BitmapBase(); - for (int y = 0; y < DISPLAY_Y; y++) { - for (int x = 0; x < DISPLAY_X; x++) + for (int y=0; y= $min_sdl_version) no_sdl="" @@ -140,6 +155,11 @@ int main (int argc, char *argv[]) AC_TRY_LINK([ #include #include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" @@ -166,3 +186,4 @@ int main (int argc, char *argv[]) AC_SUBST(SDL_LIBS) rm -f conf.sdltest ]) + diff --git a/Src/autogen.sh b/Src/autogen.sh new file mode 100644 index 0000000..560fe72 --- /dev/null +++ b/Src/autogen.sh @@ -0,0 +1,57 @@ +#! /bin/sh +# Run this to generate all the initial makefiles, etc. +# This was lifted from the Gimp, and adapted slightly by +# Christian Bauer. + +DIE=0 + +PROG=Frodo + +# Check how echo works in this /bin/sh +case `echo -n` in +-n) _echo_n= _echo_c='\c';; +*) _echo_n=-n _echo_c=;; +esac + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $PROG." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing aclocal. The version of automake" + echo "installed doesn't appear recent enough." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.4.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +aclocalinclude="$ACLOCAL_FLAGS"; \ +(echo $_echo_n " + Running aclocal: $_echo_c"; \ + aclocal $aclocalinclude; \ + echo "done.") && \ +(echo $_echo_n " + Running autoheader: $_echo_c"; \ + autoheader; \ + echo "done.") && \ +(echo $_echo_n " + Running autoconf: $_echo_c"; \ + autoconf; \ + echo "done.") + +rm -f config.cache + +if [ x"$NO_CONFIGURE" = "x" ]; then + echo " + Running 'configure $@':" + if [ -z "$*" ]; then + echo " ** If you wish to pass arguments to ./configure, please" + echo " ** specify them on the command line." + fi + ./configure "$@" +fi diff --git a/Src/char_to_kc.c b/Src/char_to_kc.c deleted file mode 100644 index 70f5fac..0000000 --- a/Src/char_to_kc.c +++ /dev/null @@ -1,101 +0,0 @@ -/********************************************************************* - * - * Copyright (C) 2008, Simon Kagstrom - * - * Filename: char_to_kc.c - * Author: Simon Kagstrom - * Description: Convert chars to keycodes - * - * $Id:$ - * - ********************************************************************/ -#include - -#define MATRIX(a,b) (((a) << 3) | (b)) - -#define SHIFT (1<<7) - -static uint8_t char_to_kc[] = -{ - /* Some shifted stuff */ - ['\"'] = MATRIX(7, 3) | SHIFT, - - /* CUD */ - /* F5 */ - /* F3 */ - /* F1 */ - /* F7 */ - ['\n'] = MATRIX(0, 1), - [8] = MATRIX(0, 0), - - ['E'] = MATRIX(1, 6), - ['S'] = MATRIX(1, 5), - ['Z'] = MATRIX(1, 4), - ['4'] = MATRIX(1, 3), - ['A'] = MATRIX(1, 2), - ['W'] = MATRIX(1, 1), - ['3'] = MATRIX(1, 0), - - ['X'] = MATRIX(2, 7), - ['T'] = MATRIX(2, 6), - ['F'] = MATRIX(2, 5), - ['C'] = MATRIX(2, 4), - ['6'] = MATRIX(2, 3), - ['D'] = MATRIX(2, 2), - ['R'] = MATRIX(2, 1), - ['5'] = MATRIX(2, 0), - - ['V'] = MATRIX(3, 7), - ['U'] = MATRIX(3, 6), - ['H'] = MATRIX(3, 5), - ['B'] = MATRIX(3, 4), - ['8'] = MATRIX(3, 3), - ['G'] = MATRIX(3, 2), - ['Y'] = MATRIX(3, 1), - ['7'] = MATRIX(3, 0), - - ['N'] = MATRIX(4, 7), - ['O'] = MATRIX(4, 6), - ['K'] = MATRIX(4, 5), - ['M'] = MATRIX(4, 4), - ['0'] = MATRIX(4, 3), - ['J'] = MATRIX(4, 2), - ['I'] = MATRIX(4, 1), - ['9'] = MATRIX(4, 0), - - [','] = MATRIX(5, 7), - ['@'] = MATRIX(5, 6), - [':'] = MATRIX(5, 5), - ['.'] = MATRIX(5, 4), - ['-'] = MATRIX(5, 3), - ['L'] = MATRIX(5, 2), - ['P'] = MATRIX(5, 1), - ['+'] = MATRIX(5, 0), - - ['/'] = MATRIX(6, 7), - ['^'] = MATRIX(6, 6), - ['='] = MATRIX(6, 5), - /* SHR */ - /* HOM */ - [';'] = MATRIX(6, 2), - ['*'] = MATRIX(6, 1), - /* ?? */ - - /* R/S */ - ['Q'] = MATRIX(7, 6), - /* C= */ - [' '] = MATRIX(7, 4), - ['2'] = MATRIX(7, 3), - /* CTL */ - /* <- */ - ['1'] = MATRIX(7, 0), -}; - -int get_kc_from_char(char c_in, int *shifted) -{ - char c = char_to_kc[(int)c_in]; - int out = c & (~SHIFT); - - *shifted = c & SHIFT; - return out; -} diff --git a/Src/config.guess b/Src/config.guess new file mode 100644 index 0000000..45bee13 --- /dev/null +++ b/Src/config.guess @@ -0,0 +1,1465 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-04-22' + +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amd64:OpenBSD:*:*) + echo x86_64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + cats:OpenBSD:*:*) + echo arm-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + luna88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit 0 ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + amd64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit 0 ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + *86) UNAME_PROCESSOR=i686 ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms && exit 0 ;; + I*) echo ia64-dec-vms && exit 0 ;; + V*) echo vax-dec-vms && exit 0 ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Src/config.log b/Src/config.log new file mode 100644 index 0000000..af621f4 --- /dev/null +++ b/Src/config.log @@ -0,0 +1,3645 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Frodo configure 4.2, which was +generated by GNU Autoconf 2.56. Invocation command line was + + $ ./configure --disable-sdltest --enable-kbd-lang-us + +## --------- ## +## Platform. ## +## --------- ## + +hostname = DFW-W-DAVIST +uname -m = i686 +uname -r = 1.0.11(0.46/3/2) +uname -s = MINGW32_NT-5.1 +uname -v = 2007-07-29 17:16 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: . +PATH: /usr/local/bin +PATH: /mingw/bin +PATH: /bin +PATH: /c/j2sdk1.4.2_02/bin +PATH: /c/Program Files/Microsoft DirectX SDK (December 2006)/Utilities/Bin/x86 +PATH: /bin +PATH: /c/oracle/ora92/bin +PATH: /c/Program Files/Oracle/jre/1.3.1/bin +PATH: /c/Program Files/Oracle/jre/1.1.8/bin +PATH: /c/devkitPro/devkitARM/bin +PATH: /c/sybase/OLEDB +PATH: /c/sybase/ODBC +PATH: /c/sybase/ASEP_Win32 +PATH: /c/sybase/OCS-12_5/dll +PATH: /c/sybase/OCS-12_5/lib3p +PATH: /c/sybase/OCS-12_5/bin +PATH: /c/WINDOWS/system32 +PATH: /c/WINDOWS +PATH: /c/WINDOWS/System32/Wbem +PATH: /c/Program Files/Perforce +PATH: /c/Program Files/Microsoft SQL Server/80/Tools/BINN +PATH: /c/Program Files/Common Files/Roxio Shared/DLLShared +PATH: /c/Program Files/VoiceAge/Common +PATH: /c/cygwin/bin +PATH: /c/Program Files/Subversion/bin/c/devkitPro/devkitPSP/bin +PATH: /c/Program Files/Microsoft DirectX SDK (December 2006)/Utilities/Bin/x86 +PATH: /bin +PATH: /c/oracle/ora92/bin +PATH: /c/Program Files/Oracle/jre/1.3.1/bin +PATH: /c/Program Files/Oracle/jre/1.1.8/bin +PATH: /c/devkitPro/devkitARM/bin +PATH: /c/sybase/OLEDB +PATH: /c/sybase/ODBC +PATH: /c/sybase/ASEP_Win32 +PATH: /c/sybase/OCS-12_5/dll +PATH: /c/sybase/OCS-12_5/lib3p +PATH: /c/sybase/OCS-12_5/bin +PATH: /c/WINDOWS/system32 +PATH: /c/WINDOWS +PATH: /c/WINDOWS/System32/Wbem +PATH: /c/Program Files/Perforce +PATH: /c/Program Files/Microsoft SQL Server/80/Tools/BINN +PATH: /c/Program Files/Common Files/Roxio Shared/DLLShared +PATH: /c/Program Files/VoiceAge/Common +PATH: /c/cygwin/bin +PATH: /c/Program Files/Subversion/bin +PATH: /c/devkitPro/devkitPSP/bin +PATH: /c/Program Files/Subversion/bin +PATH: /c/devkitPro/devkitPPC/bin +PATH: . + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:1354: checking for gcc +configure:1370: found /c/cygwin/bin/gcc +configure:1380: result: gcc +configure:1624: checking for C compiler version +configure:1627: gcc --version &5 +gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) +Copyright (C) 2004 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:1630: $? = 0 +configure:1632: gcc -v &5 +Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs +Configured with: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure --verbose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-languages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug +Thread model: posix +gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) +configure:1635: $? = 0 +configure:1637: gcc -V &5 +gcc: `-V' option must have argument +configure:1640: $? = 1 +configure:1664: checking for C compiler default output +configure:1667: gcc conftest.c >&5 +configure:1670: $? = 0 +configure:1716: result: a.exe +configure:1721: checking whether the C compiler works +configure:1727: ./a.exe +configure:1730: $? = 0 +configure:1747: result: yes +configure:1754: checking whether we are cross compiling +configure:1756: result: no +configure:1759: checking for suffix of executables +configure:1761: gcc -o conftest.exe conftest.c >&5 +configure:1764: $? = 0 +configure:1789: result: .exe +configure:1795: checking for suffix of object files +configure:1817: gcc -c conftest.c >&5 +configure:1820: $? = 0 +configure:1842: result: o +configure:1846: checking whether we are using the GNU C compiler +configure:1871: gcc -c conftest.c >&5 +configure:1874: $? = 0 +configure:1877: test -s conftest.o +configure:1880: $? = 0 +configure:1893: result: yes +configure:1899: checking whether gcc accepts -g +configure:1921: gcc -c -g conftest.c >&5 +configure:1924: $? = 0 +configure:1927: test -s conftest.o +configure:1930: $? = 0 +configure:1941: result: yes +configure:1958: checking for gcc option to accept ANSI C +configure:2019: gcc -c -g -O2 conftest.c >&5 +configure:2022: $? = 0 +configure:2025: test -s conftest.o +configure:2028: $? = 0 +configure:2046: result: none needed +configure:2064: gcc -c -g -O2 conftest.c >&5 +conftest.c:2: error: parse error before "me" +configure:2067: $? = 1 +configure: failed program was: +| #ifndef __cplusplus +| choke me +| #endif +configure:2228: checking for g++ +configure:2244: found /c/cygwin/bin/g++ +configure:2254: result: g++ +configure:2270: checking for C++ compiler version +configure:2273: g++ --version &5 +g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) +Copyright (C) 2004 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:2276: $? = 0 +configure:2278: g++ -v &5 +Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs +Configured with: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure --verbose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-languages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug +Thread model: posix +gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) +configure:2281: $? = 0 +configure:2283: g++ -V &5 +g++: `-V' option must have argument +configure:2286: $? = 1 +configure:2289: checking whether we are using the GNU C++ compiler +configure:2314: g++ -c conftest.cc >&5 +configure:2317: $? = 0 +configure:2320: test -s conftest.o +configure:2323: $? = 0 +configure:2336: result: yes +configure:2342: checking whether g++ accepts -g +configure:2364: g++ -c -g conftest.cc >&5 +configure:2367: $? = 0 +configure:2370: test -s conftest.o +configure:2373: $? = 0 +configure:2384: result: yes +configure:2428: g++ -c -g -O2 conftest.cc >&5 +configure:2431: $? = 0 +configure:2434: test -s conftest.o +configure:2437: $? = 0 +configure:2464: g++ -c -g -O2 conftest.cc >&5 +configure: In function `int main()': +configure:2459: error: `exit' undeclared (first use this function) +configure:2459: error: (Each undeclared identifier is reported only once for each function it appears in.) +configure:2467: $? = 1 +configure: failed program was: +| #line 2447 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| /* end confdefs.h. */ +| +| int +| main () +| { +| exit (42); +| ; +| return 0; +| } +configure:2428: g++ -c -g -O2 conftest.cc >&5 +configure:2431: $? = 0 +configure:2434: test -s conftest.o +configure:2437: $? = 0 +configure:2464: g++ -c -g -O2 conftest.cc >&5 +configure:2467: $? = 0 +configure:2470: test -s conftest.o +configure:2473: $? = 0 +configure:2501: checking how to run the C preprocessor +configure:2531: gcc -E conftest.c +configure:2537: $? = 0 +configure:2569: gcc -E conftest.c +configure:2571:28: ac_nonexistent.h: No such file or directory +configure:2575: $? = 1 +configure: failed program was: +| #line 2560 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| /* end confdefs.h. */ +| #include +configure:2613: result: gcc -E +configure:2632: gcc -E conftest.c +configure:2638: $? = 0 +configure:2670: gcc -E conftest.c +configure:2672:28: ac_nonexistent.h: No such file or directory +configure:2676: $? = 1 +configure: failed program was: +| #line 2661 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| /* end confdefs.h. */ +| #include +configure:2718: checking whether make sets $(MAKE) +configure:2738: result: yes +configure:2784: checking for a BSD-compatible install +configure:2838: result: /bin/install -c +configure:2856: checking for egrep +configure:2866: result: grep -E +configure:2872: checking for AIX +configure:2895: result: no +configure:2901: checking for library containing strerror +configure:2932: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:2935: $? = 0 +configure:2938: test -s conftest.exe +configure:2941: $? = 0 +configure:3000: result: none required +configure:3008: checking for vga_setmode in -lvga +configure:3039: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c -lvga >&5 +/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lvga +collect2: ld returned 1 exit status +configure:3042: $? = 1 +configure: failed program was: +| #line 3015 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| /* end confdefs.h. */ +| +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char vga_setmode (); +| int +| main () +| { +| vga_setmode (); +| ; +| return 0; +| } +configure:3060: result: no +configure:3074: checking build system type +configure:3092: result: i686-pc-mingw32 +configure:3100: checking host system type +configure:3114: result: i686-pc-mingw32 +configure:3122: checking target system type +configure:3136: result: i686-pc-mingw32 +configure:3191: checking for sdl-config +configure:3209: found /bin/sdl-config +configure:3222: result: /bin/sdl-config +configure:3230: checking for SDL - version >= 1.2.0 +configure:3347: result: yes +configure:3434: checking if Frodo should be compiled with extensions for an embedded device +configure:3457: result: none +configure:3483: checking for X +configure:3589: gcc -E conftest.c +configure:3595: $? = 1 +configure: failed program was: +| #line 3580 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| /* end confdefs.h. */ +| #include +configure:3645: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c -lXt >&5 +configure:3648: $? = 1 +configure: failed program was: +| #line 3628 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| /* end confdefs.h. */ +| #include +| int +| main () +| { +| XtMalloc (0) +| ; +| return 0; +| } +configure:3693: result: no +configure:4664: checking for dirent.h that defines DIR +configure:4689: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:4692: $? = 1 +configure: failed program was: +| #line 4669 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| if ((DIR *) 0) +| return 0; +| ; +| return 0; +| } +configure:4709: result: no +configure:4664: checking for sys/ndir.h that defines DIR +configure:4689: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:4692: $? = 1 +configure: failed program was: +| #line 4669 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| if ((DIR *) 0) +| return 0; +| ; +| return 0; +| } +configure:4709: result: no +configure:4664: checking for sys/dir.h that defines DIR +configure:4689: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:4692: $? = 1 +configure: failed program was: +| #line 4669 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| if ((DIR *) 0) +| return 0; +| ; +| return 0; +| } +configure:4709: result: no +configure:4664: checking for ndir.h that defines DIR +configure:4689: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:4692: $? = 1 +configure: failed program was: +| #line 4669 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| if ((DIR *) 0) +| return 0; +| ; +| return 0; +| } +configure:4709: result: no +configure:4829: checking for library containing opendir +configure:4860: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:4863: $? = 1 +configure: failed program was: +| #line 4836 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char opendir (); +| int +| main () +| { +| opendir (); +| ; +| return 0; +| } +configure:4905: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c -lx >&5 +configure:4908: $? = 1 +configure: failed program was: +| #line 4881 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char opendir (); +| int +| main () +| { +| opendir (); +| ; +| return 0; +| } +configure:4928: result: no +configure:4937: checking for ANSI C header files +configure:4963: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:4966: $? = 1 +configure: failed program was: +| #line 4942 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #include +| #include +| #include +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:5087: result: no +configure:5111: checking for sys/types.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for sys/stat.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for stdlib.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for string.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for memory.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for strings.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for inttypes.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for stdint.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5111: checking for unistd.h +configure:5128: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5131: $? = 1 +configure: failed program was: +| #line 5116 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| +| #include +configure:5148: result: no +configure:5173: checking for unistd.h +configure:5178: result: no +configure:5182: checking fcntl.h usability +configure:5195: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5198: $? = 1 +configure: failed program was: +| #line 5184 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5214: result: no +configure:5218: checking fcntl.h presence +configure:5229: gcc -E conftest.c +configure:5235: $? = 1 +configure: failed program was: +| #line 5220 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5254: result: no +configure:5290: checking for fcntl.h +configure:5297: result: no +configure:5182: checking sys/time.h usability +configure:5195: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5198: $? = 1 +configure: failed program was: +| #line 5184 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5214: result: no +configure:5218: checking sys/time.h presence +configure:5229: gcc -E conftest.c +configure:5235: $? = 1 +configure: failed program was: +| #line 5220 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5254: result: no +configure:5290: checking for sys/time.h +configure:5297: result: no +configure:5173: checking for sys/types.h +configure:5178: result: no +configure:5182: checking utime.h usability +configure:5195: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5198: $? = 1 +configure: failed program was: +| #line 5184 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5214: result: no +configure:5218: checking utime.h presence +configure:5229: gcc -E conftest.c +configure:5235: $? = 1 +configure: failed program was: +| #line 5220 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5254: result: no +configure:5290: checking for utime.h +configure:5297: result: no +configure:5173: checking for string.h +configure:5178: result: no +configure:5173: checking for strings.h +configure:5178: result: no +configure:5182: checking values.h usability +configure:5195: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5198: $? = 1 +configure: failed program was: +| #line 5184 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5214: result: no +configure:5218: checking values.h presence +configure:5229: gcc -E conftest.c +configure:5235: $? = 1 +configure: failed program was: +| #line 5220 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5254: result: no +configure:5290: checking for values.h +configure:5297: result: no +configure:5182: checking ncurses.h usability +configure:5195: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5198: $? = 1 +configure: failed program was: +| #line 5184 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5214: result: no +configure:5218: checking ncurses.h presence +configure:5229: gcc -E conftest.c +configure:5235: $? = 1 +configure: failed program was: +| #line 5220 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5254: result: no +configure:5290: checking for ncurses.h +configure:5297: result: no +configure:5330: checking sys/vfs.h usability +configure:5343: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5346: $? = 1 +configure: failed program was: +| #line 5332 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5362: result: no +configure:5366: checking sys/vfs.h presence +configure:5377: gcc -E conftest.c +configure:5383: $? = 1 +configure: failed program was: +| #line 5368 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5402: result: no +configure:5438: checking for sys/vfs.h +configure:5445: result: no +configure:5330: checking sys/mount.h usability +configure:5343: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5346: $? = 1 +configure: failed program was: +| #line 5332 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5362: result: no +configure:5366: checking sys/mount.h presence +configure:5377: gcc -E conftest.c +configure:5383: $? = 1 +configure: failed program was: +| #line 5368 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5402: result: no +configure:5438: checking for sys/mount.h +configure:5445: result: no +configure:5330: checking sys/select.h usability +configure:5343: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5346: $? = 1 +configure: failed program was: +| #line 5332 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5362: result: no +configure:5366: checking sys/select.h presence +configure:5377: gcc -E conftest.c +configure:5383: $? = 1 +configure: failed program was: +| #line 5368 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5402: result: no +configure:5438: checking for sys/select.h +configure:5445: result: no +configure:5330: checking sys/param.h usability +configure:5343: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5346: $? = 1 +configure: failed program was: +| #line 5332 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5362: result: no +configure:5366: checking sys/param.h presence +configure:5377: gcc -E conftest.c +configure:5383: $? = 1 +configure: failed program was: +| #line 5368 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5402: result: no +configure:5438: checking for sys/param.h +configure:5445: result: no +configure:5330: checking sys/statfs.h usability +configure:5343: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5346: $? = 1 +configure: failed program was: +| #line 5332 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5362: result: no +configure:5366: checking sys/statfs.h presence +configure:5377: gcc -E conftest.c +configure:5383: $? = 1 +configure: failed program was: +| #line 5368 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5402: result: no +configure:5438: checking for sys/statfs.h +configure:5445: result: no +configure:5330: checking sys/statvfs.h usability +configure:5343: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5346: $? = 1 +configure: failed program was: +| #line 5332 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5362: result: no +configure:5366: checking sys/statvfs.h presence +configure:5377: gcc -E conftest.c +configure:5383: $? = 1 +configure: failed program was: +| #line 5368 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +configure:5402: result: no +configure:5438: checking for sys/statvfs.h +configure:5445: result: no +configure:5321: checking for sys/stat.h +configure:5326: result: no +configure:5459: checking for char +configure:5484: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5487: $? = 1 +configure: failed program was: +| #line 5464 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((char *) 0) +| return 0; +| if (sizeof (char)) +| return 0; +| ; +| return 0; +| } +configure:5504: result: no +configure:5507: checking size of char +configure:5813: result: 0 +configure:5820: checking for short +configure:5845: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:5848: $? = 1 +configure: failed program was: +| #line 5825 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((short *) 0) +| return 0; +| if (sizeof (short)) +| return 0; +| ; +| return 0; +| } +configure:5865: result: no +configure:5868: checking size of short +configure:6174: result: 0 +configure:6181: checking for int +configure:6206: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:6209: $? = 1 +configure: failed program was: +| #line 6186 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((int *) 0) +| return 0; +| if (sizeof (int)) +| return 0; +| ; +| return 0; +| } +configure:6226: result: no +configure:6229: checking size of int +configure:6535: result: 0 +configure:6542: checking for long +configure:6567: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:6570: $? = 1 +configure: failed program was: +| #line 6547 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((long *) 0) +| return 0; +| if (sizeof (long)) +| return 0; +| ; +| return 0; +| } +configure:6587: result: no +configure:6590: checking size of long +configure:6896: result: 0 +configure:6903: checking for long long +configure:6928: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:6931: $? = 1 +configure: failed program was: +| #line 6908 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((long long *) 0) +| return 0; +| if (sizeof (long long)) +| return 0; +| ; +| return 0; +| } +configure:6948: result: no +configure:6951: checking size of long long +configure:7257: result: 0 +configure:7264: checking for void * +configure:7289: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7292: $? = 1 +configure: failed program was: +| #line 7269 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((void * *) 0) +| return 0; +| if (sizeof (void *)) +| return 0; +| ; +| return 0; +| } +configure:7309: result: no +configure:7312: checking size of void * +configure:7618: result: 0 +configure:7626: checking for mode_t +configure:7651: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7654: $? = 1 +configure: failed program was: +| #line 7631 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((mode_t *) 0) +| return 0; +| if (sizeof (mode_t)) +| return 0; +| ; +| return 0; +| } +configure:7671: result: no +configure:7683: checking for off_t +configure:7708: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7711: $? = 1 +configure: failed program was: +| #line 7688 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((off_t *) 0) +| return 0; +| if (sizeof (off_t)) +| return 0; +| ; +| return 0; +| } +configure:7728: result: no +configure:7740: checking for pid_t +configure:7765: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7768: $? = 1 +configure: failed program was: +| #line 7745 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if ((pid_t *) 0) +| return 0; +| if (sizeof (pid_t)) +| return 0; +| ; +| return 0; +| } +configure:7785: result: no +configure:7797: checking for struct stat.st_blocks +configure:7821: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7824: $? = 1 +configure: failed program was: +| #line 7802 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| static struct stat ac_aggr; +| if (ac_aggr.st_blocks) +| return 0; +| ; +| return 0; +| } +configure:7856: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7859: $? = 1 +configure: failed program was: +| #line 7837 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| static struct stat ac_aggr; +| if (sizeof ac_aggr.st_blocks) +| return 0; +| ; +| return 0; +| } +configure:7878: result: no +configure:7896: checking whether time.h and sys/time.h may both be included +configure:7922: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7925: $? = 1 +configure: failed program was: +| #line 7901 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| /* end confdefs.h. */ +| #include +| #include +| #include +| +| int +| main () +| { +| if ((struct tm *) 0) +| return 0; +| ; +| return 0; +| } +configure:7942: result: no +configure:7952: checking whether struct tm is in sys/time.h or time.h +configure:7976: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:7979: $? = 1 +configure: failed program was: +| #line 7957 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| struct tm *tp; tp->tm_sec; +| ; +| return 0; +| } +configure:7996: result: sys/time.h +configure:8008: checking whether gcc needs -traditional +configure:8052: result: no +configure:8059: checking for working memcmp +configure:8108: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8111: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| #line 8067 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| /* end confdefs.h. */ +| +| int +| main () +| { +| +| /* Some versions of memcmp are not 8-bit clean. */ +| char c0 = 0x40, c1 = 0x80, c2 = 0x81; +| if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) +| exit (1); +| +| /* The Next x86 OpenStep bug shows up only when comparing 16 bytes +| or more and with at least one buffer not starting on a 4-byte boundary. +| William Lewis provided this test program. */ +| { +| char foo[21]; +| char bar[21]; +| int i; +| for (i = 0; i < 4; i++) +| { +| char *a = foo + i; +| char *b = bar + i; +| strcpy (a, "--------01111111"); +| strcpy (b, "--------10000000"); +| if (memcmp (a, b, 16) >= 0) +| exit (1); +| } +| exit (0); +| } +| +| ; +| return 0; +| } +configure:8130: result: no +configure:8134: checking return type of signal handlers +configure:8166: gcc -c -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8169: $? = 1 +configure: failed program was: +| #line 8139 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| /* end confdefs.h. */ +| #include +| #include +| #ifdef signal +| # undef signal +| #endif +| #ifdef __cplusplus +| extern "C" void (*signal (int, void (*)(int)))(int); +| #else +| void (*signal ()) (); +| #endif +| +| int +| main () +| { +| int i; +| ; +| return 0; +| } +configure:8186: result: int +configure:8194: checking whether utime accepts a null argument +configure:8226: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8229: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| #line 8204 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| #include +| #if HAVE_SYS_TYPES_H +| # include +| #endif +| #if HAVE_SYS_STAT_H +| # include +| #endif +| #if STDC_HEADERS +| # include +| # include +| #else +| # if HAVE_STDLIB_H +| # include +| # endif +| #endif +| #if HAVE_STRING_H +| # if !STDC_HEADERS && HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #if HAVE_STRINGS_H +| # include +| #endif +| #if HAVE_INTTYPES_H +| # include +| #else +| # if HAVE_STDINT_H +| # include +| # endif +| #endif +| #if HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| struct stat s, t; +| exit (!(stat ("conftest.data", &s) == 0 +| && utime ("conftest.data", (long *)0) == 0 +| && stat ("conftest.data", &t) == 0 +| && t.st_mtime >= s.st_mtime +| && t.st_mtime - s.st_mtime < 120)); +| ; +| return 0; +| } +configure:8249: result: no +configure:8272: checking for gettimeofday +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char gettimeofday (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char gettimeofday (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_gettimeofday) || defined (__stub___gettimeofday) +| choke me +| #else +| char (*f) () = gettimeofday; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for sigaction +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char sigaction (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char sigaction (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_sigaction) || defined (__stub___sigaction) +| choke me +| #else +| char (*f) () = sigaction; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for mkdir +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char mkdir (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char mkdir (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_mkdir) || defined (__stub___mkdir) +| choke me +| #else +| char (*f) () = mkdir; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for rmdir +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char rmdir (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char rmdir (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_rmdir) || defined (__stub___rmdir) +| choke me +| #else +| char (*f) () = rmdir; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for select +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char select (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char select (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_select) || defined (__stub___select) +| choke me +| #else +| char (*f) () = select; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for strerror +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char strerror (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char strerror (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_strerror) || defined (__stub___strerror) +| choke me +| #else +| char (*f) () = strerror; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for strstr +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char strstr (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char strstr (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_strstr) || defined (__stub___strstr) +| choke me +| #else +| char (*f) () = strstr; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for statfs +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char statfs (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char statfs (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_statfs) || defined (__stub___statfs) +| choke me +| #else +| char (*f) () = statfs; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8272: checking for usleep +configure:8316: gcc -o conftest.exe -g -O2 -fomit-frame-pointer -fno-exceptions conftest.c >&5 +configure:8319: $? = 1 +configure: failed program was: +| #line 8277 "configure" +| /* confdefs.h. */ +| +| #define PACKAGE_NAME "Frodo" +| #define PACKAGE_TARNAME "Frodo" +| #define PACKAGE_VERSION "4.2" +| #define PACKAGE_STRING "Frodo 4.2" +| #define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +| #ifdef __cplusplus +| #include +| #endif +| #define X_DISPLAY_MISSING 1 +| #define SIZEOF_CHAR 0 +| #define SIZEOF_SHORT 0 +| #define SIZEOF_INT 0 +| #define SIZEOF_LONG 0 +| #define SIZEOF_LONG_LONG 0 +| #define SIZEOF_VOID_P 0 +| #define mode_t int +| #define off_t long +| #define pid_t int +| #define TM_IN_SYS_TIME 1 +| #define RETSIGTYPE int +| /* end confdefs.h. */ +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char usleep (); below. */ +| #include +| /* Override any gcc2 internal prototype to avoid an error. */ +| #ifdef __cplusplus +| extern "C" +| { +| #endif +| /* We use char because int might match the return type of a gcc2 +| builtin and then its argument prototype would still apply. */ +| char usleep (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined (__stub_usleep) || defined (__stub___usleep) +| choke me +| #else +| char (*f) () = usleep; +| #endif +| #ifdef __cplusplus +| } +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:8336: result: no +configure:8359: checking which target to use +configure:8376: result: SDL +configure:8494: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by Frodo config.status 4.2, which was +generated by GNU Autoconf 2.56. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on DFW-W-DAVIST + +config.status:644: creating Makefile +config.status:748: creating sysconfig.h + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=i686-pc-mingw32 +ac_cv_build_alias=i686-pc-mingw32 +ac_cv_c_compiler_gnu=yes +ac_cv_cxx_compiler_gnu=yes +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_CXXFLAGS_set= +ac_cv_env_CXXFLAGS_value= +ac_cv_env_CXX_set= +ac_cv_env_CXX_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_exeext=.exe +ac_cv_func_gettimeofday=no +ac_cv_func_memcmp_working=no +ac_cv_func_mkdir=no +ac_cv_func_rmdir=no +ac_cv_func_select=no +ac_cv_func_sigaction=no +ac_cv_func_statfs=no +ac_cv_func_strerror=no +ac_cv_func_strstr=no +ac_cv_func_usleep=no +ac_cv_func_utime_null=no +ac_cv_have_x=have_x=no +ac_cv_header_dirent_dirent_h=no +ac_cv_header_dirent_ndir_h=no +ac_cv_header_dirent_sys_dir_h=no +ac_cv_header_dirent_sys_ndir_h=no +ac_cv_header_fcntl_h=no +ac_cv_header_inttypes_h=no +ac_cv_header_memory_h=no +ac_cv_header_ncurses_h=no +ac_cv_header_stdc=no +ac_cv_header_stdint_h=no +ac_cv_header_stdlib_h=no +ac_cv_header_string_h=no +ac_cv_header_strings_h=no +ac_cv_header_sys_mount_h=no +ac_cv_header_sys_param_h=no +ac_cv_header_sys_select_h=no +ac_cv_header_sys_stat_h=no +ac_cv_header_sys_statfs_h=no +ac_cv_header_sys_statvfs_h=no +ac_cv_header_sys_time_h=no +ac_cv_header_sys_types_h=no +ac_cv_header_sys_vfs_h=no +ac_cv_header_time=no +ac_cv_header_unistd_h=no +ac_cv_header_utime_h=no +ac_cv_header_values_h=no +ac_cv_host=i686-pc-mingw32 +ac_cv_host_alias=i686-pc-mingw32 +ac_cv_lib_vga_vga_setmode=no +ac_cv_member_struct_stat_st_blocks=no +ac_cv_objext=o +ac_cv_path_SDL_CONFIG=/bin/sdl-config +ac_cv_path_install='/bin/install -c' +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_CXX=g++ +ac_cv_prog_cc_g=yes +ac_cv_prog_cc_stdc= +ac_cv_prog_cxx_g=yes +ac_cv_prog_egrep='grep -E' +ac_cv_prog_gcc_traditional=no +ac_cv_prog_make_make_set=yes +ac_cv_search_opendir=no +ac_cv_search_strerror='none required' +ac_cv_sizeof_char=0 +ac_cv_sizeof_int=0 +ac_cv_sizeof_long=0 +ac_cv_sizeof_long_long=0 +ac_cv_sizeof_short=0 +ac_cv_sizeof_void_p=0 +ac_cv_struct_tm=sys/time.h +ac_cv_target=i686-pc-mingw32 +ac_cv_target_alias=i686-pc-mingw32 +ac_cv_type_char=no +ac_cv_type_int=no +ac_cv_type_long=no +ac_cv_type_long_long=no +ac_cv_type_mode_t=no +ac_cv_type_off_t=no +ac_cv_type_pid_t=no +ac_cv_type_short=no +ac_cv_type_signal=int +ac_cv_type_void_p=no + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +CC='gcc' +CFLAGS='-g -O2 -fomit-frame-pointer -fno-exceptions -I/c/Dev-Cpp/include/SDL -Dmain=SDL_main -DHAVE_SDL' +CPP='gcc -E' +CPPFLAGS='' +CXX='g++' +CXXFLAGS='-g -O2' +DEFS='-DHAVE_CONFIG_H' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='grep -E' +EXEEXT='.exe' +GUIOBJS='' +GUISRCS='' +HPUX_REV='' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +KBD_LANG='0' +LDFLAGS='' +LIBOBJS=' fileblocks$U.o memcmp$U.o' +LIBS=' -L/c/Dev-Cpp/lib -lmingw32 -lSDLmain -lSDL -mwindows' +LTLIBOBJS=' fileblocks$U.lo memcmp$U.lo' +OBJEXT='o' +PACKAGE_BUGREPORT='Christian.Bauer@uni-mainz.de' +PACKAGE_NAME='Frodo' +PACKAGE_STRING='Frodo 4.2' +PACKAGE_TARNAME='Frodo' +PACKAGE_VERSION='4.2' +PATH_SEPARATOR=':' +SDL_CFLAGS='-I/c/Dev-Cpp/include/SDL -Dmain=SDL_main' +SDL_CONFIG='/bin/sdl-config' +SDL_LIBS='-L/c/Dev-Cpp/lib -lmingw32 -lSDLmain -lSDL -mwindows' +SET_MAKE='' +SHELL='/bin/sh' +TARGET='sdl' +X_CFLAGS='' +X_EXTRA_LIBS='' +X_LIBS='' +X_PRE_LIBS='' +ac_ct_CC='gcc' +ac_ct_CXX='g++' +bindir='${exec_prefix}/bin' +build='i686-pc-mingw32' +build_alias='' +build_cpu='i686' +build_os='mingw32' +build_vendor='pc' +datadir='${prefix}/share' +exec_prefix='${prefix}' +host='i686-pc-mingw32' +host_alias='' +host_cpu='i686' +host_os='mingw32' +host_vendor='pc' +includedir='${prefix}/include' +infodir='${prefix}/info' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localstatedir='${prefix}/var' +mandir='${prefix}/man' +oldincludedir='/usr/include' +prefix='/usr/local' +program_transform_name='s,x,x,' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target='i686-pc-mingw32' +target_alias='' +target_cpu='i686' +target_os='mingw32' +target_vendor='pc' +top_srcdir='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +#define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" +#define PACKAGE_NAME "Frodo" +#define PACKAGE_STRING "Frodo 4.2" +#define PACKAGE_TARNAME "Frodo" +#define PACKAGE_VERSION "4.2" +#define RETSIGTYPE int +#define SIZEOF_CHAR 0 +#define SIZEOF_INT 0 +#define SIZEOF_LONG 0 +#define SIZEOF_LONG_LONG 0 +#define SIZEOF_SHORT 0 +#define SIZEOF_VOID_P 0 +#define TM_IN_SYS_TIME 1 +#define X_DISPLAY_MISSING 1 +#define mode_t int +#define off_t long +#define pid_t int +#endif +#ifdef __cplusplus +#include + +configure: exit 0 diff --git a/Src/config.status b/Src/config.status new file mode 100644 index 0000000..1f85d08 --- /dev/null +++ b/Src/config.status @@ -0,0 +1,902 @@ +#! /bin/sh +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=${CONFIG_SHELL-/bin/sh} +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by Frodo $as_me 4.2, which was +generated by GNU Autoconf 2.56. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +config_files=" Makefile" +config_headers=" sysconfig.h" + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." +ac_cs_version="\ +Frodo config.status 4.2 +configured by ./configure, generated by GNU Autoconf 2.56, + with options \"'--disable-sdltest' '--enable-kbd-lang-us'\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=. +INSTALL="/bin/install -c" +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + echo "running /bin/sh ./configure " '--disable-sdltest' '--enable-kbd-lang-us' $ac_configure_extra_args " --no-create --no-recursion" >&6 + exec /bin/sh ./configure '--disable-sdltest' '--enable-kbd-lang-us' $ac_configure_extra_args --no-create --no-recursion +fi + +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "sysconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS sysconfig.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF +s,@SHELL@,/bin/sh,;t t +s,@PATH_SEPARATOR@,:,;t t +s,@PACKAGE_NAME@,Frodo,;t t +s,@PACKAGE_TARNAME@,Frodo,;t t +s,@PACKAGE_VERSION@,4.2,;t t +s,@PACKAGE_STRING@,Frodo 4.2,;t t +s,@PACKAGE_BUGREPORT@,Christian.Bauer@uni-mainz.de,;t t +s,@exec_prefix@,${prefix},;t t +s,@prefix@,/usr/local,;t t +s,@program_transform_name@,s,x,x,,;t t +s,@bindir@,${exec_prefix}/bin,;t t +s,@sbindir@,${exec_prefix}/sbin,;t t +s,@libexecdir@,${exec_prefix}/libexec,;t t +s,@datadir@,${prefix}/share,;t t +s,@sysconfdir@,${prefix}/etc,;t t +s,@sharedstatedir@,${prefix}/com,;t t +s,@localstatedir@,${prefix}/var,;t t +s,@libdir@,${exec_prefix}/lib,;t t +s,@includedir@,${prefix}/include,;t t +s,@oldincludedir@,/usr/include,;t t +s,@infodir@,${prefix}/info,;t t +s,@mandir@,${prefix}/man,;t t +s,@build_alias@,,;t t +s,@host_alias@,,;t t +s,@target_alias@,,;t t +s,@DEFS@,-DHAVE_CONFIG_H,;t t +s,@ECHO_C@,,;t t +s,@ECHO_N@,-n,;t t +s,@ECHO_T@,,;t t +s,@LIBS@, -L/c/Dev-Cpp/lib -lmingw32 -lSDLmain -lSDL -mwindows,;t t +s,@CC@,gcc,;t t +s,@CFLAGS@,-g -O2 -fomit-frame-pointer -fno-exceptions -I/c/Dev-Cpp/include/SDL -Dmain=SDL_main -DHAVE_SDL,;t t +s,@LDFLAGS@,,;t t +s,@CPPFLAGS@,,;t t +s,@ac_ct_CC@,gcc,;t t +s,@EXEEXT@,.exe,;t t +s,@OBJEXT@,o,;t t +s,@CXX@,g++,;t t +s,@CXXFLAGS@,-g -O2,;t t +s,@ac_ct_CXX@,g++,;t t +s,@CPP@,gcc -E,;t t +s,@SET_MAKE@,,;t t +s,@INSTALL_PROGRAM@,${INSTALL},;t t +s,@INSTALL_SCRIPT@,${INSTALL},;t t +s,@INSTALL_DATA@,${INSTALL} -m 644,;t t +s,@EGREP@,grep -E,;t t +s,@build@,i686-pc-mingw32,;t t +s,@build_cpu@,i686,;t t +s,@build_vendor@,pc,;t t +s,@build_os@,mingw32,;t t +s,@host@,i686-pc-mingw32,;t t +s,@host_cpu@,i686,;t t +s,@host_vendor@,pc,;t t +s,@host_os@,mingw32,;t t +s,@target@,i686-pc-mingw32,;t t +s,@target_cpu@,i686,;t t +s,@target_vendor@,pc,;t t +s,@target_os@,mingw32,;t t +s,@SDL_CONFIG@,/bin/sdl-config,;t t +s,@SDL_CFLAGS@,-I/c/Dev-Cpp/include/SDL -Dmain=SDL_main,;t t +s,@SDL_LIBS@,-L/c/Dev-Cpp/lib -lmingw32 -lSDLmain -lSDL -mwindows,;t t +s,@X_CFLAGS@,,;t t +s,@X_PRE_LIBS@,,;t t +s,@X_LIBS@,,;t t +s,@X_EXTRA_LIBS@,,;t t +s,@LIBOBJS@, fileblocks$U.o memcmp$U.o,;t t +s,@TARGET@,sdl,;t t +s,@top_srcdir@,,;t t +s,@HPUX_REV@,,;t t +s,@KBD_LANG@,0,;t t +s,@GUIOBJS@,,;t t +s,@GUISRCS@,,;t t +s,@LTLIBOBJS@, fileblocks$U.lo memcmp$U.lo,;t t +CEOF + + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + sed "/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + + # Handle all the #define templates only if necessary. + if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then + # If there are no defines, we may have an empty if/fi + : + cat >$tmp/defines.sed <$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in + + fi # grep + + # Handle all the #undef templates + cat >$tmp/undefs.sed <$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done + +{ (exit 0); exit 0; } diff --git a/Src/config.sub b/Src/config.sub new file mode 100644 index 0000000..87a1ee4 --- /dev/null +++ b/Src/config.sub @@ -0,0 +1,1569 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-04-22' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Src/configarm b/Src/configarm new file mode 100644 index 0000000..b8b59ee --- /dev/null +++ b/Src/configarm @@ -0,0 +1,2 @@ +./configure --host=i386-linux --x-includes=/opt/Qtopia/sharp/include/ --x-libraries=/opt/Qtopia/sharp/lib/ --with-sdl-prefix=/opt/Qtopia/sharp/ --with-embedded-extension=qtopia + diff --git a/Src/configure b/Src/configure old mode 100755 new mode 100644 index fb04376..e3ca4fd --- a/Src/configure +++ b/Src/configure @@ -1,25 +1,13 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by Autoconf 2.52d. +# Generated by GNU Autoconf 2.56 for Frodo 4.2. # -# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +# Report bugs to . +# +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" - ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## @@ -28,12 +16,182 @@ as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + # Name of the executable. -as_me=`echo "$0" |sed 's,.*[\\/],,'` +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr @@ -59,24 +217,20 @@ else fi rm -f conf$$ conf$$.exe conf$$.file -as_executable_p="test -f" - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: else - as_unset=false + as_mkdir_p=false fi -# NLS nuisances. -$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } -$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } -$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } -$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } -$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } -$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } -$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } -$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + # IFS # We need space, tab and new line, in precisely that order. @@ -85,7 +239,8 @@ as_nl=' IFS=" $as_nl" # CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } +$as_unset CDPATH + # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, @@ -98,9 +253,11 @@ exec 6>&1 # Initializations. # ac_default_prefix=/usr/local +ac_config_libobj_dir=. cross_compiling=no subdirs= -MFLAGS= MAKEFLAGS= +MFLAGS= +MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. @@ -108,7 +265,14 @@ SHELL=${CONFIG_SHELL-/bin/sh} # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} -ac_unique_file="VIC.cpp" +# Identity of this package. +PACKAGE_NAME='Frodo' +PACKAGE_TARNAME='Frodo' +PACKAGE_VERSION='4.2' +PACKAGE_STRING='Frodo 4.2' +PACKAGE_BUGREPORT='Christian.Bauer@uni-mainz.de' + +ac_unique_file="main.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -146,6 +310,9 @@ ac_includes_default="\ # include #endif" +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA EGREP build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os SDL_CONFIG SDL_CFLAGS SDL_LIBS X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS LIBOBJS TARGET top_srcdir HPUX_REV KBD_LANG GUIOBJS GUISRCS LTLIBOBJS' +ac_subst_files='' + # Initialize some variables set by options. ac_init_help= ac_init_version=false @@ -184,13 +351,6 @@ oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - ac_prev= for ac_option do @@ -323,7 +483,7 @@ do with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) + | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -502,7 +662,7 @@ do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done @@ -514,18 +674,19 @@ do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. +# FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias -# FIXME: should be removed in autoconf 3.0. +# FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe @@ -541,13 +702,23 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. @@ -564,6 +735,9 @@ if test ! -r $srcdir/$ac_unique_file; then { (exit 1); exit 1; }; } fi fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias @@ -613,7 +787,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures Frodo 4.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -669,11 +843,18 @@ _ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of Frodo 4.2:";; + esac cat <<\_ACEOF Optional Features: @@ -688,6 +869,7 @@ Optional Packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) +AS_HELP_STRING(--with-embedded-extension=qtopia|maemo,Specify which extension for Frodo on an embedded device should be used.) --with-x use the X Window System Some influential environment variables: @@ -704,6 +886,7 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to . _ACEOF fi @@ -711,11 +894,13 @@ if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - cd $ac_dir - if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\./,,'` + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi @@ -735,7 +920,14 @@ case $srcdir in ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo @@ -757,8 +949,10 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF +Frodo configure 4.2 +generated by GNU Autoconf 2.56 -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. @@ -770,8 +964,8 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was -generated by GNU Autoconf 2.52d. Invocation command line was +It was created by Frodo $as_me 4.2, which was +generated by GNU Autoconf 2.56. Invocation command line was $ $0 $@ @@ -799,39 +993,78 @@ hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` -PATH = $PATH - _ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + } >&5 cat >&5 <<_ACEOF + + ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF + # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= +ac_configure_args0= +ac_configure_args1= ac_sep= -for ac_arg +ac_must_keep_next=false +for ac_pass in 1 2 do - case $ac_arg in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - ac_sep=" " ;; - *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" - ac_sep=" " ;; - esac - # Get rid of the leading space. + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -842,6 +1075,7 @@ trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo + cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## @@ -864,6 +1098,35 @@ _ASBOX esac; } echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## @@ -871,14 +1134,15 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h + sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 - rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do @@ -891,6 +1155,33 @@ rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then @@ -902,7 +1193,7 @@ if test -z "$CONFIG_SITE"; then fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - { echo "$as_me:905: loading site script $ac_site_file" >&5 + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" @@ -913,7 +1204,7 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then - { echo "$as_me:916: loading cache $cache_file" >&5 + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; @@ -921,7 +1212,7 @@ echo "$as_me: loading cache $cache_file" >&6;} esac fi else - { echo "$as_me:924: creating cache $cache_file" >&5 + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -937,42 +1228,42 @@ for ac_var in `(set) 2>&1 | eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:940: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:944: error: \`$ac_var' was not set in the previous run" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:950: error: \`$ac_var' has changed since the previous run:" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:952: former value: $ac_old_val" >&5 + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:954: current value: $ac_new_val" >&5 + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac - # Pass precious variables to config.status. It doesn't matter if - # we pass some twice (in addition to the command line arguments). + # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" - ;; + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:973: error: changes in the environment can compromise the build" >&5 + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:975: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi @@ -983,26 +1274,36 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac -echo "#! $SHELL" >conftest.sh -echo "exit 0" >>conftest.sh -chmod +x conftest.sh -if { (echo "$as_me:995: PATH=\".;.\"; conftest.sh") >&5 - (PATH=".;."; conftest.sh) 2>&5 - ac_status=$? - echo "$as_me:998: \$? = $ac_status" >&5 - (exit $ac_status); }; then - ac_path_separator=';' -else - ac_path_separator=: -fi -PATH_SEPARATOR="$ac_path_separator" -rm -f conftest.sh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ac_config_headers="$ac_config_headers sysconfig.h" + ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1012,7 +1313,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:1015: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1020,25 +1321,28 @@ else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CC="${ac_tool_prefix}gcc" -echo "$as_me:1030: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1038: result: $CC" >&5 + echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1041: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1047,7 +1351,7 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:1050: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1055,25 +1359,28 @@ else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CC="gcc" -echo "$as_me:1065: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1073: result: $ac_ct_CC" >&5 + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1076: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1086,7 +1393,7 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:1089: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1094,25 +1401,28 @@ else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CC="${ac_tool_prefix}cc" -echo "$as_me:1104: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1112: result: $CC" >&5 + echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1115: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1121,7 +1431,7 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:1124: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1129,25 +1439,28 @@ else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CC="cc" -echo "$as_me:1139: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1147: result: $ac_ct_CC" >&5 + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1150: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1160,7 +1473,7 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:1163: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1169,19 +1482,22 @@ else ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue -fi -ac_cv_prog_CC="cc" -echo "$as_me:1183: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done if test $ac_prog_rejected = yes; then @@ -1193,19 +1509,17 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - set dummy "$ac_dir/$ac_word" ${1+"$@"} - shift - ac_cv_prog_CC="$@" + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1205: result: $CC" >&5 + echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1208: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1216,7 +1530,7 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:1219: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1224,25 +1538,28 @@ else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -echo "$as_me:1234: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:1242: result: $CC" >&5 + echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else - echo "$as_me:1245: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1255,7 +1572,7 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:1258: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1263,25 +1580,28 @@ else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CC="$ac_prog" -echo "$as_me:1273: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:1281: result: $ac_ct_CC" >&5 + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else - echo "$as_me:1284: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1293,40 +1613,41 @@ fi fi -test -z "$CC" && { { echo "$as_me:1296: error: no acceptable cc found in \$PATH" >&5 -echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. -echo "$as_me:1301:" \ +echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:1304: \"$ac_compiler --version &5\"") >&5 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? - echo "$as_me:1307: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1309: \"$ac_compiler -v &5\"") >&5 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? - echo "$as_me:1312: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1314: \"$ac_compiler -V &5\"") >&5 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? - echo "$as_me:1317: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF -#line 1321 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1336,100 +1657,120 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe" +ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -echo "$as_me:1343: checking for C compiler default output" >&5 +echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:1346: \"$ac_link_default\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? - echo "$as_me:1349: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. -for ac_file in `ls a.exe conftest.exe 2>/dev/null; - ls a.out conftest 2>/dev/null; - ls a.* conftest.* 2>/dev/null`; do + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;; - a.out ) # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool --akim. - export ac_cv_exeext - break;; - * ) break;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; esac done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -{ { echo "$as_me:1372: error: C compiler cannot create executables" >&5 -echo "$as_me: error: C compiler cannot create executables" >&2;} +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext -echo "$as_me:1378: result: $ac_file" >&5 +echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -echo "$as_me:1383: checking whether the C compiler works" >&5 +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' - { (eval echo "$as_me:1389: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1392: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { echo "$as_me:1399: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'." >&5 + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'." >&2;} +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi -echo "$as_me:1407: result: yes" >&5 +echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 -rm -f a.out a.exe conftest$ac_cv_exeext +rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -echo "$as_me:1414: checking whether we are cross compiling" >&5 +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:1416: result: $cross_compiling" >&5 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 -echo "$as_me:1419: checking for executable suffix" >&5 -echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 -if { (eval echo "$as_me:1421: \"$ac_link\"") >&5 +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:1424: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. -for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; @@ -1437,33 +1778,33 @@ for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do esac done else - { { echo "$as_me:1440: error: cannot compute EXEEXT: cannot compile and link" >&5 -echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext -echo "$as_me:1446: result: $ac_cv_exeext" >&5 +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:1452: checking for object suffix" >&5 -echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 1458 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1473,47 +1814,48 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:1476: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1479: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -{ { echo "$as_me:1491: error: cannot compute OBJEXT: cannot compile" >&5 -echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:1498: result: $ac_cv_objext" >&5 +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:1502: checking whether we are using the GNU C compiler" >&5 +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 1508 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1526,48 +1868,47 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1529: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1532: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1535: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1538: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:1550: result: $ac_cv_c_compiler_gnu" >&5 +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" -echo "$as_me:1556: checking whether $CC accepts -g" >&5 +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 1562 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1577,26 +1918,27 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1580: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1583: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1586: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1589: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:1599: result: $ac_cv_prog_cc_g" >&5 +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS @@ -1613,6 +1955,102 @@ else CFLAGS= fi fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide @@ -1623,16 +2061,16 @@ cat >conftest.$ac_ext <<_ACEOF #endif _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1626: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1629: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1632: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1635: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ @@ -1644,16 +2082,14 @@ if { (eval echo "$as_me:1626: \"$ac_compile\"") >&5 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF -#line 1647 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include $ac_declaration -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1663,34 +2099,33 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1666: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1669: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1672: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1675: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF -#line 1685 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_declaration -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1700,21 +2135,22 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1703: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1706: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1709: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1712: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi rm -f conftest.$ac_objext conftest.$ac_ext done @@ -1727,7 +2163,8 @@ fi else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c @@ -1746,7 +2183,7 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:1749: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1754,25 +2191,28 @@ else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" -echo "$as_me:1764: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - echo "$as_me:1772: result: $CXX" >&5 + echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else - echo "$as_me:1775: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1785,7 +2225,7 @@ if test -z "$CXX"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:1788: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -1793,25 +2233,28 @@ else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - $as_executable_p "$ac_dir/$ac_word" || continue -ac_cv_prog_ac_ct_CXX="$ac_prog" -echo "$as_me:1803: found $ac_dir/$ac_word" >&5 -break +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - echo "$as_me:1811: result: $ac_ct_CXX" >&5 + echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else - echo "$as_me:1814: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi @@ -1822,41 +2265,40 @@ test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi + # Provide some information about the compiler. -echo "$as_me:1826:" \ +echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:1829: \"$ac_compiler --version &5\"") >&5 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? - echo "$as_me:1832: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1834: \"$ac_compiler -v &5\"") >&5 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? - echo "$as_me:1837: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } -{ (eval echo "$as_me:1839: \"$ac_compiler -V &5\"") >&5 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? - echo "$as_me:1842: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } -echo "$as_me:1845: checking whether we are using the GNU C++ compiler" >&5 +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 1851 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1869,48 +2311,47 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1872: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1875: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1878: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1881: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:1893: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" -echo "$as_me:1899: checking whether $CXX accepts -g" >&5 +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 1905 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1920,26 +2361,27 @@ main () } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1923: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1926: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1929: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1932: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_prog_cxx_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:1942: result: $ac_cv_prog_cxx_g" >&5 +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS @@ -1966,16 +2408,14 @@ for ac_declaration in \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF -#line 1969 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include $ac_declaration -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -1985,34 +2425,33 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:1988: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:1991: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:1994: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:1997: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF -#line 2007 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_declaration -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -2022,21 +2461,22 @@ exit (42); } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:2025: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:2028: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:2031: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2034: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + fi rm -f conftest.$ac_objext conftest.$ac_ext done @@ -2058,7 +2498,7 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:2061: checking how to run the C preprocessor" >&5 +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then @@ -2079,18 +2519,22 @@ do # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF -#line 2082 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include Syntax error _ACEOF -if { (eval echo "$as_me:2087: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2093: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -2104,7 +2548,8 @@ if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. continue fi @@ -2113,17 +2558,21 @@ rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF -#line 2116 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:2120: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2126: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -2138,7 +2587,8 @@ if test -z "$ac_cpp_err"; then continue else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Passes both tests. ac_preproc_ok=: break @@ -2160,7 +2610,7 @@ fi else ac_cv_prog_CPP=$CPP fi -echo "$as_me:2163: result: $CPP" >&5 +echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes @@ -2170,18 +2620,22 @@ do # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF -#line 2173 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include Syntax error _ACEOF -if { (eval echo "$as_me:2178: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2184: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -2195,7 +2649,8 @@ if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Broken: fails on valid input. continue fi @@ -2204,17 +2659,21 @@ rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF -#line 2207 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:2211: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2217: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -2229,7 +2688,8 @@ if test -z "$ac_cpp_err"; then continue else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + # Passes both tests. ac_preproc_ok=: break @@ -2242,8 +2702,10 @@ rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else - { { echo "$as_me:2245: error: C preprocessor \"$CPP\" fails sanity check" >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi @@ -2253,15 +2715,15 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:2256: checking whether ${MAKE-make} sets \${MAKE}" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: - @echo 'ac_maketemp="${MAKE}"' + @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` @@ -2273,86 +2735,183 @@ fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:2276: result: yes" >&5 + echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else - echo "$as_me:2280: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + if [ x"$GXX" = "xyes" ]; then - CFLAGS="-O2 -g -fomit-frame-pointer -Wall -Wno-unused -Wno-format" + CFLAGS="$CFLAGS -fomit-frame-pointer -fno-exceptions" fi -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -HPUX_REV=0 -if [ x$UNAME_SYSTEM = "xHP-UX" ]; then - HPUX_REV=`echo $UNAME_RELEASE | sed -e 's/^.*.0B*//' -e 's/\..*$//'` + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep -echo "$as_me:2297: checking for AIX" >&5 + + +echo "$as_me:$LINENO: checking for AIX" >&5 echo $ECHO_N "checking for AIX... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF -#line 2300 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #ifdef _AIX yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - echo "$as_me:2309: result: yes" >&5 + $EGREP "yes" >/dev/null 2>&1; then + echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define _ALL_SOURCE 1 _ACEOF else - echo "$as_me:2316: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest* -echo "$as_me:2321: checking for POSIXized ISC" >&5 -echo $ECHO_N "checking for POSIXized ISC... $ECHO_C" >&6 -if test -d /etc/conf/kconfig.d && - grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 -then - echo "$as_me:2326: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - ISC=yes # If later tests want to check for ISC. -cat >>confdefs.h <<\_ACEOF -#define _POSIX_SOURCE 1 -_ACEOF - - if test "$GCC" = yes; then - CC="$CC -posix" - else - CC="$CC -Xp" - fi -else - echo "$as_me:2340: result: no" >&5 -echo "${ECHO_T}no" >&6 - ISC= -fi - -HAVE_BEBOX=no -echo "$as_me:2346: checking for OpenLibrary in -lamiga" >&5 -echo $ECHO_N "checking for OpenLibrary in -lamiga... $ECHO_C" >&6 -if test "${ac_cv_lib_amiga_OpenLibrary+set}" = set; then +echo "$as_me:$LINENO: checking for library containing strerror" >&5 +echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 +if test "${ac_cv_search_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lamiga $LIBS" + ac_func_search_save_LIBS=$LIBS +ac_cv_search_strerror=no cat >conftest.$ac_ext <<_ACEOF -#line 2354 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -2360,51 +2919,93 @@ extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ -char OpenLibrary (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +char strerror (); int main () { -OpenLibrary (); +strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:2379: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:2382: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:2385: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2388: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_amiga_OpenLibrary=yes + ac_cv_search_strerror="none required" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_amiga_OpenLibrary=no +sed 's/^/| /' conftest.$ac_ext >&5 + fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:2399: result: $ac_cv_lib_amiga_OpenLibrary" >&5 -echo "${ECHO_T}$ac_cv_lib_amiga_OpenLibrary" >&6 -if test $ac_cv_lib_amiga_OpenLibrary = yes; then - HAVE_AMIGA_LIB=yes +if test "$ac_cv_search_strerror" = no; then + for ac_lib in cposix; do + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror (); +int +main () +{ +strerror (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_strerror="-l$ac_lib" +break else - HAVE_AMIGA_LIB=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + done +fi +LIBS=$ac_func_search_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +echo "${ECHO_T}$ac_cv_search_strerror" >&6 +if test "$ac_cv_search_strerror" != no; then + test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" + fi -echo "$as_me:2407: checking for vga_setmode in -lvga" >&5 + +echo "$as_me:$LINENO: checking for vga_setmode in -lvga" >&5 echo $ECHO_N "checking for vga_setmode in -lvga... $ECHO_C" >&6 if test "${ac_cv_lib_vga_vga_setmode+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2412,8 +3013,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lvga $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 2415 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -2422,12 +3027,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char vga_setmode (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -2437,27 +3036,28 @@ vga_setmode (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:2440: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:2443: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:2446: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2449: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_vga_vga_setmode=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_vga_vga_setmode=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:2460: result: $ac_cv_lib_vga_vga_setmode" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_vga_vga_setmode" >&5 echo "${ECHO_T}$ac_cv_lib_vga_vga_setmode" >&6 if test $ac_cv_lib_vga_vga_setmode = yes; then HAVE_SVGA_LIB=yes @@ -2465,6 +3065,89 @@ else HAVE_SVGA_LIB=no fi +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6 +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_target_alias=$target_alias +test "x$ac_cv_target_alias" = "x" && + ac_cv_target_alias=$ac_cv_host_alias +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6 +target=$ac_cv_target +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + # Check whether --with-sdl-prefix or --without-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then withval="$with_sdl_prefix" @@ -2501,9 +3184,11 @@ fi; fi fi + + PATH="$prefix/bin:$prefix/usr/bin:$PATH" # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 -echo "$as_me:2506: checking for $ac_word" >&5 +echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_SDL_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -2513,16 +3198,18 @@ else ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. ;; *) - ac_save_IFS=$IFS; IFS=$ac_path_separator -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - IFS=$ac_save_IFS - test -z "$ac_dir" && ac_dir=. - if $as_executable_p "$ac_dir/$ac_word"; then - ac_cv_path_SDL_CONFIG="$ac_dir/$ac_word" - echo "$as_me:2523: found $ac_dir/$ac_word" >&5 - break -fi + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" @@ -2532,15 +3219,15 @@ fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then - echo "$as_me:2535: result: $SDL_CONFIG" >&5 + echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 echo "${ECHO_T}$SDL_CONFIG" >&6 else - echo "$as_me:2538: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi min_sdl_version=1.2.0 - echo "$as_me:2543: checking for SDL - version >= $min_sdl_version" >&5 + echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 echo $ECHO_N "checking for SDL - version >= $min_sdl_version... $ECHO_C" >&6 no_sdl="" if test "$SDL_CONFIG" = "no" ; then @@ -2565,8 +3252,12 @@ echo $ECHO_N "checking for SDL - version >= $min_sdl_version... $ECHO_C" >&6 echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF -#line 2568 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include @@ -2624,37 +3315,40 @@ int main (int argc, char *argv[]) } } + _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:2629: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:2632: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:2634: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2637: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) no_sdl=yes fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then - echo "$as_me:2653: result: yes" >&5 + echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 HAVE_SDL=yes else - echo "$as_me:2657: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" @@ -2669,18 +3363,21 @@ echo "${ECHO_T}no" >&6 CFLAGS="$CFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 2672 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include "SDL.h" -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main + int main () { @@ -2690,16 +3387,16 @@ main () } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:2693: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:2696: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:2699: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2702: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" @@ -2712,7 +3409,8 @@ if { (eval echo "$as_me:2693: \"$ac_link\"") >&5 echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" @@ -2728,11 +3426,64 @@ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext HAVE_SDL=no fi + rm -f conf.sdltest -echo "$as_me:2733: checking for X" >&5 + +EMBEDDED_EXTENSION=none +echo "$as_me:$LINENO: checking if Frodo should be compiled with extensions for an embedded device" >&5 +echo $ECHO_N "checking if Frodo should be compiled with extensions for an embedded device... $ECHO_C" >&6 + +# Check whether --with-embedded-extension or --without-embedded-extension was given. +if test "${with_embedded_extension+set}" = set; then + withval="$with_embedded_extension" + +fi; +if [ x"$with_embedded_extension" == "xqtopia" ]; then + EMBEDDED_EXTENSION=$with_embedded_extension + +cat >>confdefs.h <<\_ACEOF +#define QTOPIA 1 +_ACEOF + +elif [ x"$with_embedded_extension" == "xmaemo" ]; then + EMBEDDED_EXTENSION=$with_embedded_extension + +cat >>confdefs.h <<\_ACEOF +#define MAEMO 1 +_ACEOF + +fi +echo "$as_me:$LINENO: result: $EMBEDDED_EXTENSION" >&5 +echo "${ECHO_T}$EMBEDDED_EXTENSION" >&6 + +if [ x"$EMBEDDED_EXTENSION" == "xmaemo" ]; then + #PKG_CHECK_MODULES(OSSO, libosso >= 0.9.19, +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBOSSO +_ACEOF +#, AC_MSG_NOTICE([libosso not present.])) +fi + +if [ x"$EMBEDDED_EXTENSION" == "xnone" ]; then + HAVE_GLADE=no + #PKG_CHECK_MODULES(GLADE, libglade-2.0 libgnomeui-2.0 >= 1.110.0, HAVE_GLADE=yes) + if [ $HAVE_GLADE = yes ]; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GLADE 1 +_ACEOF + + fi +else + GUIOBJS="sdlgui.o file.o dlgFileSelect.o dlgMain.o dlgDrives.o dlgOptions.o dlgVideoSound.o dlgAdvanced.o dlgInput.o" + GUISRCS="sdlgui.cpp file.cpp dlgFileSelect.cpp dlgMain.cpp dlgDrives.cpp dlgOptions.cpp dlgVidoSound.cpp dlgAdvanced.cpp dlgInput.cpp" +fi + +echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 + # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" @@ -2827,17 +3578,21 @@ if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF -#line 2830 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:2834: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:2840: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -2852,7 +3607,8 @@ if test -z "$ac_cpp_err"; then ac_x_includes= else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir @@ -2870,15 +3626,13 @@ if test "$ac_x_libraries" = no; then ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 2873 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -2888,23 +3642,24 @@ XtMalloc (0) } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:2891: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:2894: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:2897: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:2900: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do @@ -2935,7 +3690,7 @@ fi fi # $with_x != no if test "$have_x" != yes; then - echo "$as_me:2938: result: $have_x" >&5 + echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else @@ -2945,7 +3700,7 @@ else # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" - echo "$as_me:2948: result: libraries $x_libraries, headers $x_includes" >&5 + echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi @@ -2969,19 +3724,17 @@ else # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) - echo "$as_me:2972: checking whether -R must be followed by a space" >&5 + echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF -#line 2976 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -2991,40 +3744,39 @@ main () } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:2994: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:2997: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3000: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3003: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_R_nospace=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then - echo "$as_me:3013: result: no" >&5 + echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF -#line 3019 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3034,30 +3786,31 @@ main () } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3037: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3040: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3043: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3046: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_R_space=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then - echo "$as_me:3056: result: yes" >&5 + echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else - echo "$as_me:3060: result: neither works" >&5 + echo "$as_me:$LINENO: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi @@ -3077,8 +3830,12 @@ echo "${ECHO_T}neither works" >&6 # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF -#line 3080 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3087,12 +3844,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3102,22 +3853,23 @@ XOpenDisplay (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3105: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3108: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3111: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3114: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -echo "$as_me:3120: checking for dnet_ntoa in -ldnet" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3125,8 +3877,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3128 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3135,12 +3891,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3150,34 +3900,35 @@ dnet_ntoa (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3153: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3156: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3159: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3162: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3173: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then - echo "$as_me:3180: checking for dnet_ntoa in -ldnet_stub" >&5 + echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3185,8 +3936,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3188 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3195,12 +3950,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3210,27 +3959,28 @@ dnet_ntoa (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3213: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3216: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3219: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3222: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3233: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" @@ -3249,73 +3999,75 @@ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - echo "$as_me:3252: checking for gethostbyname" >&5 + echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 3258 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); -char (*f) (); - -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif -int -main () -{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else -f = gethostbyname; +char (*f) () = gethostbyname; #endif +#ifdef __cplusplus +} +#endif + +int +main () +{ ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3295: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3298: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3301: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3304: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_func_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:3314: result: $ac_cv_func_gethostbyname" >&5 +echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then - echo "$as_me:3318: checking for gethostbyname in -lnsl" >&5 + echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3323,8 +4075,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3326 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3333,12 +4089,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3348,34 +4098,35 @@ gethostbyname (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3351: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3354: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3357: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3360: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3371: result: $ac_cv_lib_nsl_gethostbyname" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then - echo "$as_me:3378: checking for gethostbyname in -lbsd" >&5 + echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3383,8 +4134,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3386 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3393,12 +4148,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3408,27 +4157,28 @@ gethostbyname (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3411: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3414: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3417: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3420: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3431: result: $ac_cv_lib_bsd_gethostbyname" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" @@ -3441,76 +4191,78 @@ fi # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the nameserver (or something). -lsocket + # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. - echo "$as_me:3447: checking for connect" >&5 + echo "$as_me:$LINENO: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 3453 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); -char (*f) (); - -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif -int -main () -{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else -f = connect; +char (*f) () = connect; #endif +#ifdef __cplusplus +} +#endif + +int +main () +{ ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3490: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3493: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3496: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3499: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_func_connect=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:3509: result: $ac_cv_func_connect" >&5 +echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then - echo "$as_me:3513: checking for connect in -lsocket" >&5 + echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3518,8 +4270,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3521 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3528,12 +4284,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3543,27 +4293,28 @@ connect (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3546: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3549: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3552: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3555: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_socket_connect=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3566: result: $ac_cv_lib_socket_connect" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" @@ -3572,73 +4323,75 @@ fi fi # Guillermo Gomez says -lposix is necessary on A/UX. - echo "$as_me:3575: checking for remove" >&5 + echo "$as_me:$LINENO: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 3581 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); -char (*f) (); - -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif -int -main () -{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else -f = remove; +char (*f) () = remove; #endif +#ifdef __cplusplus +} +#endif + +int +main () +{ ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3618: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3621: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3624: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3627: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_func_remove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:3637: result: $ac_cv_func_remove" >&5 +echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then - echo "$as_me:3641: checking for remove in -lposix" >&5 + echo "$as_me:$LINENO: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3646,8 +4399,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3649 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3656,12 +4413,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3671,27 +4422,28 @@ remove (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3674: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3677: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3680: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3683: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_posix_remove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3694: result: $ac_cv_lib_posix_remove" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" @@ -3700,73 +4452,75 @@ fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - echo "$as_me:3703: checking for shmat" >&5 + echo "$as_me:$LINENO: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 3709 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); -char (*f) (); - -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif -int -main () -{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else -f = shmat; +char (*f) () = shmat; #endif +#ifdef __cplusplus +} +#endif + +int +main () +{ ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3746: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3749: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3752: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3755: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_func_shmat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:3765: result: $ac_cv_func_shmat" >&5 +echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then - echo "$as_me:3769: checking for shmat in -lipc" >&5 + echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3774,8 +4528,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3777 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3784,12 +4542,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3799,27 +4551,28 @@ shmat (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3802: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3805: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3808: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3811: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_ipc_shmat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3822: result: $ac_cv_lib_ipc_shmat" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" @@ -3837,7 +4590,7 @@ fi # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry - echo "$as_me:3840: checking for IceConnectionNumber in -lICE" >&5 + echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -3845,8 +4598,12 @@ else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF -#line 3848 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3855,12 +4612,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3870,27 +4621,28 @@ IceConnectionNumber (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:3873: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:3876: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:3879: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3882: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:3893: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" @@ -3900,28 +4652,30 @@ fi fi -ac_config_headers="$ac_config_headers sysconfig.h" + + + + + ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:3908: checking for $ac_hdr that defines DIR" >&5 +echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 3914 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include <$ac_hdr> -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3932,26 +4686,27 @@ return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:3935: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:3938: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:3941: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:3944: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:3954: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF @@ -3964,16 +4719,20 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - echo "$as_me:3967: checking for opendir in -ldir" >&5 -echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6 -if test "${ac_cv_lib_dir_opendir+set}" = set; then + echo "$as_me:$LINENO: checking for library containing opendir" >&5 +echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 +if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldir $LIBS" + ac_func_search_save_LIBS=$LIBS +ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF -#line 3975 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -3982,12 +4741,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -3997,43 +4750,34 @@ opendir (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:4000: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4003: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:4006: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4009: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_dir_opendir=yes + ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_dir_opendir=no +sed 's/^/| /' conftest.$ac_ext >&5 + fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:4020: result: $ac_cv_lib_dir_opendir" >&5 -echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6 -if test $ac_cv_lib_dir_opendir = yes; then - LIBS="$LIBS -ldir" -fi - -else - echo "$as_me:4027: checking for opendir in -lx" >&5 -echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6 -if test "${ac_cv_lib_x_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lx $LIBS" -cat >conftest.$ac_ext <<_ACEOF -#line 4035 "configure" -#include "confdefs.h" +if test "$ac_cv_search_opendir" = no; then + for ac_lib in dir; do + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus @@ -4042,12 +4786,6 @@ extern "C" /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -4057,83 +4795,205 @@ opendir (); } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:4060: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4063: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:4066: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4069: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_x_opendir=yes + ac_cv_search_opendir="-l$ac_lib" +break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_lib_x_opendir=no +sed 's/^/| /' conftest.$ac_ext >&5 + fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + done fi -echo "$as_me:4080: result: $ac_cv_lib_x_opendir" >&5 -echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6 -if test $ac_cv_lib_x_opendir = yes; then - LIBS="$LIBS -lx" +LIBS=$ac_func_search_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +echo "${ECHO_T}$ac_cv_search_opendir" >&6 +if test "$ac_cv_search_opendir" != no; then + test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" + +fi + +else + echo "$as_me:$LINENO: checking for library containing opendir" >&5 +echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 +if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_func_search_save_LIBS=$LIBS +ac_cv_search_opendir=no +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_opendir="none required" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +if test "$ac_cv_search_opendir" = no; then + for ac_lib in x; do + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_opendir="-l$ac_lib" +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + done +fi +LIBS=$ac_func_search_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +echo "${ECHO_T}$ac_cv_search_opendir" >&6 +if test "$ac_cv_search_opendir" != no; then + test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" + fi fi -echo "$as_me:4088: checking for ANSI C header files" >&5 +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 4094 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include #include #include +int +main () +{ + + ; + return 0; +} _ACEOF -if { (eval echo "$as_me:4102: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:4108: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_header_stdc=no +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF -#line 4130 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then + $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no @@ -4145,13 +5005,17 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF -#line 4148 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then + $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no @@ -4166,14 +5030,19 @@ if test $ac_cv_header_stdc = yes; then : else cat >conftest.$ac_ext <<_ACEOF -#line 4169 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else -# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) @@ -4192,28 +5061,30 @@ main () } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:4195: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4198: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:4200: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4203: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) ac_cv_header_stdc=no fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi -echo "$as_me:4216: result: $ac_cv_header_stdc" >&5 +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then @@ -4225,43 +5096,56 @@ fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:4232: checking for $ac_header" >&5 +echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 4238 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4245: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4248: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4251: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4254: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:4264: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF @@ -4272,64 +5156,83 @@ fi done + + + + + + + + + + for ac_header in unistd.h fcntl.h sys/time.h sys/types.h utime.h string.h strings.h values.h ncurses.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:4279: checking for $ac_header" >&5 + echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:4284: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? -echo "$as_me:4288: checking $ac_header usability" >&5 +echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF -#line 4291 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4297: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4300: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4303: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4306: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext -echo "$as_me:4315: result: $ac_header_compiler" >&5 +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:4319: checking $ac_header presence" >&5 +echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF -#line 4322 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <$ac_header> _ACEOF -if { (eval echo "$as_me:4326: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4332: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4343,36 +5246,55 @@ if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -echo "$as_me:4350: result: $ac_header_preproc" >&5 +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) - { echo "$as_me:4356: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:4358: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; no:yes ) - { echo "$as_me:4361: WARNING: $ac_header: present but cannot be compiled." >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled." >&2;} - { echo "$as_me:4363: WARNING: $ac_header: check for missing prerequisite headers?" >&5 + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:4365: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; esac -echo "$as_me:4368: checking for $ac_header" >&5 +echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi -echo "$as_me:4375: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi @@ -4385,64 +5307,80 @@ fi done -for ac_header in sys/vfs.h sys/mount.h sys/select.h sys/param.h sys/statfs.h sys/statvfs.h sys/stat.h linux/joystick.h + + + + + + + +for ac_header in sys/vfs.h sys/mount.h sys/select.h sys/param.h sys/statfs.h sys/statvfs.h sys/stat.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:4392: checking for $ac_header" >&5 + echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi -echo "$as_me:4397: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? -echo "$as_me:4401: checking $ac_header usability" >&5 +echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF -#line 4404 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4410: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4413: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4416: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4419: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext -echo "$as_me:4428: result: $ac_header_compiler" >&5 +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? -echo "$as_me:4432: checking $ac_header presence" >&5 +echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF -#line 4435 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <$ac_header> _ACEOF -if { (eval echo "$as_me:4439: \"$ac_cpp conftest.$ac_ext\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? - egrep -v '^ *\+' conftest.er1 >conftest.err + grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 - echo "$as_me:4445: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag @@ -4456,36 +5394,55 @@ if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 - cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext -echo "$as_me:4463: result: $ac_header_preproc" >&5 +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) - { echo "$as_me:4469: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:4471: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; no:yes ) - { echo "$as_me:4474: WARNING: $ac_header: present but cannot be compiled." >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled." >&2;} - { echo "$as_me:4476: WARNING: $ac_header: check for missing prerequisite headers?" >&5 + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:4478: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; esac -echo "$as_me:4481: checking for $ac_header" >&5 +echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi -echo "$as_me:4488: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi @@ -4498,21 +5455,20 @@ fi done -echo "$as_me:4501: checking for char" >&5 + +echo "$as_me:$LINENO: checking for char" >&5 echo $ECHO_N "checking for char... $ECHO_C" >&6 if test "${ac_cv_type_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 4507 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -4525,239 +5481,328 @@ if (sizeof (char)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4528: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4531: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4534: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4537: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_char=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_char=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:4547: result: $ac_cv_type_char" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5 echo "${ECHO_T}$ac_cv_type_char" >&6 -echo "$as_me:4550: checking size of char" >&5 +echo "$as_me:$LINENO: checking size of char" >&5 echo $ECHO_N "checking size of char... $ECHO_C" >&6 if test "${ac_cv_sizeof_char+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_char" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF -#line 4559 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (char)) >= 0)] +static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4577: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4580: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4583: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4586: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF -#line 4591 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (char)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4609: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4612: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4615: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4618: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -#line 4634 "configure" -#include "confdefs.h" +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (char)) >= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4652: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4655: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4658: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4661: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF -#line 4677 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (char)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4695: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4698: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4701: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4704: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done -ac_cv_sizeof_char=$ac_lo +case $ac_lo in +?*) ac_cv_sizeof_char=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:4717: error: cannot run test program while cross compiling" >&5 -echo "$as_me: error: cannot run test program while cross compiling" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF -#line 4722 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +long longval () { return (long) (sizeof (char)); } +unsigned long ulongval () { return (long) (sizeof (char)); } +#include +#include int main () { -FILE *f = fopen ("conftest.val", "w"); -if (!f) - exit (1); -fprintf (f, "%d", (sizeof (char))); -fclose (f); + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (char))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (char)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (char)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + ; return 0; } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:4744: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:4747: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:4749: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4752: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_char=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val @@ -4765,27 +5810,26 @@ else ac_cv_sizeof_char=0 fi fi -echo "$as_me:4768: result: $ac_cv_sizeof_char" >&5 +echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5 echo "${ECHO_T}$ac_cv_sizeof_char" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF -echo "$as_me:4774: checking for short" >&5 + +echo "$as_me:$LINENO: checking for short" >&5 echo $ECHO_N "checking for short... $ECHO_C" >&6 if test "${ac_cv_type_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 4780 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -4798,239 +5842,328 @@ if (sizeof (short)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4801: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4804: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4807: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4810: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_short=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_short=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:4820: result: $ac_cv_type_short" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 echo "${ECHO_T}$ac_cv_type_short" >&6 -echo "$as_me:4823: checking size of short" >&5 +echo "$as_me:$LINENO: checking size of short" >&5 echo $ECHO_N "checking size of short... $ECHO_C" >&6 if test "${ac_cv_sizeof_short+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF -#line 4832 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (short)) >= 0)] +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4850: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4853: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4856: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4859: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF -#line 4864 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (short)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4882: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4885: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4888: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4891: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -#line 4907 "configure" -#include "confdefs.h" +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (short)) >= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4925: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4928: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4931: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4934: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF -#line 4950 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (short)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:4968: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:4971: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:4974: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:4977: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done -ac_cv_sizeof_short=$ac_lo +case $ac_lo in +?*) ac_cv_sizeof_short=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:4990: error: cannot run test program while cross compiling" >&5 -echo "$as_me: error: cannot run test program while cross compiling" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF -#line 4995 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +long longval () { return (long) (sizeof (short)); } +unsigned long ulongval () { return (long) (sizeof (short)); } +#include +#include int main () { -FILE *f = fopen ("conftest.val", "w"); -if (!f) - exit (1); -fprintf (f, "%d", (sizeof (short))); -fclose (f); + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (short))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + ; return 0; } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:5017: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5020: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:5022: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5025: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_short=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val @@ -5038,27 +6171,26 @@ else ac_cv_sizeof_short=0 fi fi -echo "$as_me:5041: result: $ac_cv_sizeof_short" >&5 +echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF -echo "$as_me:5047: checking for int" >&5 + +echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 5053 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -5071,239 +6203,328 @@ if (sizeof (int)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5074: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5077: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5080: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5083: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_int=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:5093: result: $ac_cv_type_int" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 -echo "$as_me:5096: checking size of int" >&5 +echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF -#line 5105 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (int)) >= 0)] +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5123: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5126: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5129: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5132: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF -#line 5137 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (int)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5155: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5158: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5161: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5164: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -#line 5180 "configure" -#include "confdefs.h" +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (int)) >= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5198: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5201: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5204: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5207: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF -#line 5223 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (int)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5241: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5244: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5247: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5250: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done -ac_cv_sizeof_int=$ac_lo +case $ac_lo in +?*) ac_cv_sizeof_int=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:5263: error: cannot run test program while cross compiling" >&5 -echo "$as_me: error: cannot run test program while cross compiling" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF -#line 5268 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +long longval () { return (long) (sizeof (int)); } +unsigned long ulongval () { return (long) (sizeof (int)); } +#include +#include int main () { -FILE *f = fopen ("conftest.val", "w"); -if (!f) - exit (1); -fprintf (f, "%d", (sizeof (int))); -fclose (f); + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (int))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + ; return 0; } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:5290: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5293: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:5295: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5298: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val @@ -5311,27 +6532,26 @@ else ac_cv_sizeof_int=0 fi fi -echo "$as_me:5314: result: $ac_cv_sizeof_int" >&5 +echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF -echo "$as_me:5320: checking for long" >&5 + +echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 5326 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -5344,239 +6564,328 @@ if (sizeof (long)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5347: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5350: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5353: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5356: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_long=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:5366: result: $ac_cv_type_long" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 -echo "$as_me:5369: checking size of long" >&5 +echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF -#line 5378 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long)) >= 0)] +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5396: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5399: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5402: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5405: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF -#line 5410 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5428: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5431: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5434: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5437: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -#line 5453 "configure" -#include "confdefs.h" +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long)) >= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5471: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5474: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5477: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5480: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF -#line 5496 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5514: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5517: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5520: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5523: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done -ac_cv_sizeof_long=$ac_lo +case $ac_lo in +?*) ac_cv_sizeof_long=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:5536: error: cannot run test program while cross compiling" >&5 -echo "$as_me: error: cannot run test program while cross compiling" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF -#line 5541 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +long longval () { return (long) (sizeof (long)); } +unsigned long ulongval () { return (long) (sizeof (long)); } +#include +#include int main () { -FILE *f = fopen ("conftest.val", "w"); -if (!f) - exit (1); -fprintf (f, "%d", (sizeof (long))); -fclose (f); + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (long))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + ; return 0; } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:5563: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5566: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:5568: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5571: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val @@ -5584,27 +6893,26 @@ else ac_cv_sizeof_long=0 fi fi -echo "$as_me:5587: result: $ac_cv_sizeof_long" >&5 +echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF -echo "$as_me:5593: checking for long long" >&5 + +echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 5599 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -5617,239 +6925,328 @@ if (sizeof (long long)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5620: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5623: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5626: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5629: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_long_long=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:5639: result: $ac_cv_type_long_long" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 -echo "$as_me:5642: checking size of long long" >&5 +echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF -#line 5651 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long long)) >= 0)] +static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5669: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5672: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5675: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5678: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF -#line 5683 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long long)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5701: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5704: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5707: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5710: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -#line 5726 "configure" -#include "confdefs.h" +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long long)) >= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5744: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5747: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5750: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5753: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.$ac_objext conftest.$ac_ext done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF -#line 5769 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { -int _array_ [1 - 2 * !((sizeof (long long)) <= $ac_mid)] +static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:5787: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:5790: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5793: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5796: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_lo=`expr $ac_mid + 1` +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.$ac_objext conftest.$ac_ext done -ac_cv_sizeof_long_long=$ac_lo +case $ac_lo in +?*) ac_cv_sizeof_long_long=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:5809: error: cannot run test program while cross compiling" >&5 -echo "$as_me: error: cannot run test program while cross compiling" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF -#line 5814 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +long longval () { return (long) (sizeof (long long)); } +unsigned long ulongval () { return (long) (sizeof (long long)); } +#include +#include int main () { -FILE *f = fopen ("conftest.val", "w"); -if (!f) - exit (1); -fprintf (f, "%d", (sizeof (long long))); -fclose (f); + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (long long))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (long long)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (long long)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + ; return 0; } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:5836: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:5839: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:5841: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:5844: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val @@ -5857,275 +7254,388 @@ else ac_cv_sizeof_long_long=0 fi fi -echo "$as_me:5860: result: $ac_cv_sizeof_long_long" >&5 +echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF -echo "$as_me:5866: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then + +echo "$as_me:$LINENO: checking for void *" >&5 +echo $ECHO_N "checking for void *... $ECHO_C" >&6 +if test "${ac_cv_type_void_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_cv_prog_cc_stdc=no -ac_save_CC=$CC + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((void * *) 0) + return 0; +if (sizeof (void *)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_void_p=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_void_p=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5 +echo "${ECHO_T}$ac_cv_type_void_p" >&6 + +echo "$as_me:$LINENO: checking size of void *" >&5 +echo $ECHO_N "checking size of void *... $ECHO_C" >&6 +if test "${ac_cv_sizeof_void_p+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_void_p" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF -#line 5874 "configure" -#include "confdefs.h" -#include +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_void_p=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (void *)); } +unsigned long ulongval () { return (long) (sizeof (void *)); } #include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif +#include int main () { -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:5929: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:5932: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:5935: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:5938: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -fi -rm -f conftest.$ac_objext -done -rm -f conftest.$ac_ext conftest.$ac_objext -CC=$ac_save_CC -fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:5955: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; - *) - echo "$as_me:5958: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; -esac - -echo "$as_me:5963: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line 5969 "configure" -#include "confdefs.h" - -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset x; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *ccp; - char **p; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - ccp = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++ccp; - p = (char**) ccp; - ccp = (char const *const *) p; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - } -#endif + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (void *))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (void *)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (void *)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:6033: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6036: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6039: \"$ac_try\"") >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6042: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_c_const=yes + ac_cv_sizeof_void_p=`cat conftest.val` else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 -ac_cv_c_const=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:6052: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6 -if test $ac_cv_c_const = no; then - -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi - -echo "$as_me:6062: checking for inline" >&5 -echo $ECHO_N "checking for inline... $ECHO_C" >&6 -if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat >conftest.$ac_ext <<_ACEOF -#line 6070 "configure" -#include "confdefs.h" -#ifndef __cplusplus -static $ac_kw int static_foo () {return 0; } -$ac_kw int foo () {return 0; } -#endif - -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:6079: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:6082: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6085: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:6088: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_inline=$ac_kw; break -else - echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 + ac_cv_sizeof_void_p=0 fi -rm -f conftest.$ac_objext conftest.$ac_ext -done - fi -echo "$as_me:6099: result: $ac_cv_c_inline" >&5 -echo "${ECHO_T}$ac_cv_c_inline" >&6 -case $ac_cv_c_inline in - inline | yes) ;; - no) -cat >>confdefs.h <<\_ACEOF -#define inline +echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 +echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF - ;; - *) cat >>confdefs.h <<_ACEOF -#define inline $ac_cv_c_inline -_ACEOF - ;; -esac -echo "$as_me:6114: checking for mode_t" >&5 + + +echo "$as_me:$LINENO: checking for mode_t" >&5 echo $ECHO_N "checking for mode_t... $ECHO_C" >&6 if test "${ac_cv_type_mode_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6120 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6138,26 +7648,27 @@ if (sizeof (mode_t)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6141: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6144: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6147: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6150: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_mode_t=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_mode_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6160: result: $ac_cv_type_mode_t" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 echo "${ECHO_T}$ac_cv_type_mode_t" >&6 if test $ac_cv_type_mode_t = yes; then : @@ -6169,21 +7680,19 @@ _ACEOF fi -echo "$as_me:6172: checking for off_t" >&5 +echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6178 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6196,26 +7705,27 @@ if (sizeof (off_t)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6199: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6202: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6205: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6208: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_off_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6218: result: $ac_cv_type_off_t" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6 if test $ac_cv_type_off_t = yes; then : @@ -6227,21 +7737,19 @@ _ACEOF fi -echo "$as_me:6230: checking for pid_t" >&5 +echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6236 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6254,26 +7762,27 @@ if (sizeof (pid_t)) } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6257: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6260: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6263: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6266: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_pid_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6276: result: $ac_cv_type_pid_t" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6 if test $ac_cv_type_pid_t = yes; then : @@ -6285,21 +7794,19 @@ _ACEOF fi -echo "$as_me:6288: checking for struct stat.st_blocks" >&5 +echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5 echo $ECHO_N "checking for struct stat.st_blocks... $ECHO_C" >&6 if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6294 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6311,26 +7818,64 @@ return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6314: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6317: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6320: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6323: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_member_struct_stat_st_blocks=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (sizeof ac_aggr.st_blocks) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_blocks=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_member_struct_stat_st_blocks=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6333: result: $ac_cv_member_struct_stat_st_blocks" >&5 +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5 echo "${ECHO_T}$ac_cv_member_struct_stat_st_blocks" >&6 if test $ac_cv_member_struct_stat_st_blocks = yes; then @@ -6338,6 +7883,7 @@ cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_BLOCKS 1 _ACEOF + cat >>confdefs.h <<\_ACEOF #define HAVE_ST_BLOCKS 1 _ACEOF @@ -6346,24 +7892,23 @@ else LIBOBJS="$LIBOBJS fileblocks.$ac_objext" fi -echo "$as_me:6349: checking whether time.h and sys/time.h may both be included" >&5 + +echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6355 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include #include -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6374,26 +7919,27 @@ return 0; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6377: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6380: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6383: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6386: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_header_time=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6396: result: $ac_cv_header_time" >&5 +echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then @@ -6403,23 +7949,21 @@ _ACEOF fi -echo "$as_me:6406: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 if test "${ac_cv_struct_tm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6412 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6429,26 +7973,27 @@ struct tm *tp; tp->tm_sec; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6432: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6435: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6438: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6441: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_struct_tm=time.h else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_struct_tm=sys/time.h fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6451: result: $ac_cv_struct_tm" >&5 +echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 echo "${ECHO_T}$ac_cv_struct_tm" >&6 if test $ac_cv_struct_tm = sys/time.h; then @@ -6458,50 +8003,60 @@ _ACEOF fi + if test $ac_cv_c_compiler_gnu = yes; then - echo "$as_me:6462: checking whether $CC needs -traditional" >&5 + echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF -#line 6469 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "$ac_pattern" >/dev/null 2>&1; then + $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* + if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF -#line 6484 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "$ac_pattern" >/dev/null 2>&1; then + $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi -echo "$as_me:6497: result: $ac_cv_prog_gcc_traditional" >&5 +echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi -echo "$as_me:6504: checking for working memcmp" >&5 +echo "$as_me:$LINENO: checking for working memcmp" >&5 echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6 if test "${ac_cv_func_memcmp_working+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6510,15 +8065,13 @@ else ac_cv_func_memcmp_working=no else cat >conftest.$ac_ext <<_ACEOF -#line 6513 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6552,38 +8105,44 @@ main () } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:6555: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6558: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:6560: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6563: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_memcmp_working=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) ac_cv_func_memcmp_working=no fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi -echo "$as_me:6575: result: $ac_cv_func_memcmp_working" >&5 +echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6 test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext" -echo "$as_me:6579: checking return type of signal handlers" >&5 +echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6585 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include #ifdef signal @@ -6595,12 +8154,6 @@ extern "C" void (*signal (int, void (*)(int)))(int); void (*signal ()) (); #endif -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6610,33 +8163,35 @@ int i; } _ACEOF rm -f conftest.$ac_objext -if { (eval echo "$as_me:6613: \"$ac_compile\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:6616: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:6619: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6622: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_type_signal=int fi rm -f conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:6632: result: $ac_cv_type_signal" >&5 +echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF -echo "$as_me:6639: checking whether utime accepts a null argument" >&5 + +echo "$as_me:$LINENO: checking whether utime accepts a null argument" >&5 echo $ECHO_N "checking whether utime accepts a null argument... $ECHO_C" >&6 if test "${ac_cv_func_utime_null+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 @@ -6647,15 +8202,13 @@ if test "$cross_compiling" = yes; then ac_cv_func_utime_null=no else cat >conftest.$ac_ext <<_ACEOF -#line 6650 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ $ac_includes_default -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif int main () { @@ -6670,28 +8223,30 @@ struct stat s, t; } _ACEOF rm -f conftest$ac_exeext -if { (eval echo "$as_me:6673: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6676: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:6678: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6681: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_utime_null=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) ac_cv_func_utime_null=no fi -rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi rm -f core core.* *.core fi -echo "$as_me:6694: result: $ac_cv_func_utime_null" >&5 +echo "$as_me:$LINENO: result: $ac_cv_func_utime_null" >&5 echo "${ECHO_T}$ac_cv_func_utime_null" >&6 if test $ac_cv_func_utime_null = yes; then @@ -6702,72 +8257,83 @@ _ACEOF fi rm -f conftest.data + + + + + + + + + for ac_func in gettimeofday sigaction mkdir rmdir select strerror strstr statfs usleep do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:6708: checking for $ac_func" >&5 +echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF -#line 6714 "configure" -#include "confdefs.h" +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" +{ #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); -char (*f) (); - -#ifdef F77_DUMMY_MAIN -# ifdef __cplusplus - extern "C" -# endif - int F77_DUMMY_MAIN() { return 1; } -#endif -int -main () -{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else -f = $ac_func; +char (*f) () = $ac_func; #endif +#ifdef __cplusplus +} +#endif + +int +main () +{ ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:6751: \"$ac_link\"") >&5 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:6754: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:6757: \"$ac_try\"") >&5 + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:6760: \$? = $ac_status" >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 -cat conftest.$ac_ext >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:6770: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF @@ -6777,6 +8343,7 @@ _ACEOF fi done + KBD_LANG=0 # Check whether --enable-kbd-lang-de or --disable-kbd-lang-de was given. if test "${enable_kbd_lang_de+set}" = set; then @@ -6789,107 +8356,45 @@ if test "${enable_kbd_lang_us+set}" = set; then KBD_LANG=0 fi; -echo "$as_me:6792: checking which target to use" >&5 +echo "$as_me:$LINENO: checking which target to use" >&5 echo $ECHO_N "checking which target to use... $ECHO_C" >&6 -if [ x"$HAVE_BEBOX" = "xyes" ]; then - echo "$as_me:6795: result: BeBox" >&5 -echo "${ECHO_T}BeBox" >&6 - TARGET=be -elif [ x"$HAVE_AMIGA_LIB" = "xyes" ]; then - echo "$as_me:6799: result: AmigaOS" >&5 -echo "${ECHO_T}AmigaOS" >&6 - TARGET=amigaos -elif [ x"$no_x" = "xyes" ]; then +if [ x"$no_x" != "xyes" ]; then if [ x"$HAVE_SVGA_LIB" = "xyes" ]; then - echo "$as_me:6804: result: SVGAlib" >&5 + echo "$as_me:$LINENO: result: SVGAlib" >&5 echo "${ECHO_T}SVGAlib" >&6 TARGET=svgalib CFLAGS="$CFLAGS -D__svgalib__" LIBS="$LIBS -lvga" else - echo "$as_me:6810: result: Ummm..." >&5 + echo "$as_me:$LINENO: result: Ummm..." >&5 echo "${ECHO_T}Ummm..." >&6 - { { echo "$as_me:6812: error: Neither X nor SVGAlib found, don't know what target to use." >&5 + { { echo "$as_me:$LINENO: error: Neither X nor SVGAlib found, don't know what target to use." >&5 echo "$as_me: error: Neither X nor SVGAlib found, don't know what target to use." >&2;} { (exit 1); exit 1; }; } fi elif [ x"$HAVE_SDL" = "xyes" ]; then - echo "$as_me:6817: result: SDL" >&5 + echo "$as_me:$LINENO: result: SDL" >&5 echo "${ECHO_T}SDL" >&6 TARGET=sdl CFLAGS="$CFLAGS $SDL_CFLAGS -DHAVE_SDL" LIBS="$LIBS $SDL_LIBS" else - echo "$as_me:6823: result: X Window System" >&5 + echo "$as_me:$LINENO: result: X Window System" >&5 echo "${ECHO_T}X Window System" >&6 TARGET=x11 CFLAGS="$CFLAGS $X_CFLAGS -I$ac_cv_x_include" LIBS="$LIBS $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS" fi -HAVEGCC27=n -HAVEI386=n -cat >conftest.cpp << EOF -#include -int main() -{ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) -#if __GNUC__ > 2 || __GNUC_MINOR__ > 6 -printf("GNU\n"); -#endif -#endif -return 0; -} -EOF -$CXX conftest.cpp -c -o conftest.o -$CXX conftest.o -o conftest -./conftest >conftest.file -if grep GNU conftest.file >/dev/null; then - HAVEGCC27=y - echo "Good news. Found GCC 2.7 or better." -elif [ "$CC" = "gcc" ]; then - echo "I suggest you upgrade to at least version 2.7 of GCC" -else - echo "Couldn't find GCC. Frodo may or may not compile and run correctly." -fi -cat >conftest.c << EOF -#include -int main() -{ -#ifdef __i386__ -printf("386\n"); -#endif -return 0; -} -EOF -$CC conftest.c -c -o conftest.o -$CC conftest.o -o conftest -./conftest >conftest.file -if grep 386 conftest.file >/dev/null; then - HAVEI386=y - echo "You seem to be using a x86 CPU" -else - echo "No special hacks for your CPU, sorry." -fi -rm -f conftest* -if [ "$HAVEGCC27" = "y" -a "$HAVEI386" = "y" ]; then -# Don't want strength-reduce on the i386, makes the code slower usually. - CFLAGS="$CFLAGS -fno-strength-reduce -DREGPARAM=\"__attribute__((regparm(3)))\"" -elif [ "$TARGET" = "amigaos" ]; then - CFLAGS="$CFLAGS -DREGPARAM=\"__attribute__((regargs(4)))\" " -else - CFLAGS="$CFLAGS -DREGPARAM=" -fi -CC=$CXX -ac_config_files="$ac_config_files Makefile" + ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -6901,7 +8406,7 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overriden when +# `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. @@ -6936,7 +8441,7 @@ _ACEOF t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache -if cmp -s $cache_file confcache; then :; else +if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file @@ -6967,24 +8472,41 @@ fi DEFS=-DHAVE_CONFIG_H +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:6973: creating $CONFIG_STATUS" >&5 +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL -# Generated automatically by $as_me. +# Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false +ac_cs_recheck=false +ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF - ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## @@ -6993,12 +8515,184 @@ cat >>$CONFIG_STATUS <<\_ACEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + # Name of the executable. -as_me=`echo "$0" |sed 's,.*[\\/],,'` +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr @@ -7024,24 +8718,20 @@ else fi rm -f conf$$ conf$$.exe conf$$.file -as_executable_p="test -f" - -# Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then - as_unset=unset +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: else - as_unset=false + as_mkdir_p=false fi -# NLS nuisances. -$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } -$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } -$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } -$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } -$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } -$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } -$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } -$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + # IFS # We need space, tab and new line, in precisely that order. @@ -7050,7 +8740,7 @@ as_nl=' IFS=" $as_nl" # CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } +$as_unset CDPATH exec 6>&1 @@ -7061,19 +8751,19 @@ exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running \$as_me. ## +## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by $as_me, which was -generated by GNU Autoconf 2.52d. Invocation command line was +This file was extended by Frodo $as_me 4.2, which was +generated by GNU Autoconf 2.56. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $@ + $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 @@ -7107,6 +8797,7 @@ Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit + -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] @@ -7125,8 +8816,8 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.52d, +Frodo config.status 4.2 +configured by $0, generated by GNU Autoconf 2.56, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 @@ -7134,6 +8825,7 @@ Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir +INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF @@ -7146,30 +8838,30 @@ do --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - shift - set dummy "$ac_option" "$ac_optarg" ${1+"$@"} - shift + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift ;; - -*);; *) # This is not an option, so the user has probably given explicit # arguments. + ac_option=$1 ac_need_defaults=false;; esac - case $1 in + case $ac_option in # Handling of the options. _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" - exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; -_ACEOF cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header - { { echo "$as_me:7172: error: ambiguous option: $1 + { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} @@ -7179,16 +8871,19 @@ Try \`$0 --help' for more information." >&2;} --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) - shift - CONFIG_FILES="$CONFIG_FILES $1" + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) - shift - CONFIG_HEADERS="$CONFIG_HEADERS $1" + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:7191: error: unrecognized option: $1 + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} @@ -7200,7 +8895,25 @@ Try \`$0 --help' for more information." >&2;} shift done +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + _ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets @@ -7209,7 +8922,7 @@ do # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "sysconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS sysconfig.h" ;; - *) { { echo "$as_me:7212: error: invalid argument: $ac_config_target" >&5 + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac @@ -7224,6 +8937,9 @@ if $ac_need_defaults; then test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { @@ -7232,17 +8948,17 @@ $debug || } # Create a (secure) tmp directory for tmp files. -: ${TMPDIR=/tmp} + { - tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=$TMPDIR/cs$$-$RANDOM + tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { - echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } @@ -7261,6 +8977,12 @@ if test -n "\$CONFIG_FILES"; then sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t @@ -7276,19 +8998,13 @@ s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t @@ -7302,6 +9018,22 @@ s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CPP@,$CPP,;t t s,@SET_MAKE@,$SET_MAKE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@EGREP@,$EGREP,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@target@,$target,;t t +s,@target_cpu@,$target_cpu,;t t +s,@target_vendor@,$target_vendor,;t t +s,@target_os@,$target_os,;t t s,@SDL_CONFIG@,$SDL_CONFIG,;t t s,@SDL_CFLAGS@,$SDL_CFLAGS,;t t s,@SDL_LIBS@,$SDL_LIBS,;t t @@ -7314,6 +9046,9 @@ s,@TARGET@,$TARGET,;t t s,@top_srcdir@,$top_srcdir,;t t s,@HPUX_REV@,$HPUX_REV,;t t s,@KBD_LANG@,$KBD_LANG,;t t +s,@GUIOBJS@,$GUIOBJS,;t t +s,@GUISRCS@,$GUISRCS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF @@ -7372,7 +9107,8 @@ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ @@ -7383,30 +9119,37 @@ echo X"$ac_file" | /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` - { case "$ac_dir" in - [\\/]* | ?:[\\/]* ) as_incr_dir=;; - *) as_incr_dir=.;; -esac -as_dummy="$ac_dir" -for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do - case $as_mkdir_dir in - # Skip DOS drivespec - ?:) as_incr_dir=$as_mkdir_dir ;; - *) - as_incr_dir=$as_incr_dir/$as_mkdir_dir - test -d "$as_incr_dir" || - mkdir "$as_incr_dir" || - { { echo "$as_me:7399: error: cannot create \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; } - ;; - esac -done; } + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } - if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\./,,'` + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi @@ -7426,17 +9169,34 @@ case $srcdir in ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac if test x"$ac_file" != x-; then - { echo "$as_me:7431: creating $ac_file" >&5 + { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: - # /* config.h. Generated automatically by config.status. */ - configure_input="Generated automatically from `echo $ac_file_in | - sed 's,.*/,,'` by configure." + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. @@ -7446,7 +9206,7 @@ echo "$as_me: creating $ac_file" >&6;} -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:7449: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; @@ -7459,7 +9219,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;} echo $srcdir/$f else # /dev/null tree - { { echo "$as_me:7462: error: cannot find input file: $f" >&5 + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; @@ -7475,7 +9235,14 @@ cat >>$CONFIG_STATUS <<\_ACEOF /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then @@ -7519,7 +9286,7 @@ for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue * ) ac_file_in=$ac_file.in ;; esac - test x"$ac_file" != x- && { echo "$as_me:7522: creating $ac_file" >&5 + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the @@ -7530,7 +9297,7 @@ echo "$as_me: creating $ac_file" >&6;} -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:7533: error: cannot find input file: $f" >&5 + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; @@ -7543,7 +9310,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;} echo $srcdir/$f else # /dev/null tree - { { echo "$as_me:7546: error: cannot find input file: $f" >&5 + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; @@ -7573,7 +9340,7 @@ s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear -s,^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end @@ -7595,7 +9362,7 @@ _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail @@ -7619,7 +9386,7 @@ do mv conftest.tail conftest.defines done rm -f conftest.defines -echo ' fi # egrep' >>$CONFIG_STATUS +echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size @@ -7650,20 +9417,21 @@ rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: - # /* config.h. Generated automatically by config.status. */ + # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then - echo "/* Generated automatically by configure. */" >$tmp/config.h + echo "/* Generated by configure. */" >$tmp/config.h else - echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then - if cmp -s $ac_file $tmp/config.h 2>/dev/null; then - { echo "$as_me:7663: $ac_file is unchanged" >&5 + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else - ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ @@ -7674,25 +9442,30 @@ echo X"$ac_file" | /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` - { case "$ac_dir" in - [\\/]* | ?:[\\/]* ) as_incr_dir=;; - *) as_incr_dir=.;; -esac -as_dummy="$ac_dir" -for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do - case $as_mkdir_dir in - # Skip DOS drivespec - ?:) as_incr_dir=$as_mkdir_dir ;; - *) - as_incr_dir=$as_incr_dir/$as_mkdir_dir - test -d "$as_incr_dir" || - mkdir "$as_incr_dir" || - { { echo "$as_me:7690: error: cannot create \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; } - ;; - esac -done; } + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file @@ -7711,6 +9484,7 @@ _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open @@ -7721,13 +9495,17 @@ ac_clean_files=$ac_clean_files_save # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null - $SHELL $CONFIG_STATUS || ac_cs_success=false + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi + echo echo "Configuration done. Now type \"make\"." diff --git a/Src/configure.ac b/Src/configure.ac new file mode 100644 index 0000000..623ceb3 --- /dev/null +++ b/Src/configure.ac @@ -0,0 +1,125 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(Frodo, 4.2, [Christian.Bauer@uni-mainz.de], Frodo) +AC_CONFIG_SRCDIR(main.cpp) +AC_PREREQ(2.52) +AC_CONFIG_HEADER(sysconfig.h) + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_MAKE_SET +AC_PROG_INSTALL + +dnl -fomit-frame-pointer makes things faster +if [[ x"$GXX" = "xyes" ]]; then + CFLAGS="$CFLAGS -fomit-frame-pointer -fno-exceptions" +fi + +AC_AIX +AC_ISC_POSIX + +dnl Checks for libraries. +AC_CHECK_LIB(vga, vga_setmode, HAVE_SVGA_LIB=yes, HAVE_SVGA_LIB=no) +AM_PATH_SDL(1.2.0, HAVE_SDL=yes, HAVE_SDL=no) + +EMBEDDED_EXTENSION=none +AC_MSG_CHECKING([if Frodo should be compiled with extensions for an embedded device]) +AC_ARG_WITH([embedded-extension], [AS_HELP_STRING([--with-embedded-extension=qtopia|maemo],[Specify which extension for Frodo on an embedded device should be used.])]) +if [[ x"$with_embedded_extension" == "xqtopia" ]]; then + EMBEDDED_EXTENSION=$with_embedded_extension + AC_DEFINE(QTOPIA, 1, [Extension for Qtopia is enabled]) +elif [[ x"$with_embedded_extension" == "xmaemo" ]]; then + EMBEDDED_EXTENSION=$with_embedded_extension + AC_DEFINE(MAEMO, 1, [Extension for Maemo is enabled]) +fi +AC_MSG_RESULT([$EMBEDDED_EXTENSION]) + +if [[ x"$EMBEDDED_EXTENSION" == "xmaemo" ]]; then + PKG_CHECK_MODULES(OSSO, [libosso >= 0.9.19], AC_DEFINE(HAVE_LIBOSSO, [], [Weather libosso is present on the system]), [AC_MSG_NOTICE([libosso not present.])]) +fi + +if [[ x"$EMBEDDED_EXTENSION" == "xnone" ]]; then + HAVE_GLADE=no + PKG_CHECK_MODULES(GLADE, libglade-2.0 libgnomeui-2.0 >= 1.110.0, HAVE_GLADE=yes) + if [[ $HAVE_GLADE = yes ]]; then + AC_DEFINE(HAVE_GLADE, 1, [Glade support is enabled]) + fi +else + GUIOBJS="sdlgui.o file.o dlgFileSelect.o dlgMain.o dlgDrives.o dlgOptions.o dlgVideoSound.o dlgAdvanced.o dlgInput.o" + GUISRCS="sdlgui.cpp file.cpp dlgFileSelect.cpp dlgMain.cpp dlgDrives.cpp dlgOptions.cpp dlgVidoSound.cpp dlgAdvanced.cpp dlgInput.cpp" +fi + +AC_PATH_XTRA + +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS(unistd.h fcntl.h sys/time.h sys/types.h utime.h string.h strings.h values.h ncurses.h) +AC_CHECK_HEADERS(sys/vfs.h sys/mount.h sys/select.h sys/param.h sys/statfs.h sys/statvfs.h sys/stat.h) + +dnl Checks for types. +AC_CHECK_SIZEOF(char) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(long long) +AC_CHECK_SIZEOF(void *) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_STRUCT_ST_BLOCKS +AC_HEADER_TIME +AC_STRUCT_TM + +dnl Checks for library functions. +AC_PROG_GCC_TRADITIONAL +AC_FUNC_MEMCMP +AC_TYPE_SIGNAL +AC_FUNC_UTIME_NULL +AC_CHECK_FUNCS(gettimeofday sigaction mkdir rmdir select strerror strstr statfs usleep) + +KBD_LANG=0 +AC_ARG_ENABLE(kbd-lang-de,[ --enable-kbd-lang-de Use german keyboard layout],[KBD_LANG=1],[]) +AC_ARG_ENABLE(kbd-lang-us,[ --enable-kbd-lang-us Use american keyboard layout],[KBD_LANG=0],[]) + +AC_MSG_CHECKING(which target to use) +if [[ x"$no_x" = "xyes" ]]; then + if [[ x"$HAVE_SVGA_LIB" = "xyes" ]]; then + AC_MSG_RESULT([SVGAlib]) + TARGET=svgalib + CFLAGS="$CFLAGS -D__svgalib__" + LIBS="$LIBS -lvga" + else + AC_MSG_RESULT([Ummm...]) + AC_MSG_ERROR([Neither X nor SVGAlib found, don't know what target to use.]) + fi +elif [[ x"$HAVE_SDL" = "xyes" ]]; then + AC_MSG_RESULT([SDL]) + TARGET=sdl + CFLAGS="$CFLAGS $SDL_CFLAGS -DHAVE_SDL" + LIBS="$LIBS $SDL_LIBS" +else + AC_MSG_RESULT([X Window System]) + TARGET=x11 + CFLAGS="$CFLAGS $X_CFLAGS -I$ac_cv_x_include" + LIBS="$LIBS $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS" +fi + +AC_SUBST(TARGET) +AC_SUBST(SET_MAKE) +AC_SUBST(top_srcdir) +AC_SUBST(HPUX_REV) +AC_SUBST(KBD_LANG) +AC_SUBST(GUIOBJS) +AC_SUBST(GUISRCS) + +dnl Generate Makefile. +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT + +dnl Print summary. +echo +echo "Configuration done. Now type \"make\"." diff --git a/Src/configure.in b/Src/configure.in deleted file mode 100644 index cee913c..0000000 --- a/Src/configure.in +++ /dev/null @@ -1,177 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. - -AC_INIT -AC_CONFIG_SRCDIR([VIC.cpp]) -AC_PREREQ(2.52d) - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_CXX -AC_PROG_CPP -AC_PROG_MAKE_SET - -dnl Don't want the default "-O2 -g" that autoconf uses for gcc. -if [[ x"$GXX" = "xyes" ]]; then - CFLAGS="-O2 -g -fomit-frame-pointer -Wall -Wno-unused -Wno-format" -fi - -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown - -HPUX_REV=0 -if [[ x$UNAME_SYSTEM = "xHP-UX" ]]; then - HPUX_REV=`echo $UNAME_RELEASE | sed -e 's/[^.]*.[0B]*//' -e 's/\..*$//'` -fi - -AC_AIX -AC_ISC_POSIX - -dnl Checks for libraries. -HAVE_BEBOX=no -AC_CHECK_LIB(amiga, OpenLibrary, HAVE_AMIGA_LIB=yes, HAVE_AMIGA_LIB=no) -AC_CHECK_LIB(vga, vga_setmode, HAVE_SVGA_LIB=yes, HAVE_SVGA_LIB=no) -AM_PATH_SDL(1.2.0, HAVE_SDL=yes, HAVE_SDL=no) - -AC_PATH_XTRA -AC_CONFIG_HEADER(sysconfig.h) - -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_CHECK_HEADERS(unistd.h fcntl.h sys/time.h sys/types.h utime.h string.h strings.h values.h ncurses.h) -AC_CHECK_HEADERS(sys/vfs.h sys/mount.h sys/select.h sys/param.h sys/statfs.h sys/statvfs.h sys/stat.h linux/joystick.h) - -AC_CHECK_SIZEOF(char) -AC_CHECK_SIZEOF(short) -AC_CHECK_SIZEOF(int) -AC_CHECK_SIZEOF(long) -AC_CHECK_SIZEOF(long long) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_C_INLINE -AC_TYPE_MODE_T -AC_TYPE_OFF_T -AC_TYPE_PID_T -AC_STRUCT_ST_BLOCKS -AC_HEADER_TIME -AC_STRUCT_TM - -dnl Checks for library functions. -AC_PROG_GCC_TRADITIONAL -AC_FUNC_MEMCMP -AC_TYPE_SIGNAL -AC_FUNC_UTIME_NULL -AC_CHECK_FUNCS(gettimeofday sigaction mkdir rmdir select strerror strstr statfs usleep) - -KBD_LANG=0 -AC_ARG_ENABLE(kbd-lang-de,[ --enable-kbd-lang-de Use german keyboard layout],[KBD_LANG=1],[]) -AC_ARG_ENABLE(kbd-lang-us,[ --enable-kbd-lang-us Use american keyboard layout],[KBD_LANG=0],[]) - -AC_MSG_CHECKING(which target to use) -if [[ x"$HAVE_BEBOX" = "xyes" ]]; then - AC_MSG_RESULT([BeBox]) - TARGET=be -elif [[ x"$HAVE_AMIGA_LIB" = "xyes" ]]; then - AC_MSG_RESULT([AmigaOS]) - TARGET=amigaos -elif [[ x"$no_x" = "xyes" ]]; then - if [[ x"$HAVE_SVGA_LIB" = "xyes" ]]; then - AC_MSG_RESULT([SVGAlib]) - TARGET=svgalib - CFLAGS="$CFLAGS -D__svgalib__" - LIBS="$LIBS -lvga" - else - AC_MSG_RESULT([Ummm...]) - AC_MSG_ERROR([Neither X nor SVGAlib found, don't know what target to use.]) - fi -elif [[ x"$HAVE_SDL" = "xyes" ]]; then - AC_MSG_RESULT([SDL]) - TARGET=sdl - CFLAGS="$CFLAGS $SDL_CFLAGS -DHAVE_SDL" - LIBS="$LIBS $SDL_LIBS" -else - AC_MSG_RESULT([X Window System]) - TARGET=x11 - CFLAGS="$CFLAGS $X_CFLAGS -I$ac_cv_x_include" - LIBS="$LIBS $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS" -fi - -dnl Find out some things about the system -dnl - whether we have GCC 2.7 or better. -dnl - what CPU we have (to use some assembly hacks on the x86) - -HAVEGCC27=n -HAVEI386=n - -cat >conftest.cpp << EOF -#include -int main() -{ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) -#if __GNUC__ > 2 || __GNUC_MINOR__ > 6 -printf("GNU\n"); -#endif -#endif -return 0; -} -EOF - -$CXX conftest.cpp -c -o conftest.o -$CXX conftest.o -o conftest -./conftest >conftest.file -if grep GNU conftest.file >/dev/null; then - HAVEGCC27=y - echo "Good news. Found GCC 2.7 or better." -elif [[ "$CC" = "gcc" ]]; then - echo "I suggest you upgrade to at least version 2.7 of GCC" -else - echo "Couldn't find GCC. Frodo may or may not compile and run correctly." -fi - -cat >conftest.c << EOF -#include -int main() -{ -#ifdef __i386__ -printf("386\n"); -#endif -return 0; -} -EOF - -$CC conftest.c -c -o conftest.o -$CC conftest.o -o conftest -./conftest >conftest.file -if grep 386 conftest.file >/dev/null; then - HAVEI386=y - echo "You seem to be using a x86 CPU" -else - echo "No special hacks for your CPU, sorry." -fi - -rm -f conftest* - -if [[ "$HAVEGCC27" = "y" -a "$HAVEI386" = "y" ]]; then -# Don't want strength-reduce on the i386, makes the code slower usually. - CFLAGS="$CFLAGS -fno-strength-reduce -DREGPARAM=\"__attribute__((regparm(3)))\"" -elif [[ "$TARGET" = "amigaos" ]]; then - CFLAGS="$CFLAGS -DREGPARAM=\"__attribute__((regargs(4)))\" " -else - CFLAGS="$CFLAGS -DREGPARAM=" -fi - -CC=$CXX - -AC_SUBST(TARGET) -AC_SUBST(SET_MAKE) -AC_SUBST(top_srcdir) -AC_SUBST(HPUX_REV) -AC_SUBST(KBD_LANG) - -dnl Generate Makefile. -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT - -dnl Print summary. -echo -echo "Configuration done. Now type \"make\"." diff --git a/Src/debian/changelog b/Src/debian/changelog new file mode 100644 index 0000000..2a16ae7 --- /dev/null +++ b/Src/debian/changelog @@ -0,0 +1,17 @@ +frodo (4.2.0-7) unstable; urgency=low + + * Initial Release. + + -- Bernd Lachner Wed, 23 Jan 2008 11:15:58 +0100 + + * Added Maemo Icon. + + -- Bernd Lachner Wed, 23 Jan 2008 14:30:00 +0100 + + * Added Maemo desktop file. + + -- Bernd Lachner Wed, 23 Jan 2008 14:34:00 +0100 + + * Added Maemo icons. + + -- Bernd Lachner Wed, 23 Jan 2008 14:35:00 +0100 diff --git a/Src/debian/compat b/Src/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/Src/debian/compat @@ -0,0 +1 @@ +5 diff --git a/Src/debian/control b/Src/debian/control new file mode 100644 index 0000000..a256fea --- /dev/null +++ b/Src/debian/control @@ -0,0 +1,40 @@ +Source: frodo +Section: user/other +Priority: extra +Maintainer: Bernd Lachner +Build-Depends: debhelper (>= 5), autotools-dev +Standards-Version: 3.7.2 + +Package: frodo +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Frodo C64 Emulator + A C64 Emulator. +XB-Maemo-Icon-26: + iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAADAFBMVEUAACkA + ABAAABgAACEAAAAAADEAADkAAFIAAFoAAGMAAGsAAHsAAIQAAIwAAJQAAJwA + AKUAAK0AALUAAL0AAMYAAM4AAN4AAP8ICL0ICMYICOcICP8QAAAQEPcQEP8Y + GBgYGP8hIf8pAAApKSkpKf8xMf85AAA5Of9CAABCQkJCQv9KAABKSkpKSv9S + UlJSUv9aAABaWlpaWv9jAABjY2NjY/9ra2tra/9zAABzc/97AAB7e/+EAACE + hP+MjIyMjP+UlP+cnP+lAAClpf+tAAC9AAC9vb3GAADGxsbOAADW1tbe3t7n + 5+fvAAD39/f/AAD/EBD/GBj/KSn/MTH/QkL///////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////2 + g8mqAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACvAAAArw + AUKsNJgAAAAHdElNRQfYARcNEzJj9/E1AAABLklEQVQoz7WSX0+DMBTF2cZE + MEPGwrJFpcyBZAjB8WfYKCIzDlIUs8zv/1ks7SAiPvjieWt+t/ec216G+Sed + CQLPc7+R6VRR5rLI9TtE9aIwDF1D7BdlC2hODEPXMk1zwduodcVJYtdQZ+PJ + VNPbaJEkUJdOAZE6n8jyeDRgCTLSB088AWBpY8VO1XfEImJqptAaYrJGWC8J + hPr50Laf3jCyUk/DICfZLhRZ4qo6crKe3Suw2tHUyK4ccSHToDpZsakcA9qC + NqzR9t73b1E9OIlRo/3n4bDf3hxv0fBHr4/3LMteHy/z7yPTwqqh799ds2Xr + oWRJGNCEOCOtLFQrhlEUhc6sF+wQFU1S5s2n9NrPW7HmK38iplzTBQCgg5g8 + WC2J+6bobkdZEPO/LdkXNRI8wk8H6PoAAAAASUVORK5CYII= \ No newline at end of file diff --git a/Src/debian/copyright b/Src/debian/copyright new file mode 100644 index 0000000..4061de6 --- /dev/null +++ b/Src/debian/copyright @@ -0,0 +1,22 @@ +This package was debianized by Bernd Lachner on +Wed, 23 Jan 2008 11:15:58 +0100. + +It was downloaded from + +Upstream Author: + +Copyright: + +License: + + + + +The Debian packaging is (C) 2008, Bernd Lachner and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. + + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. + diff --git a/Src/debian/postinst b/Src/debian/postinst new file mode 100644 index 0000000..67a8e73 --- /dev/null +++ b/Src/debian/postinst @@ -0,0 +1,20 @@ +#!/bin/sh +## ---------------------------------------------------------------------- +## debian/postinst : postinstallation script for frodo +## ---------------------------------------------------------------------- + +## ---------------------------------------------------------------------- +set -e + +chmod +x /usr/bin/mirage +echo "updated permiss" + +gtk-update-icon-cache -f /usr/share/icons/hicolor + + +oldversion="$2" +if [ -z "$oldversion" ]; then + maemo-select-menu-location frodo.desktop +fi + +exit 0 diff --git a/Src/debian/rules b/Src/debian/rules new file mode 100644 index 0000000..5a80a64 --- /dev/null +++ b/Src/debian/rules @@ -0,0 +1,107 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +config.status: configure + dh_testdir + # Add here commands to configure the package. + ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --with-embedded-extension=maemo --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs" + + +build: build-stamp + +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/frodo.sgml > frodo.1 + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean +ifneq "$(wildcard /usr/share/misc/config.sub)" "" + cp -f /usr/share/misc/config.sub config.sub +endif +ifneq "$(wildcard /usr/share/misc/config.guess)" "" + cp -f /usr/share/misc/config.guess config.guess +endif + + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/frodo. + $(MAKE) prefix=$(CURDIR)/debian/frodo/usr install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/Src/dlgAdvanced.cpp b/Src/dlgAdvanced.cpp new file mode 100644 index 0000000..ed3ae0c --- /dev/null +++ b/Src/dlgAdvanced.cpp @@ -0,0 +1,107 @@ +/* + * dlgAdvanced.cpp - SDL GUI dialog for C64 advanced options + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "sysdeps.h" +#include "sdlgui.h" + +#include "Prefs.h" + +enum ADVANCEDDLG { + box_main, + box_timing, + text_timing, + text_line_cpu, + LINE_CPU, + LINE_UP_CPU, + LINE_DOWN_CPU, + text_bad_line_cpu, + BAD_LINE_CPU, + BAD_LINE_UP_CPU, + BAD_LINE_DOWN_CPU, + text_line_cia, + LINE_CIA, + LINE_UP_CIA, + LINE_DOWN_CIA, + text_line_1541, + LINE_1541, + LINE_UP_1541, + LINE_DOWN_1541, + box_advancedoptions, + text_advancedoptions, + CLEAR_CIA_ICR, + OK, + CANCEL +}; + +static char Cycles[4][4]; + +/* The keyboard dialog: */ +/* Spalte, Zeile, Länge, Höhe*/ +static SGOBJ advanceddlg[] = +{ + { SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, + { SGBOX, 0, 0, 1,2, 33,9, NULL }, + { SGTEXT, 0, 0, 2, 1, 16, 1, " Timing Control"}, + + { SGTEXT, 0, 0, 2, 3, 16, 1, "Cycles / Line (CPU):"}, + { SGEDITFIELD, 0, 0, 26, 3, sizeof(Cycles[0])-1, 1, Cycles[0]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 3, 1, 1, "\x01"}, + /* Arrow up */ + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 32, 3, 1, 1, "\x02"}, + /* Arrow down */ + + { SGTEXT, 0, 0, 2, 5, 16, 1, "Cycles / bad line (CPU):"}, + { SGEDITFIELD, 0, 0, 26, 5, sizeof(Cycles[1])-1, 1, Cycles[1]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 5, 1, 1, "\x01"}, + /* Arrow up */ + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 32, 5, 1, 1, "\x02"}, + /* Arrow down */ + + { SGTEXT, 0, 0, 2, 7, 16, 1, "Cycles / Line (CIA):"}, + { SGEDITFIELD, 0, 0, 26, 7, sizeof(Cycles[2])-1, 1, Cycles[2]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 7, 1, 1, "\x01"}, + /* Arrow up */ + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 32, 7, 1, 1, "\x02"}, + /* Arrow down */ + + { SGTEXT, 0, 0, 2, 9, 16, 1, "Cycles / Line (1541):"}, + { SGEDITFIELD, 0, 0, 26, 9, sizeof(Cycles[3])-1, 1, Cycles[3]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 9, 1, 1, "\x01"}, + /* Arrow up */ + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 32, 9, 1, 1, "\x02"}, + /* Arrow down */ + + { SGBOX, 0, 0, 1,13, 33,3, NULL }, + { SGTEXT, 0, 0, 2, 12, 22, 1, " Advanced Options"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 14, 30, 1, "Clear CIA ICR on Write Access"}, + + { SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 1, 18, 6, 1, "OK"}, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 9, 18, 6, 1, "Cancel"}, + + { -1, 0, 0, 0,0, 0,0, NULL } +}; + +void Dialog_Advanced(Prefs &prefs) +{ + switch (SDLGui_DoDialog(advanceddlg)) + { + } +} + diff --git a/Src/dlgDrives.cpp b/Src/dlgDrives.cpp new file mode 100644 index 0000000..3366698 --- /dev/null +++ b/Src/dlgDrives.cpp @@ -0,0 +1,138 @@ +/* + * dlgDrives.cpp - SDL GUI dialog for C64 drive settings + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "sysdeps.h" +#include "sdlgui.h" +#include "file.h" + +#include "Prefs.h" + +#include "dlgFileSelect.h" + + +enum DRIVESDLG { + box_main, + box_drives, + text_drives, + text_drive8, + PATH8TXT, + PATH8, + text_drive9, + PATH9TXT, + PATH9, + text_drive10, + PATH10TXT, + PATH10, + text_drive11, + PATH11TXT, + PATH11, + box_options, + text_options, + ENABLE_FULL_1541, + MAP_FILE_NAMES, + OK, + CANCEL +}; + +static char DrivePath[4][18]; + +/* The keyboard dialog: */ +/* Spalte, Zeile, Länge, Höhe*/ +static SGOBJ drivesdlg[] = +{ + { SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, + { SGBOX, 0, 0, 1,2, 33,9, NULL }, + { SGTEXT, 0, 0, 2, 1, 13, 1, " Drive Paths"}, + + { SGTEXT, 0, 0, 2, 3, 8, 1, "Drive 8:"}, + { SGEDITFIELD, 0, 0, 12, 3, sizeof(DrivePath[0])-1, 1, DrivePath[0]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 3, 4, 1, "Path"}, + + { SGTEXT, 0, 0, 2, 5, 16, 1, "Drive 9:"}, + { SGEDITFIELD, 0, 0, 12, 5, sizeof(DrivePath[1])-1, 1, DrivePath[1]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 5, 4, 1, "Path"}, + + { SGTEXT, 0, 0, 2, 7, 16, 1, "Drive 10:"}, + { SGEDITFIELD, 0, 0, 12, 7, sizeof(DrivePath[2])-1, 1, DrivePath[2]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 7, 4, 1, "Path"}, + + { SGTEXT, 0, 0, 2, 9, 16, 1, "Drive 11:"}, + { SGEDITFIELD, 0, 0, 12, 9, sizeof(DrivePath[3])-1, 1, DrivePath[3]}, + { SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 9, 4, 1, "Path"}, + + { SGBOX, 0, 0, 1,13, 33,3, NULL }, + { SGTEXT, 0, 0, 2, 12, 8, 1, " Options"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 14, 30, 1, "Enable Full 1541 Emulation"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 15, 30, 1, "Map '/' to '\\` in File Names"}, + + {SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 1, 18, 6, 1, "OK"}, + {SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 9, 18, 6, 1, "Cancel"}, + + { -1, 0, 0, 0,0, 0,0, NULL } +}; + +void Dialog_Drives(Prefs &prefs) +{ + // Set values from prefs + // TODO Check length + char path[4][MAX_FILENAME_LENGTH]; + for (int i = 0; i < 4; i++) + { + int widget = PATH8 + i*3; + char shrinkedpath[MAX_FILENAME_LENGTH]; + File_ShrinkName(shrinkedpath, prefs.DrivePath[i], drivesdlg[widget-1].w); + strcpy(drivesdlg[widget-1].txt, shrinkedpath); + strcpy(path[i], prefs.DrivePath[i]); + } + drivesdlg[ENABLE_FULL_1541].state |= prefs.Emul1541Proc == true ? SG_SELECTED : 0; + drivesdlg[MAP_FILE_NAMES].state |= prefs.MapSlash == true ? SG_SELECTED : 0; + while (1) + { + int widget = SDLGui_DoDialog(drivesdlg); + switch (widget) + { + case PATH8: + case PATH9: + case PATH10: + case PATH11: + { + if (SDLGui_FileSelect(path[(widget-PATH8)/3], false)) + { + char shrinkedpath[MAX_FILENAME_LENGTH]; + File_ShrinkName(shrinkedpath, path[(widget-PATH8)/3], drivesdlg[widget-1].w); + strcpy(drivesdlg[widget-1].txt, shrinkedpath); + } + } + break; + case OK: + for (int i = 0; i < 4; i++) + { + strcpy(prefs.DrivePath[i], path[i]); + fprintf (stderr, "Path(%s)\n", prefs.DrivePath[i]); + } + prefs.Emul1541Proc = drivesdlg[ENABLE_FULL_1541].state &= SG_SELECTED ? true : false; + prefs.MapSlash = drivesdlg[MAP_FILE_NAMES].state &= SG_SELECTED ? true : false; + return; + case CANCEL: + return; + } + } +} + diff --git a/Src/dlgFileSelect.cpp b/Src/dlgFileSelect.cpp new file mode 100644 index 0000000..a336508 --- /dev/null +++ b/Src/dlgFileSelect.cpp @@ -0,0 +1,414 @@ +/* + * dlgFileselect.cpp - dialog for selecting files (fileselector box) + * + * This file is taken from the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * Originally taken from the hatari project, thanks Thothy! + * + * Copyright (c) 2003-2005 ARAnyM dev team (see AUTHORS) + * + * Frodo 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. + * + * Frodo 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 Frodo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include "dirent.h" + +#include + +#include "sdlgui.h" +#include "file.h" + +#define SGFSDLG_FILENAME 5 +#define SGFSDLG_UPDIR 6 +#define SGFSDLG_ROOTDIR 7 +#define SGFSDLG_FIRSTENTRY 10 +#define SGFSDLG_LASTENTRY 24 +#define SGFSDLG_UP 25 +#define SGFSDLG_DOWN 26 +#define SGFSDLG_OKAY 27 +#define SGFSDLG_CANCEL 28 + +#define ENTRY_COUNT (SGFSDLG_LASTENTRY - SGFSDLG_FIRSTENTRY + 1) +#define ENTRY_LENGTH 30 + + +static char dlgpath[39], dlgfname[33]; /* File and path name in the dialog */ +static char dlgfilenames[ENTRY_COUNT][ENTRY_LENGTH + 1]; + +/* The dialog data: */ +static SGOBJ fsdlg[] = { + {SGBOX, SG_BACKGROUND, 0, 0, 0, 35, 25, NULL}, + {SGTEXT, 0, 0, 10, 1, 13, 1, "Choose a file"}, + {SGTEXT, 0, 0, 1, 2, 7, 1, "Folder:"}, + {SGTEXT, 0, 0, 1, 3, 33, 1, dlgpath}, + {SGTEXT, 0, 0, 1, 4, 6, 1, "File:"}, + {SGTEXT, 0, 0, 7, 4, 26, 1, dlgfname}, + {SGBUTTON, SG_SELECTABLE | SG_EXIT, 0, 26, 1, 4, 1, ".."}, + {SGBUTTON, SG_SELECTABLE | SG_EXIT, 0, 31, 1, 3, 1, "/"}, + {SGBOX, 0, 0, 1, 6, 33, 15, NULL}, + {SGBOX, 0, 0, 33, 6, 1, 15, NULL}, + {SGTEXT, 0, 0, 2, 6, ENTRY_LENGTH, 1, dlgfilenames[0]}, + {SGTEXT, 0, 0, 2, 7, ENTRY_LENGTH, 1, dlgfilenames[1]}, + {SGTEXT, 0, 0, 2, 8, ENTRY_LENGTH, 1, dlgfilenames[2]}, + {SGTEXT, 0, 0, 2, 9, ENTRY_LENGTH, 1, dlgfilenames[3]}, + {SGTEXT, 0, 0, 2, 10, ENTRY_LENGTH, 1, dlgfilenames[4]}, + {SGTEXT, 0, 0, 2, 11, ENTRY_LENGTH, 1, dlgfilenames[5]}, + {SGTEXT, 0, 0, 2, 12, ENTRY_LENGTH, 1, dlgfilenames[6]}, + {SGTEXT, 0, 0, 2, 13, ENTRY_LENGTH, 1, dlgfilenames[7]}, + {SGTEXT, 0, 0, 2, 14, ENTRY_LENGTH, 1, dlgfilenames[8]}, + {SGTEXT, 0, 0, 2, 15, ENTRY_LENGTH, 1, dlgfilenames[9]}, + {SGTEXT, 0, 0, 2, 16, ENTRY_LENGTH, 1, dlgfilenames[10]}, + {SGTEXT, 0, 0, 2, 17, ENTRY_LENGTH, 1, dlgfilenames[11]}, + {SGTEXT, 0, 0, 2, 18, ENTRY_LENGTH, 1, dlgfilenames[12]}, + {SGTEXT, 0, 0, 2, 19, ENTRY_LENGTH, 1, dlgfilenames[13]}, + {SGTEXT, 0, 0, 2, 20, ENTRY_LENGTH, 1, dlgfilenames[14]}, + {SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 33, 6, 1, 1, "\x01"}, + /* Arrow up */ + {SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 33, 20, 1, 1, "\x02"}, + /* Arrow down */ + {SGBUTTON, SG_SELECTABLE | SG_EXIT | SG_DEFAULT, 0, 7, 23, 8, 1, + "OK"}, + {SGBUTTON, SG_SELECTABLE | SG_EXIT, 0, 21, 23, 8, 1, "Cancel"}, + {-1, 0, 0, 0, 0, 0, 0, NULL} +}; + +struct listentry { + char *filename; + bool directory; + struct listentry *next; +}; + +/* Create a sorted list from the directory listing of path */ +struct listentry *create_list(char *path) +{ + struct listentry *list = NULL; + struct listentry *newentry; + DIR *dd; + struct dirent *direntry; + char tempstr[MAX_FILENAME_LENGTH]; + struct stat filestat; + + if ((dd = opendir(path)) == NULL) + return NULL; + + while ((direntry = readdir(dd)) != NULL) { + // skip "." name + if (strcmp(direntry->d_name, ".") == 0) + continue; + + /* Allocate enough memory to store a new list entry and + its filemane */ + newentry = + (struct listentry *) malloc(sizeof(struct listentry) + + strlen(direntry->d_name) + 1); + + /* Store filename */ + newentry->filename = (char *) (newentry + 1); + strcpy(newentry->filename, direntry->d_name); + + /* Is this entry a directory ? */ + strcpy(tempstr, path); + strcat(tempstr, newentry->filename); + if (stat(tempstr, &filestat) == 0 && S_ISDIR(filestat.st_mode)) + newentry->directory = true; + else + newentry->directory = false; + + /* Search for right place to insert new entry */ + struct listentry **prev = &list; + struct listentry *next = list; + while (next != NULL) { + /* directory first, then files */ + if ((newentry->directory == true) + && (next->directory == false)) + break; + + /* Sort by name */ + if ((newentry->directory == next->directory) + && (strcmp(newentry->filename, next->filename) < 0)) + break; + + prev = &(next->next); + next = next->next; + } + + /* Insert new entry */ + newentry->next = next; + *prev = newentry; + } + + if (closedir(dd) != 0) + bug("Error on closedir."); + + return list; +} + +/* Free memory allocated for each member of list */ +void free_list(struct listentry *list) +{ + while (list != NULL) { + struct listentry *temp = list; + list = list->next; + free(temp); + } +} + +/*-----------------------------------------------------------------------*/ +/* + Show and process a file selection dialog. + Returns TRUE if user selected "OK", FALSE if "cancel". + bAllowNew: TRUE if the user is allowed to insert new file names. +*/ +int SDLGui_FileSelect(char *path_and_name, bool bAllowNew) +{ + int i; + int ypos = 0; + struct listentry *list = NULL; + /* The actual file and path names */ + char path[MAX_FILENAME_LENGTH], fname[128]; + /* Do we have to reload the directory file list? */ + bool reloaddir = true; + /* Do we have to update the file names in the dialog? */ + bool refreshentries = true; + int retbut; + int oldcursorstate; + /* The actual selection, -1 if none selected */ + int selection = -1; + bool eol = true; + + if (bAllowNew) + fsdlg[SGFSDLG_FILENAME].type = SGEDITFIELD; + else + fsdlg[SGFSDLG_FILENAME].type = SGTEXT; + + /* Prepare the path and filename variables */ + File_splitpath(path_and_name, path, fname, NULL); + if (strlen(path) == 0) { + getcwd(path, sizeof(path)); + File_AddSlashToEndFileName(path); + } + File_ShrinkName(dlgpath, path, 38); + File_ShrinkName(dlgfname, fname, 32); + + /* Save old mouse cursor state and enable cursor anyway */ + screenlock(); + oldcursorstate = SDL_ShowCursor(SDL_QUERY); + if (oldcursorstate == SDL_DISABLE) + SDL_ShowCursor(SDL_ENABLE); + screenunlock(); + + do { + if (reloaddir) { + if (strlen(path) >= MAX_FILENAME_LENGTH) { + fprintf(stderr, + "SDLGui_FileSelect: Path name too long!\n"); + return false; + } + + free_list(list); + + /* Load directory entries: */ + list = create_list(path); + if (list == NULL) { + fprintf(stderr, "SDLGui_FileSelect: Path not found.\n"); + /* reset path and reload entries */ + strcpy(path, "/"); + strcpy(dlgpath, path); + list = create_list(path); + if (list == NULL) + /* we're really lost if even root is + unreadable */ + return false; + } + reloaddir = false; + refreshentries = true; + } + + if (refreshentries) { + struct listentry *temp = list; + for (i = 0; i < ypos; i++) + temp = temp->next; + + /* Copy entries to dialog: */ + for (i = 0; i < ENTRY_COUNT; i++) { + if (temp != NULL) { + char tempstr[MAX_FILENAME_LENGTH]; + /* Prepare entries: */ + strcpy(tempstr, " "); + strcat(tempstr, temp->filename); + File_ShrinkName(dlgfilenames[i], tempstr, + ENTRY_LENGTH); + /* Mark folders: */ + if (temp->directory) + dlgfilenames[i][0] = SGFOLDER; + fsdlg[SGFSDLG_FIRSTENTRY + i].flags = + (SG_SELECTABLE | SG_EXIT | SG_RADIO); + temp = temp->next; + } + else { + /* Clear entry */ + dlgfilenames[i][0] = 0; + fsdlg[SGFSDLG_FIRSTENTRY + i].flags = 0; + } + fsdlg[SGFSDLG_FIRSTENTRY + i].state = 0; + } + + if (temp == NULL) + eol = true; + else + eol = false; + + refreshentries = false; + } + + /* Show dialog: */ + retbut = SDLGui_DoDialog(fsdlg); + + /* Has the user clicked on a file or folder? */ + if ((retbut >= SGFSDLG_FIRSTENTRY) + && (retbut <= SGFSDLG_LASTENTRY)) { + char tempstr[MAX_FILENAME_LENGTH]; + struct stat filestat; + struct listentry *temp = list; + + strcpy(tempstr, path); + for (int i = 0; i < ((retbut - SGFSDLG_FIRSTENTRY) + ypos); + i++) + temp = temp->next; + strcat(tempstr, temp->filename); + if (stat(tempstr, &filestat) == 0 && S_ISDIR(filestat.st_mode)) { + /* Set the new directory */ + strcpy(path, tempstr); + if (strlen(path) >= 3) { + if ((path[strlen(path) - 2] == '/') + && (path[strlen(path) - 1] == '.')) + /* Strip a single dot at the + end of the path name */ + path[strlen(path) - 2] = 0; + if ((path[strlen(path) - 3] == '/') + && (path[strlen(path) - 2] == '.') + && (path[strlen(path) - 1] == '.')) { + /* Handle the ".." folder */ + char *ptr; + if (strlen(path) == 3) + path[1] = 0; + else { + path[strlen(path) - 3] = 0; + ptr = strrchr(path, '/'); + if (ptr) + *(ptr + 1) = 0; + } + } + } + File_AddSlashToEndFileName(path); + reloaddir = true; + /* Copy the path name to the dialog */ + File_ShrinkName(dlgpath, path, 38); + selection = -1; /* Remove old selection */ + // fname[0] = 0; + dlgfname[0] = 0; + ypos = 0; + } + else { + /* Select a file */ + selection = retbut - SGFSDLG_FIRSTENTRY + ypos; + strcpy(fname, temp->filename); + File_ShrinkName(dlgfname, fname, 32); + } + } + else { + /* Has the user clicked on another button? */ + switch (retbut) { + case SGFSDLG_UPDIR: + /* Change path to parent directory */ + if (strlen(path) > 2) { + char *ptr; + File_CleanFileName(path); + ptr = strrchr(path, '/'); + if (ptr) + *(ptr + 1) = 0; + File_AddSlashToEndFileName(path); + reloaddir = true; + /* Copy the path name to the dialog */ + File_ShrinkName(dlgpath, path, 38); + /* Remove old selection */ + selection = -1; + fname[0] = 0; + dlgfname[0] = 0; + ypos = 0; + } + break; + case SGFSDLG_ROOTDIR: + /* Change to root directory */ + strcpy(path, "/"); + reloaddir = true; + strcpy(dlgpath, path); + /* Remove old selection */ + selection = -1; + fname[0] = 0; + dlgfname[0] = 0; + ypos = 0; + break; + case SGFSDLG_UP: + /* Scroll up */ + if (ypos > 0) { + --ypos; + refreshentries = true; + } + SDL_Delay(20); + break; + case SGFSDLG_DOWN: + /* Scroll down */ + if (eol == false) { + ++ypos; + refreshentries = true; + } + SDL_Delay(20); + break; + } /* switch */ + } /* other button code */ + + } + while ((retbut != SGFSDLG_OKAY) && (retbut != SGFSDLG_CANCEL) + && (retbut != -1)); + + screenlock(); + if (oldcursorstate == SDL_DISABLE) + SDL_ShowCursor(SDL_DISABLE); + screenunlock(); + + { + /* if user edited filename, use new one */ + char dlgfname2[33]; + File_ShrinkName(dlgfname2, fname, 32); + if (strcmp(dlgfname, dlgfname2) != 0) + strcpy(fname, dlgfname); + } + + File_makepath(path_and_name, path, fname, NULL); + + free_list(list); + + return (retbut == SGFSDLG_OKAY); +} + +/* +vim:ts=4:sw=4: +*/ diff --git a/Src/dlgFileSelect.h b/Src/dlgFileSelect.h new file mode 100644 index 0000000..96fdfa1 --- /dev/null +++ b/Src/dlgFileSelect.h @@ -0,0 +1,24 @@ +/* + * dlgFileSelect.h - SDL GUI dialog for file selection + * + * (C) 2006 Bernd Lachner + * + * Originally taken from the hatari project, + * + * 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 + */ + + +int SDLGui_FileSelect(char *path_and_name, bool bAllowNew); diff --git a/Src/dlgInput.cpp b/Src/dlgInput.cpp new file mode 100644 index 0000000..17da4cc --- /dev/null +++ b/Src/dlgInput.cpp @@ -0,0 +1,74 @@ +/* + * dlgInput.cpp - SDL GUI dialog for C64 input options + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "sysdeps.h" +#include "sdlgui.h" + +#include "Prefs.h" + +enum INPUTDLG { + box_main, + box_timing, + text_timing, + text_line_cpu, + LINE_CPU, + LINE_UP_CPU, + LINE_DOWN_CPU, + text_bad_line_cpu, + BAD_LINE_CPU, + BAD_LINE_UP_CPU, + BAD_LINE_DOWN_CPU, + text_line_cia, + LINE_CIA, + LINE_UP_CIA, + LINE_DOWN_CIA, + text_line_1541, + LINE_1541, + LINE_UP_1541, + LINE_DOWN_1541, + box_advancedoptions, + text_advancedoptions, + CLEAR_CIA_ICR, + OK, + CANCEL +}; + +/* The keyboard dialog: */ +/* Spalte, Zeile, Länge, Höhe*/ +static SGOBJ inputdlg[] = +{ + { SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, + { SGBOX, 0, 0, 1,2, 33,9, NULL }, + { SGTEXT, 0, 0, 2, 1, 11, 1, " Joysticks"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 3, 30, 1, "Swap Joysticks"}, + + {SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 1, 18, 6, 1, "OK"}, + {SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 9, 18, 6, 1, "Cancel"}, + + { -1, 0, 0, 0,0, 0,0, NULL } +}; + +void Dialog_Input(Prefs &prefs) +{ + switch (SDLGui_DoDialog(inputdlg)) + { + } +} + diff --git a/Src/dlgMain.cpp b/Src/dlgMain.cpp new file mode 100644 index 0000000..e8305a4 --- /dev/null +++ b/Src/dlgMain.cpp @@ -0,0 +1,113 @@ +/* + * dlgMain.cpp - Main SDL GUI dialog + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "dlgMain.h" +#include "sdlgui.h" + +extern void Dialog_Drives(Prefs &prefs); +extern void Dialog_Options(Prefs &prefs); +extern void Dialog_VideoSound(Prefs &prefs); +extern void Dialog_Advanced(Prefs &prefs); +extern void Dialog_Input(Prefs &prefs); + +enum MAINDLG { + box_main, + box_settings, + text_settings, + DRIVES, + VIDEOSOUND, + INPUT, + OPTIONS, + ADVANCED, + APPLY, + CANCEL, + SAVE, + box_quickaccess, + text_quickaccess, + RESET, + QUIT, + ABOUT +}; + +/* The keyboard dialog: */ +/* Spalte, Zeile, Länge, Höhe*/ +static SGOBJ maindlg[] = +{ + { SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, + { SGBOX, 0, 0, 1,2, 33,10, NULL }, + { SGTEXT, 0, 0, 2, 1, 16, 1, " Frodo Settings "}, + + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 2, 3, 14,1, "Drives" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 2, 5, 14,1, "Video/Sound" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 2, 7, 14,1, "Input" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 18,3, 14,1, "Options" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 18,5, 14,1, "Advanced" }, + + { SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 2,10,8,1, "Apply" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 13,10, 8,1, "Cancel" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 24,10, 8,1, "Save" }, + + { SGBOX, 0, 0, 1,15, 33,3, NULL }, + { SGTEXT, 0, 0, 2, 14, 22, 1, " Quick-Access-Buttons "}, + + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 2,16,8,1, "Reset" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 13,16, 8,1, "Quit" }, + { SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 24,16, 8,1, "About" }, + + { -1, 0, 0, 0,0, 0,0, NULL } +}; + +int Dialog_Main(Prefs &prefs) +{ + // apply + while (1) + { + switch (SDLGui_DoDialog(maindlg)) + { + case DRIVES: + Dialog_Drives(prefs); + break; + case OPTIONS: + Dialog_Options(prefs); + break; + case VIDEOSOUND: + Dialog_VideoSound(prefs); + break; + case ADVANCED: + Dialog_Advanced(prefs); + break; + case INPUT: + Dialog_Input(prefs); + break; + case APPLY: + return DO_USEPREFS; + case SAVE: + return DO_SAVEPREFS; + case RESET: + return DO_RESET; + case QUIT: + return DO_QUIT; + case CANCEL: + return DO_NOTHING; + } + } + return DO_NOTHING; +} + diff --git a/Src/dlgMain.h b/Src/dlgMain.h new file mode 100644 index 0000000..6768264 --- /dev/null +++ b/Src/dlgMain.h @@ -0,0 +1,29 @@ +/* + * dlgMain.h - Main SDL GUI dialog + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +const int DO_NOTHING = 1; +const int DO_QUIT = 2; +const int DO_RESET = 3; +const int DO_USEPREFS = 4; +const int DO_SAVEPREFS = 5; + +class Prefs; + +int Dialog_Main(Prefs &prefs); diff --git a/Src/dlgOptions.cpp b/Src/dlgOptions.cpp new file mode 100644 index 0000000..7b654f5 --- /dev/null +++ b/Src/dlgOptions.cpp @@ -0,0 +1,116 @@ +/* + * dlgOptions.cpp - SDL GUI dialog for C64 emulator options + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "sysdeps.h" +#include "sdlgui.h" + +#include "Prefs.h" + +enum OPTIONSDDLG { + box_main, + box_speedcontrol, + text_speedcontrol, + text_draweverynthframe, + DRAW_EVERYNTH_FRAME, + DRAW_EVERYNTH_FRAME_UP, + DRAW_EVERYNTH_FRAME_DOWN, + LIMIT_SPEED_TO100PERCENT, + FAST_RESET, + box_memoryexpansion, + text_memoryexpansion, + text_reu_size, + RADIO_REU_NONE, + RADIO_REU_128K, + RADIO_REU_256K, + RADIO_REU_512K, + OK, + CANCEL +}; + +/* The keyboard dialog: */ +/* Spalte, Zeile, Länge, Höhe*/ +static SGOBJ optionsdlg[] = +{ + { SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, + { SGBOX, 0, 0, 1,2, 33,9, NULL }, + { SGTEXT, 0, 0, 2, 1, 15, 1, " Speed Control"}, + + { SGTEXT, 0, 0, 2, 3, 16, 1, "Draw every n-th frame:"}, + { SGEDITFIELD, 0, 0, 26, 3, 3, 1, " "}, + {SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 30, 3, 1, 1, "\x01"}, + /* Arrow up */ + {SGBUTTON, SG_SELECTABLE | SG_TOUCHEXIT, 0, 32, 3, 1, 1, "\x02"}, + /* Arrow down */ + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 5, 30, 1, "Limit Speed to 100%"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 7, 30, 1, "Fast Reset"}, + + { SGBOX, 0, 0, 1,13, 33,3, NULL }, + { SGTEXT, 0, 0, 2, 12, 18, 1, " Memory Expansion"}, + { SGTEXT, 0, 0, 2, 14, 30, 1, "REU Size:"}, + { SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 2, 15, 4, 1, "None" }, + { SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 10, 15, 20,1, "128K" }, + { SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 18, 15, 20,1, "256K" }, + { SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 26, 15, 20,1, "512K" }, + + {SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 1, 18, 6, 1, "OK"}, + {SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 9, 18, 6, 1, "Cancel"}, + + { -1, 0, 0, 0,0, 0,0, NULL } +}; + +void Dialog_Options(Prefs &prefs) +{ + // Set values from prefs +// TODO optionsdlg[DRAW_EVERYNTH_FRAME].txt = prefs.SkipFrames; + optionsdlg[LIMIT_SPEED_TO100PERCENT].state |= prefs.LimitSpeed == true ? SG_SELECTED : 0; + optionsdlg[FAST_RESET].state |= prefs.FastReset == true ? SG_SELECTED : 0; + switch (prefs.REUSize) + { + case REU_NONE: + optionsdlg[RADIO_REU_NONE].state |= SG_SELECTED; + break; + case REU_128K: + optionsdlg[RADIO_REU_128K].state |= SG_SELECTED; + break; + case REU_256K: + optionsdlg[RADIO_REU_256K].state |= SG_SELECTED; + break; + case REU_512K: + optionsdlg[RADIO_REU_512K].state |= SG_SELECTED; + break; + } + switch (SDLGui_DoDialog(optionsdlg)) + { + case OK: + // Set values to prefs + prefs.LimitSpeed = optionsdlg[LIMIT_SPEED_TO100PERCENT].state &= SG_SELECTED ? true : false; + prefs.FastReset = optionsdlg[FAST_RESET].state &= SG_SELECTED ? true : false; + for (int i = RADIO_REU_NONE; i <= RADIO_REU_512K; i++) + { + if (optionsdlg[i].state &= SG_SELECTED) + { + prefs.REUSize = i - RADIO_REU_NONE; + break; + } + } + break; + } +} + diff --git a/Src/dlgVideoSound.cpp b/Src/dlgVideoSound.cpp new file mode 100644 index 0000000..b8c0154 --- /dev/null +++ b/Src/dlgVideoSound.cpp @@ -0,0 +1,82 @@ +/* + * dlgVideoSound.cpp - SDL GUI dialog for C64 video and sound options + * + * (C) 2006 Bernd Lachner + * + * 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 + */ + +#include "sysdeps.h" +#include "sdlgui.h" + +#include "Prefs.h" + +enum VIDEOSOUNDDDLG { + box_main, + box_timing, + text_timing, + text_line_cpu, + LINE_CPU, + LINE_UP_CPU, + LINE_DOWN_CPU, + text_bad_line_cpu, + BAD_LINE_CPU, + BAD_LINE_UP_CPU, + BAD_LINE_DOWN_CPU, + text_line_cia, + LINE_CIA, + LINE_UP_CIA, + LINE_DOWN_CIA, + text_line_1541, + LINE_1541, + LINE_UP_1541, + LINE_DOWN_1541, + box_advancedoptions, + text_advancedoptions, + CLEAR_CIA_ICR, + OK, + CANCEL +}; + +/* The keyboard dialog: */ +/* Spalte, Zeile, Länge, Höhe*/ +static SGOBJ videosounddlg[] = +{ + { SGBOX, SG_BACKGROUND, 0, 0,0, 35,20, NULL }, + { SGBOX, 0, 0, 1,2, 33, 7, NULL }, + { SGTEXT, 0, 0, 2, 1, 15, 1, " Video Options"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 3, 30, 1, "Display Sprites"}, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 5, 30, 1, "Detect Sprite Collisions"}, + + { SGBOX, 0, 0, 1, 11, 33, 5, NULL }, + { SGTEXT, 0, 0, 2, 10, 15, 1, " Sound Options"}, + { SGTEXT, 0, 0, 2, 12, 10, 1, "Sound Emu:"}, + { SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 13, 12, 12, 1, "Off" }, + { SGCHECKBOX, SG_SELECTABLE|SG_RADIO, 0, 20, 12, 20,1, "Software" }, + { SGCHECKBOX, SG_SELECTABLE, 0, 2, 14, 30, 1, "Enable SID Filters"}, + + {SGBUTTON, SG_SELECTABLE|SG_EXIT|SG_DEFAULT, 0, 1, 18, 6, 1, "OK"}, + {SGBUTTON, SG_SELECTABLE|SG_EXIT, 0, 9, 18, 6, 1, "Cancel"}, + + { -1, 0, 0, 0,0, 0,0, NULL } +}; + +void Dialog_VideoSound(Prefs &prefs) +{ + switch (SDLGui_DoDialog(videosounddlg)) + { + } +} + diff --git a/Src/el_Acorn.i b/Src/el_Acorn.h similarity index 82% rename from Src/el_Acorn.i rename to Src/el_Acorn.h index e7a9653..7c9d834 100644 --- a/Src/el_Acorn.i +++ b/Src/el_Acorn.h @@ -1,6 +1,22 @@ /* - * el_Acorn.i - * somewhat faster (on Acorn) versions of the el_-functions of VIC.cc + * el_Acorn.h - Somewhat faster (on Acorn) versions of the el_-functions + * of VIC.cpp + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ diff --git a/Src/fdebug.h b/Src/fdebug.h new file mode 100644 index 0000000..267efb1 --- /dev/null +++ b/Src/fdebug.h @@ -0,0 +1,33 @@ +/* + * debug.h - Debugging utilities + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +#ifndef DEBUG_H +#define DEBUG_H + +#include +#define bug printf + +#if DEBUG +#define D(x) (x); +#else +#define D(x) ; +#endif + +#endif diff --git a/Src/file.cpp b/Src/file.cpp new file mode 100644 index 0000000..f94c7cb --- /dev/null +++ b/Src/file.cpp @@ -0,0 +1,541 @@ +/* + * file.cpp + * + * This file is taken from the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * It 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. + * + * You should have received a copy of the GNU General Public License + * along with Frodo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "sysdeps.h" +#include "file.h" + +#define DEBUG 0 +#include "fdebug.h" + +# include +# include +# include + +#ifdef OS_solaris + #define DIRHANDLE dirp->d_fd +#elif defined(OS_mingw) + #define DIRHANDLE dirp->dd_handle +#else + #define DIRHANDLE dirp->fd +#endif + +#if defined(__BEOS__) || defined(OS_solaris) || defined(OS_mingw) +/* The scandir() and alphasort() functions aren't available on BeOS, */ +/* so let's declare them here... */ +#ifndef OS_mingw +#include +#endif + +#undef DIRSIZ + +#define DIRSIZ(dp) \ + ((sizeof(struct dirent) - sizeof(dp)->d_name) + \ + (((dp)->d_reclen + 1 + 3) &~ 3)) + + +/*-----------------------------------------------------------------------*/ +/* + Alphabetic order comparison routine for those who want it. +*/ +int alphasort(const void *d1, const void *d2) +{ + return(strcmp((*(struct dirent **)d1)->d_name, (*(struct dirent **)d2)->d_name)); +} + +/*-----------------------------------------------------------------------*/ +/* + Scan a directory for all its entries +*/ +int scandir(const char *dirname, struct dirent ***namelist, int(*select) (const struct dirent *), int (*dcomp) (const void *, const void *)) +{ + register struct dirent *d, *p, **names; + register size_t nitems; + struct stat stb; + unsigned long arraysz; + DIR *dirp; + + if ((dirp = opendir(dirname)) == NULL) + return(-1); + + if (fstat(DIRHANDLE, &stb) < 0) + return(-1); + + /* + * estimate the array size by taking the size of the directory file + * and dividing it by a multiple of the minimum size entry. + */ + arraysz = (stb.st_size / 24); + + names = (struct dirent **)malloc(arraysz * sizeof(struct dirent *)); + if (names == NULL) + return(-1); + + nitems = 0; + + while ((d = readdir(dirp)) != NULL) { + + if (select != NULL && !(*select)(d)) + continue; /* just selected names */ + + /* + * Make a minimum size copy of the data + */ + + p = (struct dirent *)malloc(DIRSIZ(d)); + if (p == NULL) + return(-1); + + p->d_ino = d->d_ino; + p->d_reclen = d->d_reclen; + /*p->d_namlen = d->d_namlen;*/ + bcopy(d->d_name, p->d_name, p->d_reclen + 1); + + /* + * Check to make sure the array has space left and + * realloc the maximum size. + */ + + if (++nitems >= arraysz) { + + if (fstat(DIRHANDLE, &stb) < 0) + return(-1); /* just might have grown */ + + arraysz = stb.st_size / 12; + + names = (struct dirent **)realloc((char *)names, arraysz * sizeof(struct dirent *)); + if (names == NULL) + return(-1); + } + + names[nitems-1] = p; + } + + closedir(dirp); + + if (nitems && dcomp != NULL) + qsort(names, nitems, sizeof(struct dirent *), dcomp); + + *namelist = names; + + return(nitems); +} + + +#endif /* __BEOS__ */ + + + +/*-----------------------------------------------------------------------*/ +/* + Remove any '/'s from end of filenames, but keeps / intact +*/ +void File_CleanFileName(char *pszFileName) +{ + int len; + + len = strlen(pszFileName); + + /* Security length check: */ + if( len>MAX_FILENAME_LENGTH ) + { + pszFileName[MAX_FILENAME_LENGTH-1] = 0; + len = MAX_FILENAME_LENGTH; + } + + /* Remove end slash from filename! But / remains! Doh! */ + if( len>2 && pszFileName[len-1]=='/' ) + pszFileName[len-1] = 0; +} + + +/*-----------------------------------------------------------------------*/ +/* + Add '/' to end of filename +*/ +void File_AddSlashToEndFileName(char *pszFileName) +{ + /* Check dir/filenames */ + if (strlen(pszFileName)!=0) { + if (pszFileName[strlen(pszFileName)-1]!='/') + strcat(pszFileName,"/"); /* Must use end slash */ + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Does filename extension match? If so, return true +*/ +bool File_DoesFileExtensionMatch(char *pszFileName, char *pszExtension) +{ + if ( strlen(pszFileName) < strlen(pszExtension) ) + return(false); + /* Is matching extension? */ + if ( !strcasecmp(&pszFileName[strlen(pszFileName)-strlen(pszExtension)], pszExtension) ) + return(true); + + /* No */ + return(false); +} + + +/*-----------------------------------------------------------------------*/ +/* + Check if filename is from root + + Return true if filename is '/', else give false +*/ +bool File_IsRootFileName(char *pszFileName) +{ + if (pszFileName[0]=='\0') /* If NULL string return! */ + return(false); + + if (pszFileName[0]=='/') + return(true); + + return(false); +} + + +/*-----------------------------------------------------------------------*/ +/* + Return string, to remove 'C:' part of filename +*/ +char *File_RemoveFileNameDrive(char *pszFileName) +{ + if ( (pszFileName[0]!='\0') && (pszFileName[1]==':') ) + return(&pszFileName[2]); + else + return(pszFileName); +} + + +/*-----------------------------------------------------------------------*/ +/* + Check if filename end with a '/' + + Return true if filename ends with '/' +*/ +bool File_DoesFileNameEndWithSlash(char *pszFileName) +{ + if (pszFileName[0]=='\0') /* If NULL string return! */ + return(false); + + /* Does string end in a '/'? */ + if (pszFileName[strlen(pszFileName)-1]=='/') + return(true); + + return(false); +} + + +/*-----------------------------------------------------------------------*/ +/* + Remove any double '/'s from end of filenames. So just the one +*/ +void File_RemoveFileNameTrailingSlashes(char *pszFileName) +{ + int Length; + + /* Do have slash at end of filename? */ + Length = strlen(pszFileName); + if (Length>=3) { + if (pszFileName[Length-1]=='/') { /* Yes, have one previous? */ + if (pszFileName[Length-2]=='/') + pszFileName[Length-1] = '\0'; /* then remove it! */ + } + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Does filename end with a .MSA extension? If so, return true +*/ +bool File_FileNameIsMSA(char *pszFileName) +{ + return(File_DoesFileExtensionMatch(pszFileName,".msa")); +} + + +/*-----------------------------------------------------------------------*/ +/* + Does filename end with a .ST extension? If so, return true +*/ +bool File_FileNameIsST(char *pszFileName) +{ + return(File_DoesFileExtensionMatch(pszFileName,".st")); +} + + +/*-----------------------------------------------------------------------*/ +/* + Read file from PC into memory, allocate memory for it if need to (pass Address as NULL) + Also may pass 'unsigned long' if want to find size of file read (may pass as NULL) +*/ +void *File_Read(const char *pszFileName, void *pAddress, long *pFileSize, char *ppszExts[]) +{ +// TODO DUNUSED(ppszExts); + FILE *DiscFile; + void *pFile=NULL; + long FileSize=0; + + /* Open our file */ + DiscFile = fopen(pszFileName, "rb"); + if (DiscFile!=NULL) { + /* Find size of TOS image - 192k or 256k */ + fseek(DiscFile, 0, SEEK_END); + FileSize = ftell(DiscFile); + fseek(DiscFile, 0, SEEK_SET); + /* Find pointer to where to load, allocate memory if pass NULL */ + if (pAddress) + pFile = pAddress; + else + pFile = malloc(FileSize); + /* Read in... */ + if (pFile) + fread((char *)pFile, 1, FileSize, DiscFile); + + fclose(DiscFile); + } + /* Store size of file we read in (or 0 if failed) */ + if (pFileSize) + *pFileSize = FileSize; + + return(pFile); /* Return to where read in/allocated */ +} + + +/*-----------------------------------------------------------------------*/ +/* + Save file to PC, return false if errors +*/ +bool File_Save(char *pszFileName, void *pAddress,unsigned long Size,bool bQueryOverwrite) +{ + FILE *DiscFile; + bool bRet=false; + + /* Check if need to ask user if to overwrite */ + if (bQueryOverwrite) { + /* If file exists, ask if OK to overwrite */ + if (!File_QueryOverwrite(pszFileName)) + return(false); + } + + /* Create our file */ + DiscFile = fopen(pszFileName, "wb"); + if (DiscFile!=NULL) { + /* Write data, set success flag */ + if ( fwrite(pAddress, 1, Size, DiscFile)==Size ) + bRet = true; + + fclose(DiscFile); + } + + return(bRet); +} + + +/*-----------------------------------------------------------------------*/ +/* + Return size of file, -1 if error +*/ +int File_Length(char *pszFileName) +{ + FILE *DiscFile; + int FileSize; + DiscFile = fopen(pszFileName, "rb"); + if (DiscFile!=NULL) { + fseek(DiscFile, 0, SEEK_END); + FileSize = ftell(DiscFile); + fseek(DiscFile, 0, SEEK_SET); + fclose(DiscFile); + return(FileSize); + } + + return(-1); +} + + +/*-----------------------------------------------------------------------*/ +/* + Return true if file exists +*/ +bool File_Exists(const char *pszFileName) +{ + FILE *DiscFile; + + /* Attempt to open file */ + DiscFile = fopen(pszFileName, "rb"); + if (DiscFile!=NULL) { + fclose(DiscFile); + return(true); + } + return(false); +} + + +/*-----------------------------------------------------------------------*/ +/* + Delete file, return true if OK +*/ +bool File_Delete(char *pszFileName) +{ + /* Delete the file (must be closed first) */ + return( remove(pszFileName) ); +} + + +/*-----------------------------------------------------------------------*/ +/* + Find if file exists, and if so ask user if OK to overwrite +*/ +bool File_QueryOverwrite(char *pszFileName) +{ + + char szString[MAX_FILENAME_LENGTH]; + + /* Try and find if file exists */ + if (File_Exists(pszFileName)) { + /* File does exist, are we OK to overwrite? */ + sprintf(szString,"File '%s' exists, overwrite?",pszFileName); +/* FIXME: */ +// if (MessageBox(hWnd,szString,PROG_NAME,MB_YESNO | MB_DEFBUTTON2 | MB_ICONSTOP)==IDNO) +// return(false); + } + + return(true); +} + + +/*-----------------------------------------------------------------------*/ +/* + Try filename with various extensions and check if file exists - if so return correct name +*/ +bool File_FindPossibleExtFileName(char *pszFileName, char *ppszExts[]) +{ + char szSrcDir[256], szSrcName[128], szSrcExt[32]; + char szTempFileName[MAX_FILENAME_LENGTH]; + int i=0; + + /* Split filename into parts */ + File_splitpath(pszFileName, szSrcDir, szSrcName, szSrcExt); + + /* Scan possible extensions */ + while(ppszExts[i]) { + /* Re-build with new file extension */ + File_makepath(szTempFileName, szSrcDir, szSrcName, ppszExts[i]); + /* Does this file exist? */ + if (File_Exists(szTempFileName)) { + /* Copy name for return */ + strcpy(pszFileName,szTempFileName); + return(true); + } + + /* Next one */ + i++; + } + + /* No, none of the files exist */ + return(false); +} + + +/*-----------------------------------------------------------------------*/ +/* + Split a complete filename into path, filename and extension. + If pExt is NULL, don't split the extension from the file name! +*/ +void File_splitpath(char *pSrcFileName, char *pDir, char *pName, char *pExt) +{ + char *ptr1, *ptr2; + + /* Build pathname: */ + ptr1 = strrchr(pSrcFileName, '/'); + if( ptr1 ) + { + strcpy(pDir, pSrcFileName); + strcpy(pName, ptr1+1); + pDir[ptr1-pSrcFileName+1] = 0; + } + else + { + strcpy(pDir, ""); + strcpy(pName, pSrcFileName); + } + + /* Build the raw filename: */ + if( pExt!=NULL ) + { + ptr2 = strrchr(pName+1, '.'); + if( ptr2 ) + { + pName[ptr2-pName] = 0; + /* Copy the file extension: */ + strcpy(pExt, ptr2+1); + } + else + pExt[0] = 0; + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Build a complete filename from path, filename and extension. + pExt can also be NULL. +*/ +void File_makepath(char *pDestFileName, char *pDir, char *pName, char *pExt) +{ + strcpy(pDestFileName, pDir); + if( strlen(pDestFileName)==0 ) + strcpy(pDestFileName, ""); + if( pDestFileName[strlen(pDestFileName)-1]!='/' ) + strcat(pDestFileName, "/"); + + strcat(pDestFileName, pName); + + if( pExt!=NULL ) + { + if( strlen(pExt)>0 && pExt[0]!='.' ) + strcat(pDestFileName, "."); + strcat(pDestFileName, pExt); + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Shrink a file name to a certain length and insert some dots if we cut + something away (usefull for showing file names in a dialog). +*/ +void File_ShrinkName(char *pDestFileName, char *pSrcFileName, int maxlen) +{ + int srclen = strlen(pSrcFileName); + if( srclen +extern int alphasort(const void *d1, const void *d2); +extern int scandir(const char *dirname, struct dirent ***namelist, int(*select) (const struct dirent *), int (*dcomp) (const void *, const void *)); +#endif /* __BEOS__ */ + +extern void File_CleanFileName(char *pszFileName); +extern void File_AddSlashToEndFileName(char *pszFileName); +extern bool File_DoesFileExtensionMatch(char *pszFileName, char *pszExtension); +extern bool File_IsRootFileName(char *pszFileName); +extern char *File_RemoveFileNameDrive(char *pszFileName); +extern bool File_DoesFileNameEndWithSlash(char *pszFileName); +extern void File_RemoveFileNameTrailingSlashes(char *pszFileName); +extern bool File_FileNameIsMSA(char *pszFileName); +extern bool File_FileNameIsST(char *pszFileName); +extern void *File_Read(char *pszFileName, void *pAddress, long *pFileSize, char *ppszExts[]); +extern bool File_Save(char *pszFileName, void *pAddress,long Size,bool bQueryOverwrite); +extern int File_Length(char *pszFileName); +extern bool File_Exists(const char *pszFileName); +extern bool File_Delete(char *pszFileName); +extern bool File_QueryOverwrite(char *pszFileName); +extern bool File_FindPossibleExtFileName(char *pszFileName,char *ppszExts[]); +extern void File_splitpath(char *pSrcFileName, char *pDir, char *pName, char *Ext); +extern void File_makepath(char *pDestFileName, char *pDir, char *pName, char *pExt); +extern void File_ShrinkName(char *pDestFileName, char *pSrcFileName, int maxlen); + +#endif /* HATARI_FILE_H */ diff --git a/Src/font8.h b/Src/font8.h new file mode 100644 index 0000000..cf499d1 --- /dev/null +++ b/Src/font8.h @@ -0,0 +1,175 @@ +// convert font8.bmp xbm:font8.h +#define font8_width 128 +#define font8_height 128 +static unsigned char font8_bits[] = { + 0x00, 0x18, 0x3C, 0x18, 0x18, 0x3C, 0xFF, 0xE7, 0x80, 0x7E, 0x18, 0x18, + 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x3C, 0x24, 0x38, 0x1C, 0x99, 0xFF, 0xC3, + 0xC0, 0xC3, 0x3C, 0x38, 0x24, 0x24, 0x81, 0x81, 0x00, 0x66, 0x24, 0x6F, + 0xF6, 0xC3, 0x7F, 0x99, 0x60, 0xCB, 0x3C, 0x68, 0x42, 0x5A, 0x81, 0xC1, + 0x00, 0xC3, 0xE7, 0xC1, 0x83, 0xE7, 0x3F, 0x3C, 0x31, 0xCB, 0x3C, 0x08, + 0x81, 0xBD, 0x81, 0xA1, 0x00, 0xE7, 0xC3, 0xC1, 0x83, 0xC3, 0x9F, 0x99, + 0x1B, 0xDB, 0x7E, 0x08, 0x81, 0xBD, 0x81, 0x95, 0x00, 0x24, 0x66, 0x6F, + 0xF6, 0x99, 0xCF, 0xC3, 0x0E, 0xC3, 0x08, 0x0E, 0x42, 0x5A, 0x81, 0x89, + 0x00, 0x24, 0x3C, 0x38, 0x1C, 0x3C, 0xE7, 0xE7, 0x04, 0xC3, 0x1C, 0x0F, + 0x24, 0x24, 0xFF, 0xFF, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x7E, 0x08, 0x06, 0x18, 0x18, 0x00, 0x00, 0x3E, 0x60, 0x3E, 0x3E, + 0x63, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x60, 0x60, 0x60, 0x63, 0x03, 0x03, 0x60, 0x63, 0x63, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x60, 0x60, 0x60, 0x63, 0x03, 0x03, 0x60, + 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, + 0x3E, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x63, 0x60, 0x03, 0x60, 0x60, 0x60, 0x63, 0x60, 0x63, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x60, 0x03, 0x60, 0x60, 0x60, 0x63, 0x60, + 0x63, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x60, 0x3E, 0x3E, + 0x60, 0x3E, 0x3E, 0x60, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x18, 0x00, 0x1C, 0x18, + 0x70, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x18, 0x66, 0x36, + 0x7C, 0x66, 0x36, 0x18, 0x38, 0x1C, 0x66, 0x18, 0x00, 0x00, 0x00, 0x60, + 0x00, 0x18, 0x66, 0x7F, 0x06, 0x36, 0x1C, 0x18, 0x18, 0x18, 0x3C, 0x18, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x00, 0x36, 0x3C, 0x18, 0x0E, 0x00, + 0x18, 0x18, 0xFF, 0x7E, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x18, 0x00, 0x36, + 0x60, 0x0C, 0x7B, 0x00, 0x18, 0x18, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x0C, + 0x00, 0x00, 0x00, 0x7F, 0x3E, 0x66, 0x33, 0x00, 0x38, 0x1C, 0x66, 0x18, + 0x0C, 0x00, 0x18, 0x06, 0x00, 0x18, 0x00, 0x36, 0x18, 0x62, 0x6E, 0x00, + 0x70, 0x0E, 0x00, 0x00, 0x0C, 0x00, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x3C, 0x18, 0x3C, 0x7E, 0x30, 0x7E, 0x3C, 0x7E, 0x3C, 0x3C, 0x00, 0x00, + 0x60, 0x00, 0x06, 0x3C, 0x66, 0x1C, 0x66, 0x30, 0x38, 0x06, 0x06, 0x60, + 0x66, 0x66, 0x18, 0x18, 0x30, 0x00, 0x0C, 0x66, 0x76, 0x18, 0x60, 0x18, + 0x3C, 0x3E, 0x06, 0x30, 0x66, 0x66, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x60, + 0x6E, 0x18, 0x30, 0x30, 0x36, 0x60, 0x3E, 0x18, 0x3C, 0x7C, 0x00, 0x00, + 0x0C, 0x00, 0x30, 0x30, 0x66, 0x18, 0x18, 0x60, 0x7E, 0x60, 0x66, 0x0C, + 0x66, 0x60, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x66, 0x18, 0x0C, 0x66, + 0x30, 0x66, 0x66, 0x0C, 0x66, 0x30, 0x18, 0x18, 0x30, 0x7E, 0x0C, 0x00, + 0x3C, 0x7E, 0x7E, 0x3C, 0x30, 0x3C, 0x3C, 0x0C, 0x3C, 0x1C, 0x00, 0x0C, + 0x60, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x3E, 0x3C, + 0x1E, 0x7E, 0x7E, 0x7C, 0x66, 0x3C, 0x60, 0x66, 0x06, 0x63, 0x66, 0x3C, + 0x66, 0x3C, 0x66, 0x66, 0x36, 0x06, 0x06, 0x06, 0x66, 0x18, 0x60, 0x36, + 0x06, 0x77, 0x6E, 0x66, 0x76, 0x66, 0x66, 0x06, 0x66, 0x06, 0x06, 0x06, + 0x66, 0x18, 0x60, 0x1E, 0x06, 0x7F, 0x7E, 0x66, 0x56, 0x66, 0x3E, 0x06, + 0x66, 0x3E, 0x3E, 0x76, 0x7E, 0x18, 0x60, 0x0E, 0x06, 0x6B, 0x7E, 0x66, + 0x76, 0x7E, 0x66, 0x06, 0x66, 0x06, 0x06, 0x66, 0x66, 0x18, 0x60, 0x1E, + 0x06, 0x63, 0x76, 0x66, 0x06, 0x66, 0x66, 0x66, 0x36, 0x06, 0x06, 0x66, + 0x66, 0x18, 0x66, 0x36, 0x06, 0x63, 0x66, 0x66, 0x7C, 0x66, 0x3E, 0x3C, + 0x1E, 0x7E, 0x06, 0x7C, 0x66, 0x3C, 0x3C, 0x66, 0x7E, 0x63, 0x66, 0x3C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3C, 0x3E, 0x3C, 0x7E, 0x66, 0x66, 0x63, + 0x66, 0x66, 0x7E, 0x78, 0x02, 0x1E, 0x08, 0x00, 0x66, 0x66, 0x66, 0x66, + 0x18, 0x66, 0x66, 0x63, 0x66, 0x66, 0x60, 0x18, 0x06, 0x18, 0x1C, 0x00, + 0x66, 0x66, 0x66, 0x06, 0x18, 0x66, 0x66, 0x63, 0x3C, 0x66, 0x30, 0x18, + 0x0C, 0x18, 0x36, 0x00, 0x3E, 0x66, 0x3E, 0x3C, 0x18, 0x66, 0x66, 0x6B, + 0x18, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x63, 0x00, 0x06, 0x6E, 0x36, 0x60, + 0x18, 0x66, 0x66, 0x7F, 0x3C, 0x18, 0x0C, 0x18, 0x30, 0x18, 0x00, 0x00, + 0x06, 0x36, 0x66, 0x66, 0x18, 0x66, 0x3C, 0x77, 0x66, 0x18, 0x06, 0x18, + 0x60, 0x18, 0x00, 0x00, 0x06, 0x6C, 0x66, 0x3C, 0x18, 0x7C, 0x18, 0x63, + 0x66, 0x18, 0x7E, 0x78, 0x40, 0x1E, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x60, 0x00, 0x38, 0x00, 0x06, 0x18, 0x18, 0x06, + 0x1C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x60, 0x00, 0x0C, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x06, 0x3C, 0x3E, 0x3C, + 0x7C, 0x3C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x66, 0x18, 0x37, 0x3E, 0x3C, + 0x0C, 0x60, 0x66, 0x06, 0x66, 0x66, 0x0C, 0x66, 0x66, 0x18, 0x18, 0x36, + 0x18, 0x7F, 0x66, 0x66, 0x00, 0x7C, 0x66, 0x06, 0x66, 0x7E, 0x0C, 0x66, + 0x66, 0x18, 0x18, 0x1E, 0x18, 0x6B, 0x66, 0x66, 0x00, 0x66, 0x66, 0x06, + 0x66, 0x06, 0x0C, 0x7C, 0x66, 0x18, 0x18, 0x36, 0x18, 0x63, 0x66, 0x66, + 0x00, 0x7C, 0x3E, 0x3C, 0x7C, 0x3C, 0x0C, 0x60, 0x66, 0x3C, 0x18, 0x66, + 0x3C, 0x63, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x0E, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x18, 0x18, 0x06, 0x18, 0x3E, 0x7C, 0x3E, 0x7C, 0x7E, 0x66, 0x66, 0x63, + 0x66, 0x66, 0x7E, 0x18, 0x18, 0x18, 0x4F, 0x18, 0x66, 0x66, 0x66, 0x06, + 0x18, 0x66, 0x66, 0x63, 0x3C, 0x66, 0x30, 0x0C, 0x18, 0x30, 0x79, 0x2C, + 0x66, 0x66, 0x06, 0x3C, 0x18, 0x66, 0x66, 0x6B, 0x18, 0x66, 0x18, 0x18, + 0x18, 0x18, 0x30, 0x2C, 0x66, 0x66, 0x06, 0x60, 0x18, 0x66, 0x3C, 0x3E, + 0x3C, 0x7C, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x46, 0x3E, 0x7C, 0x06, 0x3E, + 0x70, 0x7C, 0x18, 0x36, 0x66, 0x60, 0x7E, 0x70, 0x18, 0x0E, 0x00, 0x7E, + 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/Src/gcaudio.c b/Src/gcaudio.c deleted file mode 100644 index 5cd945e..0000000 --- a/Src/gcaudio.c +++ /dev/null @@ -1,148 +0,0 @@ -/**************************************************************************** - * FCE Ultra 0.98.12 - * Nintendo Wii/Gamecube Port - * - * Tantric September 2008 - * eke-eke October 2008 - * - * gcaudio.c - * - * Audio driver - ****************************************************************************/ - -#include -#include - -#define SAMPLERATE 48000 - -#define MIXBUFSIZE_BYTES 16000 -#define MIXBUFSIZE_SHORT (MIXBUFSIZE_BYTES / 2) -#define MIXBUFSIZE_WORDS (MIXBUFSIZE_BYTES / 4) - -#define SOUNDBUFSIZE 2048 - -static u8 ConfigRequested = 0; -static u8 soundbuffer[2][SOUNDBUFSIZE] ATTRIBUTE_ALIGN(32); -static u8 mixbuffer[MIXBUFSIZE_BYTES]; -static int mixhead = 0; -static int mixtail = 0; -static int whichab = 0; -static int IsPlaying = 0; - -/**************************************************************************** - * MixerCollect - * - * Collects sound samples from mixbuffer and puts them into outbuffer - * Makes sure to align them to 32 bytes for AUDIO_InitDMA - ***************************************************************************/ -static int MixerCollect( u8 *outbuffer, int len ) -{ - u32 *dst = (u32 *)outbuffer; - u32 *src = (u32 *)mixbuffer; - int done = 0; - - // Always clear output buffer - memset(outbuffer, 0, len); - - while ( ( mixtail != mixhead ) && ( done < len ) ) - { - *dst++ = src[mixtail++]; - if (mixtail == MIXBUFSIZE_WORDS) mixtail = 0; - done += 4; - } - - // Realign to 32 bytes for DMA - mixtail -= ((done&0x1f) >> 2); - if (mixtail < 0) - mixtail += MIXBUFSIZE_WORDS; - done &= ~0x1f; - - return done; -} - -/**************************************************************************** - * AudioSwitchBuffers - * - * Manages which buffer is played next - ***************************************************************************/ -static void AudioSwitchBuffers() -{ - if ( !ConfigRequested ) - { - int len = MixerCollect( soundbuffer[whichab], SOUNDBUFSIZE ); - if (len == 0) - return; - - DCFlushRange(soundbuffer[whichab], len); - AUDIO_InitDMA((u32)soundbuffer[whichab], len); - AUDIO_StartDMA(); - whichab ^= 1; - IsPlaying = 1; - } - else IsPlaying = 0; -} - -/**************************************************************************** - * InitialiseAudio - * - * Initializes sound system on first load of emulator - ***************************************************************************/ -void InitialiseAudio() -{ - AUDIO_Init(NULL); // Start audio subsystem - AUDIO_SetDSPSampleRate(AI_SAMPLERATE_48KHZ); - AUDIO_RegisterDMACallback( AudioSwitchBuffers ); - memset(soundbuffer, 0, SOUNDBUFSIZE*2); - memset(mixbuffer, 0, MIXBUFSIZE_BYTES); -} - -/**************************************************************************** - * StopAudio - * - * Pause audio output when returning to menu - ***************************************************************************/ -void StopAudio() -{ - AUDIO_StopDMA(); - IsPlaying = 0; -} - -/**************************************************************************** - * ResetAudio - * - * Reset audio output when loading a new game - ***************************************************************************/ -void ResetAudio() -{ - memset(soundbuffer, 0, SOUNDBUFSIZE*2); - memset(mixbuffer, 0, MIXBUFSIZE_BYTES); - mixhead = mixtail = 0; -} - -/**************************************************************************** - * PlaySound - * - * Puts incoming mono samples into mixbuffer - * Splits mono samples into two channels (stereo) - ****************************************************************************/ -void PlaySound( int16_t *Buffer, int count ) -{ - u32 *dst = (u32 *)mixbuffer; - int i; - - for( i = 0; i < count; i++ ) - { - u16 sample; - - sample = (Buffer[i] & 0xffff); - dst[mixhead++] = sample | ( sample << 16); - if (mixhead == MIXBUFSIZE_WORDS) - mixhead = 0; - } - - // Restart Sound Processing if stopped - if (IsPlaying == 0) - { - AudioSwitchBuffers (); - } -} diff --git a/Src/gcaudio.h b/Src/gcaudio.h deleted file mode 100644 index 93fcf1f..0000000 --- a/Src/gcaudio.h +++ /dev/null @@ -1,27 +0,0 @@ -/**************************************************************************** - * From the FCE Ultra 0.98.12 - * Nintendo Wii/Gamecube Port - * - * Tantric September 2008 - * eke-eke October 2008 - * Simon Kagstrom Jan 2009 - * - * gcaudio.h - * - * Audio driver - ****************************************************************************/ - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -void InitialiseAudio(); -void StopAudio(); -void ResetAudio(); -void PlaySound( int16_t *Buffer, int samples ); - -#if defined(__cplusplus) -}; -#endif diff --git a/Src/glade/Frodo.glade b/Src/glade/Frodo.glade new file mode 100644 index 0000000..fdc0834 --- /dev/null +++ b/Src/glade/Frodo.glade @@ -0,0 +1,1698 @@ + + + + + + + + + True + Frodo + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + + + + + + True + True + + + + True + GTK_SHADOW_NONE + + + + True + + + + True + GNOMEUIINFO_MENU_FILE_TREE + + + + + + + True + _Run + True + + + + + True + gtk-ok + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + GNOMEUIINFO_MENU_EXIT_ITEM + + + + + + + + + + + True + GNOMEUIINFO_MENU_HELP_TREE + + + + + + + True + GNOMEUIINFO_MENU_ABOUT_ITEM + + + + + + + + + + + + BONOBO_DOCK_TOP + 0 + 0 + 0 + BONOBO_DOCK_ITEM_BEH_EXCLUSIVE|BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL|BONOBO_DOCK_ITEM_BEH_LOCKED + + + + + + True + GTK_SHADOW_OUT + + + + 1 + True + GTK_ORIENTATION_HORIZONTAL + GTK_TOOLBAR_BOTH + True + + + + True + New File + gtk-ok + True + + + + + + + True + Open File + gtk-quit + True + + + + + + + + BONOBO_DOCK_TOP + 1 + 0 + 0 + BONOBO_DOCK_ITEM_BEH_EXCLUSIVE + + + + + + True + True + True + True + GTK_POS_TOP + False + False + + + + 6 + True + False + 6 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + True + Enable Full 1541 Emulation + True + GTK_RELIEF_NORMAL + False + False + True + + + + + + + True + 1541 Emulation: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + 4 + True + 4 + 2 + False + 4 + 4 + + + + True + Drive 8: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Drive 9: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + Drive 10: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + Drive 11: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 3 + 4 + fill + + + + + + + True + 10 + False + True + + + + True + True + True + True + 0 + + True + * + False + + + + + 1 + 2 + 0 + 1 + + + + + + + True + 10 + False + True + + + + True + True + True + True + 0 + + True + * + False + + + + + 1 + 2 + 1 + 2 + + + + + + + True + 10 + False + True + + + + True + True + True + True + 0 + + True + * + False + + + + + 1 + 2 + 2 + 3 + + + + + + + True + 10 + False + True + + + + True + True + True + True + 0 + + True + * + False + + + + + 1 + 2 + 3 + 4 + + + + + + + + + True + Drive Paths: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + True + Map '/' to '\' in File Names + True + GTK_RELIEF_NORMAL + False + False + True + + + + + + True + Options: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + False + True + + + + + + True + Drives + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + 6 + True + False + 6 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + False + 0 + + + + True + False + 4 + + + + True + Display Type: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + 0 + + + + + + + True + Window + True + + + + + + True + Full Screen + True + + + + + + + 0 + False + False + + + + + 0 + True + True + + + + + + True + True + Display Sprites + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + True + True + Detect Sprite Collisions + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + + + True + Video Options: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + False + 0 + + + + True + False + 4 + + + + True + Sound Emulation: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + 0 + + + + + + + True + Off + True + + + + + + + True + Software + True + + + + + + + True + Catweasel + True + + + + + + + + 0 + False + False + + + + + 0 + False + True + + + + + + True + True + Enable SID Filters + True + GTK_RELIEF_NORMAL + False + False + True + + + + 0 + False + False + + + + + + + + True + Sound Options: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + False + True + + + + + + True + Video/Sound + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + 6 + True + False + 6 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + False + 0 + + + + 4 + True + 2 + 2 + False + 4 + 4 + + + + True + Joystick Port 1: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Joystick Port 2: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + True + -1 + + + + + + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + -1 + + + + + + + + 1 + 2 + 1 + 2 + fill + + + + + + 0 + True + True + + + + + + True + True + Swap Joysticks + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + + + True + Joysticks: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + False + True + + + + + + True + Input + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + 6 + True + False + 6 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + False + 0 + + + + True + False + 4 + + + + True + Draw Every n-th Frame: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + True + False + 1 1 100 1 10 10 + + + 0 + False + True + + + + + 0 + True + True + + + + + + True + True + Limit Speed to 100% + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + True + True + Fast Reset + True + GTK_RELIEF_NORMAL + False + False + True + + + 0 + False + False + + + + + + + + True + Speed Control: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + False + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + 4 + True + False + 4 + + + + True + REU Size: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + 0 + + + + + + + True + None + True + + + + + + True + 128K + True + + + + + + True + 256K + True + + + + + + True + 512K + True + + + + + + + 0 + False + False + + + + + + + + True + Memory Expansion: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + False + + + + + False + True + + + + + + True + Options + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + 6 + True + False + 6 + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + 4 + True + 4 + 2 + False + 4 + 4 + + + + True + Cycles Per Line (CPU): + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Cycles Per Bad Line (CPU): + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + Cycles Per Line (CIA): + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + Cycles Per Line (1541): + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + 0 + 1 + 3 + 4 + fill + + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + True + False + 1 1 1000 1 10 10 + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + True + False + 1 1 1000 1 10 10 + + + 1 + 2 + 1 + 2 + fill + + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + True + False + 1 1 1000 1 10 10 + + + 1 + 2 + 2 + 3 + fill + + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + True + False + 1 1 1000 1 10 10 + + + 1 + 2 + 3 + 4 + fill + + + + + + + + + True + Timing Control: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + True + Clear CIA ICR on Write Access + True + GTK_RELIEF_NORMAL + False + False + True + + + + + + True + Advanced Options: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + label_item + + + + + 0 + False + True + + + + + False + True + + + + + + True + Advanced + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + + + + + + 0 + True + True + + + + + + True + False + True + + + 0 + True + True + + + + + + False + Copyright © 1994-1997,2002-2004 Christian Bauer et al. + A free, portable Commodore 64 emulator + Main Program and Project Administration: +Christian Bauer + +Initial Unix Port: +Bernd Schmidt +Lutz Vieweg + +Tcl/Tk Interface: +Lutz Vieweg +Gerard Decatrel + +Frodo Logo Design: +Tinic Urou + +Additional Contributions by: +Marc Chabanas +Jake Hamby +Erik Lindberg +Wolfgang Lorenz +Tinic Urou + translator_credits + + + diff --git a/Src/glade/Frodo.gladep b/Src/glade/Frodo.gladep new file mode 100644 index 0000000..d48c33a --- /dev/null +++ b/Src/glade/Frodo.gladep @@ -0,0 +1,9 @@ + + + + + Frodo + Frodo + FALSE + FALSE + diff --git a/Src/install-sh b/Src/install-sh new file mode 100644 index 0000000..11870f1 --- /dev/null +++ b/Src/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + : + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + : + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/Src/maemo/Frodo_26_26.png b/Src/maemo/Frodo_26_26.png new file mode 100644 index 0000000..52019ce Binary files /dev/null and b/Src/maemo/Frodo_26_26.png differ diff --git a/Src/maemo/Frodo_40_40.png b/Src/maemo/Frodo_40_40.png new file mode 100644 index 0000000..0c55355 Binary files /dev/null and b/Src/maemo/Frodo_40_40.png differ diff --git a/Src/maemo/Frodo_64_64.png b/Src/maemo/Frodo_64_64.png new file mode 100644 index 0000000..7a3ccc8 Binary files /dev/null and b/Src/maemo/Frodo_64_64.png differ diff --git a/Src/maemo/frodo.desktop b/Src/maemo/frodo.desktop new file mode 100644 index 0000000..e90f71a --- /dev/null +++ b/Src/maemo/frodo.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=4.3 +Type=Application +Name=Frodo +Exec=/usr/bin/Frodo +X-Osso-Service=de.lachner_net.frodo +Icon=frodo \ No newline at end of file diff --git a/Src/maemo/frodo.service b/Src/maemo/frodo.service new file mode 100644 index 0000000..c8d77f1 --- /dev/null +++ b/Src/maemo/frodo.service @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=de.lachner_net.frodo +Exec=/usr/bin/Frodo diff --git a/Src/main.cpp b/Src/main.cpp index f6dcddc..a91c47f 100644 --- a/Src/main.cpp +++ b/Src/main.cpp @@ -1,7 +1,21 @@ /* * main.cpp - Main program * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "sysdeps.h" @@ -14,120 +28,83 @@ // Global variables +C64 *TheC64 = NULL; // Global C64 object char AppDirPath[1024]; // Path of application directory // ROM file names +#ifndef DATADIR +#define DATADIR +#endif + #ifdef __riscos__ #define BASIC_ROM_FILE "FrodoRsrc:Basic_ROM" #define KERNAL_ROM_FILE "FrodoRsrc:Kernal_ROM" #define CHAR_ROM_FILE "FrodoRsrc:Char_ROM" -#define FLOPPY_ROM_FILE "FrodoRsrc:1541_ROM" -#elif GEKKO -#define WII_FRODO_BASE_PATH "/apps/frodo/" -#define BASIC_ROM_FILE WII_FRODO_BASE_PATH"Basic_ROM" -#define KERNAL_ROM_FILE WII_FRODO_BASE_PATH"Kernal_ROM" -#define CHAR_ROM_FILE WII_FRODO_BASE_PATH"Char_ROM" -#define FLOPPY_ROM_FILE WII_FRODO_BASE_PATH"1541_ROM" +#define DRIVE_ROM_FILE "FrodoRsrc:1541_ROM" #else -#define BASIC_ROM_FILE "Basic ROM" -#define KERNAL_ROM_FILE "Kernal ROM" -#define CHAR_ROM_FILE "Char ROM" -#define FLOPPY_ROM_FILE "1541 ROM" +#define BASIC_ROM_FILE DATADIR "Basic ROM" +#define KERNAL_ROM_FILE DATADIR "Kernal ROM" +#define CHAR_ROM_FILE DATADIR "Char ROM" +#define DRIVE_ROM_FILE DATADIR "1541 ROM" #endif +// Builtin ROMs +#include "Basic_ROM.h" +#include "Kernal_ROM.h" +#include "Char_ROM.h" +#include "1541_ROM.h" + + /* * Load C64 ROM files */ -#ifndef __PSXOS__ -bool Frodo::load_rom_files(void) +void Frodo::load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin) { - FILE *file; - - // Load Basic ROM - if ((file = fopen(BASIC_ROM_FILE, "rb")) != NULL) { - if (fread(TheC64->Basic, 1, 0x2000, file) != 0x2000) { - ShowRequester("Can't read 'Basic ROM'.", "Quit"); - return false; - } - fclose(file); - } else { - ShowRequester("Can't find 'Basic ROM'.", "Quit"); - return false; + FILE *f = fopen(path, "rb"); + if (f) { + size_t actual = fread(where, 1, size, f); + fclose(f); + if (actual == size) + return; } - // Load Kernal ROM - if ((file = fopen(KERNAL_ROM_FILE, "rb")) != NULL) { - if (fread(TheC64->Kernal, 1, 0x2000, file) != 0x2000) { - ShowRequester("Can't read 'Kernal ROM'.", "Quit"); - return false; - } - fclose(file); - } else { - ShowRequester("Can't find 'Kernal ROM'.", "Quit"); - return false; - } - - // Load Char ROM - if ((file = fopen(CHAR_ROM_FILE, "rb")) != NULL) { - if (fread(TheC64->Char, 1, 0x1000, file) != 0x1000) { - ShowRequester("Can't read 'Char ROM'.", "Quit"); - return false; - } - fclose(file); - } else { - ShowRequester("Can't find 'Char ROM'.", "Quit"); - return false; - } - - // Load 1541 ROM - if ((file = fopen(FLOPPY_ROM_FILE, "rb")) != NULL) { - if (fread(TheC64->ROM1541, 1, 0x4000, file) != 0x4000) { - ShowRequester("Can't read '1541 ROM'.", "Quit"); - return false; - } - fclose(file); - } else { - ShowRequester("Can't find '1541 ROM'.", "Quit"); - return false; - } - - return true; + // Use builtin ROM + printf("%s ROM file (%s) not readable, using builtin.\n", which, path); + memcpy(where, builtin, size); +} + +void Frodo::load_rom_files() +{ + load_rom("Basic", BASIC_ROM_FILE, TheC64->Basic, BASIC_ROM_SIZE, builtin_basic_rom); + load_rom("Kernal", KERNAL_ROM_FILE, TheC64->Kernal, KERNAL_ROM_SIZE, builtin_kernal_rom); + load_rom("Char", CHAR_ROM_FILE, TheC64->Char, CHAR_ROM_SIZE, builtin_char_rom); + load_rom("1541", DRIVE_ROM_FILE, TheC64->ROM1541, DRIVE_ROM_SIZE, builtin_drive_rom); } -#endif #ifdef __BEOS__ -#include "main_Be.i" +#include "main_Be.h" #endif #ifdef AMIGA -#include "main_Amiga.i" +#include "main_Amiga.h" #endif #ifdef __unix -#include "main_x.i" +#include "main_x.h" #endif #ifdef __mac__ -#include "main_mac.i" +#include "main_mac.h" #endif #ifdef WIN32 -#include "main_WIN32.i" +#include "main_WIN32.h" #endif -#ifdef __riscos__ -#include "main_Acorn.i" +#ifdef __riscos__ +#include "main_Acorn.h" #endif - -#ifdef __PSXOS__ -#include "main_PSX.i" -#endif - -#ifdef GEKKO -#include "main_wii.i" -#endif - diff --git a/Src/main.h b/Src/main.h index 8cf23c6..1c2b45b 100644 --- a/Src/main.h +++ b/Src/main.h @@ -1,7 +1,21 @@ /* * main.h - Main program * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #ifndef _MAIN_H @@ -57,10 +71,9 @@ public: virtual bool QuitRequested(void); virtual void AboutRequested(void); - C64 *TheC64; - private: - bool load_rom_files(void); + void load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin); + void load_rom_files(); char prefs_path[1024]; // Pathname of current preferences file bool prefs_showing; // true: Preferences editor is on screen @@ -86,10 +99,9 @@ public: void ReadyToRun(void); void RunPrefsEditor(void); - C64 *TheC64; - private: - bool load_rom_files(void); + void load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin); + void load_rom_files(); char prefs_path[256]; // Pathname of current preferences file }; @@ -114,11 +126,10 @@ public: void ArgvReceived(int argc, char **argv); void ReadyToRun(void); static Prefs *reload_prefs(void); - - C64 *TheC64; - + static char* get_prefs_path() { return prefs_path; }; private: - bool load_rom_files(void); + void load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin); + void load_rom_files(); static char prefs_path[256]; // Pathname of current preferences file }; @@ -137,10 +148,10 @@ public: Frodo(); void Run(void); - C64 *TheC64; private: - bool load_rom_files(void); + void load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin); + void load_rom_files(); }; #endif @@ -160,11 +171,11 @@ public: void ReadyToRun(); void RunPrefsEditor(); - C64 *TheC64; char prefs_path[256]; // Pathname of current preferences file private: - bool load_rom_files(); + void load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin); + void load_rom_files(); }; // Global variables @@ -176,29 +187,6 @@ extern HWND hwnd; // Command line options. extern BOOL full_screen; -#if defined(DEBUG) - -inline void Debug(const char *format, ...) -{ - va_list args; - va_start(args, format); - char tmp[256]; - vsprintf(tmp, format, args); - va_end(args); - OutputDebugString(tmp); -} - -#else - -inline void Debug(const char *format, ...) -{ -} - -#endif - -#define DebugResult(message, val) \ - Debug("%s: 0x%x (%d)\n", message, val, HRESULT_CODE(val)) - #endif @@ -210,63 +198,27 @@ inline void Debug(const char *format, ...) class Frodo { - public: - Frodo(void); - ~Frodo(void); - void ReadyToRun(void); +public: + Frodo(); + ~Frodo(); + void ReadyToRun(void); - C64 *TheC64; - - private: - bool load_rom_files(void); +private: + void load_rom(const char *which, const char *path, uint8 *where, size_t size, const uint8 *builtin); + void load_rom_files(); }; #endif +// Global C64 object +extern C64 *TheC64; + /* - * PSX specific stuff + * Functions */ -#ifdef __PSXOS__ - -class Frodo { -public: - Frodo(); - void ReadyToRun(void); - - C64 *TheC64; - -private: - bool load_rom_files(void); - - char prefs_path[256]; // Pathname of current preferences file -}; - -// Global variables -extern Frodo *be_app; // Pointer to Frodo object - -#endif - -#ifdef GEKKO - -class Prefs; - -class Frodo { -public: - Frodo(); - void ArgvReceived(int argc, char **argv); - void ReadyToRun(void); - static Prefs *reload_prefs(void); - - C64 *TheC64; - -private: - bool load_rom_files(void); - - static char prefs_path[256]; // Pathname of current preferences file -}; - -#endif +// Determine whether path name refers to a directory +extern bool IsDirectory(const char *path); #endif diff --git a/Src/main_Acorn.i b/Src/main_Acorn.h similarity index 93% rename from Src/main_Acorn.i rename to Src/main_Acorn.h index baaf0a1..0e143c5 100644 --- a/Src/main_Acorn.i +++ b/Src/main_Acorn.h @@ -1,20 +1,27 @@ /* - * main_Acorn.i + * main_Acorn.h - Main program, RISC OS specific stuff * - * RISC OS specific stuff - * Frodo (C) 1994-1997,2002 Christian Bauer - * Acorn port by Andreas Dehmel, 1997 + * Frodo (C) 1994-1997,2002-2005 Christian Bauer * + * 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 */ - #include "ROlib.h" #include "AcornGUI.h" - - - // Shared, system-specific data // The application Frodo *the_app; @@ -511,10 +518,8 @@ void Frodo::ReadyToRun(void) { ThePrefs.Load(DEFAULT_PREFS); TheC64 = new C64; - if (load_rom_files()) - { - TheC64->Run(); - } + load_rom_files(); + TheC64->Run(); delete TheC64; TheC64 = NULL; } diff --git a/Src/main_Amiga.i b/Src/main_Amiga.h similarity index 76% rename from Src/main_Amiga.i rename to Src/main_Amiga.h index 41321c2..d4fa473 100644 --- a/Src/main_Amiga.i +++ b/Src/main_Amiga.h @@ -1,7 +1,21 @@ /* - * main_Amiga.i - Main program, AmigaOS specific stuff + * main_Amiga.h - Main program, AmigaOS specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -141,8 +155,8 @@ void Frodo::ReadyToRun(void) // Create and start C64 TheC64 = new C64; - if (load_rom_files()) - TheC64->Run(); + load_rom_files(); + TheC64->Run(); delete TheC64; } } diff --git a/Src/main_Be.i b/Src/main_Be.h similarity index 86% rename from Src/main_Be.i rename to Src/main_Be.h index 435534f..753499a 100644 --- a/Src/main_Be.i +++ b/Src/main_Be.h @@ -1,7 +1,21 @@ /* - * main_Be.i - Main program, BeOS specific stuff + * main_Be.h - Main program, BeOS specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -144,10 +158,7 @@ void Frodo::MessageReceived(BMessage *msg) TheC64 = new C64; // Load ROMs - if (!load_rom_files()) { - PostMessage(B_QUIT_REQUESTED); - return; - } + load_rom_files(); // Run the 6510 TheC64->Run(); @@ -164,9 +175,9 @@ void Frodo::MessageReceived(BMessage *msg) } break; - case MSG_PREFS_DONE: // Preferences editor closed + case MSG_PREFS_DONE: { // Preferences editor closed Prefs *prefs; - msg->FindPointer("prefs", &prefs); + msg->FindPointer("prefs", (void **)&prefs); if (!msg->FindBool("canceled")) { TheC64->NewPrefs(prefs); ThePrefs = *prefs; @@ -177,6 +188,7 @@ void Frodo::MessageReceived(BMessage *msg) TheC64->TheDisplay->Resume(); TheC64->Resume(); break; + } case MSG_RESET: // Reset C64 if (TheC64 != NULL) @@ -345,9 +357,9 @@ public: MovePenTo(204, 40); DrawString("by Christian Bauer"); MovePenTo(204, 52); - DrawString(""); + DrawString(""); MovePenTo(204, 75); - DrawString(B_UTF8_COPYRIGHT " Copyright 1994-1997"); + DrawString(B_UTF8_COPYRIGHT " Copyright 1994-1997,2002-2005"); MovePenTo(204, 87); DrawString("Freely distributable."); } @@ -376,3 +388,14 @@ void Frodo::AboutRequested(void) { new AboutWindow(); } + + +/* + * Determine whether path name refers to a directory + */ + +bool IsDirectory(const char *path) +{ + struct stat st; + return stat(path.c_str(), &st) == 0 && S_ISDIR(st.st_mode); +} diff --git a/Src/main_WIN32.i b/Src/main_WIN32.h similarity index 67% rename from Src/main_WIN32.i rename to Src/main_WIN32.h index d4a1ee9..3dea9f2 100644 --- a/Src/main_WIN32.i +++ b/Src/main_WIN32.h @@ -1,8 +1,21 @@ /* - * main_WIN32.i - Main program, WIN32 specific stuff + * main_WIN32.h - Main program, WIN32 specific stuff * - * Frodo (C) 1994-1997,2002 Christian Bauer - * WIN32 code by J. Richard Sladkey + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include @@ -93,8 +106,8 @@ void Frodo::ReadyToRun(void) // Create and start C64 TheC64 = new C64; - if (load_rom_files()) - TheC64->Run(); + load_rom_files(); + TheC64->Run(); } diff --git a/Src/main_wii.i b/Src/main_wii.i deleted file mode 100644 index e5a5689..0000000 --- a/Src/main_wii.i +++ /dev/null @@ -1,104 +0,0 @@ -/* - * main_wii.i - Main program, Wii specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - */ - -#include "Version.h" - -#include -#include -#include - -extern int init_graphics(void); - -/* - * Create application object and start it - */ - -extern "C" int main(int argc, char **argv) -{ - Frodo *the_app; - - timeval tv; - gettimeofday(&tv, NULL); - srand(tv.tv_usec); - - printf("%s by Christian Bauer\n", VERSION_STRING); - if (!init_graphics()) - { - fprintf(stderr, "Could not initialize graphics\n"); - return 0; - } - fflush(stdout); - fatInitDefault(); - - // Init SDL - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - fprintf(stderr, "Couldn't initialize SDL (%s)\n", SDL_GetError()); - return 0; - } - if (TTF_Init() < 0) - { - fprintf(stderr, "Unable to init TTF: %s\n", TTF_GetError() ); - return 0; - } - - if (WPAD_Init() != WPAD_ERR_NONE) - { - fprintf(stderr, "Failed initializing controllers\n"); - return 0; - } - - the_app = new Frodo(); - the_app->ArgvReceived(argc, argv); - the_app->ReadyToRun(); - delete the_app; - - return 0; -} - - -/* - * Constructor: Initialize member variables - */ - -Frodo::Frodo() -{ - TheC64 = NULL; -} - - -/* - * Process command line arguments - */ - -void Frodo::ArgvReceived(int argc, char **argv) -{ -} - - -/* - * Arguments processed, run emulation - */ - -void Frodo::ReadyToRun(void) -{ - getcwd(AppDirPath, 256); - - ThePrefs.Load((char*)PREFS_PATH); - - // Create and start C64 - TheC64 = new C64; - if (load_rom_files()) - TheC64->Run(); - delete TheC64; -} - - -Prefs *Frodo::reload_prefs(void) -{ - static Prefs newprefs; - newprefs.Load((char*)PREFS_PATH); - return &newprefs; -} diff --git a/Src/main_x.h b/Src/main_x.h new file mode 100644 index 0000000..7411d5d --- /dev/null +++ b/Src/main_x.h @@ -0,0 +1,162 @@ +/* + * main_x.h - Main program, Unix specific stuff + * + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 + */ + +#include "Version.h" +#include +#include +#include +#ifdef HAVE_GLADE +#include +#endif + +// Qtopia Windowing System +#ifdef QTOPIA +extern "C" int main(int argc, char *argv[]); +#include +#endif +#include +extern int init_graphics(void); + + +// Global variables +char Frodo::prefs_path[256] = ""; + + +/* + * Create application object and start it + */ +static void *xfb = NULL; +static GXRModeObj *rmode = NULL; + +int main(int argc, char **argv) +{ + + //DEBUG_Init(GDBSTUB_DEVICE_WIFI, 2300); + //_break(); + + + fatInitDefault(); + +#ifdef HAVE_GLADE + gnome_program_init(PACKAGE_NAME, PACKAGE_VERSION, LIBGNOMEUI_MODULE, argc, argv, + GNOME_PARAM_APP_DATADIR, DATADIR, NULL); +#endif + +#ifndef R14 + timeval tv; + gettimeofday(&tv, NULL); + srand(tv.tv_usec); +#endif + +#ifndef HAVE_GLADE + printf( + "%s Copyright (C) 1994-1997,2002-2005 Christian Bauer\n" + "This is free software with ABSOLUTELY NO WARRANTY.\n" + , VERSION_STRING + ); +#endif + if (!init_graphics()) + return 1; + + fflush(stdout); + + + Frodo *the_app = new Frodo(); + the_app->ArgvReceived(argc, argv); + the_app->ReadyToRun(); + delete the_app; + + return 0; +} + + +/* + * Constructor: Initialize member variables + */ + +Frodo::Frodo() +{ + TheC64 = NULL; +} + + +/* + * Process command line arguments + */ + +void Frodo::ArgvReceived(int argc, char **argv) +{ + if (argc == 2) + strncpy(prefs_path, argv[1], 255); +} + + +/* + * Arguments processed, run emulation + */ + +void Frodo::ReadyToRun(void) +{ + getcwd(AppDirPath, 256); + + // Load preferences + if (!prefs_path[0]) { + char *home = getenv("HOME"); + if (home != NULL && strlen(home) < 240) { + strncpy(prefs_path, home, 200); + strcat(prefs_path, "/"); + } + strcat(prefs_path, "Frodo.fpr"); + } + + //strncpy(prefs_path, "sd:/APPS/FRODO/Frodo.fpr",200); + ThePrefs.Load(prefs_path); + + // Show preferences editor +#ifdef HAVE_GLADE + if (!ThePrefs.ShowEditor(true, prefs_path)) + return; +#endif + + // Create and start C64 + TheC64 = new C64; + load_rom_files(); + TheC64->Run(); + delete TheC64; +} + + +Prefs *Frodo::reload_prefs(void) +{ + static Prefs newprefs; + newprefs.Load(prefs_path); + return &newprefs; +} + + +/* + * Determine whether path name refers to a directory + */ + +bool IsDirectory(const char *path) +{ + struct stat st; + return stat(path, &st) == 0 && S_ISDIR(st.st_mode); +} diff --git a/Src/main_x.i b/Src/main_x.i deleted file mode 100644 index a051300..0000000 --- a/Src/main_x.i +++ /dev/null @@ -1,106 +0,0 @@ -/* - * main_x.i - Main program, X specific stuff - * - * Frodo (C) 1994-1997,2002 Christian Bauer - */ - -#include "Version.h" - - -extern int init_graphics(void); - - -// Global variables -char Frodo::prefs_path[256] = ""; - - -/* - * Create application object and start it - */ - -int main(int argc, char **argv) -{ - Frodo *the_app; - - timeval tv; - gettimeofday(&tv, NULL); - srand(tv.tv_usec); - - printf("%s by Christian Bauer\n", VERSION_STRING); - // Init SDL - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0) { - fprintf(stderr, "Couldn't initialize SDL (%s)\n", SDL_GetError()); - return 0; - } - if (TTF_Init() < 0) - { - fprintf(stderr, "Unable to init TTF: %s\n", TTF_GetError() ); - return 0; - } - if (!init_graphics()) - return 0; - fflush(stdout); - - the_app = new Frodo(); - the_app->ArgvReceived(argc, argv); - the_app->ReadyToRun(); - delete the_app; - - return 0; -} - - -/* - * Constructor: Initialize member variables - */ - -Frodo::Frodo() -{ - TheC64 = NULL; -} - - -/* - * Process command line arguments - */ - -void Frodo::ArgvReceived(int argc, char **argv) -{ - if (argc == 2) - strncpy(prefs_path, argv[1], 255); -} - - -/* - * Arguments processed, run emulation - */ - -void Frodo::ReadyToRun(void) -{ - getcwd(AppDirPath, 256); - - // Load preferences - if (!prefs_path[0]) { - char *home = getenv("HOME"); - if (home != NULL && strlen(home) < 240) { - strncpy(prefs_path, home, 200); - strcat(prefs_path, "/"); - } - strcat(prefs_path, ".frodorc"); - } - ThePrefs.Load(prefs_path); - - // Create and start C64 - TheC64 = new C64; - if (load_rom_files()) - TheC64->Run(); - delete TheC64; -} - - -Prefs *Frodo::reload_prefs(void) -{ - static Prefs newprefs; - newprefs.Load(prefs_path); - return &newprefs; -} diff --git a/Src/menu.cpp b/Src/menu.cpp deleted file mode 100644 index abc5041..0000000 --- a/Src/menu.cpp +++ /dev/null @@ -1,469 +0,0 @@ -/********************************************************************* - * - * Copyright (C) 2004,2008, Simon Kagstrom - * - * Filename: menu.c - * Author: Simon Kagstrom - * Description: Code for menus (originally for Mophun) - * - * $Id$ - * - ********************************************************************/ -#include -#include - -#if defined(GEKKO) -# include -#endif - -#include "menu.h" - -#define KEY_UP 1 -#define KEY_DOWN 2 -#define KEY_LEFT 4 -#define KEY_RIGHT 8 -#define KEY_SELECT 16 -#define KEY_ESCAPE 32 -#define KEY_PAGEDOWN 64 -#define KEY_PAGEUP 128 - -#define IS_SUBMENU(p_msg) ( (p_msg)[0] == '^' ) - -static submenu_t *find_submenu(menu_t *p_menu, int index) -{ - int i; - - for (i=0; in_submenus; i++) - { - if (p_menu->p_submenus[i].index == index) - return &p_menu->p_submenus[i]; - } - - return NULL; -} - -static void print_font(SDL_Surface *screen, TTF_Font *font, int r, int g, int b, - int x, int y, const char *msg) -{ - SDL_Surface *font_surf; - SDL_Rect dst = {x, y, 0, 0}; - SDL_Color color = {r, g, b}; - char buf[255]; - unsigned int i; - - memset(buf, 0, sizeof(buf)); - strncpy(buf, msg, 254); - - /* Fixup multi-menu option look */ - for (i = 0; i < strlen(buf) ; i++) - { - if (buf[i] == '^' || buf[i] == '|') - buf[i] = ' '; - } - - font_surf = TTF_RenderText_Blended(font, buf, - color); - if (!font_surf) - { - fprintf(stderr, "%s\n", TTF_GetError()); - exit(1); - } - - SDL_BlitSurface(font_surf, NULL, screen, &dst); - - SDL_FreeSurface(font_surf); -} - - -static void menu_draw(SDL_Surface *screen, menu_t *p_menu) -{ - int x_start = p_menu->x1 + (p_menu->x2 - p_menu->x1) / 2 - p_menu->text_w / 2; - int y_start = p_menu->y1 + (p_menu->y2 - p_menu->y1) / 2 - p_menu->text_h / 2; - int font_height = TTF_FontHeight(p_menu->p_font); - int line_height = (font_height + font_height / 4); - int entries_visible = p_menu->y2 / line_height; - int i; - - if ( p_menu->n_entries * line_height > p_menu->y2 ) - y_start = p_menu->y1; - if ( p_menu->cur_sel - p_menu->start_entry_visible > entries_visible ) - p_menu->start_entry_visible += p_menu->cur_sel - entries_visible; - else if ( p_menu->cur_sel < p_menu->start_entry_visible ) - p_menu->start_entry_visible = p_menu->cur_sel; - - for (i = p_menu->start_entry_visible; i < p_menu->n_entries; i++) - { - const char *msg = p_menu->pp_msgs[i]; - int y = (i - p_menu->start_entry_visible) * line_height; - - if (p_menu->cur_sel == i) /* Selected - color */ - print_font(screen, p_menu->p_font, 255,255,0, x_start, - y_start + y, msg); - else /* Otherwise white */ - print_font(screen, p_menu->p_font, 255,255,255, x_start, - y_start + y, msg); - if (IS_SUBMENU(msg)) - { - submenu_t *p_submenu = find_submenu(p_menu, i); - int n_pipe = 0; - int n; - - for (n=0; msg[n] != '\0'; n++) - { - /* Underline the selected entry */ - if (msg[n] == '|') - { - int16_t n_chars; - - for (n_chars = 1; msg[n+n_chars] && msg[n+n_chars] != '|'; n_chars++); - - n_pipe++; - if (p_submenu->sel == n_pipe-1) - { - SDL_Rect r; - int w; - int h; - - if (TTF_SizeText(p_menu->p_font, "X", &w, &h) < 0) - { - fprintf(stderr, "%s\n", TTF_GetError()); - exit(1); - } - - r = (SDL_Rect) { x_start + (n+1) * w-1, - y_start + (i+1 - p_menu->start_entry_visible) * ((h + h/4)-1), - (n_chars - 1) * w, - 2 }; - SDL_FillRect(screen, &r, SDL_MapRGB(screen->format, 0, 255, 0)); - break; - } - } - } - } - } -} - -static int get_next_seq_y(menu_t *p_menu, int v, int dy) -{ - if (v + dy < 0) - return p_menu->n_entries - 1; - if (v + dy > p_menu->n_entries - 1) - return 0; - return v + dy; -} - -static void select_next(menu_t *p_menu, int dx, int dy) -{ - int next; - - p_menu->cur_sel = get_next_seq_y(p_menu, p_menu->cur_sel, dy); - next = get_next_seq_y(p_menu, p_menu->cur_sel, dy + 1); - - if (p_menu->pp_msgs[p_menu->cur_sel][0] == ' ' || - IS_SUBMENU(p_menu->pp_msgs[p_menu->cur_sel]) ) - select_next(p_menu, dx, dy); - /* If the next is a submenu */ - if (dx != 0 && - IS_SUBMENU(p_menu->pp_msgs[next])) - { - submenu_t *p_submenu = find_submenu(p_menu, next); - - p_submenu->sel = (p_submenu->sel + dx) < 0 ? p_submenu->n_entries - 1 : - (p_submenu->sel + dx) % p_submenu->n_entries; - } -} - -static int is_submenu_title(menu_t *p_menu, int n) -{ - if (n+1 >= p_menu->n_entries) - return 0; - else - return IS_SUBMENU(p_menu->pp_msgs[n+1]); -} - - -void menu_init(menu_t *p_menu, TTF_Font *p_font, const char **pp_msgs, - int16_t x1, int16_t y1, int16_t x2, int16_t y2) -{ - int submenu; - int i; - int j; - - memset(p_menu, 0, sizeof(menu_t)); - - p_menu->pp_msgs = pp_msgs; - p_menu->p_font = p_font; - p_menu->x1 = x1; - p_menu->y1 = y1; - p_menu->x2 = x2; - p_menu->y2 = y2; - - p_menu->text_w = 0; - p_menu->n_submenus = 0; - - for (p_menu->n_entries = 0; p_menu->pp_msgs[p_menu->n_entries]; p_menu->n_entries++) - { - int text_w_font; - - /* Is this a submenu? */ - if (IS_SUBMENU(p_menu->pp_msgs[p_menu->n_entries])) - { - p_menu->n_submenus++; - continue; /* Length of submenus is unimportant */ - } - - if (TTF_SizeText(p_font, p_menu->pp_msgs[p_menu->n_entries], &text_w_font, NULL) != 0) - { - fprintf(stderr, "%s\n", TTF_GetError()); - exit(1); - } - if (text_w_font > p_menu->text_w) - p_menu->text_w = text_w_font; - } - if (p_menu->text_w > p_menu->x2 - p_menu->x1) - p_menu->text_w = p_menu->x2 - p_menu->x1; - - if ( !(p_menu->p_submenus = (submenu_t *)malloc(sizeof(submenu_t) * p_menu->n_submenus)) ) - { - perror("malloc failed!\n"); - exit(1); - } - - j=0; - submenu = 0; - for (; j < p_menu->n_entries; j++) - { - if (IS_SUBMENU(p_menu->pp_msgs[j])) - { - int n; - - p_menu->p_submenus[submenu].index = j; - p_menu->p_submenus[submenu].sel = 0; - p_menu->p_submenus[submenu].n_entries = 0; - for (n=0; p_menu->pp_msgs[j][n] != '\0'; n++) - { - if (p_menu->pp_msgs[j][n] == '|') - p_menu->p_submenus[submenu].n_entries++; - } - submenu++; - } - } - p_menu->text_h = p_menu->n_entries * (TTF_FontHeight(p_font) + TTF_FontHeight(p_font) / 4); -} - -void menu_fini(menu_t *p_menu) -{ - free(p_menu->p_submenus); -} - - -static uint32_t wait_key_press(void) -{ - SDL_Event ev; - uint32_t keys = 0; - - while (1) - { -#if defined(GEKKO) - Uint32 remote_keys, classic_keys; - WPADData *wpad, *wpad_other; - - WPAD_ScanPads(); - - wpad = WPAD_Data(WPAD_CHAN_0); - wpad_other = WPAD_Data(WPAD_CHAN_1); - remote_keys = wpad->btns_d | wpad_other->btns_d; - classic_keys = 0; - - /* Check classic controllers as well */ - if (wpad->exp.type == WPAD_EXP_CLASSIC || - wpad_other->exp.type == WPAD_EXP_CLASSIC) - { - static bool classic_keys_changed; - static Uint32 classic_last; - - classic_keys = wpad->exp.classic.btns | wpad_other->exp.classic.btns; - - classic_keys_changed = classic_keys != classic_last; - classic_last = classic_keys; - - /* No repeat, thank you */ - if (!classic_keys_changed) - classic_keys = 0; - } - - if ( (remote_keys & WPAD_BUTTON_DOWN) || (classic_keys & CLASSIC_CTRL_BUTTON_RIGHT) ) - keys |= KEY_RIGHT; - if ( (remote_keys & WPAD_BUTTON_UP) || (classic_keys & CLASSIC_CTRL_BUTTON_LEFT) ) - keys |= KEY_LEFT; - if ( (remote_keys & WPAD_BUTTON_LEFT) || (classic_keys & CLASSIC_CTRL_BUTTON_DOWN) ) - keys |= KEY_DOWN; - if ( (remote_keys & WPAD_BUTTON_RIGHT) || (classic_keys & CLASSIC_CTRL_BUTTON_UP) ) - keys |= KEY_UP; - if ( (remote_keys & WPAD_BUTTON_PLUS) || (classic_keys & CLASSIC_CTRL_BUTTON_PLUS) ) - keys |= KEY_PAGEUP; - if ( (remote_keys & WPAD_BUTTON_MINUS) || (classic_keys & CLASSIC_CTRL_BUTTON_MINUS) ) - keys |= KEY_PAGEDOWN; - if ( (remote_keys & (WPAD_BUTTON_A | WPAD_BUTTON_2) ) || - (classic_keys & (CLASSIC_CTRL_BUTTON_A | CLASSIC_CTRL_BUTTON_X)) ) - keys |= KEY_SELECT; - if ( (remote_keys & (WPAD_BUTTON_1 | WPAD_BUTTON_HOME) ) || - (classic_keys & (CLASSIC_CTRL_BUTTON_B | CLASSIC_CTRL_BUTTON_Y)) ) - keys |= KEY_ESCAPE; -#endif - if (SDL_PollEvent(&ev)) - { - switch(ev.type) - { - case SDL_KEYDOWN: - switch (ev.key.keysym.sym) - { - case SDLK_UP: - keys |= KEY_UP; - break; - case SDLK_DOWN: - keys |= KEY_DOWN; - break; - case SDLK_LEFT: - keys |= KEY_LEFT; - break; - case SDLK_RIGHT: - keys |= KEY_RIGHT; - break; - case SDLK_PAGEDOWN: - keys |= KEY_PAGEDOWN; - break; - case SDLK_PAGEUP: - keys |= KEY_PAGEUP; - break; - case SDLK_RETURN: - case SDLK_SPACE: - keys |= KEY_SELECT; - break; - case SDLK_ESCAPE: - keys |= KEY_ESCAPE; - break; - default: - break; - } - break; - case SDL_QUIT: - exit(0); - break; - default: - break; - } - break; - } - if (keys != 0) - return keys; - SDL_Delay(100); - } - - return keys; -} - - -int menu_select(SDL_Surface *screen, menu_t *p_menu, - int *p_submenus) -{ - int ret = -1; - - for (int i = 0; i < p_menu->n_submenus; i++) - p_menu->p_submenus[i].sel = p_submenus[i]; - - while(1) - { - uint32_t keys; - - SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0x00, 0x80, 0x80)); - - menu_draw(screen, p_menu); - SDL_Flip(screen); - - keys = wait_key_press(); - - if (keys & KEY_UP) - select_next(p_menu, 0, -1); - else if (keys & KEY_DOWN) - select_next(p_menu, 0, 1); - else if (keys & KEY_PAGEUP) - select_next(p_menu, 0, -6); - else if (keys & KEY_PAGEDOWN) - select_next(p_menu, 0, 6); - else if (keys & KEY_LEFT) - select_next(p_menu, -1, 0); - else if (keys & KEY_RIGHT) - select_next(p_menu, 1, 0); - else if (keys & KEY_ESCAPE) - break; - else if (keys & KEY_SELECT) - { - ret = p_menu->cur_sel; - int i; - - for (i=0; in_submenus; i++) - p_submenus[i] = p_menu->p_submenus[i].sel; - break; - } - } - - SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); - return ret; -} - -#if defined(TEST_MENU) -char *main_menu[] = { - "Insert disc", - "Reset C64", - "Joystick port", - "^|1|2", - " ", - "Quit", - NULL, -}; - -int main(int argc, char *argv[]) -{ - SDL_Surface *screen; - TTF_Font *font; - const SDL_VideoInfo *info; - int submenus[1] = {0}; - int selected; - menu_t menu; - - if (SDL_Init( SDL_INIT_EVERYTHING ) < 0) - { - fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError() ); - exit(1); - } - if (TTF_Init() < 0) - { - fprintf(stderr, "Unable to init TTF: %s\n", TTF_GetError() ); - exit(1); - } - - atexit(SDL_Quit); - atexit(TTF_Quit); - font = TTF_OpenFont("FreeMono.ttf", 20); - if (!font) - { - fprintf(stderr, "Unable to open font: %s\n", TTF_GetError() ); - exit(1); - } - - info = SDL_GetVideoInfo(); - /* Open a 640x480 display with the optimal color depth */ - screen = SDL_SetVideoMode(640, 480, info->vfmt->BitsPerPixel, - info->hw_available ? SDL_HWSURFACE : SDL_SWSURFACE); - menu_init(&menu, font, main_menu, 640 / 3, 480 / 3, 400, 400); - - selected = menu_select(screen, &menu, ~0, submenus); - printf("Selected: %d:%d\n", - selected, submenus[0]); - - menu_fini(&menu); - - return 0; -} -#endif diff --git a/Src/menu.h b/Src/menu.h deleted file mode 100644 index 1a335c6..0000000 --- a/Src/menu.h +++ /dev/null @@ -1,59 +0,0 @@ -/********************************************************************* - * - * Copyright (C) 2004, 2008, Simon Kagstrom - * - * Filename: menu.h - * Author: Simon Kagstrom - * Description: - * - * $Id$ - * - ********************************************************************/ -#ifndef __MENU_H__ -#define __MENU_H__ - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif /* __cplusplus */ - -typedef struct -{ - int n_entries; - int index; - int sel; -} submenu_t; - - -typedef struct -{ - const char **pp_msgs; - TTF_Font *p_font; - int x1,y1; - int x2,y2; - int text_w; - int text_h; - - int n_submenus; - submenu_t *p_submenus; - - int cur_sel; /* Main selection */ - int start_entry_visible; - int n_entries; -} menu_t; - -void menu_init(menu_t *p_menu, TTF_Font *p_font, const char **pp_msgs, - int16_t x1, int16_t y1, int16_t x2, int16_t y2); -void menu_fini(menu_t *p_menu); - -int menu_select(SDL_Surface *screen, menu_t *p_menu, - int *p_submenus); - -#if defined(__cplusplus) -}; -#endif /* __cplusplus */ - -#endif /* !__MENU_H__ */ diff --git a/Src/mkinstalldirs b/Src/mkinstalldirs new file mode 100644 index 0000000..8ab885e --- /dev/null +++ b/Src/mkinstalldirs @@ -0,0 +1,99 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case "${1}" in + -h | --help | --h* ) # -h for help + echo "${usage}" 1>&2; exit 0 ;; + -m ) # -m PERM arg + shift + test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } + dirmode="${1}" + shift ;; + -- ) shift; break ;; # stop option processing + -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option + * ) break ;; # first non-opt arg + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in +0) exit 0 ;; +esac + +case $dirmode in +'') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi ;; +*) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 3 +# End: +# mkinstalldirs ends here diff --git a/Src/ndir.c b/Src/ndir.c index 4f555e5..7d7cfc5 100644 --- a/Src/ndir.c +++ b/Src/ndir.c @@ -15,13 +15,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Header: /u/src/master/ccvs/windows-NT/ndir.c,v 1.3 1995/09/08 00:34:09 jimb Exp $ + $Header: /home/cvs/cebix/Frodo4/Src/ndir.c,v 1.1 2003/07/01 17:09:43 cebix Exp $ */ /* Everything non trivial in this code is from: @(#)msd_dir.c 1.4 87/11/06. A public domain implementation of BSD directory routines for MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield), - August 1897 */ + August 1987 */ #include diff --git a/Src/ndir.cod b/Src/ndir.cod new file mode 100644 index 0000000..16f40a8 --- /dev/null +++ b/Src/ndir.cod @@ -0,0 +1,690 @@ + TITLE ndir.c + .386P +include listing.inc +if @Version gt 510 +.model FLAT +else +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +_DATA SEGMENT DWORD USE32 PUBLIC 'DATA' +_DATA ENDS +CONST SEGMENT DWORD USE32 PUBLIC 'CONST' +CONST ENDS +_BSS SEGMENT PARA USE32 PUBLIC 'BSS' +_BSS ENDS +_TLS SEGMENT DWORD USE32 PUBLIC 'TLS' +_TLS ENDS +; COMDAT ??_C@_00A@?$AA@ +_DATA SEGMENT DWORD USE32 PUBLIC 'DATA' +_DATA ENDS +; COMDAT ??_C@_01FDLN@?1?$AA@ +_DATA SEGMENT DWORD USE32 PUBLIC 'DATA' +_DATA ENDS +; COMDAT ??_C@_03DCMC@?$CK?4?$CK?$AA@ +_DATA SEGMENT DWORD USE32 PUBLIC 'DATA' +_DATA ENDS +; COMDAT _opendir +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +; COMDAT _closedir +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +; COMDAT _readdir +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +; COMDAT _seekdir +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +; COMDAT _telldir +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +; COMDAT _free_dircontents +_TEXT SEGMENT PARA USE32 PUBLIC 'CODE' +_TEXT ENDS +FLAT GROUP _DATA, CONST, _BSS + ASSUME CS: FLAT, DS: FLAT, SS: FLAT +endif +PUBLIC _opendir +PUBLIC ??_C@_00A@?$AA@ ; `string' +PUBLIC ??_C@_01FDLN@?1?$AA@ ; `string' +PUBLIC ??_C@_03DCMC@?$CK?4?$CK?$AA@ ; `string' +EXTRN _free:NEAR +EXTRN _malloc:NEAR +EXTRN __findfirst:NEAR +EXTRN __findnext:NEAR +EXTRN __findclose:NEAR +; COMDAT ??_C@_00A@?$AA@ +; File ndir.c +_BSS SEGMENT +??_C@_00A@?$AA@ DB 01H DUP (?) ; `string' +_BSS ENDS +; COMDAT ??_C@_01FDLN@?1?$AA@ +_DATA SEGMENT +??_C@_01FDLN@?1?$AA@ DB '/', 00H ; `string' +_DATA ENDS +; COMDAT ??_C@_03DCMC@?$CK?4?$CK?$AA@ +_DATA SEGMENT +??_C@_03DCMC@?$CK?4?$CK?$AA@ DB '*.*', 00H ; `string' +_DATA ENDS +; COMDAT _opendir +_TEXT SEGMENT +_name$ = 8 +_find_buf$ = -544 +_name_buf$ = -264 +_hFile$ = -548 +_opendir PROC NEAR ; COMDAT + +; 48 : struct _finddata_t find_buf; +; 49 : DIR *dirp; +; 50 : struct _dircontents *dp; +; 51 : char name_buf[_MAX_PATH + 1]; +; 52 : char *slash = ""; +; 53 : long hFile; +; 54 : +; 55 : if (!name) + + 00000 8b 54 24 04 mov edx, DWORD PTR _name$[esp-4] + 00004 81 ec 24 02 00 + 00 sub esp, 548 ; 00000224H + 0000a 53 push ebx + 0000b 55 push ebp + 0000c 33 ed xor ebp, ebp + 0000e 56 push esi + 0000f 3b d5 cmp edx, ebp + 00011 57 push edi + 00012 bb 00 00 00 00 mov ebx, OFFSET FLAT:??_C@_00A@?$AA@ ; `string' + 00017 75 04 jne SHORT $L1716 + +; 56 : name = ""; + + 00019 8b d3 mov edx, ebx + +; 57 : else if (*name) + + 0001b eb 30 jmp SHORT $L1721 +$L1716: + 0001d 80 3a 00 cmp BYTE PTR [edx], 0 + 00020 74 2b je SHORT $L1721 + +; 58 : { +; 59 : const char *s; +; 60 : int l = strlen (name); + + 00022 8b fa mov edi, edx + 00024 83 c9 ff or ecx, -1 + 00027 33 c0 xor eax, eax + 00029 f2 ae repne scasb + 0002b f7 d1 not ecx + 0002d 49 dec ecx + +; 61 : +; 62 : s = name + l - 1; +; 63 : if ( !(l == 2 && *s == ':') && *s != '\\' && *s != '/') + + 0002e 83 f9 02 cmp ecx, 2 + 00031 75 07 jne SHORT $L1722 + 00033 80 7c 11 ff 3a cmp BYTE PTR [ecx+edx-1], 58 ; 0000003aH + 00038 74 13 je SHORT $L1721 +$L1722: + 0003a 8a 4c 11 ff mov cl, BYTE PTR [ecx+edx-1] + 0003e 80 f9 5c cmp cl, 92 ; 0000005cH + 00041 74 0a je SHORT $L1721 + 00043 80 f9 2f cmp cl, 47 ; 0000002fH + 00046 74 05 je SHORT $L1721 + +; 64 : slash = "/"; /* save to insert slash between path and "*.*" */ + + 00048 bb 00 00 00 00 mov ebx, OFFSET FLAT:??_C@_01FDLN@?1?$AA@ ; `string' +$L1721: + +; 65 : } +; 66 : +; 67 : strcat (strcat (strcpy (name_buf, name), slash), "*.*"); + + 0004d 83 c9 ff or ecx, -1 + 00050 8b fa mov edi, edx + 00052 33 c0 xor eax, eax + 00054 8d b4 24 2c 01 + 00 00 lea esi, DWORD PTR _name_buf$[esp+564] + 0005b f2 ae repne scasb + 0005d f7 d1 not ecx + 0005f 2b f9 sub edi, ecx + 00061 8b d6 mov edx, esi + 00063 8b c1 mov eax, ecx + 00065 8b f7 mov esi, edi + 00067 8b fa mov edi, edx + 00069 c1 e9 02 shr ecx, 2 + 0006c f3 a5 rep movsd + 0006e 8b c8 mov ecx, eax + 00070 33 c0 xor eax, eax + 00072 83 e1 03 and ecx, 3 + +; 68 : +; 69 : dirp = (DIR *) malloc (sizeof (DIR)); + + 00075 6a 10 push 16 ; 00000010H + 00077 f3 a4 rep movsb + 00079 8b fb mov edi, ebx + 0007b 83 c9 ff or ecx, -1 + 0007e f2 ae repne scasb + 00080 f7 d1 not ecx + 00082 2b f9 sub edi, ecx + 00084 8b f7 mov esi, edi + 00086 8b d9 mov ebx, ecx + 00088 8b fa mov edi, edx + 0008a 83 c9 ff or ecx, -1 + 0008d f2 ae repne scasb + 0008f 8b cb mov ecx, ebx + 00091 4f dec edi + 00092 c1 e9 02 shr ecx, 2 + 00095 f3 a5 rep movsd + 00097 8b cb mov ecx, ebx + 00099 83 e1 03 and ecx, 3 + 0009c f3 a4 rep movsb + 0009e bf 00 00 00 00 mov edi, OFFSET FLAT:??_C@_03DCMC@?$CK?4?$CK?$AA@ ; `string' + 000a3 83 c9 ff or ecx, -1 + 000a6 f2 ae repne scasb + 000a8 f7 d1 not ecx + 000aa 2b f9 sub edi, ecx + 000ac 8b f7 mov esi, edi + 000ae 8b d9 mov ebx, ecx + 000b0 8b fa mov edi, edx + 000b2 83 c9 ff or ecx, -1 + 000b5 f2 ae repne scasb + 000b7 8b cb mov ecx, ebx + 000b9 4f dec edi + 000ba c1 e9 02 shr ecx, 2 + 000bd f3 a5 rep movsd + 000bf 8b cb mov ecx, ebx + 000c1 83 e1 03 and ecx, 3 + 000c4 f3 a4 rep movsb + 000c6 e8 00 00 00 00 call _malloc + 000cb 8b d8 mov ebx, eax + 000cd 83 c4 04 add esp, 4 + +; 70 : if (dirp == (DIR *)0) + + 000d0 3b dd cmp ebx, ebp + 000d2 75 0d jne SHORT $L1728 + 000d4 5f pop edi + 000d5 5e pop esi + 000d6 5d pop ebp + +; 71 : return (DIR *)0; + + 000d7 33 c0 xor eax, eax + 000d9 5b pop ebx + +; 115 : } + + 000da 81 c4 24 02 00 + 00 add esp, 548 ; 00000224H + 000e0 c3 ret 0 +$L1728: + +; 72 : +; 73 : dirp->dd_loc = 0; +; 74 : dirp->dd_contents = dirp->dd_cp = (struct _dircontents *) 0; +; 75 : +; 76 : if ((hFile = _findfirst (name_buf, &find_buf)) < 0) + + 000e1 8d 44 24 14 lea eax, DWORD PTR _find_buf$[esp+564] + 000e5 8d 8c 24 2c 01 + 00 00 lea ecx, DWORD PTR _name_buf$[esp+564] + 000ec 50 push eax + 000ed 51 push ecx + 000ee 89 6b 04 mov DWORD PTR [ebx+4], ebp + 000f1 89 6b 0c mov DWORD PTR [ebx+12], ebp + 000f4 89 6b 08 mov DWORD PTR [ebx+8], ebp + 000f7 e8 00 00 00 00 call __findfirst + 000fc 83 c4 08 add esp, 8 + 000ff 3b c5 cmp eax, ebp + 00101 89 44 24 10 mov DWORD PTR _hFile$[esp+564], eax + 00105 7d 16 jge SHORT $L1793 + +; 77 : { +; 78 : free (dirp); + + 00107 53 push ebx + 00108 e8 00 00 00 00 call _free + 0010d 83 c4 04 add esp, 4 + +; 79 : return (DIR *)0; + + 00110 33 c0 xor eax, eax + 00112 5f pop edi + 00113 5e pop esi + 00114 5d pop ebp + 00115 5b pop ebx + +; 115 : } + + 00116 81 c4 24 02 00 + 00 add esp, 548 ; 00000224H + 0011c c3 ret 0 +$L1793: + +; 80 : } +; 81 : +; 82 : do +; 83 : { +; 84 : dp = (struct _dircontents *) malloc (sizeof (struct _dircontents)); + + 0011d 6a 08 push 8 + 0011f e8 00 00 00 00 call _malloc + 00124 8b e8 mov ebp, eax + 00126 83 c4 04 add esp, 4 + +; 85 : if (dp == (struct _dircontents *)0) + + 00129 85 ed test ebp, ebp + 0012b 0f 84 8c 00 00 + 00 je $L1794 +$L1733: + +; 89 : } +; 90 : +; 91 : dp->_d_entry = malloc (strlen (find_buf.name) + 1); + + 00131 8d 7c 24 28 lea edi, DWORD PTR _find_buf$[esp+584] + 00135 83 c9 ff or ecx, -1 + 00138 33 c0 xor eax, eax + 0013a f2 ae repne scasb + 0013c f7 d1 not ecx + 0013e 51 push ecx + 0013f e8 00 00 00 00 call _malloc + 00144 83 c4 04 add esp, 4 + 00147 89 45 00 mov DWORD PTR [ebp], eax + +; 92 : if (dp->_d_entry == (char *)0) + + 0014a 85 c0 test eax, eax + 0014c 0f 84 84 00 00 + 00 je $L1796 + +; 97 : } +; 98 : +; 99 : if (dirp->dd_contents) + + 00152 8b 43 08 mov eax, DWORD PTR [ebx+8] + 00155 85 c0 test eax, eax + 00157 74 0b je SHORT $L1744 + +; 100 : dirp->dd_cp = dirp->dd_cp->_d_next = dp; + + 00159 8b 53 0c mov edx, DWORD PTR [ebx+12] + 0015c 89 6a 04 mov DWORD PTR [edx+4], ebp + 0015f 89 6b 0c mov DWORD PTR [ebx+12], ebp + +; 101 : else + + 00162 eb 06 jmp SHORT $L1745 +$L1744: + +; 102 : dirp->dd_contents = dirp->dd_cp = dp; + + 00164 89 6b 0c mov DWORD PTR [ebx+12], ebp + 00167 89 6b 08 mov DWORD PTR [ebx+8], ebp +$L1745: + +; 103 : +; 104 : strcpy (dp->_d_entry, find_buf.name); + + 0016a 8d 7c 24 28 lea edi, DWORD PTR _find_buf$[esp+584] + 0016e 83 c9 ff or ecx, -1 + 00171 33 c0 xor eax, eax + 00173 f2 ae repne scasb + 00175 f7 d1 not ecx + 00177 2b f9 sub edi, ecx + 00179 8b c1 mov eax, ecx + 0017b 8b f7 mov esi, edi + 0017d 8b 7d 00 mov edi, DWORD PTR [ebp] + 00180 c1 e9 02 shr ecx, 2 + 00183 f3 a5 rep movsd + 00185 8b c8 mov ecx, eax + 00187 83 e1 03 and ecx, 3 + 0018a f3 a4 rep movsb + +; 105 : +; 106 : dp->_d_next = (struct _dircontents *)0; +; 107 : +; 108 : } while (!_findnext (hFile, &find_buf)); + + 0018c 8b 74 24 10 mov esi, DWORD PTR _hFile$[esp+564] + 00190 8d 4c 24 14 lea ecx, DWORD PTR _find_buf$[esp+564] + 00194 51 push ecx + 00195 56 push esi + 00196 c7 45 04 00 00 + 00 00 mov DWORD PTR [ebp+4], 0 + 0019d e8 00 00 00 00 call __findnext + 001a2 83 c4 08 add esp, 8 + 001a5 85 c0 test eax, eax + 001a7 75 4c jne SHORT $L1795 + 001a9 6a 08 push 8 + 001ab e8 00 00 00 00 call _malloc + 001b0 8b e8 mov ebp, eax + 001b2 83 c4 04 add esp, 4 + 001b5 85 ed test ebp, ebp + 001b7 0f 85 74 ff ff + ff jne $L1733 +$L1794: + +; 86 : { +; 87 : free_dircontents (dirp->dd_contents); + + 001bd 8b 53 08 mov edx, DWORD PTR [ebx+8] + 001c0 52 push edx + 001c1 e8 00 00 00 00 call _free_dircontents + 001c6 83 c4 04 add esp, 4 + +; 88 : return (DIR *)0; + + 001c9 33 c0 xor eax, eax + 001cb 5f pop edi + 001cc 5e pop esi + 001cd 5d pop ebp + 001ce 5b pop ebx + +; 115 : } + + 001cf 81 c4 24 02 00 + 00 add esp, 548 ; 00000224H + 001d5 c3 ret 0 +$L1796: + +; 93 : { +; 94 : free (dp); + + 001d6 55 push ebp + 001d7 e8 00 00 00 00 call _free + +; 95 : free_dircontents (dirp->dd_contents); + + 001dc 8b 43 08 mov eax, DWORD PTR [ebx+8] + 001df 50 push eax + 001e0 e8 00 00 00 00 call _free_dircontents + 001e5 83 c4 08 add esp, 8 + +; 96 : return (DIR *)0; + + 001e8 33 c0 xor eax, eax + 001ea 5f pop edi + 001eb 5e pop esi + 001ec 5d pop ebp + 001ed 5b pop ebx + +; 115 : } + + 001ee 81 c4 24 02 00 + 00 add esp, 548 ; 00000224H + 001f4 c3 ret 0 +$L1795: + +; 109 : +; 110 : dirp->dd_cp = dirp->dd_contents; + + 001f5 8b 4b 08 mov ecx, DWORD PTR [ebx+8] + +; 111 : +; 112 : _findclose(hFile); + + 001f8 56 push esi + 001f9 89 4b 0c mov DWORD PTR [ebx+12], ecx + 001fc e8 00 00 00 00 call __findclose + 00201 83 c4 04 add esp, 4 + +; 113 : +; 114 : return dirp; + + 00204 8b c3 mov eax, ebx + 00206 5f pop edi + 00207 5e pop esi + 00208 5d pop ebp + 00209 5b pop ebx + +; 115 : } + + 0020a 81 c4 24 02 00 + 00 add esp, 548 ; 00000224H + 00210 c3 ret 0 +_opendir ENDP +_TEXT ENDS +PUBLIC _closedir +; COMDAT _closedir +_TEXT SEGMENT +_dirp$ = 8 +_closedir PROC NEAR ; COMDAT + +; 120 : { + + 00000 56 push esi + +; 121 : free_dircontents (dirp->dd_contents); + + 00001 8b 74 24 08 mov esi, DWORD PTR _dirp$[esp] + 00005 8b 46 08 mov eax, DWORD PTR [esi+8] + 00008 50 push eax + 00009 e8 00 00 00 00 call _free_dircontents + +; 122 : free ((char *) dirp); + + 0000e 56 push esi + 0000f e8 00 00 00 00 call _free + 00014 83 c4 08 add esp, 8 + 00017 5e pop esi + +; 123 : } + + 00018 c3 ret 0 +_closedir ENDP +_TEXT ENDS +PUBLIC _readdir +_BSS SEGMENT +_?dp@?1??readdir@@9@9 DB 010cH DUP (?) +_BSS ENDS +; COMDAT _readdir +_TEXT SEGMENT +_dirp$ = 8 +_readdir PROC NEAR ; COMDAT + +; 129 : static struct direct dp; +; 130 : +; 131 : if (dirp->dd_cp == (struct _dircontents *)0) + + 00000 8b 54 24 04 mov edx, DWORD PTR _dirp$[esp-4] + 00004 8b 42 0c mov eax, DWORD PTR [edx+12] + 00007 85 c0 test eax, eax + 00009 75 01 jne SHORT $L1757 + +; 143 : } + + 0000b c3 ret 0 +$L1757: + 0000c 53 push ebx + 0000d 56 push esi + 0000e 57 push edi + +; 132 : return (struct direct *)0; +; 133 : dp.d_namlen = dp.d_reclen = +; 134 : strlen (strcpy (dp.d_name, dirp->dd_cp->_d_entry)); + + 0000f 8b 38 mov edi, DWORD PTR [eax] + 00011 83 c9 ff or ecx, -1 + 00014 33 c0 xor eax, eax + 00016 f2 ae repne scasb + 00018 f7 d1 not ecx + 0001a 2b f9 sub edi, ecx + 0001c 8b f7 mov esi, edi + 0001e 8b c1 mov eax, ecx + 00020 bf 0c 00 00 00 mov edi, OFFSET FLAT:_?dp@?1??readdir@@9@9+12 + 00025 8b df mov ebx, edi + 00027 c1 e9 02 shr ecx, 2 + 0002a f3 a5 rep movsd + 0002c 8b c8 mov ecx, eax + 0002e 33 c0 xor eax, eax + 00030 83 e1 03 and ecx, 3 + 00033 f3 a4 rep movsb + 00035 8b fb mov edi, ebx + 00037 83 c9 ff or ecx, -1 + 0003a f2 ae repne scasb + 0003c f7 d1 not ecx + 0003e 49 dec ecx + +; 135 : #if 0 /* JB */ +; 136 : strlwr (dp.d_name); /* JF */ +; 137 : #endif +; 138 : dp.d_ino = 0; + + 0003f 66 a3 00 00 00 + 00 mov WORD PTR _?dp@?1??readdir@@9@9, ax + 00045 89 0d 04 00 00 + 00 mov DWORD PTR _?dp@?1??readdir@@9@9+4, ecx + 0004b 89 0d 08 00 00 + 00 mov DWORD PTR _?dp@?1??readdir@@9@9+8, ecx + +; 139 : dirp->dd_cp = dirp->dd_cp->_d_next; + + 00051 8b 4a 0c mov ecx, DWORD PTR [edx+12] + 00054 5f pop edi + 00055 5e pop esi + 00056 5b pop ebx + 00057 8b 41 04 mov eax, DWORD PTR [ecx+4] + 0005a 89 42 0c mov DWORD PTR [edx+12], eax + +; 140 : dirp->dd_loc++; + + 0005d 8b 42 04 mov eax, DWORD PTR [edx+4] + 00060 40 inc eax + 00061 89 42 04 mov DWORD PTR [edx+4], eax + +; 141 : +; 142 : return &dp; + + 00064 b8 00 00 00 00 mov eax, OFFSET FLAT:_?dp@?1??readdir@@9@9 + +; 143 : } + + 00069 c3 ret 0 +_readdir ENDP +_TEXT ENDS +PUBLIC _seekdir +; COMDAT _seekdir +_TEXT SEGMENT +_dirp$ = 8 +_off$ = 12 +_seekdir PROC NEAR ; COMDAT + +; 149 : long i = off; +; 150 : struct _dircontents *dp; +; 151 : +; 152 : if (off < 0) + + 00000 8b 4c 24 08 mov ecx, DWORD PTR _off$[esp-4] + 00004 85 c9 test ecx, ecx + 00006 7c 23 jl SHORT $L1763 + 00008 56 push esi + +; 153 : return; +; 154 : for (dp = dirp->dd_contents; --i >= 0 && dp; dp = dp->_d_next) + + 00009 8b 74 24 08 mov esi, DWORD PTR _dirp$[esp] + 0000d 8d 51 ff lea edx, DWORD PTR [ecx-1] + 00010 8b 46 08 mov eax, DWORD PTR [esi+8] + 00013 85 d2 test edx, edx + 00015 7c 0a jl SHORT $L1769 +$L1767: + 00017 85 c0 test eax, eax + 00019 74 06 je SHORT $L1769 + 0001b 8b 40 04 mov eax, DWORD PTR [eax+4] + 0001e 4a dec edx + 0001f 79 f6 jns SHORT $L1767 +$L1769: + +; 155 : ; +; 156 : dirp->dd_loc = off - (i + 1); + + 00021 2b ca sub ecx, edx + +; 157 : dirp->dd_cp = dp; + + 00023 89 46 0c mov DWORD PTR [esi+12], eax + 00026 49 dec ecx + 00027 89 4e 04 mov DWORD PTR [esi+4], ecx + 0002a 5e pop esi +$L1763: + +; 158 : } + + 0002b c3 ret 0 +_seekdir ENDP +_TEXT ENDS +PUBLIC _telldir +; COMDAT _telldir +_TEXT SEGMENT +_dirp$ = 8 +_telldir PROC NEAR ; COMDAT + +; 164 : return dirp->dd_loc; + + 00000 8b 44 24 04 mov eax, DWORD PTR _dirp$[esp-4] + 00004 8b 40 04 mov eax, DWORD PTR [eax+4] + +; 165 : } + + 00007 c3 ret 0 +_telldir ENDP +_TEXT ENDS +; COMDAT _free_dircontents +_TEXT SEGMENT +_dp$ = 8 +_free_dircontents PROC NEAR ; COMDAT + +; 172 : { + + 00000 56 push esi + +; 173 : struct _dircontents *odp; +; 174 : +; 175 : while (dp) + + 00001 8b 74 24 08 mov esi, DWORD PTR _dp$[esp] + 00005 85 f6 test esi, esi + 00007 74 21 je SHORT $L1779 +$L1778: + +; 176 : { +; 177 : if (dp->_d_entry) + + 00009 8b 06 mov eax, DWORD PTR [esi] + 0000b 85 c0 test eax, eax + 0000d 74 09 je SHORT $L1780 + +; 178 : free (dp->_d_entry); + + 0000f 50 push eax + 00010 e8 00 00 00 00 call _free + 00015 83 c4 04 add esp, 4 +$L1780: + +; 179 : dp = (odp = dp)->_d_next; + + 00018 8b c6 mov eax, esi + 0001a 8b 76 04 mov esi, DWORD PTR [esi+4] + +; 180 : free (odp); + + 0001d 50 push eax + 0001e e8 00 00 00 00 call _free + 00023 83 c4 04 add esp, 4 + 00026 85 f6 test esi, esi + 00028 75 df jne SHORT $L1778 +$L1779: + 0002a 5e pop esi + +; 181 : } +; 182 : } + + 0002b c3 ret 0 +_free_dircontents ENDP +_TEXT ENDS +END diff --git a/Src/ndir.h b/Src/ndir.h index a81ae41..3181fab 100644 --- a/Src/ndir.h +++ b/Src/ndir.h @@ -15,13 +15,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Header: /u/src/master/ccvs/windows-NT/ndir.h,v 1.4 1996/01/03 21:15:00 kingdon Exp $ + $Header: /home/cvs/cebix/Frodo4/Src/ndir.h,v 1.1 2003/07/01 17:09:43 cebix Exp $ */ /* Everything non trivial in this code is taken from: @(#)msd_dir.c 1.4 87/11/06. A public domain implementation of BSD directory routines for MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield), - August 1897 */ + August 1987 */ #include /* ino_t definition */ diff --git a/Src/ndir.obj b/Src/ndir.obj new file mode 100644 index 0000000..977b74f Binary files /dev/null and b/Src/ndir.obj differ diff --git a/Src/orgsysconfig.h b/Src/orgsysconfig.h new file mode 100644 index 0000000..dba8eb1 --- /dev/null +++ b/Src/orgsysconfig.h @@ -0,0 +1,190 @@ +/* sysconfig.h. Generated by configure. */ +/* sysconfig.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_DIRENT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_FCNTL_H */ + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Glade support is enabled */ +/* #undef HAVE_GLADE */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_INTTYPES_H */ + +/* Weather libosso is present on the system */ +/* #undef HAVE_LIBOSSO */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MEMORY_H */ + +/* Define to 1 if you have the `mkdir' function. */ +#define HAVE_MKDIR 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_NCURSES_H */ + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +/* #undef HAVE_NDIR_H */ + +/* Define to 1 if you have the `rmdir' function. */ +#define HAVE_RMDIR 1 + +/* Define to 1 if you have the `select' function. */ +/* #undef HAVE_SELECT */ + +/* Define to 1 if you have the `sigaction' function. */ +/* #undef HAVE_SIGACTION */ + +/* Define to 1 if you have the `statfs' function. */ +/* #undef HAVE_STATFS */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STDINT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STDLIB_H */ + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STRINGS_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_STRING_H */ + +/* Define to 1 if you have the `strstr' function. */ +/* #undef HAVE_STRSTR */ + +/* Define to 1 if `st_blocks' is member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BLOCKS */ + +/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use + `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ +/* #undef HAVE_ST_BLOCKS */ + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_MOUNT_H */ + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_PARAM_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_SELECT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_STATFS_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_STATVFS_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_STAT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_TIME_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_TYPES_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_VFS_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UNISTD_H */ + +/* Define to 1 if you have the `usleep' function. */ +/* #undef HAVE_USLEEP */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_UTIME_H */ + +/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ +#define HAVE_UTIME_NULL 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VALUES_H */ + +/* Extension for Maemo is enabled */ +/* #undef MAEMO */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "Christian.Bauer@uni-mainz.de" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "Frodo" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "Frodo 4.2" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "Frodo" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "4.2" + +/* Extension for Qtopia is enabled */ +/* #undef QTOPIA */ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE int + +/* The size of a `char', as computed by sizeof. */ +#define SIZEOF_CHAR 1 + +/* The size of a `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* The size of a `long', as computed by sizeof. */ +#define SIZEOF_LONG 4 + +/* The size of a `long long', as computed by sizeof. */ +#define SIZEOF_LONG_LONG 8 + +/* The size of a `short', as computed by sizeof. */ +#define SIZEOF_SHORT 2 + +/* The size of a `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 4 + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +/* #undef TIME_WITH_SYS_TIME */ + +/* Define to 1 if your declares `struct tm'. */ +#define TM_IN_SYS_TIME 1 + +/* Define to 1 if the X Window System is missing or not being used. */ +#define X_DISPLAY_MISSING 1 + +/* Define to 1 if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* # undef _ALL_SOURCE */ +#endif + +/* Define to `int' if does not define. */ +#define mode_t int + +/* Define to `long' if does not define. */ +#define off_t long + +/* Define to `int' if does not define. */ +#define pid_t int diff --git a/Src/sdlgui.cpp b/Src/sdlgui.cpp new file mode 100644 index 0000000..27d89b8 --- /dev/null +++ b/Src/sdlgui.cpp @@ -0,0 +1,1476 @@ +/* + * sdlgui.cpp + * + * This file is taken from the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * Copyright (c) 2001 Thomas Huth - taken from his hatari project + * Copyright (c) 2002-2005 Petr Stehlik of ARAnyM dev team (see AUTHORS) + * + * It 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. + * + * You should have received a copy of the GNU General Public License + * along with Frodo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "sysdeps.h" +#include "sdlgui.h" + +#include + +#include "font8.h" + +static SDL_Surface *mainsurface = NULL; +#define sdlscrn mainsurface + +static SDL_Surface *fontgfx=NULL; +static int fontwidth, fontheight; /* Height and width of the actual font */ + +// Stores current dialog coordinates +static SDL_Rect DialogRect = {0, 0, 0, 0}; + +// Used by SDLGui_Get[First|Next]BackgroundRect() +static SDL_Rect BackgroundRect = {0, 0, 0, 0}; +static int BackgroundRectCounter; +enum +{ + SG_BCKGND_RECT_BEGIN, + SG_BCKGND_RECT_TOP, + SG_BCKGND_RECT_LEFT, + SG_BCKGND_RECT_RIGHT, + SG_BCKGND_RECT_BOTTOM, + SG_BCKGND_RECT_END +}; + +SDL_Color blackc[] = {{0, 0, 0, 0}}; +SDL_Color darkgreyc[] = {{128, 128, 128, 0}}; +SDL_Color greyc[] = {{192, 192, 192, 0}}; +SDL_Color whitec[] = {{255, 255, 255, 0}}; + +enum +{ + SG_FIRST_EDITFIELD, + SG_PREVIOUS_EDITFIELD, + SG_NEXT_EDITFIELD, + SG_LAST_EDITFIELD +}; + +/*-----------------------------------------------------------------------*/ +/* + Load an 1 plane XBM into a 8 planes SDL_Surface. +*/ +static SDL_Surface *SDLGui_LoadXBM(int w, int h, Uint8 *srcbits) +{ + SDL_Surface *bitmap; + Uint8 *dstbits; + int x, y, srcpitch; + + /* Allocate the bitmap */ + bitmap = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 8, 0, 0, 0, 0); + if ( bitmap == NULL ) + { + // TODO panicbug("Couldn't allocate bitmap: %s", SDL_GetError()); + return(NULL); + } + + srcpitch = ((w + 7) / 8); + dstbits = (Uint8 *)bitmap->pixels; + int mask = 1; + + /* Copy the pixels */ + for (y = 0 ; y < h ; y++) + { + for (x = 0 ; x < w ; x++) + { + dstbits[x] = (srcbits[x / 8] & mask) ? 1 : 0; + mask <<= 1; + mask |= (mask >> 8); + mask &= 0xFF; + } + dstbits += bitmap->pitch; + srcbits += srcpitch; + } + + return(bitmap); +} + +/*-----------------------------------------------------------------------*/ +/* + Initialize the GUI. +*/ +bool SDLGui_Init(SDL_Surface *GUISurface) +{ + mainsurface = GUISurface; + /* Load the font graphics: */ + fontgfx = SDLGui_LoadXBM(font8_width, font8_height, font8_bits); + if (fontgfx == NULL) + { +// TODO panicbug("Could not create font data"); +// TODO panicbug("ARAnyM GUI will not be available"); + return false; + } + + /* Set font color 0 as transparent */ + SDL_SetColorKey(fontgfx, SDL_SRCCOLORKEY, 0); + + /* Get the font width and height: */ + fontwidth = fontgfx->w/16; + fontheight = fontgfx->h/16; + + return true; +} + + +/*-----------------------------------------------------------------------*/ +/* + Uninitialize the GUI. +*/ +int SDLGui_UnInit() +{ + if (fontgfx) + { + SDL_FreeSurface(fontgfx); + fontgfx = NULL; + } + + return 0; +} + + +/*-----------------------------------------------------------------------*/ +/* + Compute real coordinates for a given object. + Note: centers dialog on screen. +*/ +static void SDLGui_ObjCoord(SGOBJ *dlg, int objnum, SDL_Rect *rect) +{ + rect->x = dlg[objnum].x * fontwidth; + rect->y = dlg[objnum].y * fontheight; + rect->w = dlg[objnum].w * fontwidth; + rect->h = dlg[objnum].h * fontheight; + + rect->x += (sdlscrn->w - (dlg[0].w * fontwidth)) / 2; + rect->y += (sdlscrn->h - (dlg[0].h * fontheight)) / 2; +} + + +/*-----------------------------------------------------------------------*/ +/* + Compute real coordinates for a given object. + This one takes borders into account and give coordinates as seen by user +*/ +void SDLGui_ObjFullCoord(SGOBJ *dlg, int objnum, SDL_Rect *coord) +{ + SDLGui_ObjCoord(dlg, objnum, coord); + + switch (dlg[objnum].type) + { + case SGBOX: + case SGBUTTON: + { + // Take border into account + int border_size; + + if (dlg[objnum].flags & SG_SELECTABLE) + { + if (dlg[objnum].flags & SG_DEFAULT) + border_size = 4; + else + border_size = 3; + } + else + { + if (dlg[objnum].flags & SG_BACKGROUND) + border_size = 6; + else + border_size = 5; + } + + coord->x -= border_size; + coord->y -= border_size; + coord->w += (border_size * 2); + coord->h += (border_size * 2); + } + break; + case SGEDITFIELD: + // Allow one more pixel to the right for cursor + coord->w += 1; + // There is a line below + coord->h += 1; + break; + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Refresh display at given coordinates. + Unlike SDL_UpdateRect() this function can eat coords that goes beyond screen + boundaries. + "rect" will be modified to represent the area actually refreshed. +*/ +void SDLGui_UpdateRect(SDL_Rect *rect) +{ + if (rect->x < 0) + { + rect->w += rect->x; + rect->x = 0; + } + if ((rect->x + rect->w) > sdlscrn->w) + rect->w = (sdlscrn->w - rect->x); + + if (rect->y < 0) + { + rect->h += rect->y; + rect->y = 0; + } + if ((rect->y + rect->h) > sdlscrn->h) + rect->h = (sdlscrn->h - rect->y); + + if ((rect->w > 0) && (rect->h > 0)) + SDL_UpdateRects(sdlscrn, 1, rect); + else + { + rect->x = 0; + rect->y = 0; + rect->w = 0; + rect->h = 0; + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Maps an SDL_Color to the screen format. +*/ +Uint32 SDLGui_MapColor(SDL_Color *color) +{ + return SDL_MapRGB(sdlscrn->format, color->r, color->g, color->b); +} + + +/*-----------------------------------------------------------------------*/ +/* + Refresh display to reflect an object change. +*/ +void SDLGui_RefreshObj(SGOBJ *dlg, int objnum) +{ + SDL_Rect coord; + + SDLGui_ObjFullCoord(dlg, objnum, &coord); + + screenlock(); + SDLGui_UpdateRect(&coord); + screenunlock(); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a text string. +*/ +void SDLGui_Text(int x, int y, const char *txt, SDL_Color *col) +{ + int i; + char c; + SDL_Rect sr, dr; + + SDL_SetColors(fontgfx, col, 1, 1); + + screenlock(); + for (i = 0 ; txt[i] != 0 ; i++) + { + c = txt[i]; + sr.x = fontwidth * (c % 16); + sr.y = fontheight * (c / 16); + sr.w = fontwidth; + sr.h = fontheight; + + dr.x = x + (fontwidth * i); + dr.y = y; + dr.w = fontwidth; + dr.h = fontheight; + + SDL_BlitSurface(fontgfx, &sr, sdlscrn, &dr); + } + screenunlock(); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a dialog text object. +*/ +void SDLGui_DrawText(SGOBJ *tdlg, int objnum) +{ + SDL_Rect coord; + SDL_Color *textc, *backgroundc; + + if (tdlg[objnum].state & SG_SELECTED) + { + textc = whitec; + backgroundc = darkgreyc; + } + else if (tdlg[objnum].state & SG_DISABLED) + { + textc = darkgreyc; + backgroundc = greyc; + } + else + { + textc = blackc; + backgroundc = greyc; + } + + SDLGui_ObjCoord(tdlg, objnum, &coord); + SDL_FillRect(sdlscrn, &coord, SDLGui_MapColor(backgroundc)); + SDLGui_Text(coord.x, coord.y, tdlg[objnum].txt, textc); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw an edit field object. +*/ +void SDLGui_DrawEditField(SGOBJ *edlg, int objnum) +{ + SDL_Rect coord; + SDL_Color *textc; + + if (edlg[objnum].state & SG_DISABLED) + textc = darkgreyc; + else + textc = blackc; + + SDLGui_ObjCoord(edlg, objnum, &coord); + coord.w += 1; + SDL_FillRect(sdlscrn, &coord, SDLGui_MapColor(greyc)); + SDLGui_Text(coord.x, coord.y, edlg[objnum].txt, textc); + + // Draw a line below. + coord.y = coord.y + coord.h; + coord.h = 1; + SDL_FillRect(sdlscrn, &coord, SDLGui_MapColor(darkgreyc)); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw or erase cursor. +*/ +void SDLGui_DrawCursor(SGOBJ *dlg, cursor_state *cursor) +{ + if (cursor->object != -1) + { + SDL_Rect coord; + SDL_Color *cursorc; + + SDLGui_DrawEditField(dlg, cursor->object); + + if (cursor->blink_state) + cursorc = blackc; + else + cursorc = greyc; + + SDLGui_ObjCoord(dlg, cursor->object, &coord); + coord.x += (cursor->position * fontwidth); + coord.w = 1; + SDL_FillRect(sdlscrn, &coord, SDLGui_MapColor(cursorc)); + + SDLGui_RefreshObj(dlg, cursor->object); + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a 3D effect around a given rectangle. + Rectangle is updated to the full size of the new object. +*/ +void SDLGui_Draw3DAround(SDL_Rect *coord, SDL_Color *upleftc, SDL_Color *downrightc, SDL_Color *cornerc, int width) +{ + SDL_Rect rect; + int i; + Uint32 upleftcol = SDLGui_MapColor(upleftc); + Uint32 downrightcol = SDLGui_MapColor(downrightc); + Uint32 cornercol = SDLGui_MapColor(cornerc); + + screenlock(); + + for ( i = 1 ; i <= width ; i++) + { + rect.x = coord->x - i; + rect.y = coord->y - i; + rect.w = coord->w + (i * 2) - 1; + rect.h = 1; + SDL_FillRect(sdlscrn, &rect, upleftcol); + + rect.x = coord->x - i; + rect.y = coord->y - i; + rect.w = 1; + rect.h = coord->h + (i * 2) - 1; + SDL_FillRect(sdlscrn, &rect, upleftcol); + + rect.x = coord->x - i + 1; + rect.y = coord->y + coord->h - 1 + i; + rect.w = coord->w + (i * 2) - 1; + rect.h = 1; + SDL_FillRect(sdlscrn, &rect, downrightcol); + + rect.x = coord->x + coord->w - 1 + i; + rect.y = coord->y - i + 1; + rect.w = 1; + rect.h = coord->h + (i * 2) - 1; + SDL_FillRect(sdlscrn, &rect, downrightcol); + + rect.x = coord->x + coord->w + i - 1; + rect.y = coord->y - i; + rect.w = 1; + rect.h = 1; + SDL_FillRect(sdlscrn, &rect, cornercol); + + rect.x = coord->x - i; + rect.y = coord->y + coord->h + i - 1; + rect.w = 1; + rect.h = 1; + SDL_FillRect(sdlscrn, &rect, cornercol); + } + + screenunlock(); + + coord->x -= width; + coord->y -= width; + coord->w += (width * 2); + coord->h += (width * 2); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a colored box around a given rectangle. + Rectangle is updated to the full size of the new object. +*/ +void SDLGui_DrawBoxAround(SDL_Rect *coord, SDL_Color *color, int width) +{ + SDL_Rect rect; + Uint32 col = SDLGui_MapColor(color); + + screenlock(); + + rect.x = coord->x - width; + rect.y = coord->y - width; + rect.w = coord->w + (width * 2); + rect.h = width; + SDL_FillRect(sdlscrn, &rect, col); + + rect.x = coord->x - width; + rect.y = coord->y - width; + rect.w = width; + rect.h = coord->h + (width * 2); + SDL_FillRect(sdlscrn, &rect, col); + + rect.x = coord->x + coord->w; + rect.y = coord->y - width; + rect.w = width; + rect.h = coord->h + (width * 2); + SDL_FillRect(sdlscrn, &rect, col); + + rect.x = coord->x - width; + rect.y = coord->y + coord->h; + rect.w = coord->w + (width * 2); + rect.h = width; + SDL_FillRect(sdlscrn, &rect, col); + + screenunlock(); + + coord->x -= width; + coord->y -= width; + coord->w += (width * 2); + coord->h += (width * 2); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a 3D box with given attributes. +*/ +void SDLGui_Draw3DBox(SDL_Rect *coord, + SDL_Color *backgroundc, + SDL_Color *inboxc, + SDL_Color *upleftc, + SDL_Color *downrightc, + SDL_Color *outboxc, + int widthbackground, + int widthinbox, + int width3D1, + int width3D2, + int widthoutbox) +{ + SDL_Rect rect; + + screenlock(); + + // Draw background + rect.x = coord->x - widthbackground; + rect.y = coord->y - widthbackground; + rect.w = coord->w + (widthbackground * 2); + rect.h = coord->h + (widthbackground * 2); + SDL_FillRect(sdlscrn, &rect, SDLGui_MapColor(backgroundc)); + + screenunlock(); + + // Update coords + coord->x -= widthbackground; + coord->y -= widthbackground; + coord->w += (widthbackground * 2); + coord->h += (widthbackground * 2); + + if (widthinbox > 0) + SDLGui_DrawBoxAround(coord, inboxc, widthinbox); + + if (width3D1 > 0) + SDLGui_Draw3DAround(coord, upleftc, downrightc, backgroundc, width3D1); + + if (width3D2 > 0) + SDLGui_Draw3DAround(coord, downrightc, upleftc, backgroundc, width3D2); + + if (widthoutbox > 0) + SDLGui_DrawBoxAround(coord, outboxc, widthoutbox); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a dialog box object. +*/ +void SDLGui_DrawBox(SGOBJ *bdlg, int objnum) +{ + SDL_Rect coord; + SDL_Color *my_blackc; + SDL_Color *upleftc, *downrightc; + + SDLGui_ObjCoord(bdlg, objnum, &coord); + + // Modify box drawing according to object state + if (bdlg[objnum].state & SG_DISABLED) + my_blackc = darkgreyc; + else + my_blackc = blackc; + + if (bdlg[objnum].state & SG_SELECTED) + { + upleftc = darkgreyc; + downrightc = whitec; + } + else + { + upleftc = whitec; + downrightc = darkgreyc; + } + + // Draw box according to object flags + switch (bdlg[objnum].flags & (SG_SELECTABLE | SG_DEFAULT | SG_BACKGROUND)) + { + case (SG_SELECTABLE | SG_DEFAULT | SG_BACKGROUND): + case (SG_SELECTABLE | SG_DEFAULT): + SDLGui_Draw3DBox(&coord, + greyc, NULL, upleftc, downrightc, my_blackc, + 1, 0, 1, 0, 2); + break; + case (SG_SELECTABLE | SG_BACKGROUND): + case SG_SELECTABLE: + SDLGui_Draw3DBox(&coord, + greyc, NULL, upleftc, downrightc, my_blackc, + 1, 0, 1, 0, 1); + break; + case (SG_DEFAULT | SG_BACKGROUND): + case SG_BACKGROUND: + SDLGui_Draw3DBox(&coord, + greyc, my_blackc, upleftc, downrightc, darkgreyc, + 0, 2, 3, 0, 1); + break; + case SG_DEFAULT: + case 0: + SDLGui_Draw3DBox(&coord, + greyc, NULL, upleftc, downrightc, NULL, + 3, 0, 1, 1, 0); + break; + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a normal button. +*/ +void SDLGui_DrawButton(SGOBJ *bdlg, int objnum) +{ + SDL_Rect coord; + int x, y; + SDL_Color *textc; + + SDLGui_ObjCoord(bdlg, objnum, &coord); + + x = coord.x + ((coord.w - (strlen(bdlg[objnum].txt) * fontwidth)) / 2); + y = coord.y + ((coord.h - fontheight) / 2); + + if (bdlg[objnum].state & SG_SELECTED) + { + x += 1; + y += 1; + } + + if (bdlg[objnum].state & SG_DISABLED) + textc = darkgreyc; + else + textc = blackc; + + SDLGui_DrawBox(bdlg, objnum); + SDLGui_Text(x, y, bdlg[objnum].txt, textc); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a dialog check box object state. +*/ +void SDLGui_DrawCheckBoxState(SGOBJ *cdlg, int objnum) +{ + Uint32 grey = SDLGui_MapColor(greyc); + SDL_Rect coord; + char str[2]; + SDL_Color *textc; + + SDLGui_ObjCoord(cdlg, objnum, &coord); + + if (cdlg[objnum].flags & SG_RADIO) + { + if (cdlg[objnum].state & SG_SELECTED) + str[0]=SGCHECKBOX_RADIO_SELECTED; + else + str[0]=SGCHECKBOX_RADIO_NORMAL; + } + else + { + if (cdlg[objnum].state & SG_SELECTED) + str[0]=SGCHECKBOX_SELECTED; + else + str[0]=SGCHECKBOX_NORMAL; + } + + if (cdlg[objnum].state & SG_DISABLED) + textc = darkgreyc; + else + textc = blackc; + + str[1]='\0'; + + coord.w = fontwidth; + coord.h = fontheight; + + if (cdlg[objnum].flags & SG_BUTTON_RIGHT) + coord.x += ((strlen(cdlg[objnum].txt) + 1) * fontwidth); + + SDL_FillRect(sdlscrn, &coord, grey); + SDLGui_Text(coord.x, coord.y, str, textc); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a dialog check box object. +*/ +void SDLGui_DrawCheckBox(SGOBJ *cdlg, int objnum) +{ + SDL_Rect coord; + SDL_Color *textc; + + SDLGui_ObjCoord(cdlg, objnum, &coord); + + if (!(cdlg[objnum].flags&SG_BUTTON_RIGHT)) + coord.x += (fontwidth * 2); + + if (cdlg[objnum].state & SG_DISABLED) + textc = darkgreyc; + else + textc = blackc; + + SDLGui_Text(coord.x, coord.y, cdlg[objnum].txt, textc); + SDLGui_DrawCheckBoxState(cdlg, objnum); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a dialog popup button object. +*/ +void SDLGui_DrawPopupButton(SGOBJ *pdlg, int objnum) +{ + SDL_Rect coord; + const char *downstr = "\x02"; + SDL_Color *textc; + + if (pdlg[objnum].state & SG_DISABLED) + textc = darkgreyc; + else + textc = blackc; + + SDLGui_DrawBox(pdlg, objnum); + + SDLGui_ObjCoord(pdlg, objnum, &coord); + + SDLGui_Text(coord.x, coord.y, pdlg[objnum].txt, textc); + SDLGui_Text(coord.x+coord.w-fontwidth, coord.y, downstr, textc); +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw an object. +*/ +void SDLGui_DrawObject(SGOBJ *dlg, int objnum) +{ + switch (dlg[objnum].type) + { + case SGBOX: + SDLGui_DrawBox(dlg, objnum); + break; + case SGTEXT: + SDLGui_DrawText(dlg, objnum); + break; + case SGEDITFIELD: + SDLGui_DrawEditField(dlg, objnum); + break; + case SGBUTTON: + SDLGui_DrawButton(dlg, objnum); + break; + case SGCHECKBOX: + SDLGui_DrawCheckBox(dlg, objnum); + break; + case SGPOPUP: + SDLGui_DrawPopupButton(dlg, objnum); + break; + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Draw a whole dialog. +*/ +void SDLGui_DrawDialog(SGOBJ *dlg) +{ + int i; + + // Store dialog coordinates + SDLGui_ObjFullCoord(dlg, 0, &DialogRect); + + for (i = 0 ; dlg[i].type != -1 ; i++) + { + if (dlg[i].state & SG_HIDDEN) continue; + SDLGui_DrawObject(dlg, i); + } + SDLGui_RefreshObj(dlg, 0); +} + + +/*-----------------------------------------------------------------------*/ +/* + Search default object in a dialog. +*/ +int SDLGui_FindDefaultObj(SGOBJ *dlg) +{ + int i = 0; + + while (dlg[i].type != -1) + { + if (dlg[i].flags & SG_DEFAULT) + return i; + i++; + } + + return -1; +} + + +/*-----------------------------------------------------------------------*/ +/* + Search an object at given coordinates. +*/ +int SDLGui_FindObj(SGOBJ *dlg, int fx, int fy) +{ + SDL_Rect coord; + int end, i; + int ob = -1; + + // Search end object in dialog + i = 0; + while (dlg[i++].type != -1); + end = i; + + // Now check each object + for (i = end-1 ; i >= 0 ; i--) + { + SDLGui_ObjFullCoord(dlg, i, &coord); + + if(fx >= coord.x && + fy >= coord.y && + fx < (coord.x + coord.w) && + fy < (coord.y + coord.h)) + { + if (dlg[i].state & (SG_HIDDEN | SG_DISABLED)) continue; + ob = i; + break; + } + } + + return ob; +} + + +/*-----------------------------------------------------------------------*/ +/* + A radio object has been selected. Let's deselect any other in his group. +*/ +void SDLGui_SelectRadioObject(SGOBJ *dlg, int clicked_obj) +{ + int obj; + + // Find first radio object in this group + obj = clicked_obj; + while (dlg[--obj].flags & SG_RADIO); + + // Update state + while (dlg[++obj].flags & SG_RADIO) + { + // This code scan every object in the group. This allows to solve cases + // where multiple objects where selected in the group by clicking one. + if ((obj != clicked_obj) && (dlg[obj].state & SG_SELECTED)) + { + // Deselect this radio button + dlg[obj].state &= ~SG_SELECTED; + SDLGui_DrawObject(dlg, obj); + SDLGui_RefreshObj(dlg, obj); + } + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Update clicked object state depending on given mouse coordinates. + Returns true if the mouse is over the object, false otherwise. +*/ +bool SDLGui_UpdateObjState(SGOBJ *dlg, int clicked_obj, int original_state, + int x, int y) +{ + int obj; + + obj = SDLGui_FindObj(dlg, x, y); + + // Special case : user clicked on an already selected radio object + // do not modify its state. + // We handle it here because it allows to exit if the object is SG_EXIT or + // SG_TOUCHEXIT without any additional test. + if ((dlg[clicked_obj].flags & SG_RADIO) && (original_state & SG_SELECTED)) + return (obj == clicked_obj); + + if (((obj != clicked_obj) && + (dlg[clicked_obj].state != original_state)) || + ((obj == clicked_obj) && + (dlg[clicked_obj].state == original_state))) + { + if (dlg[clicked_obj].flags & SG_SELECTABLE) + { + dlg[clicked_obj].state ^= SG_SELECTED; + SDLGui_DrawObject(dlg, clicked_obj); + SDLGui_RefreshObj(dlg, clicked_obj); + } + } + + return (obj == clicked_obj); +} + + +/*-----------------------------------------------------------------------*/ +/* + Search edit field in a dialog. +*/ +int SDLGui_FindEditField(SGOBJ *dlg, int objnum, int mode) +{ + int i, j; + + switch (mode) + { + case SG_FIRST_EDITFIELD: + i = 0; + while (dlg[i].type != -1) + { + if ((dlg[i].type == SGEDITFIELD) && + ((dlg[i].state & (SG_HIDDEN | SG_DISABLED)) == 0)) + return i; + i++; + } + break; + + case SG_PREVIOUS_EDITFIELD: + i = objnum - 1; + while (i >= 0) + { + if ((dlg[i].type == SGEDITFIELD) && + ((dlg[i].state & (SG_HIDDEN | SG_DISABLED)) == 0)) + return i; + i--; + } + break; + + case SG_NEXT_EDITFIELD: + i = objnum + 1; + while (dlg[i].type != -1) + { + if ((dlg[i].type == SGEDITFIELD) && + ((dlg[i].state & (SG_HIDDEN | SG_DISABLED)) == 0)) + return i; + i++; + } + break; + + case SG_LAST_EDITFIELD: + i = objnum + 1; + j = -1; + while (dlg[i].type != -1) + { + if ((dlg[i].type == SGEDITFIELD) && + ((dlg[i].state & (SG_HIDDEN | SG_DISABLED)) == 0)) + j = i; + i++; + } + if (j != -1) + return j; + break; + } + + return objnum; +} + + +/*-----------------------------------------------------------------------*/ +/* + Move cursor to another edit field. +*/ +void SDLGui_MoveCursor(SGOBJ *dlg, cursor_state *cursor, int mode) +{ + int new_object; + + new_object = SDLGui_FindEditField(dlg, cursor->object, mode); + + if (new_object != cursor->object) + { + /* Erase old cursor */ + cursor->blink_state = false; + SDLGui_DrawCursor(dlg, cursor); + + cursor->object = new_object; + cursor->position = strlen(dlg[new_object].txt); + } + else + { + /* We stay in the same field */ + /* Move cursor to begin or end of text depending on mode */ + switch (mode) + { + case SG_FIRST_EDITFIELD: + case SG_PREVIOUS_EDITFIELD: + cursor->position = 0; + break; + + case SG_NEXT_EDITFIELD: + case SG_LAST_EDITFIELD: + cursor->position = strlen(dlg[new_object].txt); + break; + } + } +} + + +/*-----------------------------------------------------------------------*/ +/* + Handle mouse clicks on edit fields. +*/ +void SDLGui_ClickEditField(SGOBJ *dlg, cursor_state *cursor, int clicked_obj, int x) +{ + SDL_Rect coord; + int i, j; + + /* Erase old cursor */ + cursor->blink_state = false; + SDLGui_DrawCursor(dlg, cursor); + + SDLGui_ObjFullCoord(dlg, clicked_obj, &coord); + i = (x - coord.x + (fontwidth / 2)) / fontwidth; + j = strlen(dlg[clicked_obj].txt); + + cursor->object = clicked_obj; + cursor->position = MIN(i, j); + cursor->blink_state = true; + cursor->blink_counter = 0; + SDLGui_DrawCursor(dlg, cursor); +} + + +/*-----------------------------------------------------------------------*/ +/* + Handle mouse clicks. +*/ +int SDLGui_MouseClick(SGOBJ *dlg, int fx, int fy, cursor_state *cursor) +{ + int clicked_obj; + int return_obj = -1; + int original_state = 0; + int x, y; + + clicked_obj = SDLGui_FindObj(dlg, fx, fy); + + if (clicked_obj >= 0) + { + original_state = dlg[clicked_obj].state; + SDLGui_UpdateObjState(dlg, clicked_obj, original_state, fx, fy); + + if (dlg[clicked_obj].flags & SG_TOUCHEXIT) + { + return_obj = clicked_obj; + clicked_obj = -1; + } + } + + while (clicked_obj >= 0) + { + SDL_Event evnt; + // SDL_PumpEvents() - not necessary, the main check_event thread calls it + if (SDL_PeepEvents(&evnt, 1, SDL_GETEVENT, SDL_EVENTMASK(SDL_USEREVENT))) + { + switch (evnt.user.code) + { + case SDL_USEREVENT: + // a signal that resolution has changed + // Restore clicked object original state + dlg[clicked_obj].state = original_state; + + // re-draw dialog + SDLGui_DrawDialog(dlg); + + // Exit from mouse click handling. + clicked_obj = -1; + break; + + case SDL_MOUSEBUTTONUP: + x = reinterpret_cast(evnt.user.data1); + y = reinterpret_cast(evnt.user.data2); + if (SDLGui_UpdateObjState(dlg, clicked_obj, original_state, x, y)) + { + // true if mouse button is released over clicked object. + // If applicable, the object has been selected by + // SDLGui_UpdateObjState(). Let's do additional handling here. + + // Exit if object is an SG_EXIT one. + if (dlg[clicked_obj].flags & SG_EXIT) + return_obj = clicked_obj; + + // If it's a SG_RADIO object, deselect other objects in his group. + if (dlg[clicked_obj].flags & SG_RADIO) + SDLGui_SelectRadioObject(dlg, clicked_obj); + + if (dlg[clicked_obj].type == SGEDITFIELD) + SDLGui_ClickEditField(dlg, cursor, clicked_obj, x); + } + + // Exit from mouse click handling. + clicked_obj = -1; + + break; + } + } + else + { + // No special event occured. + // Update object state according to mouse coordinates. + SDL_GetMouseState(&x, &y); + SDLGui_UpdateObjState(dlg, clicked_obj, original_state, x, y); + + // Wait a little to avoid eating CPU. + SDL_Delay(100); + } + } + + return return_obj; +} + + +/*-----------------------------------------------------------------------*/ +/* + Handle key press. +*/ +int SDLGui_KeyPress(SGOBJ *dlg, int keysym, int mod, cursor_state *cursor) +{ + int return_obj = -1; + int obj; + + if (cursor->object != -1) + { + switch(keysym) + { + case SDLK_RETURN: + case SDLK_KP_ENTER: + break; + + case SDLK_BACKSPACE: + if (cursor->position > 0) + { + memmove(&dlg[cursor->object].txt[cursor->position-1], + &dlg[cursor->object].txt[cursor->position], + strlen(&dlg[cursor->object].txt[cursor->position])+1); + cursor->position--; + } + break; + + case SDLK_DELETE: + if(cursor->position < (int)strlen(dlg[cursor->object].txt)) + { + memmove(&dlg[cursor->object].txt[cursor->position], + &dlg[cursor->object].txt[cursor->position+1], + strlen(&dlg[cursor->object].txt[cursor->position+1])+1); + } + break; + + case SDLK_LEFT: + if (cursor->position > 0) + cursor->position--; + break; + + case SDLK_RIGHT: + if (cursor->position < (int)strlen(dlg[cursor->object].txt)) + cursor->position++; + break; + + case SDLK_DOWN: + SDLGui_MoveCursor(dlg, cursor, SG_NEXT_EDITFIELD); + break; + + case SDLK_UP: + SDLGui_MoveCursor(dlg, cursor, SG_PREVIOUS_EDITFIELD); + break; + + case SDLK_TAB: + if (mod & KMOD_SHIFT) + SDLGui_MoveCursor(dlg, cursor, SG_PREVIOUS_EDITFIELD); + else + SDLGui_MoveCursor(dlg, cursor, SG_NEXT_EDITFIELD); + break; + + case SDLK_HOME: + if (mod & KMOD_CTRL) + SDLGui_MoveCursor(dlg, cursor, SG_FIRST_EDITFIELD); + else + cursor->position = 0; + break; + + case SDLK_END: + if (mod & KMOD_CTRL) + SDLGui_MoveCursor(dlg, cursor, SG_LAST_EDITFIELD); + else + cursor->position = strlen(dlg[cursor->object].txt); + break; + + default: + if ((keysym >= SDLK_KP0) && (keysym <= SDLK_KP9)) + { + // map numpad numbers to normal numbers + keysym -= (SDLK_KP0 - SDLK_0); + } + /* If it is a "good" key then insert it into the text field */ + if ((keysym >= SDLK_SPACE) && (keysym < SDLK_KP0)) + { + if (strlen(dlg[cursor->object].txt) < dlg[cursor->object].w) + { + memmove(&dlg[cursor->object].txt[cursor->position+1], + &dlg[cursor->object].txt[cursor->position], + strlen(&dlg[cursor->object].txt[cursor->position])+1); + if (mod & KMOD_SHIFT) + dlg[cursor->object].txt[cursor->position] = toupper(keysym); + else + dlg[cursor->object].txt[cursor->position] = keysym; + cursor->position += 1; + } + } + break; + } + } + + switch(keysym) + { + case SDLK_RETURN: + case SDLK_KP_ENTER: + obj = SDLGui_FindDefaultObj(dlg); + if (obj >= 0) + { + dlg[obj].state ^= SG_SELECTED; + SDLGui_DrawObject(dlg, obj); + SDLGui_RefreshObj(dlg, obj); + if (dlg[obj].flags & (SG_EXIT | SG_TOUCHEXIT)) + { + return_obj = obj; + SDL_Delay(300); + } + } + break; + } + + // Force cursor display. Should ease text input. + cursor->blink_state = true; + cursor->blink_counter = 0; + // Redraw current edit field... + SDLGui_DrawCursor(dlg, cursor); + + return return_obj; +} + + +/*-----------------------------------------------------------------------*/ +/* + Used to update screen while GUI is opened. Return a list of rectangles that + covers the screen without overlaping the current dialog. +*/ +SDL_Rect *SDLGui_GetFirstBackgroundRect(void) +{ + // Reset counter... + BackgroundRectCounter = SG_BCKGND_RECT_BEGIN; + // And returns first rectangle + return SDLGui_GetNextBackgroundRect(); +} + + +/*-----------------------------------------------------------------------*/ +/* + Returns next rectangle to be redrawn to update screen or NULL if we reached + the end of the list. + This code is "flying dialog" ready :) + It will need some updating if we implement popup buttons handled by sdlgui, + as the popup could be higher than the root box... + I used some recursivity here to simplify the code. +*/ +SDL_Rect *SDLGui_GetNextBackgroundRect(void) +{ + SDL_Rect *return_rect = NULL; + + switch (BackgroundRectCounter) + { + case SG_BCKGND_RECT_END: + // Nothing to do : return_rect is already initialized to NULL. + break; + + case SG_BCKGND_RECT_BEGIN: + if (DialogRect.w == 0) + { + // The dialog is not drawn yet... + // Let's redraw the full screen. + BackgroundRect.x = 0; + BackgroundRect.y = 0; + BackgroundRect.w = sdlscrn->w; + BackgroundRect.h = sdlscrn->h; + return_rect = &BackgroundRect; + // We reached the end of the list. + BackgroundRectCounter = SG_BCKGND_RECT_END; + } + else + { + BackgroundRectCounter = SG_BCKGND_RECT_TOP; + return_rect = SDLGui_GetNextBackgroundRect(); + } + break; + + case SG_BCKGND_RECT_TOP: + BackgroundRectCounter = SG_BCKGND_RECT_LEFT; + if (DialogRect.y > 0) + { + BackgroundRect.x = 0; + BackgroundRect.y = 0; + BackgroundRect.w = sdlscrn->w; + BackgroundRect.h = DialogRect.y; + return_rect = &BackgroundRect; + } + else + return_rect = SDLGui_GetNextBackgroundRect(); + break; + + case SG_BCKGND_RECT_LEFT: + BackgroundRectCounter = SG_BCKGND_RECT_RIGHT; + if (DialogRect.x > 0) + { + BackgroundRect.x = 0; + BackgroundRect.y = (DialogRect.y > 0) ? DialogRect.y : 0; + BackgroundRect.w = DialogRect.x; + BackgroundRect.h = + ((DialogRect.y + DialogRect.h) < (int)sdlscrn->h) ? + (DialogRect.h + DialogRect.y - BackgroundRect.y) : + (sdlscrn->h - DialogRect.y); + return_rect = &BackgroundRect; + } + else + return_rect = SDLGui_GetNextBackgroundRect(); + break; + + case SG_BCKGND_RECT_RIGHT: + BackgroundRectCounter = SG_BCKGND_RECT_BOTTOM; + if ((DialogRect.x + DialogRect.w) < (int)sdlscrn->w) + { + BackgroundRect.x = DialogRect.x + DialogRect.w; + BackgroundRect.y = (DialogRect.y > 0) ? DialogRect.y : 0; + BackgroundRect.w = sdlscrn->w - (DialogRect.x + DialogRect.w); + BackgroundRect.h = + ((DialogRect.y + DialogRect.h) < (int)sdlscrn->w) ? + (DialogRect.h + DialogRect.y - BackgroundRect.y) : + (sdlscrn->h - DialogRect.y); + return_rect = &BackgroundRect; + } + else + return_rect = SDLGui_GetNextBackgroundRect(); + break; + + case SG_BCKGND_RECT_BOTTOM: + BackgroundRectCounter = SG_BCKGND_RECT_END; + if ((DialogRect.y + DialogRect.h) < (int)sdlscrn->h) + { + // Bottom + BackgroundRect.x = 0; + BackgroundRect.y = DialogRect.y + DialogRect.h; + BackgroundRect.w = sdlscrn->w; + BackgroundRect.h = sdlscrn->h - (DialogRect.y + DialogRect.h); + return_rect = &BackgroundRect; + } + else + return_rect = SDLGui_GetNextBackgroundRect(); + break; + } + + return return_rect; +} + +SDL_Event getEvent(SGOBJ *dlg, cursor_state *cursor) +{ + int i = 0; + while(1) { + SDL_Event evnt; +// fprintf(stderr, "Debug Before Peep events\n"); + if (SDL_PeepEvents(&evnt, 1, SDL_GETEVENT, SDL_EVENTMASK(SDL_USEREVENT))) + { + fprintf(stderr, "Debug Peep events %d\n",i++); + SDL_Event e; + switch(evnt.user.code) + { + case SDL_KEYDOWN: + case SDL_KEYUP: + e.type = evnt.user.code; + e.key.keysym.sym = (SDLKey)reinterpret_cast(evnt.user.data1); + e.key.keysym.mod = (SDLMod)reinterpret_cast(evnt.user.data2); + return e; + + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + e.type = evnt.user.code; + if (evnt.user.code == SDL_MOUSEBUTTONDOWN) + fprintf(stderr, "Debug mouse down\n"); + else + fprintf(stderr, "Debug mouse down\n"); + e.button.x = reinterpret_cast(evnt.user.data1); + e.button.y = reinterpret_cast(evnt.user.data2); + return e; + + case SDL_USEREVENT: + // a signal that resolution has changed + if (dlg != NULL) + SDLGui_DrawDialog(dlg); // re-draw dialog + break; + } + } + else + { + // No special event occured. + // Wait a little to avoid eating CPU. + SDL_Delay(50); + if (cursor != NULL) { + cursor->blink_counter++; + if (cursor->blink_counter >= 10) { + cursor->blink_counter = 0; + cursor->blink_state = !cursor->blink_state; + if (dlg != NULL) + SDLGui_DrawCursor(dlg, cursor); + } + } + } + } +} + +/*-----------------------------------------------------------------------*/ +/* + Show and process a dialog. Returns the button number that has been + pressed. Does NOT handle SDL_QUIT - you must handle it before you + pass the input event to the SDL GUI. +*/ +int SDLGui_DoDialog(SGOBJ *dlg) +{ + int return_obj = -1; + int obj; + int x, y; + // int keysym, mod; + cursor_state cursor; + + // Is the left mouse button still pressed? Yes -> Handle TOUCHEXIT objects here + bool stillPressed = (SDL_GetMouseState(&x, &y) & SDL_BUTTON(1)); + obj = SDLGui_FindObj(dlg, x, y); + if (stillPressed && (obj >= 0) && (dlg[obj].flags & SG_TOUCHEXIT)) + { + // Mouse button is pressed over a TOUCHEXIT Button + // Toogle its state before drawing anything (it has been deselected before). + dlg[obj].state ^= SG_SELECTED; + + return_obj = obj; + } + + cursor.object = SDLGui_FindEditField(dlg, -1, SG_FIRST_EDITFIELD); + cursor.position = (cursor.object != -1) ? strlen(dlg[cursor.object].txt) : 0; + cursor.blink_counter = 0; + cursor.blink_state = true; + + SDLGui_DrawDialog(dlg); + + /* The main loop */ + while (return_obj < 0) + { + fprintf(stderr, "Debug SDL main loop\n"); + SDL_Event evnt = getEvent(dlg, &cursor); + fprintf(stderr, "Debug SDL main loop got event\n"); + switch(evnt.type) + { + case SDL_KEYDOWN: + return_obj = SDLGui_KeyPress(dlg, evnt.key.keysym.sym, evnt.key.keysym.mod, &cursor); + break; + + case SDL_MOUSEBUTTONDOWN: + return_obj = SDLGui_MouseClick(dlg, evnt.button.x, evnt.button.y, &cursor); + break; + } + } + fprintf(stderr, "Debug SDL main loop finished\n"); + if (dlg[return_obj].type == SGBUTTON) + { + // Deselect button... + // BUG: This should be caller responsibility + dlg[return_obj].state ^= SG_SELECTED; + } + + return return_obj; +} diff --git a/Src/sdlgui.h b/Src/sdlgui.h new file mode 100644 index 0000000..b45a62a --- /dev/null +++ b/Src/sdlgui.h @@ -0,0 +1,83 @@ +/* + * + * This file is taken from the ARAnyM project which builds a new and powerful + * TOS/FreeMiNT compatible virtual machine running on almost any hardware. + * + * This file is distributed under the GNU Public License, version 2 or at + * your option any later version. Read the file gpl.txt for details. + * + */ + +#ifndef _SDLGUI_H +#define _SDLGUI_H + +#include + +enum +{ + SGBOX, + SGTEXT, + SGEDITFIELD, + SGBUTTON, + SGCHECKBOX, + SGPOPUP +}; + + +/* Object flags: */ +#define SG_TOUCHEXIT 1 +#define SG_EXIT 2 +#define SG_BUTTON_RIGHT 4 +#define SG_DEFAULT 8 +#define SG_SELECTABLE 16 +#define SG_BACKGROUND 32 +#define SG_RADIO 64 + +/* Object states: */ +#define SG_SELECTED 1 +#define SG_HIDDEN 2 +#define SG_DISABLED 4 + +/* Special characters: */ +#define SGCHECKBOX_RADIO_NORMAL 12 +#define SGCHECKBOX_RADIO_SELECTED 13 +#define SGCHECKBOX_NORMAL 14 +#define SGCHECKBOX_SELECTED 15 +#define SGARROWUP 1 +#define SGARROWDOWN 2 +#define SGFOLDER 5 + + +typedef struct +{ + int type; /* What type of object */ + int flags; /* Object flags */ + int state; /* Object state */ + int x, y; /* The offset to the upper left corner */ + unsigned int w, h; /* Width and height */ + char *txt; /* Text string */ +} SGOBJ; + +typedef struct +{ + int object; + int position; + int blink_counter; + bool blink_state; +} cursor_state; + +extern void screenlock(); +extern void screenunlock(); + +bool SDLGui_Init(SDL_Surface *GUISurface); +int SDLGui_UnInit(void); +int SDLGui_DoDialog(SGOBJ *dlg); +int SDLGui_PrepareFont(void); +void SDLGui_FreeFont(void); + +SDL_Rect *SDLGui_GetFirstBackgroundRect(void); +SDL_Rect *SDLGui_GetNextBackgroundRect(void); + +SDL_Event getEvent(SGOBJ *dlg, cursor_state *cursor); + +#endif /* _SDLGUI_H */ diff --git a/Src/setarmenv b/Src/setarmenv new file mode 100644 index 0000000..2a14ff3 --- /dev/null +++ b/Src/setarmenv @@ -0,0 +1,6 @@ +export PATH=$PATH:/opt/Embedix/tools/bin/ +export CXX=arm-linux-g++ +export CC=arm-linux-gcc +export LD=arm-linux-ld +export LDFLAGS="-L/opt/Qtopia/sharp/lib/ -L/opt/Embedix/tools/arm-linux/lib" +export CPPFLAGS="-DQTOPIA" diff --git a/Src/sysconfig.h.Wii b/Src/sysconfig.h similarity index 83% rename from Src/sysconfig.h.Wii rename to Src/sysconfig.h index ad5f23e..ee13af1 100644 --- a/Src/sysconfig.h.Wii +++ b/Src/sysconfig.h @@ -1,4 +1,4 @@ -/* Src/sysconfig.h for Wii */ +/* Src/sysconfig.h for AmigaOS */ /* Define if on AIX 3. System headers sometimes define this. @@ -7,38 +7,32 @@ /* #undef _ALL_SOURCE */ #endif -/* Define to empty if the keyword does not work. */ -/* #undef const */ - /* Define if your struct stat has st_blocks. */ -#define HAVE_ST_BLOCKS 1 +/* #define HAVE_ST_BLOCKS 1 */ /* Define if utime(file, NULL) sets file's timestamp to the present. */ #define HAVE_UTIME_NULL 1 -/* Define as __inline if that's what the C compiler calls it. */ -/* #undef inline */ - /* Define to `int' if doesn't define. */ -/* #undef mode_t */ +//#define mode_t int /* Define to `long' if doesn't define. */ /* #undef off_t */ /* Define to `int' if doesn't define. */ -/* #undef pid_t */ +//#define pid_t int /* Define if you need to in order for stat and other things to work. */ -#define _POSIX_SOURCE 1 +/* #undef _POSIX_SOURCE */ /* Define as the return type of signal handlers (int or void). */ -#define RETSIGTYPE void +//#define RETSIGTYPE void /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and . */ -#define TIME_WITH_SYS_TIME 1 +/* #undef TIME_WITH_SYS_TIME */ /* Define if your declares struct tm. */ /* #undef TM_IN_SYS_TIME */ @@ -58,12 +52,12 @@ /* The number of bytes in a short. */ #define SIZEOF_SHORT 2 +/* The size of a `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 4 + /* Define if you have the gettimeofday function. */ #define HAVE_GETTIMEOFDAY 1 -/* Define if you have SDL. */ -#define HAVE_SDL 1 - /* Define if you have the mkdir function. */ #define HAVE_MKDIR 1 @@ -71,10 +65,10 @@ #define HAVE_RMDIR 1 /* Define if you have the select function. */ -#define HAVE_SELECT 1 +//#define HAVE_SELECT 1 /* Define if you have the sigaction function. */ -/*#define HAVE_SIGACTION 1*/ +/* #undef HAVE_SIGACTION */ /* Define if you have the statfs function. */ /* #undef HAVE_STATFS */ @@ -86,7 +80,7 @@ #define HAVE_STRSTR 1 /* Define if you have the usleep function. */ -/* #undef HAVE_USLEEP */ +#define HAVE_USLEEP 1 /* Define if you have the header file. */ #define HAVE_DIRENT_H 1 @@ -95,13 +89,13 @@ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ -#undef HAVE_LINUX_JOYSTICK_H +/* #undef HAVE_LINUX_JOYSTICK_H */ /* Define if you have the header file. */ /* #undef HAVE_NCURSES_H */ /* Define if you have the header file. */ -#define HAVE_NDIR_H 1 +/* #undef HAVE_NDIR_H 1 */ /* Define if you have the header file. */ #define HAVE_STRING_H 1 @@ -110,7 +104,7 @@ /* #undef HAVE_STRINGS_H */ /* Define if you have the header file. */ -#define HAVE_SYS_DIR_H 1 +/* #define HAVE_SYS_DIR_H */ /* Define if you have the header file. */ /* #undef HAVE_SYS_MOUNT_H */ @@ -119,7 +113,7 @@ /* #undef HAVE_SYS_NDIR_H */ /* Define if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 +/* #undef HAVE_SYS_PARAM_H */ /* Define if you have the header file. */ /* #undef HAVE_SYS_SELECT_H */ @@ -134,19 +128,19 @@ /* #undef HAVE_SYS_STATVFS_H */ /* Define if you have the header file. */ -#define HAVE_SYS_TIME_H 1 +/* #undef HAVE_SYS_TIME_H */ /* Define if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 +/* #undef HAVE_SYS_TYPES_H 1 */ /* Define if you have the header file. */ /* #undef HAVE_SYS_VFS_H */ /* Define if you have the header file. */ -#define HAVE_UNISTD_H 1 +/* #undef HAVE_UNISTD_H */ /* Define if you have the header file. */ -#define HAVE_UTIME_H 1 +/* #undef HAVE_UTIME_H */ /* Define if you have the header file. */ /* #undef HAVE_VALUES_H */ diff --git a/Src/sysconfig.h.Acorn b/Src/sysconfig.h.Acorn index dc1c88c..05b2a26 100644 --- a/Src/sysconfig.h.Acorn +++ b/Src/sysconfig.h.Acorn @@ -5,18 +5,12 @@ /* #undef _ALL_SOURCE */ #endif -/* Define to empty if the keyword does not work. */ -/* #undef const */ - /* Define if your struct stat has st_blocks. */ /* #undef HAVE_ST_BLOCKS */ /* Define if utime(file, NULL) sets file's timestamp to the present. */ /*#define HAVE_UTIME_NULL 1 */ -/* Define as __inline if that's what the C compiler calls it. */ -/* #undef inline */ - /* Define to `int' if doesn't define. */ /* #undef mode_t */ diff --git a/Src/sysconfig.h.Amiga b/Src/sysconfig.h.Amiga index ab43ade..bae2295 100644 --- a/Src/sysconfig.h.Amiga +++ b/Src/sysconfig.h.Amiga @@ -7,18 +7,12 @@ /* #undef _ALL_SOURCE */ #endif -/* Define to empty if the keyword does not work. */ -/* #undef const */ - /* Define if your struct stat has st_blocks. */ #define HAVE_ST_BLOCKS 1 /* Define if utime(file, NULL) sets file's timestamp to the present. */ #define HAVE_UTIME_NULL 1 -/* Define as __inline if that's what the C compiler calls it. */ -/* #undef inline */ - /* Define to `int' if doesn't define. */ /* #undef mode_t */ diff --git a/Src/sysconfig.h.Be b/Src/sysconfig.h.Be index c6f4a2e..6ebcf39 100644 --- a/Src/sysconfig.h.Be +++ b/Src/sysconfig.h.Be @@ -7,18 +7,12 @@ /* #undef _ALL_SOURCE */ #endif -/* Define to empty if the keyword does not work. */ -/* #undef const */ - /* Define if your struct stat has st_blocks. */ /* #undef HAVE_ST_BLOCKS */ /* Define if utime(file, NULL) sets file's timestamp to the present. */ #define HAVE_UTIME_NULL 1 -/* Define as __inline if that's what the C compiler calls it. */ -/* #undef inline */ - /* Define to `int' if doesn't define. */ /* #undef mode_t */ diff --git a/Src/sysconfig.h.Host-SDL b/Src/sysconfig.h.Host-SDL deleted file mode 100644 index 81efe07..0000000 --- a/Src/sysconfig.h.Host-SDL +++ /dev/null @@ -1,170 +0,0 @@ -/* sysconfig.h. Generated automatically by configure. */ -/* sysconfig.h.in. Generated from configure.in by autoheader. */ - -/* Define if you have the header file, and it defines `DIR'. */ -#define HAVE_DIRENT_H 1 - -/* Define if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define if you have the `gettimeofday' function. */ -#define HAVE_GETTIMEOFDAY 1 - -/* Define if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define if you have the header file. */ -#define HAVE_LINUX_JOYSTICK_H 1 - -/* Define if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define if you have the `mkdir' function. */ -#define HAVE_MKDIR 1 - -/* Define if you have the header file. */ -#define HAVE_NCURSES_H 1 - -/* Define if you have the header file, and it defines `DIR'. */ -/* #undef HAVE_NDIR_H */ - -/* Define if you have the `rmdir' function. */ -#define HAVE_RMDIR 1 - -/* Define if you have the `select' function. */ -#define HAVE_SELECT 1 - -/* Define if you have the `sigaction' function. */ -#define HAVE_SIGACTION 1 - -/* Define if you have the `statfs' function. */ -#define HAVE_STATFS 1 - -/* Define if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define if you have the `strerror' function. */ -#define HAVE_STRERROR 1 - -/* Define if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define if you have the `strstr' function. */ -#define HAVE_STRSTR 1 - -/* Define if `st_blocks' is member of `struct stat'. */ -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 - -/* Define if your `struct stat' has `st_blocks'. Deprecated, use - `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ -#define HAVE_ST_BLOCKS 1 - -/* Define if you have the header file, and it defines `DIR'. */ -/* #undef HAVE_SYS_DIR_H */ - -/* Define if you have the header file. */ -#define HAVE_SYS_MOUNT_H 1 - -/* Define if you have the header file, and it defines `DIR'. */ -/* #undef HAVE_SYS_NDIR_H */ - -/* Define if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_SELECT_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_STATFS_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_STATVFS_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define if you have the header file. */ -#define HAVE_SYS_VFS_H 1 - -/* Define if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define if you have the `usleep' function. */ -#define HAVE_USLEEP 1 - -/* Define if you have the header file. */ -#define HAVE_UTIME_H 1 - -/* Define if `utime(file, NULL)' sets file's timestamp to the present. */ -#define HAVE_UTIME_NULL 1 - -/* Define if you have the header file. */ -#define HAVE_VALUES_H 1 - -/* Define as the return type of signal handlers (`int' or `void'). */ -#define RETSIGTYPE void - -/* The size of a `char', as computed by sizeof. */ -#define SIZEOF_CHAR 1 - -/* The size of a `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of a `long', as computed by sizeof. */ -#define SIZEOF_LONG 4 - -/* The size of a `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - -/* The size of a `short', as computed by sizeof. */ -#define SIZEOF_SHORT 2 - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define if you can safely include both and . */ -#define TIME_WITH_SYS_TIME 1 - -/* Define if your declares `struct tm'. */ -/* #undef TM_IN_SYS_TIME */ - -/* Define if the X Window System is missing or not being used. */ -/* #undef X_DISPLAY_MISSING */ - -/* Define if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -/* # undef _ALL_SOURCE */ -#endif - -/* Define if you need to in order for stat and other things to work. */ -/* #undef _POSIX_SOURCE */ - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define as `__inline' if that's what the C compiler calls it, or to nothing - if it is not supported. */ -/* #undef inline */ - -/* Define to `int' if does not define. */ -/* #undef mode_t */ - -/* Define to `long' if does not define. */ -/* #undef off_t */ - -/* Define to `int' if does not define. */ -/* #undef pid_t */ diff --git a/Src/sysconfig.h.WIN32 b/Src/sysconfig.h.WIN32 index cb2f003..f33f634 100644 --- a/Src/sysconfig.h.WIN32 +++ b/Src/sysconfig.h.WIN32 @@ -7,18 +7,12 @@ /* #undef _ALL_SOURCE */ #endif -/* Define to empty if the keyword does not work. */ -/* #undef const */ - /* Define if your struct stat has st_blocks. */ /* #define HAVE_ST_BLOCKS 1 */ /* Define if utime(file, NULL) sets file's timestamp to the present. */ #define HAVE_UTIME_NULL 1 -/* Define as __inline if that's what the C compiler calls it. */ -/* #undef inline */ - /* Define to `int' if doesn't define. */ #define mode_t int diff --git a/Src/sysconfig.h.in b/Src/sysconfig.h.in index d3b9f63..15f03d3 100644 --- a/Src/sysconfig.h.in +++ b/Src/sysconfig.h.in @@ -1,117 +1,144 @@ -/* sysconfig.h.in. Generated from configure.in by autoheader. */ +/* sysconfig.h.in. Generated from configure.ac by autoheader. */ -/* Define if you have the header file, and it defines `DIR'. */ +/* Define to 1 if you have the header file, and it defines `DIR'. + */ #undef HAVE_DIRENT_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H -/* Define if you have the `gettimeofday' function. */ +/* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY -/* Define if you have the header file. */ +/* Glade support is enabled */ +#undef HAVE_GLADE + +/* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define if you have the header file. */ -#undef HAVE_LINUX_JOYSTICK_H +/* Weather libosso is present on the system */ +#undef HAVE_LIBOSSO -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H -/* Define if you have the `mkdir' function. */ +/* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_H -/* Define if you have the header file, and it defines `DIR'. */ +/* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H -/* Define if you have the `rmdir' function. */ +/* Define to 1 if you have the `rmdir' function. */ #undef HAVE_RMDIR -/* Define if you have the `select' function. */ +/* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT -/* Define if you have the `sigaction' function. */ +/* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION -/* Define if you have the `statfs' function. */ +/* Define to 1 if you have the `statfs' function. */ #undef HAVE_STATFS -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H -/* Define if you have the `strerror' function. */ +/* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_STRING_H -/* Define if you have the `strstr' function. */ +/* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR -/* Define if `st_blocks' is member of `struct stat'. */ +/* Define to 1 if `st_blocks' is member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BLOCKS -/* Define if your `struct stat' has `st_blocks'. Deprecated, use +/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ #undef HAVE_ST_BLOCKS -/* Define if you have the header file, and it defines `DIR'. */ +/* Define to 1 if you have the header file, and it defines `DIR'. + */ #undef HAVE_SYS_DIR_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_MOUNT_H -/* Define if you have the header file, and it defines `DIR'. */ +/* Define to 1 if you have the header file, and it defines `DIR'. + */ #undef HAVE_SYS_NDIR_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATFS_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATVFS_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_SYS_VFS_H -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H -/* Define if you have the `usleep' function. */ +/* Define to 1 if you have the `usleep' function. */ #undef HAVE_USLEEP -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H -/* Define if `utime(file, NULL)' sets file's timestamp to the present. */ +/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ #undef HAVE_UTIME_NULL -/* Define if you have the header file. */ +/* Define to 1 if you have the header file. */ #undef HAVE_VALUES_H +/* Extension for Maemo is enabled */ +#undef MAEMO + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Extension for Qtopia is enabled */ +#undef QTOPIA + /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE @@ -130,35 +157,28 @@ /* The size of a `short', as computed by sizeof. */ #undef SIZEOF_SHORT -/* Define if you have the ANSI C header files. */ +/* The size of a `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS -/* Define if you can safely include both and . */ +/* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME -/* Define if your declares `struct tm'. */ +/* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME -/* Define if the X Window System is missing or not being used. */ +/* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING -/* Define if on AIX 3. +/* Define to 1 if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif -/* Define if you need to in order for stat and other things to work. */ -#undef _POSIX_SOURCE - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define as `__inline' if that's what the C compiler calls it, or to nothing - if it is not supported. */ -#undef inline - /* Define to `int' if does not define. */ #undef mode_t diff --git a/Src/sysdeps.h b/Src/sysdeps.h index d517162..77ebbad 100644 --- a/Src/sysdeps.h +++ b/Src/sysdeps.h @@ -2,23 +2,42 @@ * sysdeps.h - Try to include the right system headers and get other * system-specific stuff right * - * Frodo (C) 1994-1997,2002 Christian Bauer + * Frodo (C) 1994-1997,2002-2005 Christian Bauer + * + * 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 */ #include "sysconfig.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -extern "C" -{ - -#include -#include #include #include - -#ifndef __PSXOS__ #include #include -#endif + +#include +using std::vector; #ifdef HAVE_SYS_TYPES_H #include @@ -81,14 +100,12 @@ extern "C" # if HAVE_SYS_TIME_H # include # else -#ifndef __PSXOS__ # include -#endif # endif #endif #if HAVE_DIRENT_H -# include +# include "dirent.h" #else # define dirent direct # if HAVE_SYS_NDIR_H @@ -102,19 +119,12 @@ extern "C" # endif #endif -#ifndef __PSXOS__ -#include -#endif #include #if EEXIST == ENOTEMPTY #define BROKEN_OS_PROBABLY_AIX #endif -#ifdef HAVE_LINUX_JOYSTICK_H -#include -#endif - #ifdef __NeXT__ #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE @@ -180,7 +190,27 @@ typedef long int32; #else #error No 4 byte type, you lose. #endif -#endif // __BEOS__ -#define UNUSED(x) (x = x) -} +#if SIZEOF_LONG == 8 +typedef unsigned long uint64; +typedef long int64; +#elif SIZEOF_LONG_LONG == 8 +typedef unsigned long long uint64; +typedef long long int64; +#else +#error No 8 byte type, you lose. +#endif + +#if SIZEOF_VOID_P == 4 +typedef uint32 uintptr; +typedef int32 intptr; +#elif SIZEOF_VOID_P == 8 +typedef uint64 uintptr; +typedef int64 intptr; +#else +#error Unsupported size of pointer +#endif + +#else +#include +#endif // __BEOS__ diff --git a/frodorc b/frodorc deleted file mode 100644 index 4dc9999..0000000 --- a/frodorc +++ /dev/null @@ -1,26 +0,0 @@ -NormalCycles = 63 -BadLineCycles = 23 -CIACycles = 63 -FloppyCycles = 64 -SkipFrames = 0 -DriveType8 = D64 -DrivePath8 = /apps/frodo/spy_vs_spy.d64 -DriveType9 = D64 -DrivePath9 = -DriveType10 = DIR -DrivePath10 = -DriveType11 = DIR -DrivePath11 = -SIDType = DIGITAL -SpritesOn = TRUE -SpriteCollisions = TRUE -Joystick1On = FALSE -Joystick2On = TRUE -JoystickSwap = FALSE -LimitSpeed = TRUE -FastReset = FALSE -CIAIRQHack = FALSE -MapSlash = TRUE -Emul1541Proc = FALSE -ShowOptions = FALSE -SIDFilters = TRUE diff --git a/icon.png b/icon.png deleted file mode 100644 index 8c2703d..0000000 Binary files a/icon.png and /dev/null differ diff --git a/meta.xml b/meta.xml deleted file mode 100644 index 1b55e78..0000000 --- a/meta.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - Frodo - Simon Kagstrom - 4 - 20090107 - Commodore 64 emulator - Frodo is a C64 emulator written by Christian Bauer. It supports C64 disk and tape images in the .d64, .t64 and .prg formats. The port to Wii was done by Simon Kagstrom. -