From 312e86b4f9d8232f2d96672854574f2809505af4 Mon Sep 17 00:00:00 2001 From: tomch Date: Sat, 25 Feb 2006 20:50:29 +0000 Subject: [PATCH] *** empty log message *** --- AppleWin/Applewin.vcproj | 386 + AppleWin/GNU General Public License.txt | 340 + AppleWin/docs/Bugs.txt | 2 + AppleWin/docs/History.txt | 8 +- AppleWin/docs/Wishlist.txt | 4 + AppleWin/firmware/HDD/HDDRVR.BIN | Bin 0 -> 256 bytes AppleWin/firmware/HDD/build.bat | 4 + AppleWin/firmware/HDD/hddrvr.a65 | 178 + AppleWin/resource/APPLEWIN.ICO | Bin 0 -> 3310 bytes AppleWin/resource/Applewin.bmp | Bin 0 -> 216118 bytes AppleWin/resource/Applewin.rc | 302 + AppleWin/resource/CAPSOFF.BMP | Bin 0 -> 262 bytes AppleWin/resource/CAPSON.BMP | Bin 0 -> 262 bytes AppleWin/resource/CHARSET4.BMP | Bin 0 -> 16446 bytes AppleWin/resource/COLOR.BMP | Bin 0 -> 1102 bytes AppleWin/resource/DEBUG.BMP | Bin 0 -> 1102 bytes AppleWin/resource/DISK.ICO | Bin 0 -> 1078 bytes AppleWin/resource/DISKOFF.BMP | Bin 0 -> 190 bytes AppleWin/resource/DISKREAD.BMP | Bin 0 -> 190 bytes AppleWin/resource/DISKWRIT.BMP | Bin 0 -> 190 bytes AppleWin/resource/DRIVE1.BMP | Bin 0 -> 1102 bytes AppleWin/resource/DRIVE2.BMP | Bin 0 -> 1102 bytes AppleWin/resource/DriveSwap.bmp | Bin 0 -> 1102 bytes AppleWin/resource/FULLSCR.BMP | Bin 0 -> 1102 bytes AppleWin/resource/HELP.BMP | Bin 0 -> 1102 bytes AppleWin/resource/Hddrvr.bin | Bin 0 -> 256 bytes AppleWin/resource/RUN.BMP | Bin 0 -> 2882 bytes AppleWin/resource/SETUP.BMP | Bin 0 -> 1102 bytes AppleWin/resource/resource.h | 67 + AppleWin/source/AY8910.cpp | 751 + AppleWin/source/AY8910.h | 15 + AppleWin/source/Applewin.cpp | 677 + AppleWin/source/Applewin.h | 25 + AppleWin/source/CPU.cpp | 1023 ++ AppleWin/source/CPU.h | 32 + AppleWin/source/Common.h | 73 + AppleWin/source/Debug.cpp | 11637 +++++++++++++ AppleWin/source/Debug.h | 1259 ++ AppleWin/source/Disk.cpp | 583 + AppleWin/source/Disk.h | 33 + AppleWin/source/DiskImage.cpp | 900 + AppleWin/source/DiskImage.h | 13 + AppleWin/source/Frame.cpp | 1111 ++ AppleWin/source/Frame.h | 14 + AppleWin/source/Harddisk.cpp | 567 + AppleWin/source/Harddisk.h | 12 + AppleWin/source/Joystick.cpp | 591 + AppleWin/source/Joystick.h | 22 + AppleWin/source/Keyboard.cpp | 396 + AppleWin/source/Keyboard.h | 18 + AppleWin/source/Memory.cpp | 1242 ++ AppleWin/source/Memory.h | 33 + AppleWin/source/Mockingboard.cpp | 1625 ++ AppleWin/source/Mockingboard.h | 25 + AppleWin/source/PropertySheetPage.cpp | 1006 ++ AppleWin/source/PropertySheetPage.h | 5 + AppleWin/source/Registry.cpp | 99 + AppleWin/source/Registry.h | 6 + AppleWin/source/Riff.cpp | 139 + AppleWin/source/Riff.h | 5 + AppleWin/source/SSI263Phonemes.h | 19615 ++++++++++++++++++++++ AppleWin/source/SaveState.cpp | 290 + AppleWin/source/SaveState.h | 10 + AppleWin/source/SerialComms.cpp | 301 + AppleWin/source/SerialComms.h | 17 + AppleWin/source/SoundCore.cpp | 645 + AppleWin/source/SoundCore.h | 50 + AppleWin/source/Speaker.cpp | 1076 ++ AppleWin/source/Speaker.h | 23 + AppleWin/source/StdAfx.h | 38 + AppleWin/source/Structs.h | 273 + AppleWin/source/Video.cpp | 1685 ++ AppleWin/source/Video.h | 32 + 73 files changed, 49282 insertions(+), 1 deletion(-) create mode 100644 AppleWin/Applewin.vcproj create mode 100644 AppleWin/GNU General Public License.txt create mode 100644 AppleWin/firmware/HDD/HDDRVR.BIN create mode 100644 AppleWin/firmware/HDD/build.bat create mode 100644 AppleWin/firmware/HDD/hddrvr.a65 create mode 100644 AppleWin/resource/APPLEWIN.ICO create mode 100644 AppleWin/resource/Applewin.bmp create mode 100644 AppleWin/resource/Applewin.rc create mode 100644 AppleWin/resource/CAPSOFF.BMP create mode 100644 AppleWin/resource/CAPSON.BMP create mode 100644 AppleWin/resource/CHARSET4.BMP create mode 100644 AppleWin/resource/COLOR.BMP create mode 100644 AppleWin/resource/DEBUG.BMP create mode 100644 AppleWin/resource/DISK.ICO create mode 100644 AppleWin/resource/DISKOFF.BMP create mode 100644 AppleWin/resource/DISKREAD.BMP create mode 100644 AppleWin/resource/DISKWRIT.BMP create mode 100644 AppleWin/resource/DRIVE1.BMP create mode 100644 AppleWin/resource/DRIVE2.BMP create mode 100644 AppleWin/resource/DriveSwap.bmp create mode 100644 AppleWin/resource/FULLSCR.BMP create mode 100644 AppleWin/resource/HELP.BMP create mode 100644 AppleWin/resource/Hddrvr.bin create mode 100644 AppleWin/resource/RUN.BMP create mode 100644 AppleWin/resource/SETUP.BMP create mode 100644 AppleWin/resource/resource.h create mode 100644 AppleWin/source/AY8910.cpp create mode 100644 AppleWin/source/AY8910.h create mode 100644 AppleWin/source/Applewin.cpp create mode 100644 AppleWin/source/Applewin.h create mode 100644 AppleWin/source/CPU.cpp create mode 100644 AppleWin/source/CPU.h create mode 100644 AppleWin/source/Common.h create mode 100644 AppleWin/source/Debug.cpp create mode 100644 AppleWin/source/Debug.h create mode 100644 AppleWin/source/Disk.cpp create mode 100644 AppleWin/source/Disk.h create mode 100644 AppleWin/source/DiskImage.cpp create mode 100644 AppleWin/source/DiskImage.h create mode 100644 AppleWin/source/Frame.cpp create mode 100644 AppleWin/source/Frame.h create mode 100644 AppleWin/source/Harddisk.cpp create mode 100644 AppleWin/source/Harddisk.h create mode 100644 AppleWin/source/Joystick.cpp create mode 100644 AppleWin/source/Joystick.h create mode 100644 AppleWin/source/Keyboard.cpp create mode 100644 AppleWin/source/Keyboard.h create mode 100644 AppleWin/source/Memory.cpp create mode 100644 AppleWin/source/Memory.h create mode 100644 AppleWin/source/Mockingboard.cpp create mode 100644 AppleWin/source/Mockingboard.h create mode 100644 AppleWin/source/PropertySheetPage.cpp create mode 100644 AppleWin/source/PropertySheetPage.h create mode 100644 AppleWin/source/Registry.cpp create mode 100644 AppleWin/source/Registry.h create mode 100644 AppleWin/source/Riff.cpp create mode 100644 AppleWin/source/Riff.h create mode 100644 AppleWin/source/SSI263Phonemes.h create mode 100644 AppleWin/source/SaveState.cpp create mode 100644 AppleWin/source/SaveState.h create mode 100644 AppleWin/source/SerialComms.cpp create mode 100644 AppleWin/source/SerialComms.h create mode 100644 AppleWin/source/SoundCore.cpp create mode 100644 AppleWin/source/SoundCore.h create mode 100644 AppleWin/source/Speaker.cpp create mode 100644 AppleWin/source/Speaker.h create mode 100644 AppleWin/source/StdAfx.h create mode 100644 AppleWin/source/Structs.h create mode 100644 AppleWin/source/Video.cpp create mode 100644 AppleWin/source/Video.h diff --git a/AppleWin/Applewin.vcproj b/AppleWin/Applewin.vcproj new file mode 100644 index 00000000..48d06686 --- /dev/null +++ b/AppleWin/Applewin.vcproj @@ -0,0 +1,386 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AppleWin/GNU General Public License.txt b/AppleWin/GNU General Public License.txt new file mode 100644 index 00000000..3912109b --- /dev/null +++ b/AppleWin/GNU General Public License.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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) year 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/AppleWin/docs/Bugs.txt b/AppleWin/docs/Bugs.txt index b9abca98..c18368cc 100644 --- a/AppleWin/docs/Bugs.txt +++ b/AppleWin/docs/Bugs.txt @@ -6,6 +6,8 @@ the Disk 1 and then start the emulator, it will get stuck shortly after accessing the disk drive for a moment. But if, after selecting Disk 1, I start the debugger and then issue the "G" command, it runs just fine. +. Jumpan doesn't seem to respond correctly to the controller, it moves in one direction only. + I'm unsure if this is an emulation problem or bad disk image. [TC: Unconfirmed] -------------- diff --git a/AppleWin/docs/History.txt b/AppleWin/docs/History.txt index 5ef9ef2c..1a723006 100644 --- a/AppleWin/docs/History.txt +++ b/AppleWin/docs/History.txt @@ -23,6 +23,12 @@ Acknowledgements: - SSI263 phoneme samples from Chris Foxwell (still missing phoneme #0!) - Harddisk card: source module & f/w by Robert Hoem +1.12.9.0 - 25 Feb 2006 +---------------------- +- Moved source to BerliOS & released under GPL +- Debugger v2.4.2.16: + + Breakpoint on memory address added: BPM address[,length] + 1.12.8.0 - 22 Feb 2006 ---------------------- - *** Major re-write of debugger by Michael Pohoreski *** @@ -30,7 +36,7 @@ Acknowledgements: + Syntax coloring, navigation, execution (eg. step-out), view memory as varying Ascii types + Symbol maintenance (main, user, source), source-level debugging, mini-calculator + Breakpoints: conditional on register, profiling + much more - . See: http://www.tomcharlesworth.pwp.blueyonder.co.uk/Intro_To_New_Debugger.htm + . See: http://applewin.berlios.de/Intro_To_New_Debugger.htm - Fixed speaker volume not being set correctly at start-up - Fixed emulation speed control (was only running at 1MHz) - Fixed internal ADC: was flagged as write to memory diff --git a/AppleWin/docs/Wishlist.txt b/AppleWin/docs/Wishlist.txt index c161042e..8db65393 100644 --- a/AppleWin/docs/Wishlist.txt +++ b/AppleWin/docs/Wishlist.txt @@ -8,6 +8,10 @@ Priority: . DONE: Shift+Ins to paste from clipboard . DONE: Cmd-line switches for: d1, d2, full-screen +Post 1.12.8.0: +- I have multiple controllers and was wondering if a future version of the emulator + could support selecting the joystick you want to use in the emulator. + Post 1.12.7.0: - Light-gun support (if pixel under mouse is set, then set $C061.b7 (Richard Jackson)) diff --git a/AppleWin/firmware/HDD/HDDRVR.BIN b/AppleWin/firmware/HDD/HDDRVR.BIN new file mode 100644 index 0000000000000000000000000000000000000000..1d65f73bc9d34e51c40211cea13fd70c79b41c89 GIT binary patch literal 256 zcmZ3fu##aV^GchQ485NYtSspLd|>T|10HKX9*{W6c!AL(V*;}e!?BeGthddrvr.lst +@del HDDRVR.BIN +rename 6502.bin HDDRVR.BIN +copy HDDRVR.BIN ..\Resource \ No newline at end of file diff --git a/AppleWin/firmware/HDD/hddrvr.a65 b/AppleWin/firmware/HDD/hddrvr.a65 new file mode 100644 index 00000000..25963a0b --- /dev/null +++ b/AppleWin/firmware/HDD/hddrvr.a65 @@ -0,0 +1,178 @@ +; AppleWin: Firmware for harddisk card +; +; Copyright (c) 2005 Robert Hoem. All rights reserved. +; +; Assemble with a65.exe (1.06) +; +; Modified by Tom Charlesworth: +; . Fixed so it can be assembled by a65 v1.06 +; . TO DO: Make code relocatable +; + +; constants +hd_execute = $c0f0 +hd_error = $c0f1 +hd_command = $c0f2 +hd_unitnum = $c0f3 +hd_memblock = $c0f4 +hd_diskblock = $c0f6 +hd_nextbyte = $c0f8 + +command = $42 +unitnum = $43 +memblock = $44 +diskblock = $46 + +slot6 = $c600 +OS = $0801 + +; The Autoboot rom will call this. +; This is also the entry point for such things as IN#7 and PR#7 + +;; code +*= $c700 ; org $c700 + +start + +; Autoboot and ProDos look at the following few opcodes to detect block devices + lda #$20 + lda #$00 + lda #$03 + lda #$3C + +; Lets check to see if there's an image ready + lda #$00 + sta hd_command + +; Slot 7, disk 1 + lda #$70 ; Slot# << 4 + sta hd_unitnum + lda hd_execute + +; error capturing code. Applewin is picky +; about code assigning data to registers and +; memory. The safest method is via I/O port + pha + lda hd_error + clc + cmp #1 + bne noerr0 + sec +noerr0 + pla + bcc hdboot + +; no image ready, boot diskette image instead + jmp slot6 + +; image ready. Lets boot from it. +; we want to load block 1 from s7,d1 to $800 then jump there +hdboot + lda #$70 ; Slot# << 4 + sta unitnum + lda #$0 + sta memblock + sta diskblock + sta diskblock+1 + lda #$8 + sta memblock+1 + lda #$1 + sta command + jsr cmdproc + bcc goload + jmp slot6 +goload + +; X=device + ldx #$70 ; Slot# << 4 + jmp OS + +; entry point for Prodos' block driver +; simple really. Copy the command from $42..$47 +; to our I/O ports then execute command +cmdproc + clc + lda $42 + sta hd_command + lda $43 + sta hd_unitnum + lda $44 + sta hd_memblock + lda $45 + sta hd_memblock+1 + lda $46 + sta hd_diskblock + lda $47 + sta hd_diskblock+1 + lda hd_execute + +; check for error + pha + lda command + cmp #1 + bne skipSread + jsr sread +skipSread + lda hd_error + clc + cmp #1 + bne noerr2 + sec +noerr2 + pla + rts + + +; if there's no error, then lets read the block into memory +; because Applewin is picky about memory management, here's what I did: +; on read, hd_nextbyte = buffer[0], therefore we'll read that byte 256 times (in which +; the emulated code increments the buffer by 1 on each read) to (memblock),y +; increment memblock+1 and read the secod 256 bytes via hd_nextbyte. +; +; if I could figure out how to consistantly get applewin to update it's memory regions all +; this code can be moved into the emulation code (although, this is how I'd build the hardware +; anyway...) + +sread + tya + pha + ldy #0 +loop1 + lda hd_nextbyte + sta (memblock),y + iny + bne loop1 + inc memblock+1 + ldy #0 +loop2 + lda hd_nextbyte + sta (memblock),y + iny + bne loop2 + pla + tay + rts + + + +; $CsFE = status bits (BAP p7-14) +; 7 = medium is removable +; 6 = device is interruptable +; 5-4 = number of volumes (0..3 means 1..4) +; 3 = device supports Format call +; 2 = device can be written to +; 1 = device can be read from (must be 1) +; 0 = device status can be read (must be 1) + +; $C7 = Removable, Interruptable, #Volumes=1, Supports write/read/status +; $D7 = Removable, Interruptable, #Volumes=2, Supports write/read/status + + +; datablock. This starts near the end of the firmware (at offset $FC) +;; data +*= $c7fc ; org $c7fc + .word $7fff ; how many blocks are on the device. + .byte $D7 ; specifics about the device (number of drives, read/write/format capability, etc) + .byte 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�A!(Z1s|PTpEUX#8 zD8ON4|F$U``{0PI0*_`ymI2(tPI2D@$H7Pi8fYPW{7{Cl;0xGBs}_0QRslJ{G&B<| zKvWRaB6L!L0XitQ|GFNvBoVrh1u$?0Nfj=JGEv|vYHS2u7T8MkZ2tIX3(pa{cTzL7HWKodYxO0>dL1wkMH&;SDEXV>xyBmGlr-wIan zQI$s1d;w7C_-p}c()@zfQ^1ijL#z>=oB{}((M@^|Saq_g;W7=%K`|+LD-;l-L)nDf&{-Cu zQRoSSM?)3^Hy&1kH)uj%k+-(mbTOefo@q=MOY8{>G9ZJuB~ZkLuCg!+rXXp80-Ev{ zSOF5|1UCM(irt97pq5VN^HY%#rU+^8fA*JdAcJ{kiY=>C8DS2dAP_*6=A6|$JD&>~ zKI0|qG|c%q^ZW;EWv-^;Pm~xhVNVGwX`~NO=oZOx-{&bs@(P$(QcZDFOHGtdfdqS* zwZ`Yvg8|6SmdutMFSS#q=R81|&Xm7MnF4`1IN%DeoNLVy5G&-O7bTVD3xEV{(sZ#{ z&F2dmE&$<_RJMi?dyDD(EM0IiX8?_=U}m0Oa?}YO=Do|CvxP9>S1}jGunA`t`}|C( z2{&izNHf0_J(GzIO&F4rk0>WOCZvw^6F^7_-z5*sPB2EyM2fN#B6pSZ0|b=d;In{Y zr~{4`DH(7_$U8?l5gw5%)_n1NAvBPbV<8)%yGpK3I?2)&3>y`xs3}%4O+bVLt@z$8$_s&j(v!7L)RkD3XLjKm8N!Tm{3L)5|mf$3mJfF&M8x4j{G6)}*&xPq;E9|9J>Z2x zq_N}%1tt&;WfqUqU(hL>UqMAqS^(xi6TF@gpNLhQbSF4wg zJ?bjU+O3FmMOibTV7kyI=7)fos7xGGaTno5}}wUHwN&{Fep75N5qnx#s$ z#+YJ)(?p9NWhIOgQBf^bYT7Wpq*^AmIIEXR$EXSZYNgViDYlhTsr1-_BpM;~j#(7c zj@c=2@T_bF;Ls^smAb(w?3Cz&jE-NCa=XcxyV3}?SP_S zC<6T&xfLLN)aCb^8Q@Bc?fGE(m z90Q*$TQ1Ef2{yPejwd{Wxx;7FDF5AJt-#=5s0BC>MTAp;(}#>ANppKR?Q*#m=b(YCqX=A(EUC?@aXZwC>b919qha*Hs`S`fB#i2GfO6 ztUv+wjUg2Tex)D9-mQO}B68#p?8e!$2;7q)qvYJu+_~pkGhimzCwgO_>mAT2*h0;O z*a4GdLYZsog9wxYXb}hMuMCBuHj+q0AvZbrArC-mnX1OVZwYI^5o=f?=rRbXa=UbgE0(z}T+CZfT>+F3*a!N*fiZ zthZitOIw}Z^d{Zis-dBnnwiwLw>rr>JE(Lj)oQt3-Q3z}!aN}D_z7$aBbDxNZipd3 zaGG_t0zJLc{MFV*6$nxFrERUbxv^OdhFSbbFvVOL_yzvB3WCY65W+Qry2^8KQmCQD zl_}t)ni2%EM{KnEBa?mkNACwQN985{2oh0_n5=HWSO5#6(2T%rm1yu$^?Yl(gl)q)-Ac=`dp3L*=%+*n=Rg~W*3JqviWtZx{r{q z+RqMi?v2*-CZ{xdb#gMk_{D0LHL9EY^tYG~#Ee1)-EPjHm+A1N|NL3A$8B(im$S(8 zYUvq94EjZWNrwHC1I}?Z8`sL)o7H5pSdFVYwU)|jbkeJpRV9RFaB-lXVYj)t4SJ@- zZmYSu(_y56`lb7|&hmU(+JcH8rIWN)+Nt%{t6{Tu(VJqf)yf;2#Oy#>r&*)*^sH5V zva!K8jPK));%FY88qBFuFvn!rB#Q!$d*JCSip*_fifC zcA-Q#aG4pJj!gY)3j;lR&^BgYn*=REz<(fQ^p(v6KnRgWs2u2Y@lHd#%|_dCr&l4VKlU}vY(U9S19=WkYTE4F)5* z?!LmQG4jGZ1fAqmofOXTk4BAhv!uX^7$U_NA~C3^5ez@DRu_d9!f6R*qJ}|?^K9?& z-lNB#eDZjY70dSH0dm$OTF5zp3B4u#TSy0$6Z8UoNin(;cs5!$i+oUdRC)Z#lTRK$ zc}!mzCwsU!;7#7aKEm)lgKVw`gZ-bcX6rZHzZVxP21&2m)z8xFemdPRAMt|+pS>VB z@cD3j_?J`YWOY5MsjrqB47(P3{oTU~tkA?sGRYeaI=>c>qKPWI{~d2t9MdG7457xdLM5P<#F8>4)>y~D%V z?EK>Q9{}r41w^IgPL*hX{;HSmKkFQV9IfA^$7QNzYsjb9Td$v|vnosm0`s&~swU^_ zw1lENgwB#?-Q)`5;ZQ6W?{9iro7MS>A;N04O3v!TO|Q8LZzM@}UF}V`HDFeYYHzu{ zQRyVBLE5Z7L%Zek)vp$v&`45@OVbDr>twB|dX0?qjzEGT7`I50`0kLBD|HFQs20k? zvJHhKP~ZoKh-3+^51OfZ$fbdnEp5{5YV+Ra=Dm9lHXq!(chAH|+qpEluz-Ur2v|Uc zp_ME=-E54vniD)h4J|ZOi1^bhp7rSA<~@3$lg$k}V*O&gz|I6PC+*^N`1DkA}o)DRmv*sG!7i{`&o6PY{(E(imW_Y|LUe!+1NSm zEQeVsS?{WHrq`v;YJX!JH~JDa6iSHns=2jQgy~dB(o6VHiH`@&uOk2_aRerYVcjBg zK1+}=*NB-fuBSmE%kYU%FUzF^g*37u;6PSk#t0P+7w#q?m45a3(I<~epFD&S9zJ}` z-~FEks^l02lN&^#EvgGAh-OO)@F9SmPB*CH8t3>acw;YLezHeTj~{;W2^912;l@w7 z=-I-c3Fbwf&A7$Wbw2p>7jyxFx^VZWEtzWED^wN5M^5@Uz)9d-5c0>U1jONS6 z(}T11bw2o%J2Q*mZMOV?eKwxXW>aR&9Mzs{`HmOMyjjNh(H9zy50W$RGMP>nzq-uJ zlCFcE^g_yu^*ZN(WV* z49l_}yqF$RVa+?ls(FGFH)CYDx`bB{-X$~wo2+NU()|u|#**fA)&VG){DNB2v+CVk zU=*VUl5)TW=q~?eJ=nr(IbYUxJF6NfnGVyP=3=;UpMcEec{41PYI)T8irxymn5EI{ zm+=7ckfql-EW`}#Ta!1xB2b5^as>eNqvZ>YVxo8ad`O0@FkpZRDJ&Ga5noGmlZJ-7 zTE47CFJE>0{bApw(O|Xvl*a=A8Zbb0DR7B_TMLA#RUjqMLl5*}Voc-(bwsr0>#vT6 z{dT{B-_sZjhHbji^j(}uRSXYJuc4Imch_J1S#{Lv4o}iSV>murT+iFJZ?77s`;&RK zG`_}UXiSMN0wUZbj&YsW5Oxj$Rgdt@3F%GAC%!2 zPAKnppB~D4#8}4bn+Z6YEz{a|xpRDS3ND)g2k-=LmdkN-r*fPeAJ>l)IBHm~qMfvJ zrs?H7u+&_mkG3kE6JBOetvWgYY#|r|eEE9Ztj$n6``1KyJG0)iat$YVJ+72G)5SU~ z?Iep~mL#jo?hZ&=t$J9%X)@(;{T2TA4q-eH23Qj(<^KMnyL0~-yQf?3T&6fsi|d0@ zXFb{3#6OxXSH0s7F4A@d2fX~O2*7|6BX$u1ZuUbk!>i?jfuXDMwO|k)(24#~$c(IE z&h;f?@&hQEFVB%AhA)2wl8BUqeM?2Wp#T^91la?FG<*FeaOpRcbAgzTpXxF>dIW6% zKNw|#LF|fMdXRLc(={l{R;*;B70i=?mqEb9t{VN5eq;BkHZXcj4+{FHJ?6+_SSvl* z+pAPcFDp-k!#sU4zHW36^VJun!{xG3eUUA%)9%wmjWNYcZC8Je+B(mV5aVJsVen{* z!3&JW7jJH^m#x~Ny<@bjvs(ExjtB^|=I$XvC$ zlTNWt4t67qwucG5faX958q_{l>l91(2GeJIyY#X%uHg!6_p;2+=pxU%)#UxUyxmzW zlWOn%4|ViV0hC(rW~%)Hr&g=WMQ>*t`(lymXzOBQ%d~d3@^x?Lel1^gdduW;x|Ypw zik8hX$K2j(E?1p$ezQO|fhTR0%Kgf5rBq7Xo-}+t<&Z;bDWR-s*>R`#yN-F_?6- zf^yE+lkFWw002Yp90iu{Y}FP?4r+e0-r1-v)}`Ifhjn?Q1UQmGwN?i#8Zp>Bg~<{) zQ5~t681PABjuT#z$_GhbWq=6BCnp0HL+5O1pK(Jlk{S4mL|3+kvGZ_~K>!DHrV>X>NpK~5p?fur({HHTmyxP4UcB}ggQO~)-j+5XPq>bjBjzUwM=!u-qY)-xh^`2Wj!uR3sC+Hpwv zWw$w7rwP==?xaSKkR!~0V1&0L5sI;_cHFASdR7^}CK*dNC2G6L1W(g+=ycF!x z9srx+u>JAV!5TOaoMBYZknRF)2d6GkKH24sLI)f~F{uD+=uwQFevr?`GZ{g z?P0sI`%}2UBifBgtQi6bmJ$I}K#7wwxYGw8oAY?(HLzSWr&x!As zkXN zo9XP`n>TN?WC6?>V~^U)*z&+BUr$Trfyh~1j>|iBBRZuW&@s!lA+pZ1XLvW{z%Pqa z4OQO#La=W=-rZWPlbtPGXutvvn0G+&@|?WdYMpFUPCJ`h$E$UB3#SUdE~$5_y+!pI zNYUaEBmj*yCd`avonWrS60krw8Q{f#X5I>ht~4SjU>J!9xdoJ5gA?!*_6H-yR@CDORP-o~RNJY((QwC^oiGZPek0C_j z>UCQ?Nb|*Y`(*d0W2@09=k|5F1HH{h?ZX*(xglV8b78me%jEOH3rv^1QO?s=wK--O zy!K}=A|#Ss2?8180RIT!>zrYPXX_70$ajGJ#epnhWm=VMXJ<^Dxw)*BOGnTL$nrf? z#PPEAr1shD<`?fSKK%Z2@T62t(N$-?bd|01>a*#u-ru}?_jWc}5=q-Ga{y+Rqi?Pz z3^ZZkRG(ek{Nm;p@Bi?o$ITD7@CQR-MO6)-v;#Taya6c5dPbN9>lUz8PKW4^ z-uVhs1`m6RL5pL9tbKjM?#|-Fw6vjv6r?j+B-p#Fyz>k%`a^HGnsutB&gF;64hGCB zNdVTf&SI7@dUT9_(kYzge7O}yLxJn%9y7jaQDz%8PJJRg@CT&)R{pNH17&H$= zaxE@US7+(P5A(`ajbkHMhM~IS&khy@NMIkv6{SfA4qzW%>jCicY`;Y4&Dl1v6osgc zgbsP&?c}7^tTtD9Rw+H#%E)ilFbD%bm@kmmFh71q@b2cORyxJ5==I)T)HWGbydIYb zCC`AzUb9>ZP4li?N;1u7_{G@|%lS#CR8BrzB%52vAHp%XQ>$)uhRbl7ezPu@uIQ$d ze7M=YTV-^iQ!PJRYRFW#e;jZuP!j+IFAWS7Xrb_S7Mi|+gKI#*96O@DOr3%xfCxAd zBv>0_Va3W11IRY9#2XY>XG$9Tg|SCKgBz56jr}qheANza>Gucir%yv|i7~pshGaU5 z_OIbw8ZBLeAhnrf!;CnHh?{<%ef|1GlxXo5n89?0R_0uHxIH4h0CfG;;00rXK2SV& zSjj+tt)A|`0XjeQYxNv{Im@oI){6uBMeFfvtIf&ccgt4wxke8YYA67;%e+PGa8PZM z3usZFYN48%R{E>$Y}e?1e){Ffxb~ce>-nF-0Nh**8eZ-1COX^NIx7M*&yG`uf;p*0 zw#G%?+O9I2G9NYi-RiT!S<I{DleBz8f9|MZ^x9b-Wt(k#BD@TcrEg%1y{>HQw2- zUo5eAjpnAw!Ex2m?A19otTszxypH$p_7LCpvn3|WxV&*6tK_!;#?Ir?F~rn6AXWqMFpk8~L;2;ayV-WH-N=)+@|p zC{;RNVTCYIj`fI1)9YRGu6PHv9fvyH+NrNTWSxz>+suABKJIL95fla};sn#D_(LD% z^K~I!F%i*RbyIGpQ=%w`HVA9DPox59=n#1m1+9dvwRS8)d0>0S1V$n(q@a&!*t>sn zke~mez?-f=E-}FL$?nmG8NKm0hqzsrYlx@4|6+Qxgmhl0XYiWxZVi|1I-Nf6 zK`vnfM|YPud9Bi}Vy@6_w)f<5We>-=^yJaQo#y!Rhl?)bcg$g_bX$jikr5bVsw8ub zo={=GTdPiJg+gR%7CsQo_DUdWZ*#ku{qXzqZo5joQaxcHiAfLGuLl(*ReDr9?pL2N z+IZGWCXP=MVr(XdtD84Tf+{>5uRpAq-EgzcD+FiHS3G&2e9RZTjCWzE%VowKiHFrv z>0wo$7!&vX-%hLDC#8o#=$Nb|$)~-F9Q5veR_i=rcp$m_Fy6Xb?fv2Ry(*Juwzn(Q z9h&M^7hxAbgUf}ZRM*@<%jgt|gRn_R&sSmU!ZA*<#DHOLFK{uU;*?9PAzdA4-Qh5F zsf!vS-%g^0B)EG0rR;))U6676Q;byN@!Yb44M{M`QK&#T5y>rrbP<9>6=@AaJRmBc zLRF!U+F%8RG-&K#IvW{=om3zoG(Dd#Uk`ZhmB^k;qgq=oPX~kcProA+zdZkUP(k}A zgV}mH@9ux5d7NRyw)c-5HW=4}aj-bhB@G&wx!+e4q7yyot?AM*Ztr3N zJALNO-@9D(c2Hxh1>xXYGi`QiXU@Q3j!X~hd)j0WtlP@WTAj2?#BK=*|FAmTd8R?z z`~78WV=L+X?T22c+N@QX$fq_6tEE5;ETi>X5Ay{FX@rO&32=ig!|(voXBQxlVx?BX za`8_z8SRagyaPtUK8^5=6Lygyjc`;1Op5&iP>ACj%6CDDfKn-ga4cE`YezTSRpc^I zjQxVZC^w&YIyMDNvs}K8E(q*4hIH2lFTpCvoN{>q=q#5v_^mjm7niKw{Jb_@|2t;6 zd^@0+2?;l3A045DF5eu!Ad7bE_ZP(TroX#+bJ!~4xHAgU*)m)I@c!bv!xszeTU)+) zb3u=EK7G+SVg&fZ4>xb#y!}P?^EZq#fv?L;%HGYGO>p+}*$i(OlQ#Uno10(I^xd0Z zTwF}6nAX#aKfM3I+?k6bMyU<^uP<-t_u^tUn;kX3o zI|P(_>ziLROVbaR2GmwJ7oDom!Xkcu*}=X!|8Ox|FpFnK++=1x^Twx_zyCnaY}R3v z8YZGGHHofVez4OW zGyG@bqz*n~x)A8ZV$F$1K{Ti(I7MQ?Tx4j71jexbbOD$~g9IG2`x8cvkShza(eYLz zz5DRXAKtxx`~ID)H<+})dHepuTWyeOdj9U0?|yqhEix~NsaXH~H}BqzS5$jGOGW^Jdb!csolN;|BcvW)ZWx{HvKU7s5a9FE20u>is#Hm_R-< zumH)wTwh$yre?Bp30#~*{{C{+WMC3Zy<4qNHwk6umzOi&g(+ObQl#J(ylwp>@Zt;x zU;;>pz&NKxgV$UGGjN5YO8NxrYJE=A0S<)WP%H9=DRY1~>qoj@pTIq|?8 zFrpmR>Bs%V)oV4ajlOnrgzBo0<7C;cGh#xmcYMR7SfP4${Y`Ei(!-53%Oh zs|)HH=p{x>SL?HQk_AZRoWgWQTXK}M$2?;LD0#k#kpZ+8$g(J7RGc3P>2MaTSp%|%W&L-G}%GP&| zT^KNMj7kV3$P&f#jG!W1B(~ZjPR`U`0TUW5F_%FaiAm)Cmb zq17;9+5^WMxuS3pFpD8aB*Wp!p$*gS3hfg62HfBm>i-A{T9_e>038NMjQ6se>bNKY5*Wt91ttIpYC?VWT~aIPnm??0h^So(DR)__Tu4sOGJ&%T%~c96|VS z^+QD2^k@llOy&wJKoBe=L&bvV1jmm+Gfh|Uk$Hiz0E|Z?E;mJ&P!;K(Y2r{(J;jD_ z9}poS2~f=;O8XZs4P63dY7^C$phBl zVmV0#LqLX>w@ZurOkJ-n{`6OYlo$_?u;3S@L>;sTfI_9v?__=!&NsJu zNY%95L5@8Yy5G^Lyj700u@f zfJw-ZT})6)S1dD8ac)t7C1W%x7IG|!h4~IaEd?cM-7W$_ffx47`4dt^PuROjA_v4% z0Z3kyKqg3=q%IOOHDiT1gJ7^>sKziLZ4fp)R0@cwnF<6&hh!r^{hu6tbURtfXkGBj zQ;bVPyyy{>4r^u?LN+9se8S!5NF(-0j4K(JF-{Zyl6WaBUhQ4S8;RHD8ZbF#gWx0H z!I#^eiE|D^#-F$K?H{mHS|UNd5j_|x-~sI)`iKe=gu22^&7tD2s6l!nR4f!6a1TmJ zSVhMo$$l_{1dT_D*bU?}0s9EH62|*%q_*jixJ}yy! zK7t{fIOkJGl7pZrR@dP&sdE4e_&_0%(s?dS8^iyAVp*uC&_2)#<^wM95-mdboY-47 z(w`p0A9&$UeFSNNvlz)9>kK)1KwEHz{4rk8NUX$+nn8lV-_Bk$UrJ9Jg5f(He8KoM zBSyGT!bZ$x*qP2?i9K>e1cge9zLYXURFcGxgd-S$%nD=2Y`8I+h$@cjp_fdp3xI%% z+g419L8pl<&JYz8$N_f+0GT#u3GKlPD-~6M1dk`k1yFM=t=5;U*a8s2jq`4BWU=;FM>(VO}^JfS{V{1 zjz=eeB*+IK5aXwhV)D~h;w6_@Tws`|PYI~-u~*oH;YOv6Jh66FMqJY+J~EW0w2aQI zc)*qh%h6YMz?(@y3#h@~{aFb9TJbnRoc5SNOpwD4m80khGEfN>JTT2J(KA`jB&o^t z1K^x8z?m`c-++r`QGjK3u2Q<7@7a4)3w*Jh*ryQkfPjk83ewDWIXe?hC^Qs^+J!w0 z5~_g$+-_3t3u#&@b4%@pQ;dV^JOLOct_uTz>I)wfdM3?FQ|}b)FBxjbYb!`JT1LYVj)3V zi3Q0SmIXvh9;NvDH82?-IYu3T83e!BYO&x@uomd#66K4Pppa+ucfJLhvH^yPxFI#p zuf7VP3@~`{&ijq_E)$>LFme>MB&#eCD^?F8$+chbg*9EUiI8J3h&|2pxGb~)&JYLe z7l6QcERsNY%#o=oVbEo;Q=o;}7xS|f3?R$@B<4Bbh)B$XQS+WuSt?#8;XD zCmy@-+fAZb00zwv`;0lgw16%k6{KzJDPv-aci}$)6choNc-Vx;Vq+gYRJ_$ed`u)0 zLD8EP>`^EpGXMlHPcwOu5{ji^=1Fn%fTy12vg)7SOlq%5-tdoAh21;>#tv{hSWqu0MqUdK7E>H zH&{D7Muc0{8=kzZAHS;CPfmg?U$Q6Fd9}%utrM|nLwa+#6L4T1+W^4O!-TV6#u20uPI5Az z%vO>fdj@?1T0%lBqD&V4*9qXY#Gdhi-RX>?-pv_C4Z#_p!8hV;>Mo?Zlt37UHX-{|Z?2K^|lN^VIQ1M{){l7a{-T1&@$n<3c37TmP#^PaZye@Zcd!qd#y2 z3Y5SFgznT(>WrM*9G(G##OnemLdL|$Pf;9BK3J>=C;eBC9`cYA&nRu)dvWpwGC_3U z#g$MgXaL1@PVZU2aeVxWd3t*2J~e&PTIdP!(^N9>2JC_UK$px^Jy|wLUiEwcYV%<{ z`oux1C-s9yi2GaLCK89yf)#oI?mgxfS31WF^^SNFRMf3eSopueT3zIq@J=%Qma9hdK%Y%nJ z8^rx-G_IJ>Flqysx$e<$`1A!s%`$cWHH{u|$YR;pc=-4QZ>fb!;25s>d^szaWhLz+ zW2g$9#=K5Y$I@lR=z%`K3R{kSJ_K4+ zzIX2-kG(y5z*BG!Czuhy16NqVIv%b|uT6!q(jQbFJbJkI_?}1De9VD1?%oxdwFdf= zjtux!^1^EKM)I@7MNW-0wJ9^bUj_wOZPa5+b>;tItX#&9;25)RAUGOn7|9X zvzRWb_qLGmh6iQKA5C3v+;6C*;2hS|3|UWw$}K?h39lMjlc}E#5_mM~xODH{<2_p6 zyYEwkoA*BY=o6eU7{F(AO!$F@Q#pu-4+`a%=CNG9MF^Fw|QB=H%m_X(MEL-)Gn!JRI@{ z_ZW-({N97R8xLPJkYG&b#7Zb=2ElRL)A8^T(g|51eqpw8_fzscl4$XzWvUIn%$muD z$D5D#xRD+~YJ*0X;BuqZ*yCCYn*DacU)mx?yjN={Xa=K&4$sn=YAWU7H^YSJLTC3( zFJB`!`VcZw7MK+=_wL@^1|vxSOf@tnX4gy4dW)OJqk91C$HzN2HUnNT#7B2aShK++ zh35=301Hu=Tg-&v%fJ4VG&;S~y~;~)R;t!2<(K7Jxzeds0O{tPkM3^6F;_P7b@4$g zvP@76eVIV-Ao9P~h57H6hdeZ)#sM38OT=t-k^o9*AsNNeqJ&ysZEDnNpa=*|(e_Wi z{f^*_)kj~Vo(BC!iY#Lc>FGW?cQF_}eDpw?z_7`~Ki2hmxU=!FF$iC0hLJO7Owv0X zZ;Lx#esLwfC__G_wH^ycriGdPPB88lQ3Z5NTU-J zU7>|q)az4O@ee+`|5P(n0sHlXXDbt=^LpvgHR*gq=YqkCTMq|HH+qt{Z za&Dc*Ost6h1H_y4w0T@_Huvkzed;$V)t5Z|@!4K&yAEPDd81xPOt!)#3Ur)&cfUEf8}A#qij`ghwrNNr6xe zD6TEI~Ou61U)ixKv)d3HSb`F?T!fKc_0t!O zGh**3UXkL**(~UoNTW&y7}Uy{FI(UIxc zm{u!6{!&b=cJA_W5aLHfhG@!oBxlcW_}f2Zt=^a_``zXj`^<`}*FLL#vAFa> zCEyZ?!ariZw+{1PfBCvULS+BCJbZD47NAH4gl(%8W5i!87j`J3xzLS9@ciq0uQ5Wo zr=vaC82sda;F{A0W7PRC0hn-+25J8%FNV`c_ip(H_XG_R!~?kiAofl+Hpb3wB7{yP z4Iy)%D#+#NHF#6JXb>AUKK|)6hg>|s+-z5thDK`dH`<@x-I#=4(SHr+1o3h0mtT+Y zjHq_hZ8y56YFp({CI}eG!w+G2Op`~CAGgp%ty^+IgFq`PBoK7aIB1<5^lOcKAKgdW zXf1OXB0n~s&WJXL@>4 zkUo=bcngzwY5_yl?_u z!NWo=ftSEat=6gXM!jn3BLM@kVC&qni}*3Eb~*tF#QI-RJ`A=5qU5ujpAMLGh3%?7>H~+*?tgkFNWy4A+A*$l2D#kt zpTH-r!C2BlceIleOzw6zM%FE+U$$#mdvNcgjZYA)6z1UL)NnBKT~I1W9;C*c6+z$& zA+Ugn=ABJ1|JP+>0Pa9uOCXSH)CLDF3>X4-1X*an2X;CF57V19b1mx!`>k5@i|QD( z?AO|W=b*9i(N+S@QwOcV7ahhRKo8h3t)B!78fNqouNi!>@V+u%I|filmpe6VU)c)Q z;a!J!?rc=BbXK+uEd-FB=t6IB_9HAH}rOo;fZ~`B|(qKkztDV$< zQEmG!{?(bUilD7(Cmc66aa4o70Hm;E7+#17^ehY*3~r2=ZsQ!&Zi zHB3i2fH4S@&)+dI+vqNM3C8&mMW~~omVgDTLI3$*@rGIkkf@oBUjC^NOi}#w;k{P~ zT{6-?QMm|~Hik00xfzR>8(Re9HId+$P)2B_<<)C|5qLntnku^wAImEILo0i+j6Qf> z3txVO(QF8J{BZFre8YH|3z+fF5!}Pi}Py;l7`$IaxFot6^Vw!aTgQxW8l_vPQ zg+-7_U`KrfZZKOqXPw!2_^OVEfkyc9@(8%3CaLTdgkyF&sn*Ibd7&CAiHGYnd1+g~ zMgRgDAma;Pt`_<0(XA?qjjQLoM?oW!iGznSi*({6CD<_lCNdqW{`w^*vL3ELW7Y2e z0OSRoFkmf2SgV!9&JpOu)y4 znLGkUw+Me8P@$@*0sy+W(-_e;J*8FxeD=R+9BkeF7+N~RYAt5&fg1uW$p;^NsqO1W z;e!L3M&&?rhC`PXFAHQc?J$qmMIi^d0HT|d&zsEquhej*n|mmqO08V4?Ug&a)_f~C z*icLv9962@AAJ;$GzDHH7{YbZ49P|qwAcCd)t8CV)}L1PsE5rL-^4&OcnQpakivvT z&4gF&O7k~;{8INSyrYo+;Kg5kl-zh6a!DR5>i16su>sFVi;s6yGX<_ZCgn$U{6of#?lQPRAB zcLRrtjubl`g^$BLZ62wt*Y*edKn43a*rkSk;mA8Y52-{AxZEyb?-H~#JK=wwH8op= zOtpqfPHPesUWmB|&!FWPBfymLU8 zD3~tb1{DS+1+73k2b3HX?scm%J|PhEDa;W7iMa}3Cg6GITq#@~tfw=g#Q_*cm3Rf( zLVCeGVpD7Lju?#IgIcS+vBB#I`Q!gn+|H~53Kn6>&0i{-3)*Q+~`*GST!wg zSF#J}>G3L8BXP`T`KteQe=bsTeXXuzXRLNmR5 zWIOZ>P>I9YK7w=2{bpYc5>LF|WKUBSoa}(E=zCG9zNQe!GaEUp#fQdmj6Nw`%EGGfX z#Uw2$r%E@b%90ICNy5pLEjgSYK~Buy{yooXlQW-eTCMKgE#dv@UGKW=y`htGAjkf$ zm06WB+1q<{wDjvz|RWk`SsG0u{#@`1>0(k5RoyywggertSn@0x^H_PEL+ye~!Znoth<|IDKLM39~-<$Bn2Rm_fg&VI?Y11CMB!1Wadd@9CR& zJWftNOl!5S2PZm7EvcqfUYNVxm=IiTjJB!V#BC;C2TJgf%0MfCwQ}yJ<4Gu(q>~ld zI}d>YW(Q7*xE{)QJ?V9yynOfW7vAXOQCI2_F>c8X)K55}hekH|DS_5_IN z>F6Kv-{2<#Go8t7Mg#_{mM30U%;Wcb^9^+I%?c41AZFPD(V}Vt^_`SpF8*`8Po`BO zP}5yUzvSC`;;q8`+(kPdXD9><*D=U8#4fx_sCKgkbychK5g5C?40@{F>&v^ZU%h+% z_T-mw90V>AkdbiKut)}6f?$GK4C-KylqQPT*1=$n}a1V&@$|?X!nDDGF7B|HgZ}#83Jeuww z%|0B@-Vf7mqY1c+{nc}e{GG!~;x8=K{D6NXy#!1^0t^#?DL(!0H~;*3wm;k7Kc0P@ z4Z#2)2{$Qqmi|6}mh3Y)!8dPE>eM(q*qqqi+^+!Ffr*u~H#qysgf?+rl+3+*-%xd zay-JlI@+_zVWcBqnfognpn!OtYWCdRmu0h;unG)g%{O20PJKFo(Q@$1$_l|6og*&b zH3H^Ba7vWEC}J8FGt^#B;%IP>l`xj6fq-LZ9zmE3%iY}dJw~p*9P=gntpsB5wkelD z@-n^imH9Ky(<@*I-D!)oMwRM)7{mz7aOd&CrwEMQ&ZCxPa%06V>LtKILrPGhAjTp} z_S7=`U8A}7C?xD=`5D0%v;zEtP$0g$4qmW5Zb1rWNqNy~K70A*i2h^#+W`#o@jV#o z^G(p$&_h5A$=ju*0jHYp4)wbe<|Cv3#0U;FtU`BfwuiOy_LKkKf8&_6erNY&c6>bX ztdF9ewPdq6pQYOvIbcZ6D&K=mOo-84`KMSY;ve1M%Rky?Oqr@<^yu;f>4lzzSXMQu z-;}qudi(p0l!BNOXg1^%Ko0uYg|>lWCdCFA+PyXd&l;`R8!27*fw&l92xUZ0Q=OAc z2LnwWA0e-Ev|1s`OONK3=jK+atb>k{ak$cO6rX)M8-0Ua%n-6e?-mT#t*TYUi$b@; zq`#@)tuS=fJ^H#c+I)b-1rHdUTPxR4N#Nn^^~o#F$72j&DySQjGvXJ4V=P9ex)N1V zpvB3h%sp1X3-SdivNJpl*^#+pQWD9691=MYoE#GYAzH#wVyY5g5{yG9wlGJwhB5f@ zcLQ@26;*thXjYH$0RSa16DkKRv^v|*UOEDn*-$!c2EWYSA8wc?4Ar}dI7wO?=avTG zjtMI%8>bv)@aWO1j`uf$;M1er2QEKHl*UL6sF}_F#3reJd4Lrj<;*;pNq)%kHMv)Z z{4}`3?ZGNVo8rp3>slh%g-&LM???aTnRQK30sSI$vbpAI23iTyo*sW3B!ukp^fsEc zuwF0HaoMQXC0Qye4DWKkIsrWVXfsUIWd_X{^{sa%A11{@zHY|RT!6-JBAj;B>9C7=1`o4h6rSDJKXel>UD%sk<_ij;(@69nd%(}Yrc`lx_4 zTDgobbPe2WaN%-H))7T|TvqKsmH>uzIA{T?aI~+H6JySofxN{ z|NHOIFSSP^g&isfHi@>QU=X&@4+3{c^+vxx8e*Q_PA%2mWitdXR6^O!bT*{$eev$I zE;V_Uu+V1W_-RgPMQRWWdoWC~w*BlUz(SO!J?=P?WH9*f=OOlm2GPaEWV2PgcmqIHv0y`UinAkNJ#hZ_wEbt+zjmIXj3 zANmC8!jUf99KiTu<(3gUEs`VSPP5XTh6KZb$#5XM5Vye@GNqAOzP=EUVl!ejF7nPN zC&$%%<{s4)x=4YY|2TuGm} z!%}Q8H$+a(%}0$2_Mi)9I_-lWU=E?+KiUAK7K=PPfib zl?D#Z2tcrHz%XNDFKxi0RpT!6)S|?Ph!4YOfvZG^NNEq7ik65QMj)osnSB^y#?T^U zrRY-tvyA7HUpY6o$OUK@e56lA1368ZArGs8&OyZFZt08z7jo2Q5C94oGuGn+m|2tA zPP!XAEo@xiZ21=Qhk4_5mQNpoia`SarjpaS&MaSEdvNW_EfmaWWS`Op&sro5p3Gu^ zh05#q4|R|>Hixlw?`oMW5P(s)01bq(bqqZ8mJmMJr60^4Idv2PG=vA=|D|UQhY9G3 z1Bbrzkr7)btt%4Bao)kk*pfgs>UI8#T*A2e6mEhtD_EzDnl3O|)x zO&fGM??>NjpgQOmGzlqpU;8s19^5hH7~}#5GAp1I5G>BkR{$GtQAa1L8(;vp4CsiZe=^g*#DOWQ11ma#pT~bnZz%^EQYjY~ukvTMA-0RLtJF*B zSfyYgaKirjji(K>J=|uG1wDa-{V;w%vG@2*2B3<5%r0En+hw^RWdFCSy>9O)X_G$w8uyl=H@g*MqL!q?%``0tfj=xDPH=2 znxsa+Kn9|vwwb-~1tr}4o{tTsxjcADIk#K)&yzb!^FRlmF#{Q;r_tHgZp zQiTEsedABD_H>K$vJYFQ;Kd}d)1MLjsX;NKLTnYU&$D`i5i}vgRCv_aQD!3mYT%CO zO0E3lcE1xqX?Ly2qa)~+(ewlTUEE**TPp}A$)1}JQXp%|*L%E+J>uhl2X0oZqdYR_ zM8v4U1ReeEc=G{xDsqb&KC_6+-dJvrn&1+d>c|rLqT8qwL3#V;)tguE-n{zd%@LdC z^_!ma7l({kF6}6V0YZl8!nKa77(fJZB-7(*oxpB^(wBUOxu`3|jH#>1z*ATFIPgOk z*r9x(jCQl$`Qu|7R~jjjE9GF8dcLJUg_@n4yU3V2QrVb8qcAd3Lk@KL7Xb|9?;N*xZpg)E*m~OFwTjo%JE1JOX-X7%~k~6AlmD0}j-^ zH-0o7>2#+GT_QUuUlDWg9u*3-1O%N0yykE7CkIb%hG{(m5jLnl&L;ixMd-!B(h3~E z_!e2=;0)eRR4_>=*hQjQnqTTSm~f@vXiVy(?tys1@|B|juqdiun97Cs=?=z^{!4LG z5Hc`Og1UK{LJ?;NXS=SW%z?(}?YmEpKhm97VYL*uG)bX@OJrui-^fzC!7Sl?b~+zt zJJc}nTUe7~3K{Jm$;7j!oMZfvpsAx`5|Kaz23(;=P&p7y2ce8qhCJryzNT*jD#C>| z097x&YI~|bMA$ja6Uc`jKf`5$V z8S?{C*!^#}P&j_w*}x8bYe&3-yrv(`3eo3SHRAq-VrKCM2?|Yt?}WYa7M>6IVUL*G zOeVvIjJp$t-pM@(9IaL>Sz5RWNkn9&G3sJUSnW?lbQ|DD3_(nM2FU=hy31$gE1s4H z55cC}V}I!MeUM6D)^ z3m|)S!=s311ejzOWlKY}Xppc?I5HF{@aJKHlEdHss+v+pfCKV(8>|B7uApICL~Yyi zfsFtHsKG+mi84s>#oaD}U!$_r=P|04BFf+$zU~{F0l(Vqe^U0Z0V15If{Fcs()axV zz)Ozo!aiMDtSxSFoWDLAhV};syoZrnLMH;IR=Dzvzx%&`V=sn=$wkKcMTHl%v&{WL z7n$wjeiQOXs1npoc~8)^%h`pis1TIwc+@2kc*tj{bAn4%w0Ey8OA&C3kvK3VMkEn_ zjql+FAzm7m|LYL(M#>uCDU8@r;V`|_lw@b;EfmD`Wgbtu(+?v{CJ3VtLMD@Ch42b4 zZw8M?l^Y3xKupzK=5#jBuK^W?2_Rn7GSG_(X8z1VD~eW11a_&M(mUeA4w92ue`AGN zSMRUfVi`x;Gc&V{0$N6liTytbZ5F-;A}lVz1XM6k7@~lTz;Q;ZQiu49Zja+W@O)a| zQ&*`52}1cEZ^!xper5u!=#UE1M+N|;PWNQmCea83K`sVua(L6~-jz90j;VD4 zF64R`ViFv4G)_{Rb?cgu;1$*mMzT0&^7J7RzzBSD`T!~J5qpUz3wgzn^uqci>K9Uu zz=fgCj}HSN0f#_GbTyrw!bX&Y4@82IT@Dg@qsHKSaZ_feSi{uNaTIMjl9d>~{`C65 z+XPrdSM7StB8K786zWC#*u1gwYyn{VVz_=l5(*iFjU zm-yz2JqU=tR1xuoC#g6&{9Qb>h~avH`R94$Mtt|3OOAXar#S9Igx)-N-Cm|I`9Hx`^oy;m>@=7ye!XNdrn#mJCG9WcD-#%nOJE7fx0;~ZP!YDy6;6px%AF;yAbSrB}NnnQyHkY3Bhrq({*I@1g{tX#F zz1c_T;vUgVmP+p4cJB9)!7tj<+ZZJMpMK}?cgj+1!&jSsNR;{8I!87HHU|$Wn)~Y^ zG2C8)TUevB!OaM7#J7I}+q4Jc4^}M5917QBQn)&|6ruwfL+K1XOV9+s_=^hxUbu&7 zAsKKP*;7vIuL{KiV)<)69Xi!63{DZ3usw{^Zy5m8QI3hm1c#rvGo~TK-O_6;v=dLB z^2z^EfQc&Zeqn?91QZqtBx|rTtH@t!rp|&f)C=w$YL^|#bD4x>GP+aC<*a9rTuy<& z7`8dgOr#rwD7efKCd|FdcUouKxE=+&88TBDa6+U0x^8re5FL;$fGBTB;bKIlL9i0rlFd_MK&O)BF6JwQV)EAjfI|`+WRJqI z$Q~t9j#DOeUdiNEGm**8tYmX5E4dN^hKQXFyT()Exzfa;VzuPl%KAEK28S$NUMBJU z`Inzx_~P>~KfCasUowV#f$_Lse#!PTN0fj5`8i&4l;OEw2Ft)PQc!SA^*%v+0x*~( z3%`dyynjeYEDVjH2;&nkVH8SMWQlNav_rx}W2DUCuge43`}D4vYYJ8S z)MB60${=pgTH5lPJEzUD?IhMF(oO2AkX0Ws4^*PSpI~~gG;OF@$jpGAw8wHiq^74w?nxOWH z6VMBi8348Rx>MHJDVPhuH_GOsXijC4UB$o{Qfnw&h^kWRqeTMT{Kg#A&Q}o0i#y z72ii%NWJa!G`hf3DF7wYrm%qAt%@y?) z=g}P`CgYRvIfS$O@C;8uEC2-sFLsj#gfUJsc@o?p#$w>iMvee48pcs;hTY5`$}MV` zB&i?kA8%-gLgO31B=Q+g=PhYTP#Tm-Tr51haDEMamMxrFtTk211mI%Q_uue{ScseB% zyb;hK&LV~+2|M1Hi|A2i@G{*zeb%%_8?{Tm(JwhsP4tVI>9k=P4!UuhF@RX4*r;Zi zJ453{FlOM}hkA+L1RX36%AeXPmzj8Zhedpi|I(FGOtBo+iZ8J78TuMenB=nP;$Dn+ zK)I+v5F*8niw&4!s>c_8H{2)AhjwuboXi|C`^TuWd$7ZMlzE%@6*EQa=++7LvI!v! zTs>epukT`=40R9X)$8+D0k0}3G?Vm?FkkTuY` zSB{ko&QYvq@FjdCxuvdUqei@=AU0@ME>L5auddwBtdOmSkAw=;A|-??PC{XSin$}A zcOM?AtdNA521m#akkH+vh=#JtX<$x0gK@BRN;=rF?2p?3#1U<9u@Xk2A-+o! z#Rv~?b@e7$8h(&0a*RyFe)!gm7?C!Fq?hn}@irV3-V+86_6c7mzWQQj@n+NT2Ythj zVPFg#{lraWkfh;wq(Byd-ps-cphr5ujDYnF+tm32rlE|6|Fn1mXWZ$#sc9hm!a;0V zt+<_}s3KJ*Ux}RZderWfh?_t?>&2vuUqh0aPo5Ou7t#jX7@RPRq8(KXxp2rQU!Cry zuRp%sp>i7!iHa6HCD4+um_@uYH@EFE<~&hgRej>I9E5LN*Y2$Xou0kkh$?T^_*C5zl5 zCr~V#ecnanqF|Vy5R!35v3}?mVt!aHmO-(nuik8sUkWQEOd<%Jl1mM^WT zB7JZC4{k(P!#<&P1A4YtycyqOR)Zlzvxgy472q%_jUGRur|D~xOnr6$1hxnt13>J` zFVYT}s4HN~!bx@E#huY1E1KX?`)NC#uF|wnZje4$_mdImD;5iF2uR_b6q80FVH6T? zRxGfFCTdp$#6Lc`P^PQJiE$Zs+ew zk>qnH*`JP#?boQ1Atqd*;%jxaL`ej3xH;_+FkzE)Dy(C{!|*QF>K2RoMP~a}p0WBH ztC?@`$?s>bX~`UfEnpN;f~LayJRs?-3Zo8EyXH-S4Plu37RrGb>lDJNK6p>MM>w$c zU)UTVg8rb+VROS^9U)#@$O0gSeOboGU8bwFxEIJU(%#Y;Bp(WTGeJMno^$|RaB)lD z7^FBfeL%G$^djLPd8t@n_DeVf&jpy$HBK%>voJH9jZz0XD=CiXLgtrhau?km0EP50 z!yvTiCm6&KN(d+!A!wFSLSbs0wJ#d3(7G(F+?RL7Hh63aWG(` zn8Cn|CzMy_lhyp4Oqu@A5Ra>1YnTUy6cUpt8o8-645`eNFjQCmc9bAmnAL$%OV-WM z%a&VZqGn2z$@9O9zkH{4@`427tr5pm$Xo!B=LNbgl|C00X>Ju|O;IiSng9OfSR!6gq%~31N6A zFht0vRk$#JJ%$))+Tgl~<-sU%XLv=rX^+`S!NR8*AJ6KH!zLA2tYV8O=SBJE%hlXj zM;j2_vup|%iEG+SeMp9~PXmUxSVKN?U6j6H%~NHY+R*X~q#uY}W9L$D`ry?r3++dW}?(44EHyml7HEFSWSp9Wiv{1+GdgMuU+d z0Uerz@g!CHhPFm*+0>S9Qw8ohzJ^9_NA$Clfcmh)g%)^6NerS-@Q*kd$pG+>;>8wr zAwP@R7pAr$6)JA&96aK_dY8^1dC;Mi90MfU9UPz~=>u58M$^Mb-$FZP0<>7=LFirQ z%R}BYiOz88DUix>o1|28pglYzy>QE7wOGJR5&bP;r3!$udcte1+|MkLY6QEQI=wE(*qag=2&NvK%fp%s1Xv6oyO6m8j-rye1{?k zIR>W+bEt#VPAa}5X3YAR3Q7ildVMv=5Ph;zDi{8_6(`}9^GpF2Y~$ER4l_J}2gqSy z?A#eVE|hLpj?o}dFBO&ugJfNUUhvN2_tr<%evo0bG1TV1-aq=|_~Y^HWcKm+x8sx9 zZ?mJ5kH3A?@1d3P8VCf6xx2+=xfqocGuEE)2cmx0;(8QL(R3rb_|voj27~sVI!1#O z`j=~;lLN&E!{!JuhxFji&Zbd!5^DS_j=@O~$$*9yq_Vxd;xt;{~KD@2Lm zDR<&bvBVF&gQujyDt8JcN_LiY!GwfcI&a(zC1WBWl17mx&{m}=BE(O1QYMqo_vfGKfhBAjKej=AHt8parCuFaR@zc<;j% z3`Qf10N1pif%1V(h)B_isb?&2?!K>Y0?xg zHC$I7DP7c8Vr`s26#kL%-EXmC=B1&T9qJHF4q=Z_x!_4m zA)7bL_($rOz>Eq8q5(e6Y>0j_{sJPjTS*6mUA?)>R6o1m019~=q9Xv180f{@hJNWf zyhBf z1Y_Y31z7O4X#ko$O^Cl;B&RTUh7^1~XeF9*S^a2Irpyzuv${?Z43#h!O1=Fz6w$rzF;wm6m*baI z)Qx{0kKgV662l0Vm;YgD&9%zkFU-$b@Xc?Gx@T_S-r@`Wlrt~6cWEk#9 zzc_~(AA!M2K@dn?s3a+V(k}xRbMB4~DF3I6ffShGd1QPSf@>1MC->Cvf=1p*8^rk= z3s2v@`}JS{@7-^|Qbm{k``54T{PA%|x4N)Sm<{VzySlK&hrzM81dk8ZK&}WKKj9}G zlRDBc$0_45N`xWNB}dwu6j(?7=I>x>n1e{5AbBIiOLz}cqkw4?a`!WsYD)=D;km>j)7mw6#bC{L5?$i^cGeiNxU{I|vQXxQu7e zPgokv%*~&gh-Sxrm`kMPV8Ha=%wP9Vd4oTV>kSMxN!}4sF>Kb}gefRoqtdz3;=ejgKIDVsV%6C-Mu7OrE2c3F-y)Y2}( znZ~ZmHys`ZJ(uH20$c@`2mA20i5Y%Bt$So!UVC4lSD322k9brOl3~QcUd0v=y*>v z6xJwQA@kUjKZz%TDh`vsP{j_; z5wrQTzlXCt7%|S4f<~fdkwwDL6z83=8TJW2khJ8j*gn35>7t8iudrnzu_sHrgk59E z&l|dYZy0dG*BDdgS9-)EoAe{OX_D5D?%}gAV_-Nl+^qIw3xAryB!~|B z`|t?&1VTz(|*N9z_Su(TuG5LHYO95{d!YZsT z%;WKBlC1azdE_Yp4>jVz%Y;Clq4(BU!W;Qai7^FdS>07ltmM^rVV+KosQ4vr%VtG` zM5Bn#AZ`GIK93K)7sI*{c`>?6ke3U7c(8$YDh`PG z(Xz}0-`j?F2NuG{Xf;QKz#{G4N8d{?xWB(nTP@N>WPsCbq zJAfN;S+LTc083;W%+3U}swHU0{+3OC6dQbc?-G?qW3gkN4nKE45Z4DAr zwG{E80Ya_XDkm4_Zdd>XO6WKB5ugcVZ9arFb<4R6?^3)ve;s&$lRDr8H%eY8B-Cx! zVo*M2yV2tw9;YRDnI6w@b9AY*ImUeC*POBn1)M!QcRfgmp((J8UNR}|UiXh#+w;VL zZs^fM5WC*~HEAmFEs8nz)XQBcca`v0e>FqNHUr>Tx&A@X%&L%yuxOW2l%K zC`&+!ZJ8}30{&vc&J;KoZ}a_(F{;F8peiK-7Df~#un-GQKrEDTH#9UTAUv)5Xq#Bz zlyU~Y@JX>QVvsM3w@1y$NJ2whqBFb$ydv&2I)w9nUx{R;osMYF8wf;glP*(Iucy|msS zFJS6gjQHAih~KUP26vhu?K;J~1rtbFN3K~s$(J7)5-nRg)zAz9o7MF!)!XZtJB*+; z+-A(~li;Pu3IsHS4AXj808>G@8@5HrB!+>76!UkxG68xAtRPfCp;@C~mt}_LbGI`Q zr^~@Es2uJJzL8a(Iwi^i87IL$9SCL1W=hF zI?XQWX2~&wZ(E*c9K9Yl1$L7UkdFLAN438VhX=S(-UJFGA#mm5 zmQcVe!Ujdmjyw7Zp(Hn{0YZxOgo;9z#tInnm`>?YK$TRijbMyPMC_Ksg=W)Bg)j8d zIGQoR&uR`x34%bvolKTN^7Cgd;2wp90R-xoM)l}pmqBpko9-lkCoxdP%*5OuhVwu` zPiTQbGLxeu<9K@}u_I+*T@}M&|NU?_-%^SAuEb%r6rK??0CXSIFHY`(u+~u#q+5Zvt6>DpPI!;rGOg(~+>U41I?i zynxBjhc>dymQaj2fdLxY(?opz)e2vI=q z(7xTiCl%FA>+tN)lbbi`n~8uz13AG4N0I!MUj0l8a@7N8pDPKAhU20PS_syrmD z^;X@JqlWa8NH4_ea*H8g0K#cj60@Y*t@bD2g(xo*@*;LK)`P+?G2yclZi=0?$|?nL z#9aCV7xyHW#Fu_&aF7nYHyMDb0TLU@7kBlj!)5@5;UgyTFfXk&awn-hdr_Y-1kJ!M zo^-H_TYevX53PU$OQnKoc$z1X?ZP1usnN;Q0U8j}A&f&0hDpLhDmqvaLCX+pTFQ{?f!NgX_7m!3R97zahLK@RgSm?}+H zs3q(bQo}pwXia}dz>qmA1Gogen_Qh=03c#S*&5&@e$ zlMbyDi?L)zFal^2NL*AU??0P$GwbFUi%ds_$If)%XO^8v6SiWKq0TP4{ zU;7@pMkjPJ6~I@0qkQ{Cb1*nmkEC8vdx(7D2n?f0WwI!`wpIf*q@D?O%wHMoFos$| zj3r{r@4fTXVgV|QS3Cg5))s@?Ev_{FYl$V19Q-0j-HQerFU?EYfM5z>I#V#QJsv!` z_kBG9RG>q3{IKpnV=V-1SL496w|JTya~6b#W1y? z2`9BP_y%L}&-hCRAK7dHw*Yo94R8SvR~h|IF+Z*}h%!mt7(8GaU;g;fL12O3_fzPa^ObA(IX z=)OAYj#K^89dm;+vE*`VTYJ<2a)fTV)6s|Db&x2jgQD0eCs*edRs$-!NOpP`7Herb zioyy|mCJXmvGEig6~JICC&ZCZKLIyy6Fbp{v(w42m`gB42wf8bj1wRZLtO(YB&&SM z9dILKw?L=b-8CB!%x zfuS<#Q5c(mg}}K&T_ov9{(*;w2#pwupE#@KW~-I`=^52|WFj?3njxV@L-jBIkyx?3 zQi}w35?)`Ozxtp@O?XO2{muj7LMcj%@UG0^&$qXq8l5pJg5r&!iD**^d!8M0JjI3i ztM`B&ikR3QfBbtJ=TQ~uJ-n6HCRy4tn1}yljvCxheFvH-7KjHXrG)Z;fP@@&XD~wX zLO*p8%q(@t+3c6|%&}q5@c=Td`~P)sqrinKW-LUCW3Xag@a!j-SNk9rdR;kr6TLC6|r!mc`-H}LNV8VxEDn+ zlsH5c46BLG&!1JVSSp1n>NuGyKg3_?a`1=O4%F+jlA4C-KvE9=?Ny_zJ!qUP}V>Sv3$vP`a_CQKgO zJO8%_8$tejUF~7pJ$d@HF~WX~uvQVXd;C2|Lzc)cP)v%Oh5wwtx+=BPBdyg3mo5O8 zGzb?A10o8yx1Mm;*)RKW3>8@5MaV%MeK+Wrg(WdbC(Bfg_R)t!0L7^`|74L`?u+^P z3#-alI*?iI|8~AmNDAl{a?`NTsF>VXxWko{d$Uz0aWA|n{)^o@FcBE+%Qa!8R5#Ea zCq{b=5+GoU3MrAP#!r%6%8abXt7Uy)ZH%(S9UbZ_f;XSPzXoksT301oeaFnU5g1b1 z4Td(R^T5!UIXzB}2Dv;&hVwphYj?f^FkjOBFw3C2{OIymR6H+T8rw z8hIrb#WAjDpoX2w#-S-f#4fIpI!5uUkQuyZ_Cu4@a*Ny6)w@qIFiv?GQ(~G7;s?Ai zp$BtHX{QV^w@IbZ9S6_Yp`4Vdh@HP+rcIonY zdp`gWPxMc6`JXj*byjbl@=L4EDVRmnB=s!y-g~>d%2+_t>q0OL_u)K&TNSNNH}kZgy{hk; zS-pSZ(u2zhs?>9QSl*^wx^ul`KusL5v1k`?2n(>19uNNr$f$sUkIs=)(>)$DQRX^T znOWSUELwKOng#~2;qeHP$Om+urod@6rbi?EAsC2~nMz^nRt|Dud_l#UDdA-r8>j>q zVV_Qp>e{&b`Slfpd$$Pl0hsvfP_oKa8+UWSD|xo|BuQRFiW& zX_LrZnoh*=*)^7f;AMm6HF_S@1ZXxdEjsnkmrPf6>9Quq^M2_eBQ-(x>0QZ%zcv98 z1WfNVAE0y)G|;Eqe*$6jZ3%0YLN^Rm2$ zwnEziKwhhE1r7%RlFaJVb{a^gtCYzeZF895F==^ zsp16)k7Ic(19j!dPuDi@K5N2D;3R4pTBsm1LWbaA{zu;-S6Hx6xoZcL^|3;i8mrpo zg-d_?;{4w(TuKFrHiY9UUAnS-`)Be!sFwf@o!ve>_?{L)8v-S8BW$SUPgXB6beVsb z2(sFbb>)d)ep{AqZgnY>A~tBx*`vhk932pV3WjNYy+AotlR5(kNH>Ye+69azNtG1# zjhzgz{ObJQzPJpOsNmIUmtd5{SFUdqrc(myxo#=lMJ93=+6N;wW7-OTOr~t($6`Oh+;Csu7qh*dl<7`o)Y9 zTw(2k3WyXnGxh%0cjnDXa91ydwoqK4Orz_CURN2uWw z2^cDPdFdd5jW(kLpcR64WT$nI4*MNuKpZetgCQ1vBbCI{V)-fTVj&WhQnHGtKvbCt zy`8lOz&U&*IE79BEgOCCsK*o#o4U4s?Hh<0zxi}|x;gDvx>hj2EsCA(Cr^gkSU?gr z{D~=oa(sZ-*~DICH`#paM_J5pDk7`f&`S$777X1eZ_|7*B7!SY;<(AkOsfEU6 z5k&mkTos*4{$OnF$?AT))fYZ3l?K^B0{9_ zQZ5O6*zcT)U<^QMf*W-Wmr$c{)Xo&E7^FKD201!jfU@senNhLxC9%b?a8bQjsbB=A zD7~0y4CS(t%c^KeIl=^tBY+uB$Hubb^t#kMfT$vA10Ioca*P1ZI3X8q^EEkXP63;* zbEw_x(-QAhA~-|#2(|0|*sZZj5!B#XMR-QTiBHB&29rl59b>$-bB@u0n@_TJwDGVr zd1&3PJ~n`{3a^&^5r>E##d*djqMpHB(Bi9Zn_2PbLsd}pB@+2abEA<8`5R-{U>&}^ zv;hW^Op!^upEDEztRR9g{se&gyWvlZ6qf81AxU{(`5VZw`#6YC6Ih`mJ8B9W*SDT) z97gT8ZX?DrA$}_mIPJ`q<+gek+93jC1V`LB`Q+ZZMQ+N=RC z!8EX0?&cF>ZvsV(C|_h1b^(FsIwc3Z-&5OXX}X;>tAEk4H-*kJ^l*ZXA8wXFvi0e8#j8t|L`R>^3P^ zz>C!_AVtaJUOncgYW{I@L@nNWlCN3+K)8llz9MU)Ff4(*Lc6kpkun>=1GubF)M|?C1_4qtX4{M2Vq#dw`IeG#x z48F)Gsp`dwI9>@1pG&j=XjLO?vKO-loLmAV9xVZws z@gxF;UlHT;@&efb2wr{vcc}zc5FL!S~!ID8=TnKO^ zkuGBjgiNrOW(Pb;Ilxg<6?Q8Om@slJEI5V9qX10@-mtuZAt1~!e}##H$RL5jut+o} zWOuSZEL4hjs#ONjWp%7Fm@y(TXI(26OG1p7nW+LYOx?_tf1K=B@+7K3mcCMMrHV67 z#HNt{yQ8Vu!zeAUT+0iW4l}OCeDWxlCx(BC>=ER3ynT4l!7p$DJ`zg=Sa>-cZm_}) z;W~XIMGA_SoFmz$$KM;u12AR^1WxwHf4X3R^NW3A7P*F%Z+zW_U$hz8G$BJ})z*ji zWPkbco2b;(K{qWFF;)lyBDCIWJbk`LJQul3KRcs8k|Xd!W8gqQR-;@w#Nf=wE2)7$iXbM(u{ z4*;eiWQfCP!gzz!KKcG$%P=)u>FcG`6afg5+^`0QlniL z4~cVha?Jl9%0RlHjtcpzOIVZ=9Hg_Y^Xzg5jc%S9^0x6&fFo~lkNyxy6jKU6+ zXd`F>L65(y!YygNtu9jQ>Q>`VmXkp+hCzY}7;C~mNQQ3LKYIG?Ifb@E;UZX4SC}+X znp8FsC_Vtz#oK$vVFio$;ZnxF3mXq`H=j~RkRUByo@g*_fCOwnijjV2*@T~}oqwG$HI+UT21wB>q1<975p&zOEX732Oi%x8*PH4u=iR z5ol5DB48Y}$YQW$6fhh)rq|n0_a1Xi@c-|!8_kt@Gvfi@HXxZuPPc#b1L%DY7LZZd=EaMr2 zhU#1Y>;*vddgx4R6_AYNrx894?vS!eogT8jF70p32p9R7G`k;XA723xVs~M9i1en> ze=kf;QK|dv`crSM%mp+`loU7I!Cg$Dm~lt2811DIY?A`Y%j(_fl!#q|gh5XmfN^}v zx+ZF2?z-9s0kg+V8hd~Nz&Ose3^}Y*tiU{2C|w5sBYKS3)w!diP@LOAmpW<}DCkAQ zR293Kf#ras-s9{|4TosdQ80r}Yrlr|X&A{+!3UDD8 zbPUxE4<8*)NI@%Yt=NWOu5J$-j1Y>X5`#K|V`_K**$i-ij{$`$kv|kM7Vuih>l8py zSjU$i%fpGnEe}QDshh1$ zROa^3B>}X?$z+7!Z8HwDpp4E}jU6jVNKw0D1>y&knbUTMd7k%06@HpB2bfV_1r`z< z>IK)=U1rZ~=M4gl? z`{^15dKhnScufOjVt|q-)h_}4A&m3>;UP*zScFn()&6#O*ggN<<_>^y0z`uQ{5*Tn zq)y6*AUW(z=oZO*=o9~_XBc8SlGd1R1TjVUWz?CRd|*{8V|ao_JA#bSjzW z*fToX6(aa95{Tgl{a<9P3YhNXJ)<944lKGqOpX3DCx{C+dm|hwL<4Ob0-BDVhWZp@LGnv0%>{F5r>+O(PIv$NL(<^e|b<-Dc-_cI11IKB^*; z=+!l332OFE2$-mUP`ntz@lB|)>$>oOkO5gfXEU90KEFJ7CL;kc#uZ5N0P+T%>jgAukG!rVtW1NXv%mJA~X%-b?ksI z^NrAfkb#7Hr&L4N?~V6Ze(dCzmwZlIGbK#$3s5Q7x^G|H{`n0zg-7-n@XxixM|@T{ z3le_)f5fvEDd>gPr;5f5D7&^gnT@)P!PXL$vUtW>a!K$8^DfLUtCe+*Vswe1sWy(L zyR7TR#0)HStSe=)csT(AAz(t~5^d8O5w)qZ#0k;fr1SROzfO)`Ci!YU$21?HB$sLB zS>`66@AekXR+t<-EzV4V0zmZ1MN6f>OPw9_d88VbS|=ga*NCsR>~t11yuv@F5o# zdSjQwS~HFu7@^R?a9=8uy9k#F?9!nuPW3xD_zrA<6{dPIRo$vB zmZ6v6m)OWL)EpdkX$u6v0E2}75;I|+2HnHskAIx-!?X?`-yO4l@H-2j?2*BAb}Y%z z`^SLb`O81v{rd8i-Aiv_3g~LgN9bO@tsG}z%72}_`{Q5l-u*AbnE&_P|Gu&^#vUEL zngwKDzkT~^|MhDY{r%LtGO9_xG_pRkDV?A@#Vw{P~}zJA%<>hfuOuT;jM0kCjqg-^;Qg0cfC^5i^>zHO>_ zeS6+0UPi$K;uk&JWF-OC{v=ck$5{Mbja)V5mW)DT$RxAh)whk`@DF~eclKSo+7uSh zs!=pWsD=`~1bCgfg3i^T1SPSd%ELlJk${uj-P`};i2n_%*YIWP@%a}oj;GyRx2FL* zC6;)?k6wGCYvhHH3n~U_F=X(V@Ic62G2j72xNz{1&u?FWgk|%;>8o@6_>G);bYjd}!(x#i)7-6Q9nbzR9lYjl|U%&eM z>%0GX`TFJCUc~nTC18MdDQozt`2B0cjxVg2(y10Em>{`APuds_2dA^Qi4%k9Bq?AE z)qEC;$>ta4&SHr8B?iN6nUiKjh({;CP%;CfR8cULSQ(4qqDqd5cyrEQh7sZ_atRUc zgJZ~B3L}2IFMGeed;RM5>)*z&`ROi$n$B9in(HZAFm^7G1w>2*FhoGL%Ws=AY5YYO z3E&uYF(el?x*mBHbHNZj5iMwtR`$Vz6gof%#83{WISS39L9&h^Y!LK@w$EX z4Wh3ku?z1gD86E4Eh7Oxg$4_Hh;23`*e?&{ZZSjs=L(2}|xw!FZ z--DS?5AbLNIzC$(6pnYIxn@SnFw~-2_W-x?Na`Gs696Lt9XFtdr*?C6^07;FKdtnx z;`UhoO-MHHNT4u6_*ndo3Bm}Ulj#I*S)=TsNV5z}qX8WZlO;0-TrfhcaZbM{!80D< zCAJTHBk3@aNAKrXFMGY-7^eu?lImOVT){6Ao)Oih!p@m|wN4!-;1b4_E z@$(8Jf@IZ{cm-P<`h2>}jHwJ=1Smc{;H;1fxJ!L7)(hy9Vo-_~X`^0U$={|0{ zM#V>uPZL-0Qh2dp&o~PYHsMuctN1(UQ3sen4=As5Tl0_+vSD7A@dh<8YfNwky_5*< zW{ae&3t1EiU9Bw&znYB!8B!I%gX$_8ld3lULQWgAL~}+qhBOZQ5~L!xAYizXwahhY zWQh0-SRhaZ5D2p8gldBi-8Ep)|X=$%Ni1kr;ak)xx)E!ao=Xeu$|Gy95CpF_L;kDw}a! z11-odj*;h^tHK>Y9DK#&b$5iD#9m4r>RP{_a*uK)9N#`)S=ijGW5Y8JGg$FAoFQW( z9;83?le(jQ8aHu#Cx-`07sm~`iF(YNTCQ-7dB%Z%(QH5+K{TLIE)ya?r=89#-Yj10 zJY!kH2cmjArKYrf^slYF*iFEPEfSa#7=0tQ;$}MTlU#sLuqzp-SELY%WMUq{yC|~K z!f{MeO!HvaDe2%wGb?zWWHYXGu>!o-v)Hea>v1_Hm6;=X313=80}{ZIJ5lN&N=jNH z=hBRS4bT%c-Y`uG~5?(QD`VDbRZ zxNIPWUHxf%Y2!1o5okQ<$3TQJ8R;oK;HeZU!dZ;bKm7B!t>h(|Vr~K-YOp7Ll6t)LHStUE2rg74FqlAnvu|HhF-&}Y&wITcd z@ZboqP7y&%I?DDu?=^RS4)D<7yWO8vyWKbfWsIq303`a<;)aLybtwes@DX?6s`NmI zSK(m;2OVw1jA;1l5qOGMr+cSY`oTVF7YWeMOYTUYC_cOec2G+*LU-)%ef*_WEm_D= zGGL34Wkfydq+-!rTcrw9G^(r;8{Sg$w@KHT;ZeI;X1^pB?0k0lJ9$#nE``JeE@2*1 z!C;95P6N$?YEkeaY9W#aFyQ!FBhmmO%is$eCPTEKGhIm-uHnbJhP4`2XJ=r}2#5r? z=o#}Oh6#{5{F9N4pY#iRv19RC+_Zg%M1 z@tC9h(;_i&(Qhdm4G^{lzq#)u3m7JhliyYikI`ML;xI!5z2Xut^BRR_db#)T%gihO zAzImBhW1jk^r=l;jPm5b5lTolz4KkLan4PHIjH$^06v751HJJOQTkXO^m@E$&?yKQKyLNyMwIG=wdBsbA zh^V1#n+1s;wI_!EnFF35jF3M(37K!7KNAwR3~xwykdj80s9*v|xLUeGybJ}RxB)%7 zJBSY6Kv{xx@inzBK*p~x{mBoFD4>j}7g+EJ#)9s!4ZrlO@S!mdA?J9}38~T>D_DX8 z#=QWI-(z-0&AmMjd-WkHN-8lMK*i$~|v6!5SS2XMnQ zI&tXqs4)2JfLC(z6g}Y`@j6wkYzccXD;5VtQC=RioRE?WFNte(=K&Q_W8u;~I+=E;dH`J3%8{R}TY_DXAq4F}jv>1)mT5R(oB(6x!AC!& zi!m3KOS0Lf$dc4FE;G}`aT7%DDV@;qJjOB0)Px3fRG{J$O8TeZ5G24vuUefON5grh zGw2TUmi94EcF!JYaF+w|9XGioQSj&Is2Bo3?y}>P2y)9`*RQ-M;0~V1COYBR0is2; zqz0+n2>&QR7Al6WgbXaMYQQaAwbvD(-Db1NjSyB7NKhX5605- zL=NJtC}JY<%dM9HK$V$@;EpvSb_Ml|V#nMhzOwrSY*_yWs1VvM z)SSGR@Cz9M#y;avb;@8wZjq8?3ZBRcV11A*u!qbdVEC;7WL~5)h8;Aoj+3;bA_h5V z7zA*qx-o`eTBFHe0#F!14NhF+mnn85+6!dT1#UvF1ht4A$AjP`6<-9s5SGIT1z6l2 zVNdXlobvFLNSH7|z7ZNR;GIoS$RK7!v{S<^GK@=L*Xjel5cE+{yQm@8#FK}#Nwgn_ zCKVYR;R_BZIB67DfNK{a6QRCk`aZU>fp6~S^kG^t9$`K?7cKa|rO!goFhI}`++u^cTyEh(3C!_vs|=@9 z3*9&)Q_CdP=uL~8+7Se^GXXUwrx7!UgFQVX zb}GR?>|gHkY4*<nn`BWZSt({=?kdIwaxz5?Ce<>H#+0=j89PmAugEYr4N;*|A|@OWUTg8dfy5$W zRJT>+ZP#fNaeV?sZpj!hW)ddhW5F5`12SL=S1HIQoNV=r!8*CctYJ9SY$O97 z&X-BOHt5g@xgn~HK}y3h&z_P!rj_Ct*M?oD0T0nCU{D*vfc~HM(m7tF7dRwpSyI%v zrOn`U!5-knv?EJj)n-1UJGhLdwMcZ6wi`#{b^C4e0!SBY?bw~b3R;wyzM1kU0x%dNK@)nHN~z~W zSjZaslZIUw5|9S!jGmqTm~)Kyi*XkZ5`AMLZbNbroH4#K;#izEJTs(6Jex+?IN){0 zXgoj$falnakc(MG&XN}}JZDzfFpC)jp6IuD=Jl zy89oGN~J=%0Els`S(EF27W-6SlGVAnC7dJXdWd1QVU{}0J=R)-jq+iJ*i@UU7eNFbKt_1hXkYke4UZ|#$Vd7|UZ-sWI5-&Ni)7ka^PM(c1DlXrQMRB40y8{_^n7Da}Ye#N*gV9#RH- zhznlYgd->p>1A*4C9fj>7A-j$t7hmkV!RY80hV}n6ZnW&O&o$$JY@Md4_#ga%mBHYF6)MDA+&a-19dM}$@HvsZ(BLUD)4>UtG2<+tWr}Hml0bq_bT>U6C;&$62^lvmc@!w(bQmqMkoLD%M1Upj z_qYRH#@{kdxJPGGMeylm+M9|D`uS~`1{AL6?KRH|nlMxDdLy=WeQ*3HD|#l)2G!=N zTV2jxWPCsqU9IPAZ~wAK!+pp`snWzH>#+rS-oh5f1V24^c?us-#8JiYUyqmnMvrHu z8-=dlfp|&$h4@{&JDW0ntCP(n4%04}dxU2wilOM67!Gz!9?hYyd)4LAlyX%MuDYBp}&skL|Z{hY1b2R4G#imu3Q^VROoCK;>j_ztQ^Ey5DW>(QVFw zHo7qY$ZiOa6lB6wxClaU!(I05Zoo$bhS#BF?4VwAZ<WU}P(eYgvqiyg5e4Hk zyyU7$Ah7yw{b(G>01!_3ObxF%QL#W796-v*9UPKqaGZb;qeoyDIfcW3M@Vrv%}SQm z&@TpEtY(Oew4{Q3#XSm^NfpgOMVb0J$oin01Ui=-T@o}gd>m$Sg@br z6Ct9Z3gS5}WnrZeT8&w?%0{RPBj(c)6Y(-`f${sW227LP z06sDdA-FA84P}-@;=E1WDXXsP)QEpeffecOYEcn`r&OY*p>pLv=9lSk(RIouA*opp z2a<_nseOtqBqBzH4k*cWc@?`6hrzk#Hy%8#ZK_`);L@KOsT+>1;1xAMD4@g(=Z9D3 zQr^##_J~LErx&#E45oBAP{D78OopR2G8udb5>bSndRLB<~c|{6h1wsje(O5AU7S+sAiZg5K zTWT3Vhi;L65m7gKl|heef<1;if3kp<3sI*Q$q~=3ox491>PHbvPaqDe5fqRGE|q<+ zNXQeNhDeu*WNzg2HGm4dU1i=f@0C#B{-j*x)bAKhubkL$v1b-smN7 z6@B_v0@4Sk57|lEd2zrfI#W98y&6MEpdlTvmWJyn2*Dz;9tBtVCS2m%@GQc3Gt`GN zhIiL|1A30X|L7IH6i!omHVh9PZEtCt z_=ZQ%(aA3@P3TSEA0|vB53$tIy=q?U5y@#$!WKY@hF1iJIpAIBVSh$1=y56MMX&ib z(6i?|bMU2508Bwa0ghArc&&uwIyy(cFBOA+3UKq^HvB4D`R3)THAA=B+WZO28|5ymFf^TFV5uxL2h8yZX{6sqc| zy@jd&8JDAoOJSU+S2PO_yQ4bwUASznMle{d&8ydU*Cj5#_%ENzm@-H{)}OvO&mR3% z-Dq41PBGzdz8!h7Ru1j`q#Na=1cRu*v zKPV}Dc2Q#Z*mn_s0125E%?>t*`LNyNgFFBA4}pRS?(Ry-WS6>gVm@G?W&(^H-Ulun z1DOKp)TLz1ZKMBIgd>UfflkmtMjna;bo(Jw-k)M7eY!J)j46zjj;Znuito9pdnduel8JPnkg z0ysShDD*uB?wvG88Kz;k5PM(<%yGRPE*ac8ae%TA84Vc;wEM@~up>Y&g5pcGZ4MT} zuwZp_^?GxepDlURd>XIc%d%GWq|T=r<^1@|qTcJ@|L!JrTX1?P>i1_hCnBU3OEWCk z0L*eza%arBQX3&3BrwO{7e-Bt1ej5uL?@+bu%O30n@S%%ZoS&1bSGO!Y~n*dBPUZ7 zJGnBy`S1V3YP0*_-T(gH_J92T{{HegQDDH*h9H|52m(x+o!jE007H}qs=#n@OAK50 zh^plZL4sWhJ zNdP4WZKYy2o885$>)-wE&70TOyuE(2>kB+zzxnm)Q{CL#4Mz$iS8Ph&HqH5^?!wUp zn^WJ|ceKSxwL9OnzsuE`N$0wY2i!D2$JTEyQ!upeVKyyB$$wQbS(S_nViO*3W&udwF;H@^1HfYgy5o z>+9?9|F4`@PgvJ043?qN{$|fl$Ta_DiH*TU=;jV5HvQO4Q7*>!J-Yw!vH80{zXOJT z9WWLrVjLG&fYQ$|k{#<8?|<(rr|+y${N3yS@%nf2M1Ked1W54Vg?41TqDH!|AQ=yJ z`xu}REmXJ+SecfDXOIC;EV$pdVVl~z@0qESGd~`{9B;%(6hTo%DT;?wUU;Iq!_t6`fhY)uQv1Pt!u+qt3>1aNIEaU z0)P`r^w^HF_zQD}1N}2z!p(Y|=k+2^61~6~UYHe+I&=ltJFjQ=diVNQuV3H%%ddh3 z%)8ewJ;!8%XMDTXLTabnz5IjLFKco4a`*baFFbaCv)fD$la`f1LDvxQ_`Den4;BbH zOj7Dn@?}31y&*EqWH|U?2OO~}5yK~Ld^$!&`uruAhCbZ}@u11nle-BAY`Y=Nj96GDy3wC_Yu@pYn89D=nWI->JH%GP9 z=MmtPo#O0!P9-&-GS4>S5I4QrQH(sDNLW=$6<|{BvJM``HSS0)9gWF}w|n4Dm^l?S zwP-s@yeUNy`!kNIi#-#Trb{)s;WP7q8@t?8scmW^+BW7b61o6|z)OxVf7YgCUD@14 zk)lE}b^QHvE{Z7*ana20OqD6%V}deCxao3JmR56N9?R=CHI5%bQA+ftGmQ-}O2H9H zCGTGSOlaNF)CLw8$YQHh>UFLPHu$VGB?VSfy3jW5>2HJ zE=hh-hjktOsEG*;oZTDIjhOHAAKaz1%sJ>mp*;U{oH>ZK7iYCCs&{;l@0d5IAi&%=wVN@Qk z;K^~$F^_ka#`01o`I7C)BBeG%0$4aLwvX*MHwKddQlt&W4-TGEr2Skxs*^L@Xd`{0 zC@z+&OULmbJFi@`@rGKAIawRyicY{0stTnc5DpDj=Jrmb*uh4YXR5}rjhTUmTO(VR zIqJ*K#4YMOsd|4)bsUz>9tsT2&@?wc876_hDI2hpsSoQD)4c+oV$2wOsH*P z(CsEjMr%e}PA<%YN=^L#h8Q)|Xk1qsGj?dm=y2TZB_>XWA8x?|M72QULL=#z6Px^2 zhw^HA21j|T5tk3^Q|wtB?ALQfnzB*KYMhbxJZahiS6A1$X+?j_DK3F=eqycs!~w$-l>w>4{10JOkK9>~d|?ex8Dt|doizX*p@ zp%x)E+bRW`3Azms6lnKYZce8&Hwy`%`NZP5q7zm3vH%T{5lJj-*DD+JdUI zF3Z%?0NdtcT7NWwG+=nOMbXU8RAqNiQJB>1e-D|hW<1c2hNN$;m@Q3PUk?<+3m?TX zV3b+Wr6g-R9&Wv!_Zvz4({`nMCoJNYcC1-b#YHis|FS3D$K|CGnWn86`uvI^aX{br zOQf~*0vRkzQV2haAladqhZ2N85FVRe=AmaK| zb!VkU`83A5{dVt#tfw0}ai~_+*!Xi$=w&T%JaMS4GaQ~0tXzM*y=)MTSSFBGBqQ*k zDNWNu53wltu@@#hn*#zeSGG$<2AW2X6pMa_9vEeW{9t5Xn|q=aNCKi`Mx(Po=Y`fL zJ6PrBdvP8=#_O>!xwoFA)XUXalpNnz*((VRYw8N463{J4@&z;BD)h(pz zY&-toxHi~`8#i@bIHd%PjaGhxWtw>iB0qCi?T<~xI@90V%TYF}({8*N<=69fZH_&w zYX1XOaBCAKh12cvZgKEJuAl+y@W^+eH4c1st#}}x;#>bHMzg(*F={kioOKmXV9ait z*#XB7xi8ESFvdL&l__w3vQX`?O9l|c)6IDyDpDzM$X&^iEwgfa@mu|$E3D4fD~^m5 z9}PV)A`o@6_7{P}I29m2Se%|K385O^7TC0Id2n$gN$?eVgUb?|POR?YbtT1xf}x~p z0l4GXoLpR2uVkxLq=Z#$t)nv6$BT)D z%IVMS+7>J=bdsJZOh7z@mQqbh+?*))HtxjMx!AjZ}4&J7~cnitf@2|BhWii1UEjVcRe^vyV`ov7M}Zjkt!BQ+SqNht81rbf5!ru7iC z;dd`SIvr(pYkVm+tHG=YQlWqR3i-Bx&UfTW4mI6^51jP+wr7jTY zL(tf$tO%JPI@qy8XIE`Dc`?bN~r_NDAx*F?x3jY|uc)MYHz z9uZ|>m^s*W`j{bY>~@%g1D5-RQnhyN3?9P*>s0Ta13~p1!%zCKDXOLcFZHgEcA?mq zjUEb>hAHQ|0G%Gry>-){ z=^^u23(Xz(7Qp4y1P&gSB5CPoD#S-qfI+%3+975Rlsj&Vrywq5hR76F z>Fr71aABU;sQ5TlQC?~SzGaCPPaRb80gl!*hYy-*Cp(vY%6~byvO7+&8v3&0qtsk0^vKuVU9coQQ^)Vy&`7lj_^0M6?1pwKc!$rA~Ws#u6RW8YU=G(M!N zp7lh23WsVDFzZZ{`DIlL?)2hUCIIlFg3BEBwiqB zTOoTyY0?xV4PHG*N^^d&0mLkKJVnvtjW~$mQp}h=wq>@i0P;gRGZsxK{h9Bz5gmOX zUzdF;B#M}>v5X8^eu!k9TIiZt$w!gHwN>Q|4=YF-uVtn{g@W4rn~9ioVfWR`S4NJC zqvxp-n2tnEkNGwAJ+F2knxl4S2Ml}VNI`NL`c!*xxjsflmb_u)ASiskyWVhcLJ1c( z_qG_Rq9Y;$U`keRcsVf0cA*twjdJLV8DmMSlYw0)#cusN9u2#A` zBh$eMt<#mJcAf;(tM-rTp-F)3>nqP`gtgn?Gf{K2`17w0$EnG^b&^JBEmv8ls1}&% zns}`~5iP|MQv0^SG7^OlcIy%2$=c>Lv0#d%&jRh>KZ^J9-D;5`yB{px6=Cn(n{Ym zY6-)nY*!o|H9oY$o-im$Zg9TI zUPAS`&Yh9m1WGh^wCx_4hqJ1lGpmoE=J$@9vZSSvMp?ROARZv`1CI-p%u-)KP&)VA z6}EyVWKtNdbhhHOU+%A*iX&a;!50!>VIm@F-2rMbGDQPOfI-XS*0fdZ`a%3%G_+c6 zR3nMWhY6a1FfgF1XlcNhOS}__j1)aeJeEpuY1kbB54KJW9^P_V;B#SYAkQVUG(*q< z@#^MoBW41}D+6(wr60>cMM!35Pf5yB5j71ij)l^vPS|#mPV(OD8w89)wH{RJfI64Q zi~?>mc}XPvfe!I!Jcm7~1zHNG4^c&qE3bZZCK}Gg{C{ zl2EDaUQV!+o>>Q(LWr`T@@%HqCdJ7Mikc+mG~=`JB`ZJMq%7xM!i*<_mmzB!ijnXF z6xJv>NCAWWC02zpcv8MF{B;y)1c9Ur9o-^5HieBm9+?>>1JI=Q%=GIVh=vZ*hX|?b)U-v^g2ibAW-XGk1=T#cn)L_zyP31diZJaat(TAFn4zM9 zu121_Ix2;pWTd~iXzARJVmG8&tHHL{GanldaAAeLJWLBN+s}|k= z+&8TYm5Z|7CaKa0W8{QPY>YRPC!(RnSAi2Ed9$VP6r0c;QLAGqihuJVV7e0Pc#eT2 zDG?@{s3Km8l0JYT!(`a@u2L?QUO3=7*~D_LHi*Qf^NdG(QK-eMSXXp3=EBJTdSc z574U~8?rn-)y4U#-%6g=jNmay9a5u}g_o>N6KIB}lS(Q^gw)xs?b+c59l5X>rtxm| zX+@f{AuVT@X-;}%mGvMsBLjip>|&>ZDDgoDr^NH%XAp9IGS=y&u&7zy4p`V$*`z5G zIej%w`Im8Xo6;aR7ZXapq(m`wk;zMPnl^`n#-y`cgU13Rv!wrBW!X7PVdQUhC5dV1 zc>z@BBoJ)&QP6&8YU=Q01vzO-ooudLpJ95Ex1n@Xu-!mm&oiIzxY06}1{uz-{j5%i zT;+`f17R7q)M?hadUXQry3jqZd3u`bJdgD{568XWXpqw9m2}uVL081<@Tmz>Rg1{Y ztlA5P=fKV{F@UhGj&?v3``NNq>Y7gl^E3t#jzPss@z^vOdSS#NRE9f$aXB+)V8I}f zfyUwB6eqo;p+)#CpEq%}84qNJO)738K}w0nX9Dliy_Hu&FG?ms)4EwdIl?PrmnfCK zTT82@h+WnULLam~fF#frQyENqK|^2|AjmeY5l3o)klR-xWtG_%=@^#9I1wf$#yM#K zARie|4N6a^=l43QL(SoIIG)%imC-Z!j7zge=yn++14KjHnr`P&BKZt_&a5 zMmRJEBw#W=Q75lbyU~R@vQCt2OB!Z32EL?X4jUX&=j`I9j%7`%a=_D0)rHE~^OHP; zhQ1D%TDUjdO>Z`^Iqk1Htm)+9!lCn$4NwKiK$Cpzf3%)dO!66I3zSfZC=U$-^td-Z z^(8b$Myf}`LW%VnYGA^-QC)<@iOF*1A0H@XuW&+X0CL>isqtQdXnvBKu9H{-=4Y*R ztXh>x;Iehim(tA*AyN~iiIFlq=GA@iO0qUBu`4Av>6bEhz*+MiAi#gQy5*{vZb=5X zyp0a!-vYz@UV+Os*+5LjX@P=^CRU!8*pH^>r8ImbG`y1kpdg!BvUbsYO5Fs-D`$BA zq#(oPEgd-YUb)w0mQ;^abcQbU%#!#$!O)N{tfD`%K+>>m?quH_7CzA$IzYpwwhH(2 zStGDR$H`4oUt;OPw+7_vIBJ(G4I!P|6sxJN$Ad=QX>nHSvH-oWJWGDGcCkcuZ@h=<&sf+By%5qun*C*uHa%mJ6W zE0V$hZx$}0#7tpngN`4z8#x)HKvDcmZYIZf>=Cn*NxI#D=GJ$VtkI-Y#1KIg<-C@O z;p5N`Yh-7UYscwH&hJP}>=Yy?9Rg%{C>b?ENih;+h|nN%WgNkwX-GLKjI^I{r!>S}DIpI}BB^KdPSo*ZEm6 z)#`OvhuiF%cGyo65lmCd^HET9X?ISjk-vJgB*{())Ph@*+ceFoi$Y>(elPQslqhdT zlA10Y8TNxjX^m`#Qs}Io4n;t8_%;lJ!%s9kT?d330G6Kf3)X zVdEE zkdcycdh>l{Y3lEBad|Mxg+NWE3X^jK%60!_U2uwH={S+mC6}7yUaI0CJ&hV&I>??2PnG%up zobAs1@L?td@?$&?Is#{<lZfUlJAN{>##N!ZI;I#E!|usyN>GB9;l5#^lUJ$l!yQ zoRs59-X;+3d9HwR!^s?0nU1VW2@xBY2g;SnpZQ@YJ8BWz_l;pU9>8q4^m{I@_4Q3` zXdaXc(8W)?rZI3~%!XoP3@qxM38rV3!Z;;K4f%-*7-Yee^mIrhG&4(kKoURenJ~}+ zc)0F=jy(}Yf(f{Xo` zzha27V980FU&bAd%mEMe*l%_%;v>QSP z;3;AT!5AbqDg9_%fP>P=kE9mYhro#N(BtyC6Kn&G}r<1yLg>IW(TcPWm#V0(yNx zq#t9WdnnzGJah;yqfI^3*=7!~OF=Ypl6BIE7lWM{zUEB#8ij#@TJ~Yvrt2#iT!5>>cmAdQVi_=cS(O2IPMuXJuO1%pBkhZ<$m zy?0rjtG*{kW{>JXsFouliWnM-CcQ^~i~{7Jtc{6u8?=nSQpCNG5mSXrA(Dx9f9ET# zzHs%qxd2^P|M!hnYWmu%zVWIf*LSb%^kr9F>0iw?+hkulc)m5_;?=s`e|g=mHpiIM zx?``p?%Xf=v6a`kDy2F#gLgedaA9?00ja%Bd?$_RA{* zG0Uarp(V&Oxq!Z>WnCb(*AGh#O}E3*3c3rbm)w2jHu+uC;&xzzt}oZ_5d}d zuOoA7zEmA;Up@{mGsDgyV@X2doZV<~;7UeVai9sDP5P1Xd72;0xiP3Dsk?blnSyJ& z5+C6Ceiwvk9X?`QpX}pb{N4lx#%ILDgUM2b(YY%riVK@^f5$AXNmD-Xcbom(geF5# zpF37acFIAx~? z9nS=n)9TS@FpK3Bd!Du{{BV_PpJSWj>Zm?B9~bx4GDwb&Krs@zmX7xWsClFoMaZ*e zc`BxQDz}?!!(IMHpWDgp%@dAmRL^JDJj->qZKgyOCk-^j#ki=w;bgdL0=Z}LPw8F% z$w?~@lx@<20b*^u%I=zwh>i_AxvdQg5E3t^1;8&FI|_|L>gvbe1rR^i3(ne1RPB)C zn-vWOO}eqU;^#V5K9@%2wGUsp1&}B6!zAZ3YkDzF>RZZ&$l1``M3Vfx88pDn}7D6vpTpLU$z48=D|T; z6zcz#-1UrkIHhep563rG1}lDs5gWH9NfR8UF+)xD^;iMW+}k@lzjO@|yWQs036>gB zYIHHp=!neRL`2P+G9vBy=tznJkgN|ZW^8E;PF@W)NqsUrKRlND?*KeJUF#mZmR%q@ zx%B}kp(lUL?1CdOW(gyBij?P@uIlv}mnI%9VU&IQjMmig{dURr#-s1X@12fS>$6`# z)T7BurDZ70!+to-Z{1%LZI)n=li9gWM9hJ5fI^*4tlVSV{raCi`o>?p``!2S8w;ib_pK1J+5Fcm77vADl#%(t zpTGMT?>u??>u!JMytm%{OAhJYrf4`?rBkk74m^R7-kfia+V5GiG4>l|3^v6vV2hgm z`d&MRl$_nU4-kpQ98Oabx7lklOrzJMCR${C@_f&`n0{s}9~U?!@WR8C-9n^M6vF~6 zl2|DyXipCA8kMFcM5^&d6-enj_#BgZF~jbI#~X6fcmPi~E^w36TQCHmOi`l*qMt%1 zi%DuCEu(q2WG0cgGH*9sf>L33k#l28Gj2p_#&6w=Nk|wy9t$)cEP5zS>pS*NuInI% zkfeWhV;J$NyxJNvS}axN0REQT7`dq`GS-iNS6nQqFR$Ano9*`eohMJ;`Lnk_{K5P0 zzwd%ge_8+Q{BP^TKMKTZ+;*Jdo6U#c{piU%U;oC}|H9S$zvoJXAOFSIA3gf&JAb`* zP6mmvh`2E8*G`Nu5{butw<$9!T&P3SA*W`Wp(k%KNW^e;^-`evD%~|f-I6nu;cJf4n`bZ ztsnWiyP@RguGa#Th6ZpU>FVu3}TCnG^sLAsvfUqNVyFl-I|C1hrg2P8ilFGAOMZIDFa;3Bc--iMjo~5eI7*$ z8SBv;e&9o+DK?Pk)Uzl5@yXkN{`SWoe|&cK%mry*9P0m%KYaJ=fAZ+9@6~TO)IA<6 zXG2C{j=#4*>%$KZ4?lIH3xR+5{=0udWxo5L#+z-r_)N>}@2%4TGV?ThCgqf<7wX1} z0Li#@eE5_3uU$F7P=X^-(u3P&hAGSBAxQ#B>hZwKWZr7G1SX-;kdc`Rqe)GGQI)_< za9t?%G;e0QJzR2TyQ?^R98C%w7f&#=?o`H*%C1`Wfz)nItq-6fCHO5rLQ7LxW^?gd z$$g`We43nDy!>J_DkQsagi*#HL11wGuvcC15CM#sj@HtZn-$_nAmxaSK_u_tOdfb8 z@Kx-LV&E*2jIRAzsMcrz%TgY=7}}d%!k02(#+%;38FFlAvM?7CEEp1x&ye9mhSu>? zwJJ5dxH$gk$=h$g^P~6QH>`GieAvcin!7mW`yamhCy&1Iz0WsXi~6^%lga~ccE?Yi zy#3_({g00iUmR+D_Tt&`ix*FQH|YEShqE4i@QIh9DMqGX{q!(2n5avGewkD#jn5-P z<7b>2ZcP3Si*)e3{*OTq%Rpgk+?oZ4FPqpLNaGrc%s7qONbWv90ZmS``7itxP6%lz z^YV*(SAae9OHDFLO>Sva(OxDi3jnsm7JKHb^?T4u7yQL6WkxnTSabdG}{5a2gf2G#;408!C+k zoPYGu+wXjI{65$2`0nuhQ=dZf6kSa9L+HHt^u2fg^wBrJ{eC^_r=>50f zdH?;x8o3s@tCk&qsQBV3t?{KX-+mV{AJ$T*hD^7?t%`o_;K8I%C+3>tUrT`WtR9Z^ru7$jNnsFC7U#& zG5Qh|-WB5VG>|er&F4*u%m{ycdiMBK6Ib`JCbn2PqF z4k1Hm-ut(I`t`To{oY4Mo@p&sI{xl^AHDtck3RYcEiTi0NMM+w&knUFHOH}Y{NcO* z%cHM;^TYZ34ss^>W3A@ z5fNmRt>ec;#yVUIuVLwo5lyia5)Ry3GrVikk^!HWJl->qWMr~B;lnI}V}k6)0gk)I zcZK|2Cd}o&&*We7S*&mz@3wIP-b?EOTwe+(Eg`A%LrHWk0Gi!3loSLV(T|yK_etnaf!EAP@%=>D#V2?S?M)Vm(Xp}8CP zG?<2{7-CS0vi|;^x8MJW?WvpRjrB1zpyJw! z?S(~Qe~Xi@-rIqZ1w{CHkeyB%BgEJQPRMlFqu+qCodY0ATNWZYG5)oarpYujCRmIL zn9wp#Ob7F6RU9}?(k41qe3U-(Bc`S>3P>R+RaXg)4GQ z7>$$rLTYF4(1PF?bmOWhgg z8PIgTJC?3!O+(SKBTAkZ^eT{&(Mf>+65^=l|x<{`~E4eEse3{@r)qbCrH%_zLF_ z&z{*lYxmQ`7aq=VqsI1qM(NxBstyg%{cVuh@9SVdr8X)ClK_wiT7y@0e-$Z6j&bFX z>9hm|0=X)@x!M&ZO@jrBGnVJlkx2u(B1}f=CA37;vi|x-cT2AnHv6BmR8fGQsSF}& zbAHfQX_anKulXQCYYtp}%7tOf#B}WYE}i)^XZV!`sV36YE|m#%C2OZcpt z9BzS5OGf7S5HwwllBRQC{NakP(nS|Y52qIgh~U;L@?r*|5tEM76t1rBomgA4A09-7 zsp`T~BO%K{Nn2h?h@><&fsvzY=Wa$7o5?*|Gc%MVWce_6KYH?H3aZ^^W0}7D-jnZs^xiw~efPWX^NJ-oUbwnbj!r+vmoGRyuJ-ie_`9)z zIQ+{;k4oY^5K-}ex`oZMnWdt;Ra39eC{h*5J!Feyw;c+fp(8cX?M@ksL@3tbaH1mW zb6P=^IeNJ1{rDjXDwP@^a7POXYMVW>a&6P2#EfI%V~2s-aBWQ*$B=K<@@riHhKxLh z)8m65e&%X*2+4o(!y^F?HVUeV$AmXD4VEnXy2lAh6v zTl%wlKR=gK)2!|*3m#3gY=|KBsCaSp5@XsDr-qunbyw1MH}Nw+DnUY_X4;H$nc~4_ zpUDlYnFrVSA-kaQCr_TRB|mUsYZ_ChgJ;P3R9BCUvh1sxsm@6OPU`XDq1c&-&=W2F zK9k&d2CSm-qjS|C9)9-W+2Q$z@9lwUEq(|mF0wsQFA3+2$u#7clm+G{K?HbZ=Y3jHU8KM;x?5YZ~%2uXkNy zjK`Z>a)2}*43m|djNt4=~p-Q(UKZ8AnaPopiuVIItc(h1HB{)|3f z%5lhjJ&dLgDai5h(~sGn;UrXG^MXCHRVfS8Ll!Cf^x~OM-@kwK=x_9MfG$Qn==+N; zXGUb*#DDiaEJ?Cu_21^-3P< zSZ9u#LTudVrOHU3QI z$@hKsjWx|ekjv$>rWikOh^Q-ZkQF3=XKlwpNjbv9!lP8B_Qn(ocSdWf(+&sac5`j` zwSmLkr5)iCHi6ShA>NTv^3kA@NH{g&-|$FuKLDpR(-~@49?#otvrfxZ;pysy376uA z8M?T!#4v}3y1cmYPK_Qfc}ZeMVO|K5ijVVq>B_hx{1iCkt%QVS8~G@kwg1cmg#k$@ z`2wQRpl2QbHeg0EV3L~j3Kh!btlh=W(6U1TfVe8zk{}C@nf4th%M>|~a@c1y5}jD+ zVRS`dt{F3Y_$={nG%z>8(QY%^n8f&LXgd3ou^A!B5-l|Lv!}GrLeZEXOW1(MUE{^g z_fH;gnWXRg0%CTm@1_3uPO47-&&6HX7*1?)^+j@Xl9HGOlOUuiXEQYh7c*9*TSZ4< za(=rVGsIA2liV!|uuV$xU6LG)W>?4*5$adH=kN)<_hu*1f6X1BqI4kX*hfJ2}P%&jWdz#Vt?CkLDBpmd? zvu2NgB!GY;mTnfCJ=#*81D&Dv+2Oli`IBce;+T9aQ&bwK+ftqC-9}z;vN?_M=1GmE z@ww^fer(A+&iF`T9=7qI!AMDRG611Nq^vf<@mt7LlpRzkDLx9NU}*%hOAK}8h9+;0 z*!a&6P9$2aOln^?&bu&JJ$2y^Duj{71#(^d@ONFH!TM<(9vscYM9tWphKxuJaMo8k z)*vosE~eg}9~!h7p_$AI+40lJ&mM&-Y+O9vECbAdh2JsC+OH( zUz9&H3+0tYXiEP2u7JUT2$7hY&#k%{Wo!<^?AV}I%0wyR2BouKIVs^48PSj0__3Umj#7Y?Zg; zz*LPY#~W*CuVZH4>2ofQUbeVo<}M5yRA}ALx>$IO*aizG+d0)W1Ql?GmE*(BG+2AM3AlXW!^1!S z%3H^}eXk=SlZI@5ilFTP0}YJC##Zr5F#;JS;i#k^B(#TS{tg`Z!{ft@*2u(6;&;#q z8Mv$idp)UcL}?8K@M!qIBps$dOT_5-u0wrmRjruw!FyxVi%iXgYP7ogT+;;m9;R zv>%_|8=@Q^YQn$~Ab+jZ0K^7X>B?SR^tXLMbH<4qe0^Oz@iJYZO$bR;?yl3BP?@Qh zaDhmeIBmOYc3h@Q>z_aQTU>M*W5II$JU=S*zH;yoW?RR)B^w+2_*$y62nvePkRd6Z z@he|bqr+mX!;iCFhu?Vg)=%~VQkSPGLyZ@=zfIwKlx2!-R)C#<8!1^THxSI7<5D48 zG#Qx=A`&L%bznqT;p%rjed29o$hY8v{eg+2`7Tuu9KK1;?}1kSy@myv^*w@PAV7(y zTg_f#9%q$YqSu&!2{02)^}W@OcYUduT?dJL+C;_$gK}y0Zh_E@Cc0)Og=q;R=ccbG z(fOogeASY8(NGN3yt@6aM~gK&;>QtLmlF%sR11KpO||(m(5U-MxRgohSyLRx?2(s@ znB&>2tL9kVyh(LHwYj+eRf)PgM>nrs7T4Pio!3cB^YMQE|Ls@aNh52vLiOvHZGh zb=j0d+vDS1G%ziCS)sSj1_&w#hbehu$2@76+rk%~ucq1@(I|!sOQTdSzwWqQ@$^z0 zTz&H^Z(W}LYgY19x{XUSeDo18YigAhm%Qv71i&fGieE@w-qCUj0UbRb$9m%L)Ru7)F@`w@X?ilgzSvU6FE6J zq&BJ1U@;ylP08{Ykv3RV%tSIu_Qu5ppM`)>4O)_cBD+3k_gc=Z%A8}@i0aM08Z;I~ ztQJ_tx1H(wJeNxl-Rv%}Z$9Db8YW7Tp)vDYhYn(q52LfsPsY+j%&5)Q0V}F&b)nAC zV&sI<$?>ZayLmafhx$}GPEAeZV3zPON#B{S|58cz@}lQeQNa~+i-1#-R?nhqj@T6; zN5ahh9gil_$e~F%W)LYAN;~LI!vOJ!E0ftovxBLlZZ#x*4kT%PY0# z7u=d-u^*a(qBD~s_8C@dP{3#-qm(=Ic!QYHm~7Gk7q>|-cfV(4S`C7fySlz94nvMy ztJE$(G{?i07JT?8Lhk5zDkP_>Y?Y+T3?n5QnG`1_EJ|vYvZN5GwcCPuAubzC8UihE)+j|V;wP3>~ zyt?u}^?tF;3PZyqD8Bk3VJ~fmmEOZ6vNBI{czhIr9T-0sGGu;yofn4&4G#ae zM{oUffEi9M*DJ!q<#wiadTqVFeTx-u8{b;DOxa}a2wb8v1}3cXQ34`^(}R4>d?nzr zI`QOovU%y~7$Xzh?Z-*}uJ4r?T`I#D7n=9IwBn@lz21)TZz_#~#1Hl9p2s^oP0FMz zjSQIZ{rG2HL2Nvg5gH|G<6c5$+*ufmkTkG3x28%ZAGWT$yE*?ol3-+WV*=gz?dveo z_f&>x+0GQ-BxN!$bFGE#?LKaHp;6bKT+=Ntt|*L!h8ZGX{6uxGc_O(r>RF=Z@eU;q zTRYdgt_x-bkxwXtRCj23`_Yq+S17dT(BJypdzi3Hw1Xo(zl6q7Rw#o59MT>jFAN(g zIZKx~VC?Al#U)UbJB+l$!_Col&rW9_KK;g5zOmi=vq_zo=j+kjMo2t(d;n&<1I)E< zo?8c!939`byKd&X7?sq;`Nc*am4=$Kec7V`>ToimtOS#`!~zrjQ*v^S=l=TN$8*V} z2@{9TH~G0;a`%jtHOF@rAIZ;k*jN&gD$W)iNxfJlz->Nw{HbxHg$PeJSh7E*=-3wA z0H?HzvB&geEojuPVoka+KpCTx+mo_%*_^dWJ;qnbZOL)H)vr=;nH?8po=|xZd3CY7 z+nMOFxw?nN{jZZ5*j%08FG654Ro;Gj6*1$p@ND(TcrC)B%k4H7$B!;~^5m29`ubSk zcKb{}d$*@Z9Hy>EwV3fZ%EPWOGmEMRo=U?Iq$5pg+Y`Qcc5--jA6dpUS)-o(YP+vLmw2>9b8?`a7ErYB-xI)xzdFNIGkGn@XC zAc_>tl(+daW2HJoX&N?ajiY0UNJgp0icv5=%uw;vnMsY2qY;7lY4> zIs5)rt@R}Q6{{DcWUnfXSa+#9V~mLnQdX!`?{^z=q9O~H`~XOCY|u1`h=v1rBIK#l zCKj3jf$?3Mt&q8@jYc|sGQ3c7?c2N*;{sb`;RFIfz+@>)iB%CZ-4NpI7mY9_NG(MS z8OG?zM?*yRqyRZv44I<^Odd+T+xDSc$MZunHJCWbIT;pCJ_E!EN)1ZYIe;7|J|7Q9 zor*Rc|MY8Lc^3tGJafYgg-)dk8>2}6l{suYiJ6+p4!D`}&~+dl$O#r;EQZcvp;Ox+H>J&zuG07gAG{pqX z?E_Oh*`=Aya4@UbK6YhgU2D8izy983mAg`5s*>v~@-gC!2wrdCj3t_5A>uZMNAOeD z#h!pUCq^-EB^@fz*7arUuDY~K01yfF8KMs6;_i6C;ZVPGQTQX{%&eNm1{O4v7R_7n zxol+_&gPUpr{mYqo9*`cx8`1QJo+Rxb)oNKnA_R*MuHI)Mwceqqh_ydAgJ1_3rb?hi?^KW#CxDVH^i(LHf$*JUnebYUAUn{i%C?)Nl8iavuKJa z|K51NjT~`n*dLD|X?nPJrCl_OArM*V__6qTq@@Im5NKGz$mB?v8CO3w*KQPqClV!z z$3@>0fDe0jyOEMqtojMKX!=5cw+(C(^y9c(;7<3U$>Ce3INA72xm z-OWB^PDOHPwTd%0^5M2NWqPrdq%cP&LZ&V5w}1cf&mu&R3IbjLq1i3<@QF?U3iI<~ z6Hh*%YV%ig4^lSg&rssfk=)Di5l{>w?UI*;&xY^o@X50mI%>JZi!4sf7^D}6-y$#! zQW@t7u7l%-(B!;aOU;xhx*7Fx;Qw~QSbJRa`Zs?WHkRPie8yOgIngBy@Ak^ilJW=MS@q}jac3ED>d>J2Z9vdr| z`E?ikld^S5NE`PV7y?J50ma3P&i)oM6sLz`BAW&Zij36Ljj7VTIW}a*RG2zgv~$%c zWL)UicqyW85*<$_#ejs>@}V&X$d>Z>^e{w#(4t0DUesj7tWq6Zn5B!&Jzy?xuFpSu z@=wQKEHea|u}FEhhdD7Rgz-WnhTf5*e%KyG9qv7~+zo{*T{ zog;%Rm^wWi?bbW7F(1cu;eiIk>^IK*}cQ1uW zMPy-IfUcCjZk`xhrBL|-Ni`h7(Q7L$mjI0}6;OjAP_!}8?v`SBjuqYWp2&5 zFAUXvI^#CmYXe0Ih*R=cQY%r1?OOb*Va4*guFJ9c?SK4H{n{5W)Q5_FI-1e)nazX#6V;$k$hb|J$5<7PxDwN zpiV@(FK+bi3Z`|ks_|r!gedYm-*Rt2NV2Ud3ohAEwA6COyc#?NNJ5gI;?T7rfdI$| zt!hmY5VaoWMlr6W=|TY*GIx9P(}~hG;j%M^)NO3j%{D_O<;8#%xHi;y`^n!g&t=6v zlTFJur7#Ty>087Qj*JIk(9b8~aSo+tn_UwV59Lti{xmu^VLi{t`cr z(dBv`6E_bdyj_oJO@x%;=<$7Gxc3-7q&;E}&eYZOLfENN@U zoqd`#jNKnS`6teb4-r0iv@;5gl)=SjY|5dOZaTAcMbW42 zvks2A>Ed*`!!r1d6rbPUba6u|+NorNpus}P{WpiZ@VU!!-{J>D%M3AGd9-zX!cm%5 zLQdb8mMdd7b235X=uCC!(^y1Q?j>9}xw0CQPi-|ozKUDHjkqS8QH`3s%U07Q8O59tkXSSbZtp&nZ+t^Le*8`tjzo^?f&)q;7ne zH6qaU8HSaHjTSUtW_Jge2+0P4X9koeiXMa16o-+O>`w-$W-4e*H7rwNQhftJcE&W3 zhRjo-h_+{}G3kj4GD324f6aW^P4Zu}8{Tg77*oxs@A$=KZtuGaQrydV9J}SS0G=WHiX3tx0(^)h?t=?)5-&+VLFF z*mYQA;xZ;F#efcvt9hH10Wo6I>H%HswJRIKbKd4g z3nk4^Gfqr__ucO9lP8Q2A@R%Cg@KR#NQF1C$+$K!hyXpzP0`5?)bUxIXF-wDILqY5 zBBOD4UOe-@f+vKc0~uq0G~?17TFU;6xp}{|9sHfHD#E)(pF!whNjyAbCN3 zNC^RI@*R#6mY6_^$-SYHL9*%kLb`nRY)_l7yT6umauX_hV$z7xCsp|6(6{xJ=L?A+Be4H`Xe=F3y^5=rG>(iJ0%EKvHeRthvaEzFJ( z*|DVrA^xizXGG~w}1K8AB* zvTg&;#*(Til=expJK+&TcG)2Sfvcq%GdiQe=4Uf1EyG9c#m;(4;-;!uuT)RVqwe^}h4xP0gVCY1@Pze-?O z7zFt7D(5!)l!ZEGP2JXZiZ+_gExU9yh)|g$JM#p%36SK28S)^o9LZ5PxfsXO9U-1` zA=2SWrRW~~my)^W*sWbd1P_a;_itD(jM1aL8S1*Kv+6Nd7e9R`TmDPaEoZ`|*({hT znD!$FS2vF_ijS0G!Xz;KG5K4RoV4Vr=<8-o)ow1yk*vhZ3<3!K9SsZy=+*_ACk3Ot z<}G;2YhErG_%9b1uj51zJvuUqvc1YdacB(^c`Vr?S<@L}SJCt>=j9iZjB25lF7Bf~ zKbez7L*P)3#6>X=C1n{_Vkk|*)H*&?j0G!P9&ir%#c59dip)z9Q>R4@q2c~MPnFF7 ze)LxTKgK6h1d_|mr3aeQW(OLNvssXQN!5P0;Al8G4IfhB1C~##x_rt)BX~$ff-?k`uQq!cd^ro@c(Vc0F6nlFQcV%S?nI(Mv$E0*yh*6T_U_)*9NRoWN! zdh~`F_}SRjFvnF3G6;T(1^R&+y`d#EhT> zL};-se!8?_Q!(qsU>R^wF)3a=#LM}8Yl(`A+#!*CG&f#p={uxW_Po@ zk<#rrueM2;_RWeiNWdQLc2H?9mHZuPd2^kH`3+^{jKddpn2 zw$a0yxt6J7%oHVIVlOA_Oh?Rb>3w&mLF*%J?fzsnEK8af@vK})&!@VlA!vC_XV1Rz z=o^q6sLeE<$?Tov71>OQb+XsDMna~4 zav1S~2Alb>g9$IHQd}|hh>F4@$7d%BHeBBPVU~&al300gA9A!5aBl$gaQoq>QYsTm z&nzhkx<(qQNA$R5ca|wyGc+krkxn`h7<(sYVr_DPj=nYk43@!iOd8QHX$KKWf5xd) z3falS%?u?Jn$4imnoPF=3fGrl&=2m*sK@v&_oAcgH{MbwL4~X1d!k=A-uUL8*xdbJ zh8azom!|W3d|1hQQzsWiHq^M%Fl>q|Ej(9K7i&-xxtXwng#l+|IMQsHqq#>zU~Tv{ zJHrTz4hmF(`V1dY1H9*A>@i6%zVYa+f>{0f%D>I}v5J`+m={9Q6!~8V-JXY#DM^{Q0M)#v5R0BA7vMmM} z#Y@*a90-L(%t;At+3dK<*H#(v6D4L?Bl@BrtOwX$e8L)eAH4_u(Sk_xqb^vOW8b;k zh``YhqfeE6@S=lU*mrF~jaLyEVPp+;bgoe!I3Yc-z_33=}m?&=U zB}Zm=|Jx_GNB+q^@!p14N4*;)`{bAoK%-Av4&DsZ+V7J`7_=QzwIvTKNlQtWWAj`r zUF*3TK3euB(V|7;Bs1xrRKr5Ux!!IS+@w z%g42TQIa>825nmn%3i#@yx!iuydm$qf9bv6UBCM1lfG&9cvm-ipArx6gipImqJ+wR z_O?q^ZGCk5ZFP?LUMPBD4 zFgdm)C=~^|jW3STr$M z1BX}PF(Whv$)5ALRMA2{2ka{R=e49R%1Y6}Q4fo`BDh(YjsT(&BcBG93#4Gl1CAoa zkVoc$2Cb$AQ3iQ4JaFw z#z2NhDK^rmE;H2B1^Y$PwByE=zhlRN>(}?hqwBxmVUcyGt&-;sx1f|broKTeUV36~? zvtAr|r(;BveRBG=O~I5yKDtFr{1)IGE!W1r8dY50zbW&-(*OA|7`Xfu0+yt#nk7Da zX^E96*>9(~HUZ;?insuTcA*jtX=S)zVI-z#ComG1K}V~p>v;X|F~OZ8%X0t`JlLOK z_Q*vs3yD-1I(nSv^0ZNc+J3A@*TRukS3keK9^=$9qyPvT6`^u_mk)b)Q<^2mq@Qjj zb0uCI0m%5=-G@~3w9^?@2L#zCn>2>$QQ4ORE6y`lB2oQN^G;qJ}l_WJVrb1HN9$tT>Cu{nK+&>%$0hs|hs?@G$Vi>->@AMb7v zPlEwwWagvT=!%(O8Ce?l6p(Q&TH@sbNfwtdLN8=qJNR6l?zxuPrSNNNo^!=h#nhPa zk{hQEn~c*nK$Ibo2OC0*1Y0|6U|?U9=zh&kAm@h(E)AZ0f>!!@A1~um=N)A z`pse4Yl_McvX#LBtBICWbVB;Q0yhdi}w@-dc zI{eco=kgC|sI!Z8pyM5>1EVB%5(!fe+CI;EpBf(WCgZEsKKk7#O?;S?sm5s=R;z>H zDFzBSi`a62J36d@#?qv`-3gvf8<#veHu?LRzMcgpxwQj_7v75xn7Oxefv0Yh&)xGw zP^xVY#_QHdb*u3NN>P!(jH1MdKd2lQkWP52TVGDmr$h-^t{KvB_Odv`&0&K`p%Owi z6?0sK)&{Qmw<tbT#u|-7w(n{nr#G`dxQLpVAw$>kGrzqybYrA&S!|Ok z_~{Kmi})x?9A3VQ+R>ck zt&4iQvQ%S?%imr3{rs2Z%7CPNOX)fcl#L0SMx*mvGCFs6RRtO|gak|Pd8~`49zfL3 zY(zW7IfCmIIycrvy0GILxQ z{E!(EwY;E&jAhDuv9JJql;&^V`quetoNVtnzFxA89KfJ6Ljh_KH0COi2^w~0v~vL3 zZ-$mOwBsgFx;$%N##0d(9hv2iioxO6hO>)~ymlM=y(QIvqMrlo3_tu7j3h1N!(b&h z#m=V03u8oX&Mjse|K)=NUrEEi4Ut0X<>wYObA9)qzy$_2Mwv19W%Ydx5SARjYVU*NakgM1W9zszRgq#wah9?bRi%e$8s zH)5nBP{*ka+>mr*C?L(~ErH2gL?KDhx%O>}guEY^(77wYGKx}!3<7+lJ{Zv3y!^*} z6pDhra#wl`jm(aR7(s=-%u+(rJO|sA{V$Glcl)yBC6{XP zk2XwVMsj3G*-@EBkoYo<6xs8cn-xoiMTJL?lbhy$pBy~?(Ynk_Ud#d{X1`=OSf+<@1jD?QT~fKYQ_l?6<*Bt&1-s-hja5^e&lKv!O)vI?-)YpMu^DD zWSmZCceG@j;3nJY*hPf*xH)N}UX@#cb#alZAX%m-q(*m)KtDgPKBOj);`@rYf#Na{ z&j-WjC2)?Pzj*%5N8gDE+OlM2%+jy=&kPuCKOZG|nWp@7;RCA~ItqxRaflNWwK2AC zOjo)RBFRd7i&O?bm6ve$d4hHn7O~X zWQkOJx6A%AP?uMqBrgpdxsM(47M+@#GEH7vBT9> zobU!R!;&zk;Al<_5~`7vq9mtB?TeAd2sKo&o+Y8t-a%I{`_@;#Gj=F6B7EGI5s@i| z!qSxL3XV$D*d|B&ha{!?C`kz~TUtHxG7m#dn-wSpP>!vaSsG?Go2=3TCqD(&_Gi_! z!D)V6S6!tmrZUi-K#3EySi(0|`Mg&RQa3I0@y9E(I~K``=`k>c%-w*qpD+cH8CBZb zCJC9S5Mf(GpTCj;k_5(BS~HXwBxImwxa?tZJq6nE6N#Npf(g@ z+?7~3ZPoqUHdYhB#9s52#!O9p(Nq~q_SN?RO>wBSr93(B!6tKgs`ne)67q zQzI{1iMqsv2R57K%-9J9+vH>IETgk1iHN@6Wcb++5oD>V9WcBO(!3q;xS19M_Yp95R1fsn+Kj(vm_=DSFS}PGo%_D7|{tGi}H;h-L2#;6efsH zT*yXWDbfH@w`gfiz>HTLV%*Pdz{#*O7w{HnH;9Oa83M=$UTD~d3pGhsns6B~ZXH)c zU~*1mQyNd%k(8FWj?CPfWY-~TEC#Z8v9%*&3KD;D`73!1p%MS(=I)Cp()>w>x8^z@ zRiRMXg}V@P$h^sVZ#F?j%*E=-~!czV|-%yzDM-W-tANv|z|1tLmjj_{>c~V1XI=V1YsFruT znw)gRhU4q1;oDxiS2ma^d;R_NirOv@X6j;M0_rB+(H1}FLLl#)aOk+nbcPm3Zpzj@ zu2yh#zGCT#tq(qPWvM`+D3fmCsM;qcjVr~FHH|8o-hX@X`>r-tSMy8+P8lPLlDOpZ zPEjlK=q6y=%gQ(_K_ZH7_z?p%;@Sw)OpUv~c%x$Xnr91>5-*i_v)pZ^>iyYGLP9S~vgmBXi@MqyiHSjG)8G+O z&QG>46QGz#Or|u5R6CYPG$ccpE94e1eLK-$H~#WU+4#F=P}vBy-}~xcU2Zun)I}O* z9tV|jNCiZByo(DvW;cXDNX)jvxVY^Phr9cL|8GHL`K9wIWQ&s%kjb}UpQ64SIAJ9Y?O`fo1iXNz9lOpFoKRE9062{>t9*c}`F| zI-25f+~S`6`N@m-zWSXRJG#6qq6UmkMa?96mu-5;#njsYGLcfH5OEt@)Om_oskK1T z*TJ2<@g?lbKXzrw{w+tn1HJOWC1iRVsO7vjzT?g($SyNfQg{%VQno0|gOtR@y`ds< zGm9Hx(}dn;?~1Bjkoo*J>*Ln;ybIKI;V8R#y1Bm=&7*;L!cOH=G`FE40h>~DQ8N*9 zvGgblqtm!i=ZuN6nF}z`u1T}3R4(-}#warflcv*^o|{pDy`yVl6o$wVWyx8o;Dbq5 zvPmi#Boy6TndV&-?Jdh+p%YW0G}G_LLLYJO=*G-yRh$+t6&3?8$&oTZN}c7!w$Cc% zi3}Eb(GxcTXk;Xlbn?8j+&sHIVO56hg`6)|I&}V5kBm7Y#KtS7FtCZ3;E>fVVW&K# z1j_?3D_u9cb@;!!1;ui1jx?U`Z{tPQ@Ig%a2v8mFOlopQgQk!z>UzIYD>e&@sL87t zHQ}qAeD>5hbSlGh@wJW|-yGfYyqq21A5g%&Pqu{13Z^Fk)3@bG%33>6)~=~9$jA=) zhz}WD+h#G0tmLpvlNe!kVkl%Pa!K-Jv9mGLCC`^#AuAs9U$!^Rw$wxh_oYvbg^P_t zdqc^QQW=(z*}Cv$QWHkkFN5XHR{iV$=LxGL0-C5XV3J|(OS<8+^~X*9I<}-9cjP%j zN~t6Uz!~`f8E;qp?4=_bZtDKY&Qz;sIM0*5d(KQi#faqbkw!fWSPHY}q~pVPA2CSg zNDULn`4z`Ea3W@SNIFbHUI-01dBI1V9k&UVrnqFL%6u2Z>^?SkU|DC*~v8Ck1CJJ?G zzkSTsVn5xwE&s3Hx3ls&mNG0TMhei=VP&Is1{T{3h90{q*KSgF!%s=TF;qQSlr$bi zYjS{}f40>abMJlaJ1<|FWjAJsiD61hwy5FKO5`OkcBxH|4h|=4Gh3DGG0$Y(R>8LM zCcyMl8~^T_8;*uSB`SJn=AX_8Rd#tyV+0x_qO6_w%(NGCGD%BoO#)|J7Q%Ai3v>#P zY-V8z|E24ZHSMJ>gJX76^E2b*&UM1lo^gK-Jc6b#$l|}S8o&F)cr9U*54%<@l8ezG zbj_s?yY!10bdIm6D9>ePvj9fYUu`uP|1uLBZe~z12e*7()@P?m$uO;zCIrY&*CR7W zt*q`w4p>^l)H~61toSVX!NdYbs8mqw=55Rck&(&ZxKFS>UP#9@@L>&=Z5~VS|H(;L znX6w;j&dF3{*RhreX=e3@?4j&2@h>j^me44x%-l+!*fV5|{CTpF^>~<;+|maH> zbBx>gm+2x5>iMbb(QnkC!s95*Y)j6J#LSh1TDX?8+X55r?@Z1dX)*kUommuXRt$S& z@=I4U%=-{k%e`14vgTESr&Ef?PYs7zPW=k`@1G~)EUkzda7zg;(K6@Po945$DEdg#UPT0e_sB}egYjk)EzZ{#|mHNi!KxPa;35kj>SFxzXaXg%0)Zah|D<6XM$+Ec5{C>agN@m;Ie z9B$6$@_N~&q9>QkbUXO;%0&*x9#N4$l#;u7CE;@ayGE0AJ46zoJ8p0O?C zDi0&!&omiJDLd!GxHA+ZP1l2nTKVR;zsUgQ%iitk*3pxlwKXY=5$m0gU7gB`=$S;@ z*U=llsnbimq$3R1K4u3^k<4%WV z{f>@*Rf>1BdHU9OlEN>|QU5}@7-HjJYG;s1W&U^{9yUebO4xvO52tfI*2)&)&w*ZK zOP6}N42*>YximBeGydyWffNxB8<#h8>zi{}pbk{>y4}wOwE4ZhRp5ZUNWPw(ZB9$N zprlLj9-RN!m8cHRT#bz1(jr(RhiQy~#jBEd*SFSAGgIYU`f5*|d|SUl=bF>P76D?u zLS*bwJG4ga%xZZ^>9!m|`mRIK0G~8Qc?{B3A#|z!zWZ?Oj6mv5i>EofL?;tPNoKs! zyPRbT8xOqQH(=S`y!zx5U7UKjieKPxW=2}w>w@6_0io)%BmeZgpFBN z`8y7q?EQ~x^@xQ>rtLCFu4p($hYm#wRv4j|M28n+bl~Ro?)J&g{j+e%I3wkBQuA`R zRh$@-B@WZQ^=8J0=-^>r^ggFNsS8Il$5${t+M>xtbY+`3B~DX=p)oz<{;B~B#pzhK zXbls{0P7)@mrsBEG)jWSG^tFIP5Q#At?Ms;5*?LInyL{)WO9{~tev|V4}XlE$z8cT zKMy%Q1iPf~ykt5k7Ce zueh2;dV2hGkd)lbvt@xEBIy!!`72$7I4k{O;;^ zLkL6|r>5$f-jI@5QlBp6&rWuBO?sg#0w0TvmRHkd|E2BneOvg-1__zXjM753S6a7l zqOX$3=j9NuoCRKf^PlNSni4H_zX3$sLKJ%7U5cc7lohF8$6Sr^No?Q&1HGMg)aRU; z)7+Zpt>0jAP~-Yw*Ib)z4O5V&Z91z>y+KGEc%GGtoaXQLhqnLlrt}Fgk8F@xsFqEOzNlUtTc>RG(eYn*;hhxbSzk++LZxae7Z4ud7Xous=1W zu5jr5?k+$kTH>+HsPnDSVl@074zGB=COPEdUfpNGTunindomOxxx4VNNsRK1@45u< zWaJ`6#Z6|a>j2S~S*0eUVt>|28?#QH!{55 z{uw-KhQQ6;Z+-(7nlaAGfH8PfHsCDe z`i*NF@qzM-nR^&SbtP@cO)jGGuhshCfnmS6I=Ks zI7wr8H00yH2s#T?MCAIIIX-A0QC!v@`w5>EXx%-~7`{!v3>ZNCA0=RnDzZ(g@>cR% z{BZ09%2WkUzs~o4O%%CG#M8U?8@lU=9G3|ZI4b<7@}tAcwW1@iW}p3b7r1D{fDFN zKZnWZ*_+Xq1_lxnveIg#?aR-zQZJO!K82_`Z4Hk7qt6 zJ{BmP4OlGWG|843w>F_}e3wPdx*A8IxRVwNOsTBV=ee{PxgWnpgrvD2h%`T@Wh6eTFD;w?&GgmSBc0YelHvG& znYy>;I<70r_YW0Oevv~j?FjY5v0r4>iDR`Zq9Pd8{m^BKgeAI3fFX;xu#OLb4Yf%C zRGC0;T1CntKl}Op=h~p0dn0q@%ET>m>@ml@td(OaI6u$!RlW29oLlNfth){~K?619 zI=iNOzClls7FW3+G~d?Mel(>~c}K8-Meqo9jAvHZg~#m^zOYiw!~G{u?*IDk;ra1! z%h3^bfdjvJEd!eY&S;ra*a;q0?76PdN}Y&+If9Vf=k%~<#wj8hU@Yi>MABuTv)igY(Tu2>QrG~xPcX^>94Um4Zy3d*{z|aPJ_61{{14x20eb-=QFa{d-znlV?=*PlB z4HF6Z^0>adfA?2UfMjzuI0-9Z#)d*^XApx@(lFBzDh3{h$8rThBf*=IYVZIIMR`to zl3O&( zorh3!IKxTE-8ElOL;SF%IHYk#xZ7;-1^K;;8>IcG6Rz_ zQG=5X_2N5EqcpTUqIRXaP*PA1kw`I?HL7$M%ZSw(tH@9_)Tr(FMr(+Xb`?_KGO0%7 zGkW-Uyy+zE0A*Hv)-3p-PgdT|6s+K!QL{dpQ437Cw5J&-&bT2R%uZ|rVMj>D-58k6 zY2q;5g)g7%^_@Yk(_)lx0yOTBv*+ObCwss8<^JaQfNEJNIZn5LN%7smN7iX@5-g4= zneY;iSoijonpz-POtX|qpjb;lUq@mZ{}Jm17YP->=*xb<*?~wYgHE5TVV}X1J;V`) zU?gv-jrTlFKx?K6+JOdm|cnw=0j zhD?0eWFmtMYvkIG#d`K{|L&h&VCk}Tkv=Tl-0G*;o#}J6M!O_`ldjX-r_lmVKEykZ zXWjnsvYj+&u*s7u1`Haza7)sr+mzCU&v@p^y)S+hEY1=xQz^A60CQYP0|3otgiAtL z|AsLlN_J2&|6%O~ni`Xx3_D;9NEQM;QfaweFIf0XGEDWl|F#PqA!xDyeK|hH zXc=*1V>J>kyZ1s*2q`}h?KGnuwX51Y>HC{IUn2-Y1VW}d3Sy|+!Af3sk47R`0#9en znO0+qg49?c9fKS=0g+HLF}wvBh!D#yDHL9K%mrPVKdMwUCGw0UNw&a5^-%Cr3yUOD zh!#HeC>6&D7QopYZHI3zHW0J<{$Kx+4hum?w9PwyR5BT`rR@?o$02C#>Xaf1_S1OgvY1X#i3fQN2=3 zmv9k?!zgBo0u7h|0JRJg(hVxbUr3vPv`|vUddZkc!%2ia^0Uz^GrPhb7dMJ~;qzTBeqsmepb0B0Q~ z2if!VOR#Vyr&Y+lt6tJEM!EG*Nd=wgKf=jyIUFSS)h=XyAOo(r*)S5JKuOr)F`*bz z_g-`&6MY+-i)jWNOTQf7iriq6jk2U{cdxE#d7aNFBzaaAkvpE`lYb~cm6=V z8VP&NW%lHdTJeZ{5fD+iMOP|l03ee0mRfkxkxXd-ps-q8qBU*7-kVfP&pxW)5~?oP zmo!R_bkz%0(22ujn+O-X9wJpx1w5)#7`tNv@9JBISV~?G(TMrN4cp&=&Gmo$n}>{b zq567(9R>~ES0x8uHoaTOaZHJL`CZ2uAD7puQ>)v(&I;iUFlkf~X5udCA8U1AA;H)v z*y*M^weV_{Zz>{zrW+?_lR-NA>fSH!A(740U!EO5{)uKn#k_;aSf`&Pa7G9WQZd6T zJ3SL_{h?O*Ng=}SEVrcMz?wj@-Xe20{eM$Fwf<|OUms}nnepoXCtU_JdYYW9PMAO= zMq=;BHzs=U9k!t*56VO8=wFa~`0(r0tm!&dt-tmFgQmX9yE9s;8c9Dpnv}a+~x8J!gJ2yIt?Yj8)_YZ&XvPCJ_Ik7^iMm)7Tr|Y^W z@f?|q@rffY7%rb{Ce$=+y``T#0siDp1Xysp?VPWs~G`y_4ZB(*!R zI64VE#==G>IZOu>t~`h1AtR+~=TFNr z3hX9g6b4&gM=K!WtNbGy)xAd|#tuX$Zn%@hbhAocrInH?y{0FY0idCsOQ)MQ1};S2 zUYuSlW)ORkEUb=R(+jT{xn6|V9XNH}Phb7p z{|f}PozIFYN}F2YVsO((ONW5mASCgcG3wHeeu-`}Ih-38-(8qi;v_5MWTlpaoY*KU zG~amNy{cuk4>*1R^8h)AUwm?J!;MbAq+pJZPOMIXOGfD!TEHlwyP44M0!;8KOcyc+ z7(y@*p)Z?QbG;549#9}Juvo&&hh;>{>i19NTl*iAbpCzU0D9zDn+3c(zkuSHMh|ok zOLyuYpV|XIi_DCw5!D5jyAGqDqdSLVkN#9n`p<`NbF7&qppj8zeZXO|0pcxOD8`84 z0v38@kYIkGdRiG#GNle7W;$t?cx2YB4@l4|NJmt^GEA-H>|~AL-`QxYw-CFKGdH5Up zr7{K}X}A%CqkdQE0)UV#s=HNxhl+B~l8*Az&#^@UC61Y}T`Uv%@S<{_kr9aao(xaR zuG#LS6s3*|+T~4OJiEzjE(%jdk-CM32A0@yZV1T|c@4{4w%gow4q%(j>E&Pk_0KOb z>asP8AN=R8Qq-_oZX^j)zR}g2Pa0v{H4PnAzqs^$eK~@}N8D#~gK3}!km#HQO8!wu zdQ{G!-N2Kd1d-L*9X=|axBtb*_k?uaeg+6awm`8t-juaC*E>}(AqhO#EbD>FG+Oym zAayXdr+6M*h);r%_>*-_>URD>f7{{{Az*(m+F1Wn>%l}DiRp0A{~Eo}K5MpTPla*L zoYr#%RzxQ6I;V(K2{bEqmqjw5#KuXfU7+!($7?LI3)#)6k@T*)3H2Hr4LjhFlN5pU zG`@UkI(WI*V~2)giup1sQAz-*B5J(~^+z4-nH6BsEQ&Fec=Lx!P}|Eo6{s^<%{TxS ziYpzV1QuR%?ofNKTo#INR5P=6@%_K0S*l|me7J42OgGgo`mV)~))PIn>L z;XHqL%YhwZI9cKJtLx%GB@P<1TdYnC2yjYl5}{z3*$iS-CWee8Fb}C=(><#MZm8nl ze2rh&o5-bkI@Gl!W6BL3=klRm&s6}C5KB&E0BstOuRtDOqQBcwAh9Bj6Yz=c2d+nczH&!!A1>k3Q#zwQ5x{# z#`++2liO&2**Mc!#4BK^fz`qTu4OJ!w&VUYw;m>(*Q&ESe7N`Jmq+$gTTae-^vZqN zfQ%NODL+ad9OXwvKy1?lX!gIn_p4v-;k;#Q+M<{w%!KZ2#}@UMKaN?3Pa+!d@h!J3 zvv>t!=-yQ{6(nMpUF;>f>znb+a;*DFDVhP$E&24X$3VLaGaEU`vT6_#mlUA^5FaY@ z_hpjIGw{UlHpJqDFP`TdiS3HsMJ;g<{Nzr5^V>g&=1xig0=PiergnjYhTMy<$T&tX z#w|)SW{jYx++!5-Lbd$d4jGOyM6;=(3i_gPUs)!kb4>fv$N&Djn3++IW&+DJqnS)c7f!RwHwI-j z-0zg+;Q@+)ojrRA;?V-#9esUR+h=Up94E~8&?)0VJ1P7`RQj2ze#_mD?@}&P?*b|5 z6Gn;5%~6VByhqUti?knDXFq`-}d5=hk2a z6|@2!4-Lc7J2nbdd`Gq$c7o54%&eR!nwyppb7?R&hz!xlG?Fs>BmVU0U9f?Y8ABa! z?h}_POXxxDc7P47h?9D`8&YUw)>9G0ca;$vQqx<(h zxqFCHNR}7lAf26&zGvL($Izlz`Y}KHc-%UGDtldd9h`&}z*+IVX$BZUn5mue5eZ5I zm?ALhH3usxGJnLZ7h;AX>-3)o7#>mj#V4sAt+unoE_R1k#CB;Hun8d@cw)we$Y*df z#FDOo6dKt4Qh!j@Pwy)KzZRIYu{)Wa0Aqw}rU)#em0nHN3=T8$ zwJ=O0V4pp|ECgdRT{>k%?q%P-B6H;iD$W$*MK=sk6E-xPw+uAsBxGciUTlB_YM|rv z+@9lksUmf8&{(U@^>gk~#r!E4x4x@m-Tr{W75eh++HzCk!x4PRLJku6AJRzG)(qZm5GN1#zbH-p5~@ozN~PdCk3pf>29Xh)JRvc+uFb zfG^$d*u-g|%vob+GDxF#{ik23Xm9a-t?(HX;hFL8q&qz>@(=>T#H@+H}azrm02^&)+ zXKoEt@w#UUTZ;OF58wLQCzJEsiSu%C6TFwFn;-wjtMKt`0&@eHnP4I6^~o6~hw)>y{ zO7RvhI6Ld^hitNUqlE4_GbG|-Wj)yd6}_wWZt2?sG$Dp-6kOCdc#V>&7=}K9oT^^N zQrY@R{q2L9K;HklcxL`;py=Sh1vZ+mVNuSD<6Tz32PzN{F7s8@uV3_@fZ7ZG%W64wMt06n{~|U^*ATS`#E`)#rOE#$qzfn}d{5Zo8xtMUG;#Un zbi=DwTSoye_XuFZMdaH%cBv~D$Tr8hM)%isMKLZgcncfay6jsPPUYF+|Q|tvu}p(PW{_k6A*1GqkIvlNT^>Itk-d9Hu}o12V(Y zKp{<=F={N^>_#H6GrY1I6ON%>;bUYkN1LJPi4!`TE462mi}L16Yh{7ho=UhgKCBTW zU=R`BHjs3-xy+TG6LOng97ixmmoL8m57$Cu%GC)hq-xh`(BRSl!LA7=^MV8lHfFdV zi4P8vH7VJUz%1qbprH9l0fqWJ04m=xHp{)aUvr_yk4Vkj-%srhDki*p5-5ga-2DX_ zAgMXFDn!`Ll}^57qZWwl{IvKD?Lff1;=$Fh>DcTAmHg~rukG$!boN7n#{ z5R7dHpX3b{1w$O-BMT638${v!M`q%yeZDy_jo>uN3V1f{Va zt|{NwN^E}!BS8{qA{o~l!4%JRW8#%WOXnW$pVrC*5V*--=R5vojLZ z#JXiiKEcBovl*<6h0?Xg+snJMK%u3|@F(B6290*Kq;e+0EAoO#&`aKt$zKZAm8Iq& z{ma)ZQA3QzwqO&O$cJv0h6|vO8YtfwqojnrYQ9R}>g>fJNiKy9JTg7j@z6+?Tdpx( zx1w$@=4;$*V5k(vfcoVHot_bdo%~@tf!NU(j}6E zlK5{P*51SY&p#Hc3oyef-F;*dNP?MAlx-K+@X(9!A=` zT`fVYdts+W%lu!nN0*tfc+ACfy;*UGjFrw%U7l@8U+RU4 zy1e}HFREOgJ^C{|xHPWIT%6n0n4Y+0t|7JJK4;&HxlFZ!OBgUl+UUX>>*_O1ePk29 z`w!TvaI$ZJ2n^K@NMPf9vAke(^!Z13;}f9p!Y_g^6I^K@YRVkJLyk3FQxAa?_Y77> zs)UXC^8Ib2Apg5FR(3k`q81X~j)qP2_B4@zQCj->t3-^3)f(EE z_AOLr7UzLZBhtpRrgDW{faB0C4E3=}rd+7v`!e{5(}9g>Z$r_*rsoD{kJ7y438Y*D zMSA7M=CVnHww_%lRugh0jW*uMC^<$@3-;zBlPF7F_TBaOnfTAv9?|i3rgI8$rgQFkq%+=nbgZrQV>i%{!p7hxX zqNHXC-!cF}B({;LJ{Y-+X;8+%Sj2MHu(lwx)QjI4x2UMHj71u}__O`R z^Cs+P>q7xgVW)RYm?+A(o~svs`Ca5P@3~m^;AeDSaLFxdad+XS={%wst&JhD z1Pi;e*&c)fN_X!HH$hFj6G(W{k%=SSjRz~{3v3@WPo`i*u;)tLJ>JA8zS6g41;k-; z{>MI52Sd*!V?=3~sL{Nzvox^3YvM8^V8YE>5;(A74HGJUCp`@~iQux5!oU7Zjs8We zN1f0*}RXJW*{_U02BD1wQ@_oaA8zYOmj?;k#Zmr=|y zON`>cUc&{va;Nux{n4jaoFf3CS7Mf+Qv+{sna1icLLHYfAj)`9BXE;73Ejv928z7| z8cVB#gs*!&uZ5%0FEPr3hR;Tg{$0yJ!=FCRQ`f*hZn$w=7*L{-zDBcXk-77Pq$#9I z(}t3%|8@?1)WbRIJZ_SnLcjm=$8tu+?AW3LF;)U~!#MduK;iC>t;*F2A|iOL2QOg; zb)b~t9$1;f^&*>Dk0dN+jRM&cQkWEl_hc6_x4k^u@X5y2D3Wq#nq zgX}m<4lzf0N}^$to^~mkq>^EtC=2+EF0$JoT{fLa@Qz<+-OeJ z_)OU=2)Q*&Sue~pFj4!^k+r}J%^Vzl-@w5 zS+jsc%&xGVb|1J5(ie@9wdqMWWf?O@tKd7wn&c&PzE+7zwNx-Q_5F<*!5@5TR6+?? zfP+waH$N$%GhAXfa>*=J0@Evg2{rx{)#SCtFb!^|51q12ju$xcPck>_ z;6hK=!2WC^;ju(6LQ1wa#^}-k3h)eI92gsAR*#ucO1Zbkl1x|^xv)<={|LEoi*_lb z93+`X3^UP|u+#{((gDQEiq!?Fl~#;>;2^+^00x!WRXCU6ZIU`J5oi>}&9A0*D_o#` z$IPU0n~J#zZ`@KVRU69`|2LnVvfh+$`cZHOP*OAqhkwK#Wn<>OKx3zATU@EJKEnf8 zIb67;aKVSL&Vd@vm^RfKVxYkF&s@bMM-PNoAY-yeb%run2{P7+*=;&b} z3JGh`8%BQW>ew8QUj{4w)e*b)o}9skEfSfGK%BB5lXM9`kq8npUjsPZp?r(qRpa1r z-gWcua*q%NfdUv6?9S{jGKFJeNYe2Q@sIb-kQ);$DjvN z>{+e8IrHfAkMBL^711wG0c6q2<{V^>H)W_TtPtCSOkgH^MX;loxTpHeR7>>ZRfgag zjKWA1GfQBh$b(Fn8SES+)&>{@3e?jU41&&d-LAVbpweU>p(XdaAp;mCZULR$YJkD& z;Ga8(zqi**#;6l&7s^91;x7qa90NC1@hWX#onA2~aZG#Q08BHlA-XYGvD9N?#yZ!j z%BUq%7IN%M2h2RoXlB$6#nLe90x$B=>guckVXzRPEIz3`N+A@|*$tcCU=aW*95WOH zI3a~$LOo8xFR=@FxH`ZPh4du^qpPoo#?2m}BxT*|S-I`nnvBo>gCcl=pbfRVclhAQ zYAD3raaLd%-suN9@j!=y{rSGb&p-OrV4F2@12~RQpo{%b24bZtPlasiZ%0fP*wv3qD4*sC39Xh*0v4 zpe8hUja;$Pw{MK>H_u1L6sY@c&vP8S-1)8fJUBzf9}&I0YV$1jbdh|ZMvu@cbO$}t zkfSVB{!%3j(+N9p!KH#7RZsjQ1_xR)Qi!LKN3jhR%nD(n2Eh_387Bdl0n26em}8Nc zqN*;LsU>RLBT~u;6sH>)u~TqU&A{0f3tjxjkAoB>;|g?r&UP7~g`Xl=gPa;;kGPye z4#3j&9@MzKjZXc1wUGD4{sO&wE_ z+3bd*xxA>nDfT4MR%5#4H0Fr#^XTEE{JDTn0XLN=0|hi&cbP zMC?*8Pagi$A4P1jiK6dUCUws{!VKUMY{208ntXxP$^LX=IcZPq zZbMDR7rG`trXNNk9^_HLCCv*q4Wy4vwj*_?Nvf2gp43s*-J*2?hj1D7@&co17PRwJ ziU4$d{r#W)w|#Dy^YFqd`7AL(tP(=ev%m0@-W>>hAQpItJPNNQhn)`#N8)+x%pSrA zq=l}G4~L}yu+!TRyX}gP)N%CbM|Tst$&&cvJlz|^XmGOO=I9(!vQuRwtK-cGEznG5 zco5Q)^9@Dq7|&+2TY~uzi?x7}e>R+ecRVwP1~)S#rh_}EIC~Mw+N4*)j-ztY$zDSp z$0R9j0H1+JEE1gBs6*2y8PHy@$mhu);*h3x5u0ly(qfn73m8n%cL0JQG?c-yN9G2a z%A$(te;Ewit0_N-ii z=p>TCHPcMJOx08>c+fE}(}G3F0F68P=V?e#QoHg7U*(UQIdzwkF1Rw2U?LZT(&CX! zQz|9ZOSssuTE%c@*s*~0^yeFv(}j9)^>Kw|+T zK=cWj%Q0OGJuygq#ay~5vunQ)9b#^`gEkT=Y*9qgkm?=FG@V`2W#?Rfqu%?~wa3%2 zMW%YGcEMnQ(f~k#USKBUL&J0g%Z#<^aS}!SgU$q8(lY>JUkzP6gM?su zf{dtTC?Qa*1AeMy8jlvf;(HOykDbY9Bp?yUCZ!>vMSVpH6am zeUgmRlK%$?pkR`!a#Gh4K&Iw3C7S~jTrxpR+14d3(DhE5geiMYTJ7$NonyPBZ#x$K z^c}VKvPa_=!N-8)G3zsO28I|QT4r+F=dk#rO`IQA zLI^oyR7qhMa`rj{B#x4BX#i4$QcI(73*um#I85MD!YC6}5IDP(L1KcKscjlJC~YoZ z=UB@%{rG)6dofnvBWVgV_OPYEF;tX2ZQ}XQxdxFx|y5caTW@coRldz zIF48bSqBf2I343v$1Q!oclm_}$(;@yi&7?ZciWSQ@yEA9Lm1@o(WXc*1i^_d zo8@l_Oo2rUqXJSYv6!m{jZvZLNxLbU55^oloE>zUC>TTBx ziwu11Lkzs6U&2hAp_rLuD$N^w6!1R$LrQnz{_ybX6?X@<L2ITQl$%L+J7Gp?f0zjtE~+lK8NFL2 zOd=cylB|n|1_L@1vhvYxK%mGHxsTR~;fd5u$X>r669F9^!i#E#ljHN3{^T(~sv8#L zgq>cYBD{bBve9f0d`=7$us@#ld36xR%64$zl4DdbVQ^*LvSuu6JFn1l+tL_r4Hff0 zy9TbyveIFtFFe!p1$4p-leEh1$`Zf`Ix#WBPSUgwCKkSuINd{Y%Nq~t`LM4<>B1UL@bYF)m& zF{?|_7Q>UmMS2&XICXQQ-|&FbiviMAW(lz<^e$@+I$R=P+PuDkBptztg*tuy8is^cLJ3HD+zosH zN@i-723)s8$3!2y)ol7h^(lzyNdNzbcDuKraV$ph!WdnoM@9-rx9Rcb2N~(uf%ZaB z{SC#>xt2A$(Im%$?eWfX7IFx*t)kbr@Tb~Vt;4Kx&Yu}iE#&*{a>T%r<1 zh9YgQpJJDG7%lq6AQPWqdeOIRE?>O;{x4k^7ojS-EKPsIxz3>q{`1k|BS5wo<65e3|CN;e~w)}4{nJ9Y^-o1Q}vaMrNLes}LyIAq0t zb?)BtQR%8oN88De1d!srQF1)9L&>9JpZlvgw%Z_pKqcK!Isf4 zagFk*R}H%dm5RLsjNxlq1@i(-B6q}XyrG(f{0RgM5}ycG(!Cmt6os2zIs>T?(%WwJ zc3C0GA)587x+pjQb-^0i$&ptm1FgqhOv_kNL&3Q!*<1(E?(gg6v9)VPG80~;Enq>?X$ONN+5UEV2 zdI;xW0=e}MN?P|Xg_fVVB)p7bxkbu?%&o8sAr>egXqrwmc8N{GO1dQvNsmxnh)Lt# zff6+^OWPPHU;^;Q1Vk)2MKHGqAI-qno+wcy&uF8OG-=!H(I^|XNW(7QnN`XfF+`#0 zdUIm{8q}z)WS$Z%Jz2yEHJXRX!8{8&4n#9eDV1-Or>rB|D3+Vj&2u(1py11;SZ*8> zr#MYYAn9w#p`MV7E5skN7J}&$S4~0=Ok`m_#s_{p0c3h2j@)Lp2wRxZvJWiN<4h*V zeTr8&)ke*Y79{-hE0+^ zD*TUWYJpA3rSeSJ#xA@JY$p9UCMp&IqN*_gBb@YFn`!x<+PVn4`i9UkXqr_9XSW2B z#WJmznHqt+A~d08QBAsLRb-Be0V4i%k9=)_fSdp~iSa4_IMv@CS|58@M%;?EL@zVM zHA&3ijCHcvJ=9YHOtD;}r+G)CTNs*@Z{ik~g2*jkrVa*pETIM*2-`SD;4bZ=Qnvvm z`OakUtWBkA%UX%!>4dU3-~R~=!pR^8*J$Jjjn^D3x})8G8&YIC(kW0he)Z4~9g?lu zJ5o&t4++`fl>x`7TDPE*hTY2#Sinj0aFBj}H_Jo7Y=%_;<|$M>&OT+D1~67YVK;1? ziNYuVhn#kfRK+k!fn~{;vPQ79EKq+>fQ?at3#Tp~k@K3pdi*o}(}S9y0HTxa?BcXI zr%N<@z(TL|_=#TeM=#oChC2o&gQv4b!Nu64{i>%dQrBM>xWy{D(=1Iv7!$wf2s>7~ zZHmN*x(vHqu8QxelHw;3xEZOOBZLE2@`ve{R7x@8X6$GHZ2MaJSfI?(QoO8`z>5K{ zkP^2*RR^m7XL5qdwMob@$$0>}9GC#ggkVmuHaBm7H~+Qkz#5Hw2?-xA-7w4S1I%!E zDkQ(ATR&@*;z-vzYO&{pKG4oWIPLA#!aiUHUY)a-Cmw*1&|wZW#~6idj-LX|*rjl? z@DjhoHMvKNY$mv?LnU3OMJ0<(n%B-Q#>pDhJ2MF-b_35MoUuXv-bUJFoc!Ur*A~1A z7JX#ae)DCvEW{N2_AXi#(S(KS>q1Fb$dAswo{63-en{>%C0PXy9%LhML-hVrCg|10 zO+gndlW#<>Smhyky}~)l8dw?@Xu`QvjNL@a7$^Xl;ICdZy@H7cAp`xlE~ux&)HzX81bwkei}5XS}2zf9xW- zK3yoryHFP3=BSPXFLEh=YAQzaF9NI{Itk!Hs|>1n4Z7_3~8Bikd#b9rIrKSDf;{a5L75YQ z7W@MMP{g%{4~8cT+VNsk=?#0UF;Zp#m|(Fp&(sd-{6dag+0$_k%|=KmcHi zUtmQ4b}Lsz#6&Wc)6p;VL9S9pDqkCZF5e)S;o3#G^hxOPC2A5;wBLG~CPs)dk^zhl zND#1tv>Bxzw91wAu{A&S%a$%DEu}6>l8={jbmYJO$y9}O&Qyli6E#-BV-I@1o zrz;?MJ)JoKv*6$W6WeHs;ROxxx{OfpKr_QP)0=)NPPb;wY*tlF^UcHmWqd%PToqBk z04woJ3YQ2DMilR=#q1D_aHIx8R0uH>LV(J2@0lXFiB>em{}5)L@MsN8y_&zuw0+u02=YefoRMy z2&v+>LdOBNAv?h-!0jFFp&<9=^MCyGe8pWPiUt%@&07FwXMh4u<|+hHx7jM(lBfX! z`))clBl;3r@Jua#j<4`DOZZp{W-v2*{+n9^+{eRzU2XXM`@75WVS`;7aGxDor~v~= zNx#4cSfyct&cy6^LR{`U$r@iDTH zilUMtEyZH$MlR44FsiRBT4#^mg#_SGz5qxeM=nXv%gdW0Es{Z^DmW#wX_%V9X%K}v z3a~hkOB7TVl@Ku5AsAXIYC$`1%Zts;n_TJ&nDUbXimxLz{Uc&}gyygcJ_r*a5}u+7 zVCfdLwa6b?u{){XTd(^l#Ka=Q6zyT?!Q%gdZ3;8__0#)%A` zv5zBYf(*=T8g2p;tP%*|mEv{2Ld!`*2=GqO2_Avy!;**8?`>qPqyEp7TKL)hyYt_- zJMyJNf42mRu|*3g;8FN)Jm-N+*cs(AC`kpYY}m&!B^ zEWlBjB&9AlhC60{oO&@lV=oaK#Uyc%iFIf}E;&Wqq2>${y@L=qfSr*qeu(*j!jAhd zE?1H|tAt9TnRtYIgh6W3zA!T!a(P*KH~T}lC=&@LR+*%YK>~lNh$!Ao-Borl7qzQM zZyZmN{a_|R)8)n+<3fcW_vCQD*|y0Y*MI+HqzfRy!L5H(IWHo?E`z6(i~E)gPTm01 z-rb-5a{Ory5VQ!uj9!?|q?cbqa*rKU%X(IR_11jTOCuCp*9^fZdnM44=%azt;zfPzDfZQVD zr7??;kxk+TY4W6;Ic6v8Gg$y5Sv8rdK?`!3ItIv?gky&2O!-3g=kl_w(ZUH238iSu z8El%J0pF;hI%AN!Fh7+>jSWhxWR1oEB}G8QeZ~mmOBcdrRx(J=GD+^i{WC|P08qYE z?FbozoUD?k0hrXUjM)Ei(1Gmp=n z7IMTDS)~K#nWYyzAO~^-N?)mzbZ_XG%{;Mhb{N`F63YY)n|WD8Cl|{9KfWd16I)%fN9n!7D*8mdjw8ub$La(QSlF~Kt;KL7yO`M7iU#&Il#g( z;xM5D2?@D)9bMjx@tM7N#mATvl~ua@;m5yZXGYDs6ax*{7dkRUuDxa#*ow;oAyNb} zMW%#32^e-BKVnysEKak303%UKN>?p7ppZ0~tV~fxs!lxPK=B(T-&aZ993(&hFov z3KF!;v4lWA^n`J*GDkfvAg~mCY48XY({2K$cTqdO_U80u8s>Cc5lkPkZu^%m7u{!0 zcQ>-!(Po=@YDRYRom$V>LT1P^p*eRWA1R0gjor()K-L53$qyQpQbf0ae8DQ>}0(}B^fNr%zM!nz> z&5U1E-HtP$;;PTXJor!aY2Y+PRb7w4N!MlA#>#k`+-Z=olk^p|%QOX<;8HgLLCL*v zqkp|21$L(7n|^6vz*fnjj*zl&%dyJS9z$yZma^-s%_lMuqNFG$e0Q zw*lq(GbyAXG;2?kz5xk7^+aNJBobPVs$~$-g`Z|0b0joD#Na8lLa(@bNGKKxFfTS& z!RE?2dDEv=!o2PCAleS$bDL3Mr!EfKbdbLDPr+QOE#E ztR`~m2SrEd#BZnq0?5uFXD>`r#lQIIemoKsN-%~9XozZ-qdl|&6ky>1oM@$6vTF9& z9*}r^ma9~fiFz6FTjDy%gccjR#^w01_+tu6E<2=m*Xlx81|>VMaoVeING8+-nfiet z(*-(77a4=NMN9NIg}W#wXS#=$9P*EVAtR(zx7s?UNYBLR629?E!lg~Tf@2c7nWl)Q zT9`7^jE$6ZaB+Af4InLM5qf!tJcME(BU{w0y2;&{(nSFSB~k%0*PQUFbvNS z%&<$uGAcF;l%RQ#ss#{dAMSyM96+%b=%FQYybU(l`|M}Gf)|uh#P0kh|A?B&>M%O2 z6mzqgF_3WNRl#P!fEegtlEy)*6Kwi~__YOcN8@IN%wH0>tht0jO$!q2Srpz{BAe|G zt61y1U3OT>8bO7COJK3s#4gcId!Z!aSsHij(ohYg%rlbOAz}WQVj*mQ021Ywi&4fP z@vaGzSKOZ9Q&)bnDGMQoe0kCAmLv-F^ms-=ew>rO#WM-sgl`FH5_nu`oKa2*Vz@pf ziC{=(5qi+d_Qi=_JJ8dBS3WgVtbAinmxybwpF#-$?Z8skz-CMF&c_GuACDcMKg?)&Sk#*i2FbP zXzv7-Y@S-3g%&18GX|MP>ztwvPv^1Ir$y&-n_!2|Jt2AdMwzEvBrf*@z>gxdJ77YUD(JK(vt(V$Oo#_ z@NQm|pib|0;PU;C=EAWs4YyV&e`q)cle3`}3M^>fX!l@!O5Z-z`-$7wrg->q~pO^LN($qhcv4=KVt+a!Z0&Hpkc4DaZ~Z!v*$mg zT;RfLYF|hcyA+8^s3LdbzLzFe9hsZw6l+X;E@wz4DKoUFg;Kd5fvZr;SyfGuCfA<% zs#$@QYN&K>z)AV$E1fEwCwq4m2#mN*SEuK@9+dRvdzYnr$!Lv)O1Io97b2tL(y>JW z$CI2Lh(@4*1YXB8PwWe>(XMT!Fu>%AHyI=_3MUUv4ivjZSlR(o|fs>h{VQCm1_VA4H(iLHz+2EjW>|mGB0xlRv z-2TDUcZl6i9#0t4tf3w% zBJstT6H{k41`25-z@qve>sCKAG^H{pC=1Y``O22SUx2S$vmr%{Lm+JG&@_Uj#QY z(GU`#aLtQxqBB&C5D&?>Ffw?kOp%S%nUT@i9B`3R6zILwD!eX!o_*V~L64I|M;=q5UdeZV0pbWO5r;oVk7ius3`}$O zz-|W*ctv3-xD2t3>?L9x^0hBj)CcD1G*&^Y9xb>S#*yF>aF+bl2robuWIm)DBN|f1 zc(pqNlp=O=j*oux4Ya6$F)ARJi2K6;0Yd4cQUa7KTojgpr`_1;*d@^-;1Whmi5Z)e zV1$|2CUiJ{alNfQswML9gQ8h`>MrKRCT95n2J4WNu! z8pu>-$Ao2`et7dHDu#+djXT-(iZB?Q_9%>O(@5S}WH7Y@kE`C9_H+Y@PiKMnF-v+k zd+5eFxmV*B6?bt@9;BfME2D$=?*8L{*^5cgM_v+w$^3*9n2Ad=Ml){Uc&XmlWdIZJ z45?I%ndOOVfGI6=z)-0l^x_5Eq*caCm)u!+81QRV7|s35L32sq%8FjHYBH`9oT8^j^ZuQ z5>E1|J0(Aer-WKe_99O`oWdA|hnWdzL*7EhPzucC1;r=Hm8x6MoMxJb@E|cI%)rR z#~~UA$DZrnYDHRxGj4lwfZUX0yb}209bG6T4@uWa9@If8Z7j35|Jgr$yvO*gs?33g z8kjIsUo@lrbZ3lYm|gUm^GTHSgN5#EwwXLSjBqK(T;=m%(Ak7FcDUJA;Kmw(!8~+W&oYiIq}!n zC4hObfr-gTKLwB6>D$!`ww$p-iQI1!z>L(6VSp-vVY$$V!(d@c4VBso84iS#p8q&< z2AcYVddA}pHT@kCN~g`z&H<7LGO#ixsSUJ5F*1*j9$f?@T>-`#N{ZG^Xg8mUpS`4R zGd7dGY|doKY{CM%)6&h|S5Q9--nGr5s$^|5s^!&=M53F2)n{i}(wN2BzxEG*R z(PP@j(0d)rGwS*uH|8-n+IOnjP2+~FDyuv;YYj#E^dCM35H1q>*pxt`c{5368;{S` zf0v71es&paxdMkLl_V#?n}!;SScU*(@}FmRJ64Yon)K4(V2CBK?0_9*mbOmZhWElD2+nEKuRfU&%CH=?9i zOyXq-M5Qzb2`|JGu!6+-_?;d)QLvtnOt8Vc*pO%&& z11^BlK!M`B>w#L|G%posfKFg?hGji53+03z`**TR|MVwm0Nf%-H&~%}bA?3r$MVcG zBpi-hAY~jThN+-TH48aP&=98#)6g+qGSiHYHGFh91Ys0rN#Nzwod*;O1+Tyg9x2#c z%26X7t5Q#(7dEu3pBh0Mnl@^z;uyh~CWbk^nvK{D+~~h}uk_nR@=41gEkkk4_PF_T zuUq+~L5PBd?sfcu@W)DVu=~V54lZRTJLo$zQY~YEa0_11m5Q-mHi2oFSnOAgN&Ms= zR8AF!!6=}CKCIk-L79ONv^WysoFJPC@NuH;Yl0MBsTIG35;5N??Tvf#lNiujyQH0Q z@~pLZW#Pp?AC$O7_+-&Za48zqS+y*aG-?YM!!q!|I0Xz{6~82Uhji*1zDew)avt7M zk6B^&t7p|U_1Z2)ky4K@g6f_BUguR5e;l}O>NkdNOc0LPr z*8Jc5aY#{IOtS-*A4b0{Vp7KoAAjLSXNHRG3f@I5jZET4=TwJ^j)w~T zV%*Z%V~Iw)<)szPfIz`sIRQ4%DLR=Ye^2h1g|2a;vsNb3Z=PiJ91AesX2NeqhrqG? zB}E#%Xkm0$lKkZ$Ln#cUc@(CvvG6Q}@m_DhV+Cl{Pp?$zmH^ za>3+)42OAaQ{)0GB?&T1xy?=<*np3L1F)m^A&P;VT^Q!wk3SZY%90?NWUipDRAV?P zbT_v*$oNW0=3xUvCA$a8C=Ng0dw03rdf&W%dn(j5PZSRz!$FgA{EBVT@zq52e4Cn> z%+f)2>G0sI2M1q$_K!ciS6B{5Ow0~W>{c}uVzNp*-Z^ge)uJ-)d}3IkT^S@mja(XM z5+<~K|zCj(BEbRecR<1Q~1U zHgIIHg3C%C4M+?_O4xYa$(bIY1RID57n7VWAz&%?(mYZD$9W`6IY(xt0){b3JrH=z z5dWxQ05_s8)iU6koS|fHSw&6~grr%p52R#{1mK97D(prDJAKPAagXwf7Q^HZu|JDn z>;xUzfnc(=N&&;n6giw`Yt82^TUtHeQQT8Ifj9@R21+1aLP4_aml{d%#7&EgV;3|c)KsP%r9DGcEjV)v0p z*$};tzNvhH5h^y9BlOA)L15z%NLB9s;H_6b>^Q;0==NXXuDX*8bS_v3utCU$GJoRH`#444dH1nh~@6l%d7L3S8BDdG9Bo^ z-n;GJ-rwZedXXl)qhQk>RV?=yj*j-uOqU2Oy__M=tMdHQpa1MrnQ9`X9~QqLmoY?H zB+><$FhlUs!L^D?k}lx^ij>x6n*f2tf*tG;=?sgcS~N3C{+W1%Tn#LcB7WDYc5lz< za*S=3hPK%&N@a8}gY-8p(oMvIK>%unT>?rI2zifRG!AumndlsR1RwO$ zlyywd7^46&>=IUX#wa-0Lngk`FPKHf5%Y|8iD%-RAKt%t`z%V%AXza;k@WIuQo(b> zyXl4R>?v!zdp}BXZ#gKwycswlw(qv@et7?bIE>S<%(uR#)VJuJn!3LKtH49nuurj= z4W`*Y{Nm?7yAL3}`9^ERTE?g30A}H0TS8Is-4F4)ku+nPa)VMSD|?i~G_V+u_YZ`I z{-^=XYP8e;JucD_{W?}Di!>32j(u3hH+r(cBD;Z(fb;0^GPndFE;hXqT4ovFdIk#g zB=gB14Ok||3lNrqxBu~>44Gj4$KF_=U|rL$K05md0p${m4Ah(Ryqql?Nl4rOxFVIyzV{RlzZ zX`P*4U2Wf@n6AxSxV&huZh5Y=*Q~p@IuZQY!RLEN?&_7>=;wtN%O;(w$u7Mcj>$vH zug)MLmLk3f8#bvR%~y_asq>Ct=c`UtpLuue&r?4#Q^YDwsAcnX#wS6|<0;f^1)Av? zPXMKH!jsYX`OghOdJHvKX7bacU;L8H(!vPX#2srLp=yO0|NUgD+szMJD_ZyO_jSiJ z!!?jH9Al@jORoe?b_%zYgB&63*l*;gi{`RIg;t8iybCLUasA?EG;f@ur_f#EhGi1; z&6`$0ClmuW71W8@Q7viNd>=1H$EM_Rvr65>BrI47fMP8CA{)+i9Yt@UWSpa$iRJ=D zD9P|JL9aR2A}+6A+P=n$RNp!?Mp%bj#m}M zFe&XG*&;N@_Piv8h3sUJh+HIdb$*IfmTzrvVUqRg?fds{)@3aegJ|#x2gx;Npg2Yv zKBCZd|DO0*68CC|Wpf^{oLdK;R1Au_`tJSv_wTmFf_X+_E*de5R1(r6Wh#G&T8JA5 zAAEJT_p9GN8NKVLpbL7ppY8`j1=!TI4JmExPxwywk$Q1{@};0}tx}InW=bddo16j9 zG)~Jf53!PIT??!MEUJ#A(QF~KF#%YCx)HTaq6+$wAcLvaf|!z^K( zfBG6WVvy>k!a#_?3(FWeFkW_^(#)^>>_%eX=GnU&F=7?}(F&NJh2ji%VXE z4fNz0Z7@XloO?}rV2kbh_dmWd#_jm%u}j3CjseCO(xuUbKHgKX{rIK(HPXemZ@zl+ z<=NhsFZ$>&!a*-M=G(u%d-v}Bdn7YTIkau!8a_0920ScjNA zLdQU&{Z93jubDz!b$B;k%Tt-!}ipj$f8@$EEg%3{uQ2P%7XSD&c144qc!D z50B?t=-CB%AI-Ffg<_r@{@K@R1s<3QCYFa6aFUcs_^M~f@RVwV6VLP7w-IxPnmdc$q4_dEqFMTT)9kIYej&}BlIpX)mDEK9uuug8Xd*v*`_vZb3GTL18 zb3qxV88x}r1P^=1TeRZ)*rOUK>fM|Faqr&m|J&!EeEQixe|GqhUahQ?x4mmJT4$yaT4UKJ zEHg3~gbMPm#W(;nt%j8+@s4$XQLP6!htKI3ff)Hl^}BDOVhVUgUhW0lRveBqUL}Q?R_J?DA z<29(+=KU1Y&2>)hW^+PGIqB2$NgQQ*>L!2j%c&Vw2Slt;BqQd=Cb`Aw;2(Z?YYNx* znK>UqLE*h4X6@0*c6-jYxk(watDIb9MFl z-TSMHx9@0eB~4SyL>E!fPfbj8|A{~j-^ve@qaG>&j}a_>5R5#%DvCEwbX3z<(q(W1 zJ6Aj5Vk3=Z7pYJ{tS7|x+$2&)YCtK~!93Q_Uz_Aj#|M-UqXO8buK~^i%nlAafb9Gt zcqktY5ouk3D0H_3Oa%?#(UI^nogC>xG9tWDNs}68i=ID!TPktla^WWZlK2G^f&bj6 zOE8&qBqJ1HvOVz(Bnj(QwqPVR3}Bit!Jp1&f*ZnwfEkJzsZ!9cx^Ga)b1HKrW1R=h zHOemKNRM9)E+8Xk1Wfr%$m2XSg;3Hq(aP3c7{H8x!4_c%Z(MC(Z{NLtd$T=4fV}$q zk6(YMvL;4xI>nOO6>f<@&j0rIRUu!Lad2?|zkT+LUwm$a$gm3?3%DEr3n;-XKRR~NLSG>xs_`q)4xea8C@X2L)MZd($O#|1ATF>p z;IVW%P63!^oGQgMOk-WcsOvVZ<_H1}A_cc^X{Lt0@&%sTQ_C{YiAh=_n2Ee-Ew>pm zqL+!->B$xmFeZYz12*Eg!n&=NPvrJnjJyYrDixlgmq0_JG!Q^^7f>jZl#3AVP|Qq| z`mS1rEyY6qViCL8EYd@?aOV5im2Ew z=x|;;V;;$p4q25OD8=ZXKrpywN;MHm776?&MV)FHA1G!Ki3u#El5|pF2}FX!{>It4 zU4__Nq7kt)jnJ*d$wO@3I?EBIyYOR2bPj$%VVaKf4FU=g^XTD`q15zD(YsDzsjR*^ z6n_DbruXI@1({im^=XV6-oYoCqE<8AE+CEBp?C|q@UF+PF5}o&X#q-Ct9V^b6A)F| zphSw;6_MF;tMSK+ZAqeG7tGS3^vkH<0nI!>jZ7(3lovFe(M(#!>ayG3y|-^eJqDKC zq!hvsNMZpHLd~qZg|joaGP0O&bx!Z?n;#<=CaJa8-X}l*cyG`$$LBPd2{Idjx2tnz z&7ULMoEGXFKkkG=Zch|$xz0O#G*x%A0u?NyyHt_a$rU*5a5I=m){N9eF%zkSk32dl zQw85J10td1!3-_Q*&C0~_-QGDXN@CC=rj=NNFBmN?kfLw-)9wWmZBZ4GJsj;NX5bw z+ObEl#7b4=kfSt9Gd3T7Q$0f_rYz%lM|sI^dZGUbzqAV~fRm{*SR@=VK*7ulBJz!f zZM24Xn)aoNxn-cHgbJ%rGsSf;-W8q+L`EG!32g!@A*Dd@)I|j(jXPSZxU`Hu~4loZmoI#!G+IsN^ z^h_;K+!9c%luud49Hm>F;Hz2&jPnR)@}3hdmT{4mZv-}`Ka@WTE0c3{`#lGCXvY1Y zhWVsaUFJdq6>`vvAqvn z62`Hr8cHvYXZ@0pb&UIyA>z{)lcA@rckTcR1K8GUbodF(_B4 zQfe09N#nxCFiPaZzfRb~itz#DZqb-DGBkt|Ro`$kY!W~ws2f1^2>(`G7ny)c5xg4_ z;2XnVC&WVPLI+h-#z2lBhdORSFp~^O){eq`xoV`&+bM4MG7S=?V33$5_KAsBq}K+? zxM{SE=v`j3u4SBpM-1dZcRl;G4qV;5|FI~pJ0h6kBdnVH=-`WwKKasl^UXoUcR|Ju zA45$2gwZbjxE-Q8a13Xl6MOX=dEsyuj_8+|26hDK!i!{mF%eXn`^?*q)Ays!-!;P{R1%w#i8w5f?jqRH^^yR^(gaL+eKT^K;Kl{ksQ7nsJ z(z%(Rt8dpghL5^ttg=EH!K7>0+`18;~H zMZG1dp#?xZOBNEcQwNQ49R0FbCCr#52{`l*hQ==nD%DQ~pP&=9V3 z5sB)G?E*jxec}%JO4cmR+vnPS8d9<0=LVf_?Z5{M*ekL-jk%FX;y*dmy~+oTlXQY; z4vs(nxyhpjQhq|t(k)&B%>cs&Ql3g45H6eV{Lmsd_1S;D%SvUd9B}VZOK3>bw9-$f zBwQK^+1o4SEA$c_rB|#QGEh``*6bw=E$w16^zy7Ue1^1mc5lNQ14*OQfTTM=$|c!5 z`+BD1@c#=Xy&FM2h)L}ZUM4C7EvUr^YtL6BUw%-#t57Ofz(?c)GHjBLu+g0FNfrRf z1W`L6kW<7_x~||KM9NoJuJ9uN`TAvW(ZBUX8Yf9mjI5G}~WcmU{7#|tJ~DcqEc0B&-a4h{&JpP`o|?ky_ZTELiZx{_6DKLCalP%`Amy(e;~Cjbm! z{N#Ss*>_LJB>G*rBxRdfB6`y})-#9=bRcBbwkchkxTx~X{GukHn#NNjsgF*}M9M+( ztNB;b6HgE?Nb|bG%3>4F5Wq}UAWF$0l0TZt z2A_4NL4co&+}Hn$s;g%PdviAjGSJc9PNsX3#+p8diCkp4D;_ zCf3po10IQ_MJrK<6HrIuR{GA(ic@lh#%{sSUt@}T`>b0*Qg;;EwBEga(>NcLa*Sit zR%Vk9jvnuQ?g_9Vq!3Jy=sVZ8k_X>yCqvUIb^(CO9S>>%bS8?^FInH%hIt$o8F)lW z1C|id40dpm3k@j(Eif>t^)WoTM2-xYn-C_$bb10MeY=>Y;D7LGt(kLV_YQ}tl%x3>;N=wrur;^bG6b^&OycFR;s%(= z3^`E=cLUQ3+sPg|Q1Wp~F*PS`6dcScHNxe3^BTQekS!BqvEng_>6#Fz9=;P2S)&7Z zM`Mk$Ncqzj4L3Tyx`c^N$~MVMD|>-~u}RJ8k<|eYowAbd`zmSxq{6lhQHqa3MLN|< z-O*_cURveP%)GhV|9tDpD~IZ?FiUNw`QX!^-zAF9``ST5Yj^*rPZm2{6Ypeg;9#r` z&QaNrw;hdu%&1(va9uE!iTL=vx{l^_w$|Lv}5OGg|qu z0^D??|$GB6TnLKJGZc z$OU+nOe_fvMp+Yx1rRMGd#!jq86yzMp{8ScjAwC{c!eD@WT1X|$ElV= zIY^}fh8dy8D21F1QATDNq~#(-F_S$)F~+IEOAd4>2ny-fQ^^2bkqu*%{pp=mn%+#& z>C3W`Mf8k4se9lP(A-`>r8{4jLA6Uaj)Ezmu{Yz9R4sh^(dP>x12(X*Kv}DyklD%B z@QW&{i!#O}B~}I>GxjJ0ROKZIOzlFlBqxfg0vJ~4`UVs5 zqUS&XUnhV8cL__RXsF!$YxrpNTGP`-C^`}^_@hW~3TEB||>ND#}J@cqf8siV)bqDl?x@FtJPu zI;k?~siH1FX@&ivDg*_Ws-?iCs;P=$o*e%1`Aon&pqZr6@G=%@ zR%)aI7D*E8K+Yr;i?Wcm%PGp6h8E|jlt z$=^U!L0w9>P|KDq!3e^*?uqf!_86r$gRQ|#E4R%}ihh8>=e5Ij^v}D)-S-&gin_1~ zRRoMnPr?9;TQ*^s2MwuxaB%;VkMH@8bvTX*HF-!o$vf;q?aEQdGzl5T2}&+9cnR%J|-b{t!yr` zLp4|KXnzLT*E2LzjW=lQ5Hc;!G-aEMR2*i}%S3!l+WhtP-|&ftel7_EBZ-j3FwxFH zq*q<~|_Ndz+ysFd`+a=I0OO91DoQyn5Ho(X8eGh#BOT$;PhKh z>IgrLcmR=-Op-{!V?grAvpWLBxY&cACUjl~DM^cTa)4oG11vgSC4f zHh*187m;|z#6?9g;FF)c=B5Lf3k)<&14v`4+WG>KJfj94;gDUXdWfVD%t)8=0Kq}; zrNL{ARRu4M)e84!qDHq2e2VZ!C)^@HktiBafYV5p0gAp7L}Yzos?Hf!$dG#qRrE^Zex)o9Kl9%Q7r>NKu3U?bvbDo z*J{!N#|M5`b}D{(nlYN1On>q$Nnw*@0#49jp$0PA;UbRNQA+)Tm>%m=gXLMPBnxcJ z&O~_8OV)_et#SD9w^RQTk*IyaB`i(sG7JMIDc>fOQW8}lx1l73c!6WUBQe1Apc*sp zBAbE5ME#X8WQe?r@!BMCZxl^gmoi!&5-6Y<4if#sKf zv%bb6(KAmJ-3@ZUMkD(JD#_pBl*Tz~&aeS4x7y9|r*R8f$@3vw7G}Z?U{q08;@Y4i za%OTz6L=A1$(>H3fWu8=>!E0wDnJ^65=NZhN#w}K%&I6R1>B>su*iZ) zMg~wXj!)$-Ym;*{+Qq%yQO?NR=JW^%puqT$ztao>8KqIfXCg3tz;8hT81qS=Rh_$~ zPyLXD{gbLVRhmrD?nD4)VjVpP0&0#A?upy=V=`x%H*e^hR(m1Q`$I?B#`!&Mdimbt z`A*WxkdjeYC}u1puc;ZGp~RPB+>eM$pF+W3Gk{wFpdewrD%OWz& zPWyS%#Z{;lG}3|S1)Pw@IMLPARg4+QP_U+iF~L~;GEPzvxnY#b8FHa~Tikf?AYQA@>(|(1a}!lWD5vM!3{miiW^{*{%BI{dA(q0u?o5`;E34FA ztM+fxM|S2W&K-9%-Q4Ysu}g8e*9jv8DXCp(8G>nsx^hWN$6^w6^4*j&46%IZR*s2A zChii2AQ@jnKKjX;l|pI)=X~kJ&bOmqvO{&~{ZMDOYGJ?x*Bn2F5h&Ign;B#RPjW`* z#9p554AKHlcIZ(Nn2ER){x5oGDg3e^luFUzkv5J6m=U`O1&FGbx;03#PWeW+KezdI z2|qd14uFY!%OYiKRyP`{@8$=a_bHg0(ns!pFo1%zig!5xU4+RbA;XbeK|kMO!Azh0j+R8s60I}EVBWmI`RAM>YV+vev6R(=1I`HxWft#WJ|3p{|Es#2 zWjTs;OT#x%W=v~zMm1}!W@p||HNXsz%o-u6L8G6xF1EB8Y?&l$bZEHte%|GgLLHeI z;o%XPsLIz~-}-*s!~JcMihZ_hM|-xVW=Mjb({wg-2Oc>`V;vpG3O%nBMi({HBZ#M6 z?4+#=+f~48F7*o&Sjtw9a!&1C^aIrk-Oagv{)70;+-gQCd;p1>sg{dJHX-6#rJ)Nf zQgY@n&oqoWItZD_O~5qi9#WFLNf&(cz5EtLem7q&$$K!! z5_ySY;*>vMp~m*~hM6ESS^*=hGT*tpK*CnQW%?Fa7TulNEgRr<)z>vCb{rEtSe6VB zRijHQ%q$n+^sP@*s6&TJUbyJ=ASAdH(Th#sqp1KzS;|lY&^)D*+4HWMri@gNhy@(z z@rBu$ni~iHUQgpT{Zt?+_@v z&;AISW(Op-Km!gc^OkS0*Fo_nn9Xx_2J<59|6W^vE9+g_ZA?FUcd*TlzEI;KnQx2)-7E3M10p);(69*>v+_Y z6Ad&Uh!kiMoiXZVB4LB3fuBJmtXK;(nd7d&^TuR*mZw&6Ia;PQycI80>H;y=ky^0%Xo=TXnf_$FBNw)x=;OX_82 zh1`?mIq^A4B`dT-hIr-_W%{aC+NE0FmT^wlV41N?{nC)+Z4I20ixf;2b?NYJWibAw zC6_crUn=EYylym8>GwcHvn+-;q>Np@wY=(Km;t3Q%a(ruqtN2qe#^zz{`<4)>sk=L z=Vi$SaG@>pViuC>{)yU_lu}8zlI~yx7_cN-=Sf(Ygp;)3%iX_mMGus~7)jlUoKi{| zCQCJe4jOUt7MZwnwh8xC<{%v~gcRCkZ$M_CQIUI}cuBGx-J*8kwX%k!?P9$UvPjG@ zQc%uo3O2;_+P1*VNi*JukzazydrdHDjLR)G(2T`K`}ND;{`f!s-w!IKs2`D-PD|@G z(d4tg<}jaa5Se-biLldeWN#p)U12*E;{MaA>x#f|x33C_hRIb>ie`or=(s|4 z9e|{{MIv?LF@m}^nq57$D;5JWe!`&w-sk@dCxM6r63VF_3S8zA0moJLJ<)s9w;jK2 zb#EZSC6j6F97rGo&B5lf6UE6DMGx8T*40mVT*bQiMTGhDZIO(oucu!>{weveOg0_^A}1SZaqWM zu#{i5d*?D0f7z?3E~E(CRW1%3*639t9-a6Is}!RNR=9)=fBG+tuwv$sU2u+Xtn3`U zWUGdj7A^VdQTa#EX^l3=7K~?}PBl!L_xtVU6wx-w1;oC2@-~PyS0IWx*(2Z?Vyp*m z_EGa;=OJZvygQ_9VMeRfGVL(MEYfkCW{_rDH!|tO;Ke$lA02KUa*`o#Xk;A@2t;{*l}17>g<%%9`|8JkTIbFubc{br9fqMYL;uO@aTtP~ZVHDwXQIMYn9u+6 z57CnA8-J3>TIbh3!o$z)=YM?pOaFoL1ehnFRFD^l_(@O`r3^_swy53X5Fn32iQgHJ+_2=5%`2M+}Rh=Hfv5p*y<1If&kB+(JM z0S43L7ybNO?Is5BivXg%3YizH{N`N;k5I$l%oq{2@kyr2;tMfPbB?k|sTS$PgP8z< zTVff$^k5WJ_}6ZzH2YM0zkFRqU8X8T#Xw_`*QwFaVa(#5Gp+;Du8(1emZl;ViE$8q zk;8fV)t5KLJ1Cg9Mi50EPS0UDIA}Z_AARXz3Iudx88O~->qrH!U=lJ07P3ybBwnfY z7+7jm*MMf=h%9E0(z}lo0?jr}$HX(VFO&q6V*lTiOhPEmfn>cGV)BpRq*?h$1r7$Rgc9Quh;&Dn~Cpuzc}dLm#oU+>19*B3UgQ5dES4L7E7|+*7p28kMju%Y=hb_qr-(RSqqzBj?~*UZg;VrG44xweEZv{<*n z?qsJcap)?jByuWbfTs5D4Me$3#Z=~Fzh;FN+(k7D+c7YV(8Fthk-vWNaG%`8QSw4b z7ulg~5B`X6TD*hcef3tuBPGy{^~iYAC#(xGC61au{~|xAiAnx{zibNlt zCp)t@Mh)}1KBUyS8+WL*!E{HyG!5gA8&p&^R66zei_iW>b!18k{hyKFp&$JyV~V#V zPL9bLXe70}@3liZ_?#8cjY?vhU!oMB_~pD}mt%}FLtdx+@A9I93LDidq)8W1mjb(F zZx*SQ9-B;Ju?8|F3uUqZa^WZqHP8@|KtW`)0B_(q?2_``3S`-$X_v?a#e7GKr# zNr2%y8~mMbd4}NPEzo=S@O$uJs$v!%_JX+e#uve(atdUjTfd%cm zzzd<06P*{GR}_!rEotTvfewgpk#elz0ub`9lez_NZFR~j)?YzpbD>|CiZ=X!m2T0y zk<`BDh1*k@UBAI4aNM>PV|HSWfPJ5BzyIGqmU=wA(w={p`b5h1DycDAwl%DdSK_uhjsP|pZ zW%H!jgP6lMfrBZUVZuxYqLC=VFLCRgmg;9Qsi0M;nX;FH|!OjMc1 z(u=Np`O*rElza4=zm%0>QSQZhb%dvTi`kWmW+nnuvqU-` z{#gIIV~zuv4xOF%)%VMyGQnradinm3KS+YFWP*=t%`S1MfB5Qi2I(-xpHK-IgJ`Tl z(jdD*M0fA8%)nGCsVVyoMxKLItang>n@uo)kuYPL=HNou{-8MA_luB+K=Ge=~wUa6tOF2?^}#N|Ph z&eE8{WdMn97L#+^h=i6I!PrGG5lsh!zC4nSsoHwbN-CG2(a7m8AQ$T}R6qj4MsYlrLP^SIqz-?y_5zLm272dInIL)&(X4CjA?w z;1YFJQBQ0_$)Fh6t%t&W8A4`@1ao1e*s~|@B!{&;o&-!v5nKy1%#l7M<4c%iT6dHK z5^XpK$VdR68Gs$R7gG;zczgd^=;ng1? z@iTV^$K(sWQ31Y6m)xSLrBC+f6f=m@0g$$b)^nz{z=?>N&gQFm#E8JHM6FqEzRsH77&aEo8w z{~}S)y|%FR`>!7?Bi~;&`4ZzBIS&W@>u0S9-nZMu9kWWK6m92&NR4y)=dmspiGTD% z(-ZRNi^ycg(zjmasUkf}L)sl7YoM^($QSO9 zSN`litrmsp_kjx{hOqMka05GJZgstYWA#I@QPB`gdJ;t{MP>pnnstb@G*|5vANP==s*X(Y?@k6X;jAh=0U>f?#=J{;016WUi}6c)U6q8+#kyw zMkrE`mA(Y2BE4xFKw*^FA7-oYTzciLUeTGHq_-s-%@Me!sKL!UN;vxj9y*c7%DVAS zi2|4kH2z}8GR`4I*X++O7%jFY1Px3Lmy<@haWwGZtyhy*Z=D#%vSWtowIO<}_=J-A z@zIx`eLkSv-@A88X8Pm=`hC}r`ptf}&$YqBc*`k-xO6y3qvIU%RT~h{1DzzXlOF5kAUA!*H3?$LYxW(B((`oNi?+!JWJ9=A-*F6^szdVa) z!qC^Ass}IMvPVrn>fr&_e^D>R4BhpalN3(oSC>HQVFC1Sp_gbT>lCiiI3`wecXE=7 z*Pbk-JoJ$=&`>-^;nSQYT!B#J0|?Z@b>c24Ids+ex$6+WiEEcDc*paV}LB|K}O-7r+jNE>OmyOX|&=Tbl~K+J6WT1YCTnjQnf?T&kMs$ zuNohDr?t=uv{bhn)#&dmb{T5WiEs=G znN3Q*v@|AsxMzl^Aa1q^E;RF%^uH4M#V1gMKklBrj$cTe%#lX^a{Lm{-Cc@pM~Y-4sz&B4Ys;<_n{YuFpn z_22fd?=1(ffNCKa?osi(fByA9MiINw7kxj9sO9Jv>^s>n*XlqJWif_ff9$4O#x>}r48X7vrv#DUv5?(x z5}j;|W+IYkCxl#6VyTqOP+d0JBZ%=%)qst9so$cD5b^WFJ3@9C(at<2T@ou{=A3Rx zkJeTVCrzA2G@H#BHiAwz=lDa3UFtSp+C2%{BD$dA{FJ_k!DNsY-Ced?2~{|G_HN05 zJMk9eaTHC3m{3q6V2Fup28w|sVd53JL?_K_)a6gvN%6co0ZT3kVD{2#^cqQx4(%^m za9Yply?^(|9~Q*oiKJg>nMY5Bc+a&zA<*{&z+C5D?5ykOp6%<}UG1Cp*xeZ<7m~C` z^uBmu8j{oEy*WzM%T}05y5N}DC2sLRtvn(YsQ^s~xkpHWDY*EjY6h5}lepd)91-4N zvV79evP(e)OqM^2V6sKdvPsJ-!A%cu%rO18=Bo`4Q3*<@u4U*5IaZH)c%X#u)Ke9a zF%|MI;R_Y5@g5xRNLHONGyPIbhKw0TWCPhH_238vULIZ|mm&Y*+biwY<8v0B=rn%rcnpk`6NL2N!th zTFl~#2j)gIfMfr5xEbx7vKPpC*zCtcHQTdRt)n`ADZ=~x|FrxI!Wqjfe-u)VJvzyN zm zK6V~PYM8IF?znBo;pw`P^^#8VuWDrcO)G+#fEkxuRWCzX-`_V`m=IG;`IBvm$$3{@ z7NtRiRrMxop=MSoTSQq4xmYMZ{gSL5{i`%65SO4JB`46r)ec+u_`>ArCQ#?D50XKHtlDknffh{1Rt*o(!H&^!40!S5VB*u!zapI(YB!lz^cO>G@NVQ_Q9n)bj&v0XJ-s- z>n?|y6W6s5RH3NPv0C>nA7vBn^*_l%h)?5}Gtl+B6I?>f1(fTgv!kTTA01MOhWdh8 zM|CXh;;s?{6;c&@F%M~6Qogzsn_&QeUU1JeStj0^kV`R`BXlqEGF}5{-lt z4Zb$WL^Sb<9gRY~MmPN99v*;Xjx$ZcWS@%UHaQ?*$TSMtakm%Rt?VwEVT5qW%uq-g z)0A$6k`S?S7v@T|C1n$@y!CX6WUfI+BW?*QH@~Q^Lb{VN#^i>UnqFr`vQVJeVX$!X z*v8rYLc9k!N#&J>(=Qt5c3)ISW$D@P|Nhy3ud84B^q>tjL&+|-2k6e1uCL4% zLEZ94($$Gx(HCZ^=_KNIwUabB?MN3snuGw;v*2BDVT1}MPTr1IhLE1h9#VkfI-b_j z*2BtA)@1npK_uqMgM!_k4zXm3GDhLzs>56pWPm69^gNq^WI?;(CCD^kEsH~_kSOes zbYl>*d-i*a!FWX`vppKQ&R}H4sJJDy5=!1E{ni31;7HKCc~AFR3o%EDm<0=gy0mR+ z>U6Fw(X&_Y-`t<7-7W#kSOw28K`rb-@m4F9T^e~rAlawTG2{dym!u!N)Tb+Z*-dpW zuhiJx#&6;yn{*^`7HWg4N80I=8=ixjuqluGBhM+Yw#!#H?faH*9|YA;{CW41_D zcUQIzD7Bg#3nnKcz)woPIA9k`JAd=_);k0dbduU-dH^PxiBOu#*xvHpA!w)|LITHe zsUM!*cY;8u*?{vKwwXk!{&J4BJt`?FV87@tlSG=d^dW}HF9IHq+1r_!NG?GNKQU%u znea@3UE`jHSz4e@Bi0IK1$NyO9s&&vXz#In8Kc-H_*|gr^2dQR*#7!IL4#&2vl~9? z-Yv$~6{;s7oo|gc;*USKzIDF;@u&tygr(nfe-v|mAiXl;$u)up?Mh+_?cJKd}6o~of|(TZALLtoM6 zV*l(=NyuYPa+I{f#cR(3JwSTj9E{7l3IR?7vdF@rpCHs4C4wu{n>6^RB{lr-WzZ;oTUBIyV`hi5JiI<`4n0#&igFmr$d zDOsV>%ZMc-G>(A=&0!_?Xov|RwbV&@m5Dx#0xVI?72Vam>R%32vPGuB#vW1xcW)9k zm(X1&JcS6IL(A3-0xw(&al1cjmlwRFR1S#1 z;&zKhP;vbukZPP5UvN6;S^DtMNz)O= zFif1nDghO%w9G*CvPGtPo-j(u7qX$41$Ue22pmY~-*4=gB+I0ZY_d%=MOK!IFtCP( z7i2(_`6OD!R}}B&H?I$x-s~w8Xk-TJ_0M3DEXdG&hzO5Cd1PR9bCA4LyC^@FatD%Br#6o zCrFYEvLGqK&A*f9#7xqCn22VOI{PI zVTM+VDO(SK5l9k8W!S>Qw03Og{xsGYvi@e5w-!77^aX*@s})? z2d#0KTsw9N5+We9gI@%9IZ)tIh&Rv_s!P^pq$Hxt2nfm@{+Q*VYmzO+fIEM)Ort~b zmuTo%n>Yn3_)9lC)G_bVD}5ec0!F}sL-dflptDsPCVZKu zl&<;)&^WlMacz~l#3y1ft9sdL9#8Q|fcbMvu>_o~RMcYAOzfmXVhDi6lTIWC2Pz>GT53 z(Z2?3;JAUs0x+cq+FA={3bo%kT~jT*YNz+5CppyNz_F6;13aU@!QZ`IJ$LL7AZ!O5 zwN|%qdX58qLB)5RM;^yMVHvkBDexG|VZ~MMwFR7;PJ(>OS_{NHgQvV~YrR~Sh*cU= z+W+v>0=%7Zn_s_%mI$UG zc|PodFQuU45!rw$9MH(LOO#@!tHaGvf`c@1QU;emO;Q(-&h>m|G*d$QcDbU;VkgDh9QG<*H%o8%67faWM6mobWn7Xfp zn?VUi%p|GdJ&nS79$pT`)U>rbLbsURsgxRI$_Tg!COo5jrNHyuvzBlklCn-j%)=f! z4JS=TYa?NLV2Q@e%n%cPA{OvyZe!1|&$C|g2v{n}#5`*1e(%u|p`jwn1?xa3^gu-5 z$VXyu*dZ8#H8+tZJZoosXqZXN0tf8KTQ`jaU`iDX6z}h*bzO``UcPu22-I5QmZnn2 zHoBo9aT;*i8&{nM?tn>C_Ssj?pmq}oo|6sh)jlT4$$1w!5r3IV?hcW>ed|DAaX8%t z;Lhs;(G70>=lWV8{S!QTso8L%6O63Rusi|oDa$C5WOuLKgf`_bQ@&C|e5JVLH7oU~ ztU*w@9O<}aVVQX3wyhOB0?a{6(AfF+PyX$=_7mCa3K@#Qv??#m*!NLvcjPbqGUYO; zm{=6eV3r-C74IUt0pjeQyW}K}xxF$==@hW|;MuU6dDZY_PFhDXnJ9)uYEiN!2#zCE zS;XbD|_m%6~xyMho^^n+JePQ33C$?L{ z#sK1bwMiE_#?#jnN2j?-bc)*}770a7OJ=I!NWT!f&2_X-wKReH7^Lh_?fjzymO8G8 lZVOI%S2^{OXTr+?%4zg~`(#Tv$-9QEtPw9MS9=8W{{ZK_x&8nE literal 0 HcmV?d00001 diff --git a/AppleWin/resource/Applewin.rc b/AppleWin/resource/Applewin.rc new file mode 100644 index 00000000..20004a6a --- /dev/null +++ b/AppleWin/resource/Applewin.rc @@ -0,0 +1,302 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +FULLSCR_BUTTON BITMAP "FULLSCR.BMP" +RUN_BUTTON BITMAP "RUN.BMP" +DEBUG_BUTTON BITMAP "DEBUG.BMP" +DRIVE1_BUTTON BITMAP "DRIVE1.BMP" +DRIVE2_BUTTON BITMAP "DRIVE2.BMP" +SETUP_BUTTON BITMAP "SETUP.BMP" +CHARSET40 BITMAP "CHARSET4.BMP" +DISKOFF_BITMAP BITMAP "DISKOFF.BMP" +DISKREAD_BITMAP BITMAP "DISKREAD.BMP" +DISKWRITE_BITMAP BITMAP "DISKWRIT.BMP" +CAPSOFF_BITMAP BITMAP "CAPSOFF.BMP" +CAPSON_BITMAP BITMAP "CAPSON.BMP" +HELP_BUTTON BITMAP "HELP.BMP" +DRIVESWAP_BUTTON BITMAP "DRIVESWAP.BMP" +IDB_APPLEWIN BITMAP "Applewin.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_PROPPAGE_CONFIG DIALOG 0, 0, 210, 221 +STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | + WS_SYSMENU +CAPTION "Configuration" +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX "Emulation Speed Control",IDC_STATIC,5,115,200,85 + CONTROL "Use &Authentic Machine Speed",IDC_AUTHENTIC_SPEED, + "Button",BS_AUTORADIOBUTTON,15,126,115,10 + CONTROL "Select C&ustom Speed (in MHz)",IDC_CUSTOM_SPEED,"Button", + BS_AUTORADIOBUTTON,15,138,115,10 + CONTROL "Generic2",IDC_SLIDER_CPU_SPEED,"msctls_trackbar32", + TBS_AUTOTICKS | WS_TABSTOP,25,149,160,15 + CTEXT "0.5",IDC_0_5_MHz,23,165,20,10 + CTEXT "1.0",IDC_1_0_MHz,59,165,20,10 + CTEXT "2.0",IDC_2_0_MHz,96,165,20,10 + RTEXT "Fastest",IDC_MAX_MHz,150,165,29,10 + PUSHBUTTON "&Benchmark Emulator",IDC_BENCHMARK,15,179,85,15 + LTEXT "&Computer:",IDC_STATIC,5,13,40,8 + COMBOBOX IDC_COMPUTER,45,11,100,100,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + LTEXT "&Video:",IDC_STATIC,5,36,40,8 + COMBOBOX IDC_VIDEOTYPE,45,34,100,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LTEXT "S&erial Port:",IDC_STATIC,5,50,40,8 + COMBOBOX IDC_SERIALPORT,45,48,100,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Monochrome Color...",IDC_MONOCOLOR,15,90,80,14 +END + +IDD_PROPPAGE_INPUT DIALOGEX 0, 0, 210, 221 +STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | + WS_SYSMENU +CAPTION "Input" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + PUSHBUTTON "Paste from clipboard",IDC_PASTE_FROM_CLIPBOARD,5,163,75, + 14 + GROUPBOX "Joystick Control",IDC_STATIC,5,20,200,80 + LTEXT "&Joystick1:",IDC_STATIC,12,33,40,8 + COMBOBOX IDC_JOYSTICK0,52,31,100,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LTEXT "&Joystick2:",IDC_STATIC,12,48,40,8 + COMBOBOX IDC_JOYSTICK1,52,46,100,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + LTEXT "X-trim:",IDC_STATIC,13,72,28,8 + CTEXT "0",IDC_STATIC,36,66,24,20,SS_CENTERIMAGE + CONTROL "Spin1",IDC_SPIN_XTRIM,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNLEFT | UDS_AUTOBUDDY,59,69,10,14 + LTEXT "Y-trim:",IDC_STATIC,115,72,28,8 + CTEXT "0",IDC_STATIC,137,65,24,20,SS_CENTERIMAGE + CONTROL "Spin1",IDC_SPIN_YTRIM,"msctls_updown32",UDS_SETBUDDYINT | + UDS_ALIGNLEFT | UDS_AUTOBUDDY,161,69,10,14 + LTEXT "(Shift+Insert during emulation)",IDC_STATIC,89,166,94,8 +END + +IDD_PROPPAGE_SOUND DIALOGEX 0, 0, 210, 221 +STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | + WS_SYSMENU +CAPTION "Sound" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + LTEXT "&Sound:",IDC_STATIC,5,29,40,8 + COMBOBOX IDC_SOUNDTYPE,45,27,100,100,CBS_DROPDOWNLIST | + WS_VSCROLL | WS_TABSTOP + GROUPBOX "Volume Control",IDC_STATIC,5,55,100,89 + CONTROL "Slider1",IDC_SPKR_VOLUME,"msctls_trackbar32", + TBS_AUTOTICKS | TBS_VERT | TBS_BOTH | WS_TABSTOP,13,78, + 28,60 + LTEXT "Speaker:",IDC_STATIC,11,70,31,8 + GROUPBOX "Mockingboard/Phasor Control",IDC_STATIC,6,153,197,61 + LTEXT "Mockingboard:",IDC_STATIC,49,70,51,8 + CONTROL "Slider1",IDC_MB_VOLUME,"msctls_trackbar32", + TBS_AUTOTICKS | TBS_VERT | TBS_BOTH | WS_TABSTOP,59,78, + 25,60 + CONTROL "Enable Mockingboards (in slots 4 && 5)",IDC_MB_ENABLE, + "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,10,167,142,8 + CONTROL "Enable Phasor (in slot 4)",IDC_PHASOR_ENABLE,"Button", + BS_AUTORADIOBUTTON | BS_NOTIFY,10,180,92,10 + CONTROL "Disable soundcards",IDC_SOUNDCARD_DISABLE,"Button", + BS_AUTORADIOBUTTON | BS_NOTIFY,10,194,78,10 +END + +IDD_PROPPAGE_SAVESTATE DIALOG 0, 0, 210, 221 +STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | + WS_SYSMENU +CAPTION "Save State" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Save State file name:",IDC_STATIC,5,29,74,8 + GROUPBOX "Save State Control",IDC_STATIC,5,74,200,73 + CONTROL "Save State on exit",IDC_SAVESTATE_ON_EXIT,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,16,85,74,10 + PUSHBUTTON "Save State",IDC_SAVESTATE,16,102,85,15 + PUSHBUTTON "Load State",IDC_LOADSTATE,16,124,85,15 + EDITTEXT IDC_SAVESTATE_FILENAME,5,40,143,12,ES_AUTOHSCROLL + LTEXT "(F11 during emulation)",IDC_STATIC,110,105,74,8 + LTEXT "(F12 during emulation)",IDC_STATIC,110,127,90,8 + PUSHBUTTON "Browse...",IDC_SAVESTATE_BROWSE,154,39,50,14 +END + +IDD_PROPPAGE_DISK DIALOGEX 0, 0, 210, 221 +STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | + WS_SYSMENU +CAPTION "Disk" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + LTEXT "&Disk access speed:",IDC_STATIC,7,34,64,8 + COMBOBOX IDC_DISKTYPE,85,33,100,100,CBS_DROPDOWNLIST | WS_VSCROLL | + WS_TABSTOP + PUSHBUTTON "Select HDD1",IDC_HDD1,5,142,70,14 + PUSHBUTTON "Select HDD2",IDC_HDD2,5,162,70,14 + PUSHBUTTON "Select Disk1",IDC_DISK1,5,53,70,14 + PUSHBUTTON "Select Disk2",IDC_DISK2,5,74,70,14 + EDITTEXT IDC_EDIT_DISK1,85,54,115,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT_DISK2,85,74,115,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT_HDD1,85,143,115,12,ES_AUTOHSCROLL | ES_READONLY + EDITTEXT IDC_EDIT_HDD2,85,163,115,12,ES_AUTOHSCROLL | ES_READONLY + CONTROL "Enable harddisk in slot 7",IDC_HDD_ENABLE,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,5,126,120,10 + GROUPBOX "Floppy Controller",IDC_STATIC,2,21,206,73 + GROUPBOX "Harddisk Controller",IDC_STATIC,2,113,205,71 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +APPLEWIN_ICON ICON "APPLEWIN.ICO" +DISK_ICON ICON "DISK.ICO" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,12,9,0 + PRODUCTVERSION 1,12,9,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "04090000" + BEGIN + VALUE "Comments", "http://www.tomcharlesworth.pwp.blueyonder.co.uk/applewin/" + VALUE "CompanyName", "Michael O'Brien, Oliver Schmidt, Tom Charlesworth" + VALUE "FileDescription", "Apple //e Emulator for Windows" + VALUE "FileVersion", "1, 12, 9, 0" + VALUE "InternalName", "APPLEWIN" + VALUE "LegalCopyright", "© 1994-2006 Michael O'Brien, Oliver Schmidt, Tom Charlesworth" + VALUE "OriginalFilename", "APPLEWIN.EXE" + VALUE "ProductName", "Apple //e Emulator" + VALUE "ProductVersion", "1, 12, 9, 0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDR_ACCELERATOR1 ACCELERATORS +BEGIN + "/", IDM_ABOUT, ASCII, ALT, NOINVERT + "?", IDM_ABOUT, ASCII, ALT, NOINVERT +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Data +// + +IDR_HDDRVR RCDATA "Hddrvr.bin" + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDR_MENU1 MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "E&xit", IDM_EXIT + END + POPUP "Help" + BEGIN + MENUITEM "&Help", IDM_HELP + MENUITEM "&About", IDM_ABOUT + END +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/AppleWin/resource/CAPSOFF.BMP b/AppleWin/resource/CAPSOFF.BMP new file mode 100644 index 0000000000000000000000000000000000000000..752d4c9f8c87f8564e91729f232e57959114c1e5 GIT binary patch literal 262 zcmYL?u?<5Z3`FlsQKU2|8>FSn4(YQ_YD7i#laUz36Oa+e!+ZtfJNxiq9?$b8j~5)l z4P3yc6D)n4CtWE6Gm=CqrCDHF)mo`z&^^`r=m2M2L2X5#wI!SDFQ(QMNClIX81J~u hS_qhxbAJ0P4gH_9290mceThmb`*?r+b5!=vupb7TdVl}` literal 0 HcmV?d00001 diff --git a/AppleWin/resource/CAPSON.BMP b/AppleWin/resource/CAPSON.BMP new file mode 100644 index 0000000000000000000000000000000000000000..c42940e904ac0d8c6553bb016b650a17b0a5a0fc GIT binary patch literal 262 zcmYL?u?<2o3`Fls2#LmG16t;wXC3O45d~t7->^bP@dROn@SH@%@tu9~#kt*&n|eIp zE4Y9Y*mQuUcjrN8N?=5iNToCiOsi4~H3qGxT8j>F;tHxOjMkT|U4JpvDkEhsfA0GS gmwPqCtf|9-{?A#1#<%8uiE_@bct8J{mHi|92QIIEd;kCd literal 0 HcmV?d00001 diff --git a/AppleWin/resource/CHARSET4.BMP b/AppleWin/resource/CHARSET4.BMP new file mode 100644 index 0000000000000000000000000000000000000000..61d19a1c017c4d9a2d75b57fc930209c844d29aa GIT binary patch literal 16446 zcmeI2!H(@H4uH zy?KxRhR|%Asmvl_P*smB6b9R3G}6I?%~q8^mO6-@O}Od1ui>qjffN+ zUt<6Z|AAhr>F#InlmD}^d7N|nUiB?pyxUXHhJ4=T%iLV-*`*u*z3T_Y?|--YXLi%C z)5trvKq*0yI&zkWFXu5=Y=KgOWAO;1@&Z9$OXx~pljKKz2R;?+Nv(umZT@2s))%EN zoHpnf{EQq~siZZNzg82TZ{ZA2a30b{pRe#me;Q{1J-DwpXCKD3@R<>(|N0)Tx#BbH zk}vBHb@&_sY^_Ds%*snY86Pd3XiAJWSKZ&=T0l?#vag+f_@-rul&~kf&Z0M7LH1eQ z51t;99+@4?t-)pu`i5bAK1m*25SgUM814_ghtJ4c>k8iF!ly=c)D*mM2d;=A5}k}l zjVL9+@9B4709X$`R_QA+>t#JYiVymfd+;%7%p)AwI3xuqpW|2Q9`2r1V^vfoN&6b@ z@^$@7LxCsam!%~-KlStf>)#{A0V@l;;t5Y?0c14{X;NM}RK+8zvYK;@8mr()uc8CV zpqR|9-bB%Xt2f4u?I>E(pJbw1>&;HDNwH@|r{;hNSUpo%3JGR#Ndrvj1bevVf-;OdL zb6t;P8Md{pWjKc8DAt4Uw^s6zD@~U~VJqoKM=RC?t~064zHMwI*KMb~w<=b0qw5}g zQ))Hukl8j^;d{LB_pI6;d|`-=zd@hodC~Zi=qug9#owyUpHs5-IP;VLouKj_eu@$L z@5%937y1{5@C%Gz_&vBG*~@kK zEBy|f&DJ?SY|!#puDDnw2C?o#l2E&KEdJ0KX7e zOq1JdNQ(T1gSuN{jmE3q8fKKZGM>@dg5$nss%2 z#c#)v)PDyqSD_vXBmAJR9@*Q1--C;Lam%06A6gBA)3@>U;4k_3_=Wj-{FnT`h7St+ z-sB55_>s{JOo9R{uHQ>Pr~!r}x*ZnjciuU(O|EUWJ7|641jqCjnUHy|>@x?+gR>rl zsxwh_0TIb&&TUHbK21Z!5;^r1ruLkHc(ZBOaZJNpIhP4oB6}fWy2fYlLus`TUlBC{ zXNRDn7zNRz{midMY$faM ztF^p0KA$8HE{It27(<@)4!!`_x>6FTj&JU6Z`5SGa0jl4;mCOGOdqt@78=s0Pt_`N z58o1;!n0O-{IHEe+&g{BJ@{5N<_!*P9Fl_Q`}kG5hs#7IVb(mNDoNVcXqPXg86BXZ z#)C^hQ@+N#e$KoY{_ZDc?vh1{J5<`Bc*2uefI)mDJ6yJ;c*Mz=1(3gzNiU%T$sn7| z4P>GqcL!H5j2+!;_0gYATf?U}qtb&Db;6-q3!m6Dsn1IbqJIa6yR?dLXkGM;yjeN@ zcHxS87eZ&_!Nz~$)1C19a4a4EFD0JX`k)0|{7h_a^YPNptLcUE;mM@Q~doCI3!JH>RbB< z$q@Y9=u7zbaK(Iz)0{WAJjqh_x@WlTz(tird(TK$+CN}Rn)zpK7jEPC9^?(Q<2c8E zR$l$9_zoBE_N22RpLh9c0kUV1Zv6MI9~i&?NeMTp(y!Af1GYd(9)>z{mWMCru_SDP zl01}ngi-Pg=1PoNSsUp`eFwfWw?I-W;gd(|ScKJ3>cVLw&#kwyj_tpE~@%00wvef9VJB zZ~D=c*lezH=%~<10fWK}`}&!%;spH&WE9K1B|l$Qb0y(F_y37W=;wcWorL-J0pn6z5)S_E^pX5xwR8@8P}s z{T|#-v!46^Gul(w^2_fdDET^PCrZ!#|8xKUtpCsY|NQ^o@Am(Hozou|Nai}KK!%$Wp4Yq`+e^JpZkCA S6`%Y6=l=h>|Nm{)|GxoLvM0#^ literal 0 HcmV?d00001 diff --git a/AppleWin/resource/COLOR.BMP b/AppleWin/resource/COLOR.BMP new file mode 100644 index 0000000000000000000000000000000000000000..91b8e88ce7eed5f3c7f35141053f4460c06db895 GIT binary patch literal 1102 zcmb7@ziZn-6vtmsjf@*43WZX#d1<380?%EFp+kRcCPSfrLs~&Xa)tO`@D#NAPiR_h zX+c9rt${3tTMAAn=WLO&vHE@Q&WUlom^++mshb(-cV*dCDoc4oUr!8B zm#{ZliyqVgyn-v%-zvq43{@3$;7^|EpJn+QVdv0&p2zBQKG;!TORgz{KCUX%Wwd^t z=L6mY#ylQ}b*1t=-(eWW{NMR}F1*9fDO}ATD|MU?fTj^b9Z#r-tIy9sQei`>e_Sn) zAG}x=ZAak|KNobIORU@N7gC8Snw-Y|X*3$pza&W;5l1O)H~WyS4JNOke;W>m9FTPm ziil;;t0YPG+!nFut`D&W4;+@7n^pcKSyp6Sfb`$oGTQ4&?+u^*)pR;VA7-F?ql=G< zYv+!+{LKFtjYj+2N*g2KYAXFaRSNQjw8oknc!~3HgMLAGM{9WlckXBqc=QvDysX!) zRtqavkULrTa-ZIQVkE9nk#v&(S?hUgLVO4Zk!Ujc_eu_WMPBmvpkFQdHOE7FQ&sZa Lt);PJn$7+JCY{Mu literal 0 HcmV?d00001 diff --git a/AppleWin/resource/DEBUG.BMP b/AppleWin/resource/DEBUG.BMP new file mode 100644 index 0000000000000000000000000000000000000000..5675c0d4958f68f16b6552569712f2cbe6564d01 GIT binary patch literal 1102 zcmchTI}*Y$3`E61kt)M6;2QLB9O{&*I8%;6>5|Ia0JAIE*a|6NhC#%Zc;1yihvR7@ z8fVNqjC~#}v4!hemv!1==CBw<@X0V(!i-X;X+q{g(oa%ig@GRtrnnFRngtwx&2JaK zOX)A;A`jAeL)PQ8-cY$WWX|LanMZJED4cnWw-KQSD_jjD7NygL7iVFi{Q_#cQKm>V zRL%+#BpUe7^xT0J2n>$*s(@j}6+?k{%d|O2l9RT%-_%RP(yx> z`VLVIxEIgVyiXq!48jXG93|UWYPdZp0OYM+Ye8gJ*_WLelsmmGD4uaDEdq?CZu39* E6T;rERsaA1 literal 0 HcmV?d00001 diff --git a/AppleWin/resource/DISK.ICO b/AppleWin/resource/DISK.ICO new file mode 100644 index 0000000000000000000000000000000000000000..9d37a8f3ffde6a20c1016b3a02434cd72b19b3e6 GIT binary patch literal 1078 zcmcIjyK;jt5L`@VptAV{s*FD)pF~H=rK5A1q4KZjb5f>DNp_Kr7_4~4MNVGbV^7wN z?f?oL(6$XEp9kQTx@n?+E`VbRoEdA0H=@7`cfgpN7b8i=EGq6a2}1~h#Jv14&$0+E zg|zh>=}6y-`+YK!s!+wOfAX=rZ!O8|@qqiIZR)8}Z+xc3gp|Mc`yF3(+w)J?6K@B+ zKKFqWU)@EoD1VG{LDk_jP1lv@dHE}!{D-`g)VceAD_N|-@v>)8T47a)D55GnSu>Kx^w2ti750>D1SbLelc?b>!3`JSAKru^bpS~!XdHeW$BGnh>4aPQ)2TB{4N8Q$Gjaf#LBf>+@rGObrYMKU7HljWhqpUFS z6NHHu)WWlX`G0bUZVb}4w0LFqt5K<4iKFAAUgW^UZ;UzO7!5oGHG>~yaR^X@{2_Sp z)!Baw=iPha>VM9DTkYdd=J-2rIQc5EtIjd|J>M!@wlhp z#ahXq-mc`$>-)!!qCOFyF<$bxqqOmTAGc$8LX?qYiSUrMX+p%3+P1|k8zDXvf~+v` z6NJDU>fzbI{6D!xHzvil^mt`<`&p@7iKFAQ9wlMn*IJ*DMiciwn!%5eea$4 zn(V*&u6j#6`X932s5;y-$KQEH=0WB`)wk?-kOkj6*N{PX6B5Z nrIbPI^MX6AP22!KE%>GIu;S&GGJkQo4;Cw>d#)f}|C0XzK^~Wh literal 0 HcmV?d00001 diff --git a/AppleWin/resource/DriveSwap.bmp b/AppleWin/resource/DriveSwap.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0811d444d3a607c49ecc15ce70920e09bafc5bfb GIT binary patch literal 1102 zcmZ{iv2KGf5QeX6rFf{|HQKj`s*JR}3R9h}-on;bVqnPN2gu0Cgcu@qbbsFgKBwsg z%=x?DXUqBD-anp*;}hcx-q+=QASqlPxqN4EM0m(K`Cvp!UDx3o3xOXBA!c~-iwMJX zCkAK)kH|QRI3JKM9BnyxzHxsx##nnarhN8?L$~Vv8DeW2=XP@+!ai|h=*0S_ziNFM zW}-5L-R$d1^=Vs2WZJfDe1BCOeZY-@zN+`g`J8dz?+|9^O7zzpQjXYP_i2}i{nvem zVj9tf<20vxh zAabe6dQ5o%vn3ay)R_;Q literal 0 HcmV?d00001 diff --git a/AppleWin/resource/FULLSCR.BMP b/AppleWin/resource/FULLSCR.BMP new file mode 100644 index 0000000000000000000000000000000000000000..580af2469fccaf7d7e960761cf262e18925deb02 GIT binary patch literal 1102 zcmbV~yH3ME5Je{rl1mgRQaWn*2MUDJP(aORKogg^OiROGP^R|>q@qe`Bk>SIepEP8 zq~*>&g*ej9bdG3|B5F zeUegqhk=6;rczKbCy{?ew~=5kUx}_HUeU`$;_%lJ&#^X%myz~!xf6`v^C|m36Hj*l zd0iCDYwJG7Mm5JX^Va%D96spB@%PPYqx}Q^_WblG9?A*v+^uu)-ke&q{t>tP3h=|y z$nDGJAI`U0BX00EPE6mb6O(V^m1<`FemcHi1bFjc``;?=r}Hbd=zW)tH~0Sc>bROQ z|A=GVhmP+bjenTmU(ec8iX7Jm@ApY`zU{wfU$eiukpE9`E{|mMN4$#VoRI%N{1;l@ B2ulC} literal 0 HcmV?d00001 diff --git a/AppleWin/resource/HELP.BMP b/AppleWin/resource/HELP.BMP new file mode 100644 index 0000000000000000000000000000000000000000..52dfbcad14b14ba7b96a73d055c70f23a7e73e8a GIT binary patch literal 1102 zcmb`Fu};G<5QYyyMW#+X1k4pvH+E2@$P!XtqEp+^3o1{*TXaI1yyP($yM)mlGn)U- z=h#76kZ@x=`tJYl&UK!iUv5ao4(mPUgU&08fv;-`&n%V*4_O;Gtazoa>#%bm$U`CU z8zz2?u=tsAzN1-wfni4O|H{AHU0dWCYxSp(f|FUQXu`?ZT6vj=%=@rVL&1T=uvJ6u zlW`dKY8bg-a5W?z@!_~vgL1{T+N&Y*o^ywTUDU~N#((a8e;cte$)I|0sEsknaKYV( zKH|}k^o*O&Y*1ctl8pnG3QN70o;bJYxx&_``+8-iF)LoGg70ZPQ`#g3xmx(8Xl1f2AnAA#jtK;ueh6$vti>_qQ~uL&J~>GH+9L`&`3YPg%V|KvY>rN6%b literal 0 HcmV?d00001 diff --git a/AppleWin/resource/Hddrvr.bin b/AppleWin/resource/Hddrvr.bin new file mode 100644 index 0000000000000000000000000000000000000000..1d65f73bc9d34e51c40211cea13fd70c79b41c89 GIT binary patch literal 256 zcmZ3fu##aV^GchQ485NYtSspLd|>T|10HKX9*{W6c!AL(V*;}e!?BeGtp265m}Qw(3BO-`D4tRzga)Zro4Cyv z=eLvWU-u6r_Hsk?1n=429o@vvz3V;?0!S8m6yB(-pIA+gci$!!xiYW2O+P%drGYNVfVk?byd)%;?F=M28OMKRazw zw-e$LpRMoyyPQvXetEs7Xbt=$*3-DIC_2%>t3TuIp_0LBcU3@u~`; zEXy|p#&0JMaU;eV7ctYVWQZQkB|X$_cxTB_g5ww<(Pe1|(n#Q50sF&zbYpF+ZkpDB zNU2x{yRK@gOKpUS9k|z8E1lR0_qHu2Jn0kf%@{k@8TDv0TF!ec$-N5FIqr3}B zYR&Ya@SeaIk}&a)6}T&Gs5eNMxJ$RPyLyS?O&mqVFu(QJknx@ht9kjEbJ1JgpXpPb zaL&=suHIwZ*>}mK&$XHNi5foM_r8@A9e)i8;AY{@V9PnXVI$#;yTX&mbKVOR%k&BU GGyes)@xnp? literal 0 HcmV?d00001 diff --git a/AppleWin/resource/resource.h b/AppleWin/resource/resource.h new file mode 100644 index 00000000..96e7d0f5 --- /dev/null +++ b/AppleWin/resource/resource.h @@ -0,0 +1,67 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Applewin.rc +// +#define IDC_COMPUTER 101 +#define IDC_JOYSTICK0 102 +#define IDC_SOUNDTYPE 103 +#define IDC_SERIALPORT 104 +#define IDR_MENU1 104 +#define IDR_ACCELERATOR1 105 +#define IDC_VIDEOTYPE 105 +#define IDD_PROPPAGE_INPUT 106 +#define IDC_AUTHENTIC_SPEED 106 +#define IDD_PROPPAGE_CONFIG 107 +#define IDC_CUSTOM_SPEED 107 +#define IDC_SLIDER_CPU_SPEED 108 +#define IDD_PROPPAGE_SOUND 108 +#define IDC_DISKTYPE 109 +#define IDD_PROPPAGE_SAVESTATE 109 +#define IDC_JOYSTICK1 110 +#define IDD_PROPPAGE_DISK 110 +#define IDC_BENCHMARK 111 +#define IDC_LOADSTATE 112 +#define IDR_HDDRVR 115 +#define IDC_0_5_MHz 121 +#define IDB_APPLEWIN 121 +#define IDC_1_0_MHz 122 +#define IDC_2_0_MHz 123 +#define IDC_MAX_MHz 124 +#define IDC_MB_ENABLE 130 +#define IDC_KEYB_BUFFER_ENABLE 1005 +#define IDC_SAVESTATE 1006 +#define IDC_SAVESTATE_ON_EXIT 1007 +#define IDC_SAVESTATE_FILENAME 1008 +#define IDC_SPKR_VOLUME 1009 +#define IDC_MB_VOLUME 1010 +#define IDC_SAVESTATE_BROWSE 1011 +#define IDC_MONOCOLOR 1012 +#define IDC_HDD1 1013 +#define IDC_HDD2 1014 +#define IDC_DISK1 1015 +#define IDC_DISK2 1016 +#define IDC_EDIT_DISK1 1017 +#define IDC_EDIT_DISK2 1018 +#define IDC_PASTE_FROM_CLIPBOARD 1018 +#define IDC_EDIT_HDD1 1019 +#define IDC_EDIT_HDD2 1020 +#define IDC_HDD_ENABLE 1021 +#define IDC_SPIN_XTRIM 1026 +#define IDC_SPIN_YTRIM 1027 +#define IDC_PHASOR_ENABLE 1029 +#define IDC_SOUNDCARD_DISABLE 1030 +#define IDM_EXIT 40001 +#define IDM_HELP 40002 +#define IDM_ABOUT 40003 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_NEXT_RESOURCE_VALUE 122 +#define _APS_NEXT_COMMAND_VALUE 40004 +#define _APS_NEXT_CONTROL_VALUE 1031 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/AppleWin/source/AY8910.cpp b/AppleWin/source/AY8910.cpp new file mode 100644 index 00000000..77b690d7 --- /dev/null +++ b/AppleWin/source/AY8910.cpp @@ -0,0 +1,751 @@ +/*************************************************************************** + + ay8910.c + + + Emulation of the AY-3-8910 / YM2149 sound chip. + + Based on various code snippets by Ville Hallik, Michael Cuddy, + Tatsuyuki Satoh, Fabrice Frances, Nicola Salmoria. + +***************************************************************************/ + +// +// From mame.txt (http://www.mame.net/readme.html) +// +// VI. Reuse of Source Code +// -------------------------- +// This chapter might not apply to specific portions of MAME (e.g. CPU +// emulators) which bear different copyright notices. +// The source code cannot be used in a commercial product without the written +// authorization of the authors. Use in non-commercial products is allowed, and +// indeed encouraged. If you use portions of the MAME source code in your +// program, however, you must make the full source code freely available as +// well. +// Usage of the _information_ contained in the source code is free for any use. +// However, given the amount of time and energy it took to collect this +// information, if you find new information we would appreciate if you made it +// freely available as well. +// + + +#include +#include +#include +#include "ay8910.h" + +/////////////////////////////////////////////////////////// +// typedefs & dummy funcs to allow MAME code to compile: + +typedef UINT8 (*mem_read_handler)(UINT32); +typedef void (*mem_write_handler)(UINT32, UINT8); + +static void logerror(char* psz, ...) +{ +} + +static unsigned short activecpu_get_pc() +{ + return 0; +} + +// +/////////////////////////////////////////////////////////// + +#define MAX_OUTPUT 0x7fff + +// See AY8910_set_clock() for definition of STEP +#define STEP 0x8000 + + +static int num = 0, ym_num = 0; + +struct AY8910 +{ + int Channel; + int SampleRate; + mem_read_handler PortAread; + mem_read_handler PortBread; + mem_write_handler PortAwrite; + mem_write_handler PortBwrite; + int register_latch; + unsigned char Regs[16]; + int lastEnable; + unsigned int UpdateStep; + int PeriodA,PeriodB,PeriodC,PeriodN,PeriodE; + int CountA,CountB,CountC,CountN,CountE; + unsigned int VolA,VolB,VolC,VolE; + unsigned char EnvelopeA,EnvelopeB,EnvelopeC; + unsigned char OutputA,OutputB,OutputC,OutputN; + signed char CountEnv; + unsigned char Hold,Alternate,Attack,Holding; + int RNG; + unsigned int VolTable[32]; +}; + +/* register id's */ +#define AY_AFINE (0) +#define AY_ACOARSE (1) +#define AY_BFINE (2) +#define AY_BCOARSE (3) +#define AY_CFINE (4) +#define AY_CCOARSE (5) +#define AY_NOISEPER (6) +#define AY_ENABLE (7) +#define AY_AVOL (8) +#define AY_BVOL (9) +#define AY_CVOL (10) +#define AY_EFINE (11) +#define AY_ECOARSE (12) +#define AY_ESHAPE (13) + +#define AY_PORTA (14) +#define AY_PORTB (15) + + +static struct AY8910 AYPSG[MAX_8910]; /* array of PSG's */ + + + +void _AYWriteReg(int n, int r, int v) +{ + struct AY8910 *PSG = &AYPSG[n]; + int old; + + + PSG->Regs[r] = v; + +//#define LOG_AY8910 +#ifdef LOG_AY8910 + extern FILE* g_fh; // Filehandle for log file + static UINT nCnt = 0; + if((n == 0) && (r == 0) && g_fh) + { + if(nCnt == 0) + fprintf(g_fh, "Time : APer BPer CPer NP EN AV BV CV\n"); + + fprintf(g_fh, "%02d.%02d: ", nCnt/60, nCnt%60); + nCnt++; + + fprintf(g_fh, "%04X ", *(USHORT*)&PSG->Regs[AY_AFINE]); + fprintf(g_fh, "%04X ", *(USHORT*)&PSG->Regs[AY_BFINE]); + fprintf(g_fh, "%04X ", *(USHORT*)&PSG->Regs[AY_CFINE]); + fprintf(g_fh, "%02X ", PSG->Regs[AY_NOISEPER]); + fprintf(g_fh, "%02X ", PSG->Regs[AY_ENABLE]); + fprintf(g_fh, "%02X ", PSG->Regs[AY_AVOL]); + fprintf(g_fh, "%02X ", PSG->Regs[AY_BVOL]); + fprintf(g_fh, "%02X\n", PSG->Regs[AY_CVOL]); + } +#endif + + /* A note about the period of tones, noise and envelope: for speed reasons,*/ + /* we count down from the period to 0, but careful studies of the chip */ + /* output prove that it instead counts up from 0 until the counter becomes */ + /* greater or equal to the period. This is an important difference when the*/ + /* program is rapidly changing the period to modulate the sound. */ + /* To compensate for the difference, when the period is changed we adjust */ + /* our internal counter. */ + /* Also, note that period = 0 is the same as period = 1. This is mentioned */ + /* in the YM2203 data sheets. However, this does NOT apply to the Envelope */ + /* period. In that case, period = 0 is half as period = 1. */ + switch( r ) + { + case AY_AFINE: + case AY_ACOARSE: + PSG->Regs[AY_ACOARSE] &= 0x0f; + old = PSG->PeriodA; + PSG->PeriodA = (PSG->Regs[AY_AFINE] + 256 * PSG->Regs[AY_ACOARSE]) * PSG->UpdateStep; + if (PSG->PeriodA == 0) PSG->PeriodA = PSG->UpdateStep; + PSG->CountA += PSG->PeriodA - old; + if (PSG->CountA <= 0) PSG->CountA = 1; + break; + case AY_BFINE: + case AY_BCOARSE: + PSG->Regs[AY_BCOARSE] &= 0x0f; + old = PSG->PeriodB; + PSG->PeriodB = (PSG->Regs[AY_BFINE] + 256 * PSG->Regs[AY_BCOARSE]) * PSG->UpdateStep; + if (PSG->PeriodB == 0) PSG->PeriodB = PSG->UpdateStep; + PSG->CountB += PSG->PeriodB - old; + if (PSG->CountB <= 0) PSG->CountB = 1; + break; + case AY_CFINE: + case AY_CCOARSE: + PSG->Regs[AY_CCOARSE] &= 0x0f; + old = PSG->PeriodC; + PSG->PeriodC = (PSG->Regs[AY_CFINE] + 256 * PSG->Regs[AY_CCOARSE]) * PSG->UpdateStep; + if (PSG->PeriodC == 0) PSG->PeriodC = PSG->UpdateStep; + PSG->CountC += PSG->PeriodC - old; + if (PSG->CountC <= 0) PSG->CountC = 1; + break; + case AY_NOISEPER: + PSG->Regs[AY_NOISEPER] &= 0x1f; + old = PSG->PeriodN; + PSG->PeriodN = PSG->Regs[AY_NOISEPER] * PSG->UpdateStep; + if (PSG->PeriodN == 0) PSG->PeriodN = PSG->UpdateStep; + PSG->CountN += PSG->PeriodN - old; + if (PSG->CountN <= 0) PSG->CountN = 1; + break; + case AY_ENABLE: + if ((PSG->lastEnable == -1) || + ((PSG->lastEnable & 0x40) != (PSG->Regs[AY_ENABLE] & 0x40))) + { + /* write out 0xff if port set to input */ + if (PSG->PortAwrite) + (*PSG->PortAwrite)(0, (UINT8) ((PSG->Regs[AY_ENABLE] & 0x40) ? PSG->Regs[AY_PORTA] : 0xff)); // [TC: UINT8 cast] + } + + if ((PSG->lastEnable == -1) || + ((PSG->lastEnable & 0x80) != (PSG->Regs[AY_ENABLE] & 0x80))) + { + /* write out 0xff if port set to input */ + if (PSG->PortBwrite) + (*PSG->PortBwrite)(0, (UINT8) ((PSG->Regs[AY_ENABLE] & 0x80) ? PSG->Regs[AY_PORTB] : 0xff)); // [TC: UINT8 cast] + } + + PSG->lastEnable = PSG->Regs[AY_ENABLE]; + break; + case AY_AVOL: + PSG->Regs[AY_AVOL] &= 0x1f; + PSG->EnvelopeA = PSG->Regs[AY_AVOL] & 0x10; + PSG->VolA = PSG->EnvelopeA ? PSG->VolE : PSG->VolTable[PSG->Regs[AY_AVOL] ? PSG->Regs[AY_AVOL]*2+1 : 0]; + break; + case AY_BVOL: + PSG->Regs[AY_BVOL] &= 0x1f; + PSG->EnvelopeB = PSG->Regs[AY_BVOL] & 0x10; + PSG->VolB = PSG->EnvelopeB ? PSG->VolE : PSG->VolTable[PSG->Regs[AY_BVOL] ? PSG->Regs[AY_BVOL]*2+1 : 0]; + break; + case AY_CVOL: + PSG->Regs[AY_CVOL] &= 0x1f; + PSG->EnvelopeC = PSG->Regs[AY_CVOL] & 0x10; + PSG->VolC = PSG->EnvelopeC ? PSG->VolE : PSG->VolTable[PSG->Regs[AY_CVOL] ? PSG->Regs[AY_CVOL]*2+1 : 0]; + break; + case AY_EFINE: + case AY_ECOARSE: +// _ASSERT((PSG->Regs[AY_EFINE] == 0) && (PSG->Regs[AY_ECOARSE] == 0)); + old = PSG->PeriodE; + PSG->PeriodE = ((PSG->Regs[AY_EFINE] + 256 * PSG->Regs[AY_ECOARSE])) * PSG->UpdateStep; + if (PSG->PeriodE == 0) PSG->PeriodE = PSG->UpdateStep / 2; + PSG->CountE += PSG->PeriodE - old; + if (PSG->CountE <= 0) PSG->CountE = 1; + break; + case AY_ESHAPE: +// _ASSERT(PSG->Regs[AY_ESHAPE] == 0); + /* envelope shapes: + C AtAlH + 0 0 x x \___ + + 0 1 x x /___ + + 1 0 0 0 \\\\ + + 1 0 0 1 \___ + + 1 0 1 0 \/\/ + ___ + 1 0 1 1 \ + + 1 1 0 0 //// + ___ + 1 1 0 1 / + + 1 1 1 0 /\/\ + + 1 1 1 1 /___ + + The envelope counter on the AY-3-8910 has 16 steps. On the YM2149 it + has twice the steps, happening twice as fast. Since the end result is + just a smoother curve, we always use the YM2149 behaviour. + */ + PSG->Regs[AY_ESHAPE] &= 0x0f; + PSG->Attack = (PSG->Regs[AY_ESHAPE] & 0x04) ? 0x1f : 0x00; + if ((PSG->Regs[AY_ESHAPE] & 0x08) == 0) + { + /* if Continue = 0, map the shape to the equivalent one which has Continue = 1 */ + PSG->Hold = 1; + PSG->Alternate = PSG->Attack; + } + else + { + PSG->Hold = PSG->Regs[AY_ESHAPE] & 0x01; + PSG->Alternate = PSG->Regs[AY_ESHAPE] & 0x02; + } + PSG->CountE = PSG->PeriodE; + PSG->CountEnv = 0x1f; + PSG->Holding = 0; + PSG->VolE = PSG->VolTable[PSG->CountEnv ^ PSG->Attack]; + if (PSG->EnvelopeA) PSG->VolA = PSG->VolE; + if (PSG->EnvelopeB) PSG->VolB = PSG->VolE; + if (PSG->EnvelopeC) PSG->VolC = PSG->VolE; + break; + case AY_PORTA: + if (PSG->Regs[AY_ENABLE] & 0x40) + { + if (PSG->PortAwrite) + (*PSG->PortAwrite)(0, PSG->Regs[AY_PORTA]); + else + logerror("PC %04x: warning - write %02x to 8910 #%d Port A\n",activecpu_get_pc(),PSG->Regs[AY_PORTA],n); + } + else + { + logerror("warning: write to 8910 #%d Port A set as input - ignored\n",n); + } + break; + case AY_PORTB: + if (PSG->Regs[AY_ENABLE] & 0x80) + { + if (PSG->PortBwrite) + (*PSG->PortBwrite)(0, PSG->Regs[AY_PORTB]); + else + logerror("PC %04x: warning - write %02x to 8910 #%d Port B\n",activecpu_get_pc(),PSG->Regs[AY_PORTB],n); + } + else + { + logerror("warning: write to 8910 #%d Port B set as input - ignored\n",n); + } + break; + } +} + + +// /length/ is the number of samples we require +// NB. This should be called at twice the 6522 IRQ rate or (eg) 60Hz if no IRQ. +void AY8910Update(int chip,INT16 **buffer,int length) // [TC: Removed static] +{ + struct AY8910 *PSG = &AYPSG[chip]; + INT16 *buf1,*buf2,*buf3; + int outn; + + buf1 = buffer[0]; + buf2 = buffer[1]; + buf3 = buffer[2]; + + + /* The 8910 has three outputs, each output is the mix of one of the three */ + /* tone generators and of the (single) noise generator. The two are mixed */ + /* BEFORE going into the DAC. The formula to mix each channel is: */ + /* (ToneOn | ToneDisable) & (NoiseOn | NoiseDisable). */ + /* Note that this means that if both tone and noise are disabled, the output */ + /* is 1, not 0, and can be modulated changing the volume. */ + + + /* If the channels are disabled, set their output to 1, and increase the */ + /* counter, if necessary, so they will not be inverted during this update. */ + /* Setting the output to 1 is necessary because a disabled channel is locked */ + /* into the ON state (see above); and it has no effect if the volume is 0. */ + /* If the volume is 0, increase the counter, but don't touch the output. */ + if (PSG->Regs[AY_ENABLE] & 0x01) + { + if (PSG->CountA <= length*STEP) PSG->CountA += length*STEP; + PSG->OutputA = 1; + } + else if (PSG->Regs[AY_AVOL] == 0) + { + /* note that I do count += length, NOT count = length + 1. You might think */ + /* it's the same since the volume is 0, but doing the latter could cause */ + /* interferencies when the program is rapidly modulating the volume. */ + if (PSG->CountA <= length*STEP) PSG->CountA += length*STEP; + } + if (PSG->Regs[AY_ENABLE] & 0x02) + { + if (PSG->CountB <= length*STEP) PSG->CountB += length*STEP; + PSG->OutputB = 1; + } + else if (PSG->Regs[AY_BVOL] == 0) + { + if (PSG->CountB <= length*STEP) PSG->CountB += length*STEP; + } + if (PSG->Regs[AY_ENABLE] & 0x04) + { + if (PSG->CountC <= length*STEP) PSG->CountC += length*STEP; + PSG->OutputC = 1; + } + else if (PSG->Regs[AY_CVOL] == 0) + { + if (PSG->CountC <= length*STEP) PSG->CountC += length*STEP; + } + + /* for the noise channel we must not touch OutputN - it's also not necessary */ + /* since we use outn. */ + if ((PSG->Regs[AY_ENABLE] & 0x38) == 0x38) /* all off */ + if (PSG->CountN <= length*STEP) PSG->CountN += length*STEP; + + outn = (PSG->OutputN | PSG->Regs[AY_ENABLE]); + + + /* buffering loop */ + while (length) + { + int vola,volb,volc; + int left; + + + /* vola, volb and volc keep track of how long each square wave stays */ + /* in the 1 position during the sample period. */ + vola = volb = volc = 0; + + left = STEP; + do + { + int nextevent; + + + if (PSG->CountN < left) nextevent = PSG->CountN; + else nextevent = left; + + if (outn & 0x08) + { + if (PSG->OutputA) vola += PSG->CountA; + PSG->CountA -= nextevent; + /* PeriodA is the half period of the square wave. Here, in each */ + /* loop I add PeriodA twice, so that at the end of the loop the */ + /* square wave is in the same status (0 or 1) it was at the start. */ + /* vola is also incremented by PeriodA, since the wave has been 1 */ + /* exactly half of the time, regardless of the initial position. */ + /* If we exit the loop in the middle, OutputA has to be inverted */ + /* and vola incremented only if the exit status of the square */ + /* wave is 1. */ + while (PSG->CountA <= 0) + { + PSG->CountA += PSG->PeriodA; + if (PSG->CountA > 0) + { + PSG->OutputA ^= 1; + if (PSG->OutputA) vola += PSG->PeriodA; + break; + } + PSG->CountA += PSG->PeriodA; + vola += PSG->PeriodA; + } + if (PSG->OutputA) vola -= PSG->CountA; + } + else + { + PSG->CountA -= nextevent; + while (PSG->CountA <= 0) + { + PSG->CountA += PSG->PeriodA; + if (PSG->CountA > 0) + { + PSG->OutputA ^= 1; + break; + } + PSG->CountA += PSG->PeriodA; + } + } + + if (outn & 0x10) + { + if (PSG->OutputB) volb += PSG->CountB; + PSG->CountB -= nextevent; + while (PSG->CountB <= 0) + { + PSG->CountB += PSG->PeriodB; + if (PSG->CountB > 0) + { + PSG->OutputB ^= 1; + if (PSG->OutputB) volb += PSG->PeriodB; + break; + } + PSG->CountB += PSG->PeriodB; + volb += PSG->PeriodB; + } + if (PSG->OutputB) volb -= PSG->CountB; + } + else + { + PSG->CountB -= nextevent; + while (PSG->CountB <= 0) + { + PSG->CountB += PSG->PeriodB; + if (PSG->CountB > 0) + { + PSG->OutputB ^= 1; + break; + } + PSG->CountB += PSG->PeriodB; + } + } + + if (outn & 0x20) + { + if (PSG->OutputC) volc += PSG->CountC; + PSG->CountC -= nextevent; + while (PSG->CountC <= 0) + { + PSG->CountC += PSG->PeriodC; + if (PSG->CountC > 0) + { + PSG->OutputC ^= 1; + if (PSG->OutputC) volc += PSG->PeriodC; + break; + } + PSG->CountC += PSG->PeriodC; + volc += PSG->PeriodC; + } + if (PSG->OutputC) volc -= PSG->CountC; + } + else + { + PSG->CountC -= nextevent; + while (PSG->CountC <= 0) + { + PSG->CountC += PSG->PeriodC; + if (PSG->CountC > 0) + { + PSG->OutputC ^= 1; + break; + } + PSG->CountC += PSG->PeriodC; + } + } + + PSG->CountN -= nextevent; + if (PSG->CountN <= 0) + { + /* Is noise output going to change? */ + if ((PSG->RNG + 1) & 2) /* (bit0^bit1)? */ + { + PSG->OutputN = ~PSG->OutputN; + outn = (PSG->OutputN | PSG->Regs[AY_ENABLE]); + } + + /* The Random Number Generator of the 8910 is a 17-bit shift */ + /* register. The input to the shift register is bit0 XOR bit3 */ + /* (bit0 is the output). This was verified on AY-3-8910 and YM2149 chips. */ + + /* The following is a fast way to compute bit17 = bit0^bit3. */ + /* Instead of doing all the logic operations, we only check */ + /* bit0, relying on the fact that after three shifts of the */ + /* register, what now is bit3 will become bit0, and will */ + /* invert, if necessary, bit14, which previously was bit17. */ + if (PSG->RNG & 1) PSG->RNG ^= 0x24000; /* This version is called the "Galois configuration". */ + PSG->RNG >>= 1; + PSG->CountN += PSG->PeriodN; + } + + left -= nextevent; + } while (left > 0); + + /* update envelope */ + if (PSG->Holding == 0) + { + PSG->CountE -= STEP; + if (PSG->CountE <= 0) + { + do + { + PSG->CountEnv--; + PSG->CountE += PSG->PeriodE; + } while (PSG->CountE <= 0); + + /* check envelope current position */ + if (PSG->CountEnv < 0) + { + if (PSG->Hold) + { + if (PSG->Alternate) + PSG->Attack ^= 0x1f; + PSG->Holding = 1; + PSG->CountEnv = 0; + } + else + { + /* if CountEnv has looped an odd number of times (usually 1), */ + /* invert the output. */ + if (PSG->Alternate && (PSG->CountEnv & 0x20)) + PSG->Attack ^= 0x1f; + + PSG->CountEnv &= 0x1f; + } + } + + PSG->VolE = PSG->VolTable[PSG->CountEnv ^ PSG->Attack]; + /* reload volume */ + if (PSG->EnvelopeA) PSG->VolA = PSG->VolE; + if (PSG->EnvelopeB) PSG->VolB = PSG->VolE; + if (PSG->EnvelopeC) PSG->VolC = PSG->VolE; + } + } + +#if 0 + *(buf1++) = (vola * PSG->VolA) / STEP; + *(buf2++) = (volb * PSG->VolB) / STEP; + *(buf3++) = (volc * PSG->VolC) / STEP; +#else + // Output PCM wave [-32768...32767] instead of MAME's voltage level [0...32767] + // - This allows for better s/w mixing + + if(PSG->VolA) + { + if(vola) + *(buf1++) = (vola * PSG->VolA) / STEP; + else + *(buf1++) = - (int) PSG->VolA; + } + else + { + *(buf1++) = 0; + } + + // + + if(PSG->VolB) + { + if(volb) + *(buf2++) = (volb * PSG->VolB) / STEP; + else + *(buf2++) = - (int) PSG->VolB; + } + else + { + *(buf2++) = 0; + } + + // + + if(PSG->VolC) + { + if(volc) + *(buf3++) = (volc * PSG->VolC) / STEP; + else + *(buf3++) = - (int) PSG->VolC; + } + else + { + *(buf3++) = 0; + } +#endif + + length--; + } +} + + +static void AY8910_set_clock(int chip,int clock) +{ + struct AY8910 *PSG = &AYPSG[chip]; + + /* the step clock for the tone and noise generators is the chip clock */ + /* divided by 8; for the envelope generator of the AY-3-8910, it is half */ + /* that much (clock/16), but the envelope of the YM2149 goes twice as */ + /* fast, therefore again clock/8. */ + /* Here we calculate the number of steps which happen during one sample */ + /* at the given sample rate. No. of events = sample rate / (clock/8). */ + /* STEP is a multiplier used to turn the fraction into a fixed point */ + /* number. */ + PSG->UpdateStep = (unsigned int) (((double)STEP * PSG->SampleRate * 8 + clock/2) / clock); // [TC: unsigned int cast] +} + + +static void build_mixer_table(int chip) +{ + struct AY8910 *PSG = &AYPSG[chip]; + int i; + double out; + + + /* calculate the volume->voltage conversion table */ + /* The AY-3-8910 has 16 levels, in a logarithmic scale (3dB per step) */ + /* The YM2149 still has 16 levels for the tone generators, but 32 for */ + /* the envelope generator (1.5dB per step). */ + out = MAX_OUTPUT; + for (i = 31;i > 0;i--) + { + PSG->VolTable[i] = (unsigned int) (out + 0.5); /* round to nearest */ // [TC: unsigned int cast] + + out /= 1.188502227; /* = 10 ^ (1.5/20) = 1.5dB */ + } + PSG->VolTable[0] = 0; +} + + +#if 0 +void ay8910_write_ym(int chip, int addr, int data) +{ + struct AY8910 *PSG = &AYPSG[chip]; + +// if (addr & 1) +// { /* Data port */ +// int r = PSG->register_latch; + int r = addr; + + if (r > 15) return; + if (r < 14) + { + if (r == AY_ESHAPE || PSG->Regs[r] != data) + { + /* update the output buffer before changing the register */ +// stream_update(PSG->Channel,0); + AY8910Update(chip, INT16 **buffer, int length) + } + } + + _AYWriteReg(PSG,r,data); + } +// else +// { /* Register port */ +// PSG->register_latch = data & 0x0f; +// } +} +#endif + + +void AY8910_reset(int chip) +{ + int i; + struct AY8910 *PSG = &AYPSG[chip]; + + PSG->register_latch = 0; + PSG->RNG = 1; + PSG->OutputA = 0; + PSG->OutputB = 0; + PSG->OutputC = 0; + PSG->OutputN = 0xff; + PSG->lastEnable = -1; /* force a write */ + for (i = 0;i < AY_PORTA;i++) + _AYWriteReg(chip,i,0); /* AYWriteReg() uses the timer system; we cannot */ + /* call it at this time because the timer system */ + /* has not been initialized. */ +} + +//------------------------------------- + +void AY8910_InitAll(int nClock, int nSampleRate) +{ + for(int nChip=0; nChipSampleRate = nSampleRate; + + PSG->PortAread = NULL; + PSG->PortBread = NULL; + PSG->PortAwrite = NULL; + PSG->PortBwrite = NULL; + + AY8910_set_clock(nChip, nClock); + + build_mixer_table(nChip); + } +} + +//------------------------------------- + +void AY8910_InitClock(int nClock) +{ + for(int nChip=0; nChip= MAX_8910) + return NULL; + + return &AYPSG[nAyNum].Regs[0]; +} diff --git a/AppleWin/source/AY8910.h b/AppleWin/source/AY8910.h new file mode 100644 index 00000000..96b0cc03 --- /dev/null +++ b/AppleWin/source/AY8910.h @@ -0,0 +1,15 @@ +#ifndef AY8910_H +#define AY8910_H + +#define MAX_8910 4 + +void _AYWriteReg(int n, int r, int v); +void AY8910_write_ym(int chip, int addr, int data); +void AY8910_reset(int chip); +void AY8910Update(int chip,INT16 **buffer,int length); + +void AY8910_InitAll(int nClock, int nSampleRate); +void AY8910_InitClock(int nClock); +BYTE* AY8910_GetRegsPtr(UINT nAyNum); + +#endif diff --git a/AppleWin/source/Applewin.cpp b/AppleWin/source/Applewin.cpp new file mode 100644 index 00000000..96b58926 --- /dev/null +++ b/AppleWin/source/Applewin.cpp @@ -0,0 +1,677 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: main + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop + +char VERSIONSTRING[] = "xx.yy.zz.ww"; + +BOOL apple2e = 1; +BOOL behind = 0; // Redundant +DWORD cumulativecycles = 0; // Wraps after ~1hr 9mins +DWORD cyclenum = 0; // Used by SpkrToggle() for non-wave sound +DWORD emulmsec = 0; +static DWORD emulmsec_frac = 0; +bool g_bFullSpeed = false; +HINSTANCE instance = (HINSTANCE)0; +static DWORD lastfastpaging = 0; +static DWORD lasttrimimages = 0; +int mode = MODE_LOGO; +static int lastmode = MODE_LOGO; +DWORD needsprecision = 0; // Redundant +TCHAR progdir[MAX_PATH] = TEXT(""); +BOOL resettiming = 0; // Redundant +BOOL restart = 0; + +DWORD g_dwSpeed = SPEED_NORMAL; // Affected by Config dialog's speed slider bar +double g_fCurrentCLK6502 = CLK_6502; // Affected by Config dialog's speed slider bar +static double g_fMHz = 1.0; // Affected by Config dialog's speed slider bar + +int g_nCpuCyclesFeedback = 0; +FILE* g_fh = NULL; +bool g_bDisableDirectSound = false; + +//=========================================================================== + +void CheckFastPaging () +{ + if ((pages >= 10) && CpuSupportsFastPaging()) + { + lastfastpaging = cumulativecycles; + if (cpuemtype == CPU_COMPILING) + { + lasttrimimages = cumulativecycles; + MemSetFastPaging(1); + } + } +} + +//=========================================================================== + +#define DBG_CALC_FREQ 0 +#if DBG_CALC_FREQ +const UINT MAX_CNT = 256; +double g_fDbg[MAX_CNT]; +UINT g_nIdx = 0; +double g_fMeanPeriod,g_fMeanFreq; +ULONGLONG g_nPerfFreq = 0; +#endif + +//--------------------------------------------------------------------------- + +void ContinueExecution() +{ + static DWORD dwCyclesThisFrame = 0; + static BOOL pageflipping = 0; //? + + const double fUsecPerSec = 1.e6; +#if 1 + const UINT nExecutionPeriodUsec = 1000; // 1.0ms +// const UINT nExecutionPeriodUsec = 100; // 0.1ms + const double fExecutionPeriodClks = g_fCurrentCLK6502 * ((double)nExecutionPeriodUsec / fUsecPerSec); +#else + const double fExecutionPeriodClks = 1800.0; + const UINT nExecutionPeriodUsec = (UINT) (fUsecPerSec * (fExecutionPeriodClks / g_fCurrentCLK6502)); +#endif + + // + + g_bFullSpeed = ( (g_dwSpeed == SPEED_MAX) || + (GetKeyState(VK_SCROLL) < 0) || + (DiskIsSpinning() && enhancedisk && !Spkr_IsActive() && !MB_IsActive()) ); + + if(g_bFullSpeed) + { + // Don't call Spkr_Mute() - will get speaker clicks + MB_Mute(); + SysClk_StopTimer(); + + g_nCpuCyclesFeedback = 0; // For the case when this is a big -ve number + } + else + { + // Don't call Spkr_Demute() + MB_Demute(); + SysClk_StartTimerUsec(nExecutionPeriodUsec); + } + + // + + int nCyclesToExecute = (int) fExecutionPeriodClks + g_nCpuCyclesFeedback; + if(nCyclesToExecute < 0) + nCyclesToExecute = 0; + + DWORD dwExecutedCycles = CpuExecute(nCyclesToExecute); + + dwCyclesThisFrame += dwExecutedCycles; + + // + + cyclenum = dwExecutedCycles; + + CheckFastPaging(); + DiskUpdatePosition(dwExecutedCycles); + JoyUpdatePosition(); + VideoUpdateVbl(dwCyclesThisFrame); + + SpkrUpdate(cyclenum); + CommUpdate(cyclenum); + + // + + if (cpuemtype == CPU_FASTPAGING) //? + { + if ((!pages) && (cumulativecycles-lastfastpaging > 500000)) + { + MemSetFastPaging(0); + } + else if (cumulativecycles-lasttrimimages > 500000) + { + MemTrimImages(); + lasttrimimages = cumulativecycles; + } + } + + // + + const DWORD CLKS_PER_MS = (DWORD)g_fCurrentCLK6502 / 1000; + + emulmsec_frac += dwExecutedCycles; + if(emulmsec_frac > CLKS_PER_MS) + { + emulmsec += emulmsec_frac / CLKS_PER_MS; + emulmsec_frac %= CLKS_PER_MS; + } + + pages = 0; //? + + // + // DETERMINE WHETHER THE SCREEN WAS UPDATED, THE DISK WAS SPINNING, + // OR THE KEYBOARD I/O PORTS WERE BEING EXCESSIVELY QUERIED THIS CLOCKTICK + VideoCheckPage(0); + BOOL screenupdated = VideoHasRefreshed(); + BOOL systemidle = 0; //(KeybGetNumQueries() > (clockgran << 2)); // && (!ranfinegrain); // TO DO + + if(screenupdated) + pageflipping = 3; + + // + + if(dwCyclesThisFrame >= dwClksPerFrame) + { + dwCyclesThisFrame -= dwClksPerFrame; + + if(mode != MODE_LOGO) + { + VideoUpdateFlash(); + + static BOOL anyupdates = 0; + static DWORD lastcycles = 0; + static BOOL lastupdates[2] = {0,0}; + + anyupdates |= screenupdated; + + // + + lastcycles = cumulativecycles; + if ((!anyupdates) && (!lastupdates[0]) && (!lastupdates[1]) && VideoApparentlyDirty()) + { + VideoCheckPage(1); + static DWORD lasttime = 0; + DWORD currtime = GetTickCount(); + if ((!g_bFullSpeed) || + (currtime-lasttime >= (DWORD)((graphicsmode || !systemidle) ? 100 : 25))) + { + VideoRefreshScreen(); + lasttime = currtime; + } + screenupdated = 1; + } + + lastupdates[1] = lastupdates[0]; + lastupdates[0] = anyupdates; + anyupdates = 0; + + if (pageflipping) + pageflipping--; + } + + MB_EndOfFrame(); + } + + // + + if(!g_bFullSpeed) + { + SysClk_WaitTimer(); + +#if DBG_CALC_FREQ + if(g_nPerfFreq) + { + QueryPerformanceCounter((LARGE_INTEGER*)&nTime1); + LONGLONG nTimeDiff = nTime1 - nTime0; + double fTime = (double)nTimeDiff / (double)(LONGLONG)g_nPerfFreq; + + g_fDbg[g_nIdx] = fTime; + g_nIdx = (g_nIdx+1) & (MAX_CNT-1); + g_fMeanPeriod = 0.0; + for(UINT n=0; n> 1; + rect.top = (GetSystemMetrics(SM_CYSCREEN)-size.cy) >> 1; + rect.right = rect.left+size.cx; + rect.bottom = rect.top +size.cy; + MoveWindow(window, + rect.left, + rect.top, + rect.right-rect.left, + rect.bottom-rect.top, + 0); + ShowWindow(window,SW_SHOW); + } + return DefWindowProc(window,message,wparam,lparam); +} + +//=========================================================================== +void EnterMessageLoop () { + MSG message; + while (GetMessage(&message,0,0,0)) { + TranslateMessage(&message); + DispatchMessage(&message); + while ((mode == MODE_RUNNING) || (mode == MODE_STEPPING)) + if (PeekMessage(&message,0,0,0,PM_REMOVE)) { + if (message.message == WM_QUIT) + return; + TranslateMessage(&message); + DispatchMessage(&message); + } + else if (mode == MODE_STEPPING) + DebugContinueStepping(); + else { + ContinueExecution(); + if (g_bFullSpeed) + ContinueExecution(); + } + } + while (PeekMessage(&message,0,0,0,PM_REMOVE)) ; +} + +//=========================================================================== +void GetProgramDirectory () { + GetModuleFileName((HINSTANCE)0,progdir,MAX_PATH); + progdir[MAX_PATH-1] = 0; + int loop = _tcslen(progdir); + while (loop--) + if ((progdir[loop] == TEXT('\\')) || + (progdir[loop] == TEXT(':'))) { + progdir[loop+1] = 0; + break; + } +} + +//=========================================================================== +void LoadConfiguration () { + LOAD(TEXT("Computer Emulation"),(DWORD *)&apple2e); + LOAD(TEXT("Joystick 0 Emulation"),&joytype[0]); + LOAD(TEXT("Joystick 1 Emulation"),&joytype[1]); + LOAD(TEXT("Sound Emulation") ,&soundtype); + LOAD(TEXT("Serial Port") ,&serialport); + LOAD(TEXT("Emulation Speed") ,&g_dwSpeed); + LOAD(TEXT("Enhance Disk Speed"),(DWORD *)&enhancedisk); + LOAD(TEXT("Video Emulation") ,&videotype); + LOAD(TEXT("Monochrome Color") ,&monochrome); + + SetCurrentCLK6502(); + + // + + DWORD dwTmp; + + if(LOAD(TEXT(REGVALUE_SPKR_VOLUME), &dwTmp)) + SpkrSetVolume(dwTmp, PSP_GetVolumeMax()); + + if(LOAD(TEXT(REGVALUE_MB_VOLUME), &dwTmp)) + MB_SetVolume(dwTmp, PSP_GetVolumeMax()); + + if(LOAD(TEXT(REGVALUE_SOUNDCARD_TYPE), &dwTmp)) + MB_SetSoundcardType((eSOUNDCARDTYPE)dwTmp); + + if(LOAD(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), &dwTmp)) + g_bSaveStateOnExit = dwTmp ? true : false; + + if(LOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp)) + HD_SetEnabled(dwTmp ? true : false); + + char szHDFilename[MAX_PATH] = {0}; + if(RegLoadString(TEXT("Configuration"), TEXT(REGVALUE_HDD_IMAGE1), 1, szHDFilename, sizeof(szHDFilename))) + HD_InsertDisk2(0, szHDFilename); + if(RegLoadString(TEXT("Configuration"), TEXT(REGVALUE_HDD_IMAGE2), 1, szHDFilename, sizeof(szHDFilename))) + HD_InsertDisk2(1, szHDFilename); + + if(LOAD(TEXT(REGVALUE_PDL_XTRIM), &dwTmp)) + JoySetTrim((short)dwTmp, true); + if(LOAD(TEXT(REGVALUE_PDL_YTRIM), &dwTmp)) + JoySetTrim((short)dwTmp, false); + + // + + char szFilename[MAX_PATH] = {0}; + + RegLoadString(TEXT("Configuration"),TEXT(REGVALUE_SAVESTATE_FILENAME),1,szFilename,sizeof(szFilename)); + Snapshot_SetFilename(szFilename); // If not in Registry than default will be used + + // + + TCHAR szDirectory[MAX_PATH] = TEXT(""); + + RegLoadString(TEXT("Preferences"),TEXT("Starting Directory"),1,szDirectory,MAX_PATH); + + SetCurrentDirectory(szDirectory); +} + +//=========================================================================== +void RegisterExtensions () { + TCHAR command[MAX_PATH]; + GetModuleFileName((HMODULE)0,command,MAX_PATH); + command[MAX_PATH-1] = 0; + TCHAR icon[MAX_PATH]; + wsprintf(icon,TEXT("%s,1"),(LPCTSTR)command); + _tcscat(command,TEXT(" %1")); + RegSetValue(HKEY_CLASSES_ROOT,".bin",REG_SZ,"DiskImage",10); + RegSetValue(HKEY_CLASSES_ROOT,".do" ,REG_SZ,"DiskImage",10); + RegSetValue(HKEY_CLASSES_ROOT,".dsk",REG_SZ,"DiskImage",10); + RegSetValue(HKEY_CLASSES_ROOT,".nib",REG_SZ,"DiskImage",10); + RegSetValue(HKEY_CLASSES_ROOT,".po" ,REG_SZ,"DiskImage",10); +// RegSetValue(HKEY_CLASSES_ROOT,".aws",REG_SZ,"DiskImage",10); // TO DO +// RegSetValue(HKEY_CLASSES_ROOT,".hdv",REG_SZ,"DiskImage",10); // TO DO + RegSetValue(HKEY_CLASSES_ROOT, + "DiskImage", + REG_SZ,"Disk Image",21); + RegSetValue(HKEY_CLASSES_ROOT, + "DiskImage\\DefaultIcon", + REG_SZ,icon,_tcslen(icon)+1); + RegSetValue(HKEY_CLASSES_ROOT, + "DiskImage\\shell\\open\\command", + REG_SZ,command,_tcslen(command)+1); + RegSetValue(HKEY_CLASSES_ROOT, + "DiskImage\\shell\\open\\ddeexec", + REG_SZ,"%1",3); + RegSetValue(HKEY_CLASSES_ROOT, + "DiskImage\\shell\\open\\ddeexec\\application", + REG_SZ,"applewin",9); + RegSetValue(HKEY_CLASSES_ROOT, + "DiskImage\\shell\\open\\ddeexec\\topic", + REG_SZ,"system",7); +} + +//=========================================================================== + +LPSTR GetNextArg(LPSTR lpCmdLine) +{ + int bInQuotes = 0; + + while(*lpCmdLine) + { + if(*lpCmdLine == '\"') + { + bInQuotes ^= 1; + if(!bInQuotes) + { + *lpCmdLine++ = 0x00; // Assume end-quote is end of this arg + continue; + } + } + + if((*lpCmdLine == ' ') && !bInQuotes) + { + *lpCmdLine++ = 0x00; + break; + } + + lpCmdLine++; + } + + return lpCmdLine; +} + +//--------------------------------------------------------------------------- + +int DoDiskInsert(int nDrive, LPSTR szFileName) +{ + DWORD dwAttributes = GetFileAttributes(szFileName); + if(dwAttributes == INVALID_FILE_ATTRIBUTES) + { + return -1; + } + + BOOL bWriteProtected = (dwAttributes & FILE_ATTRIBUTE_READONLY) ? TRUE : FALSE; + + return DiskInsert(nDrive, szFileName, bWriteProtected, 0); +} + +//--------------------------------------------------------------------------- + +int APIENTRY WinMain (HINSTANCE passinstance, HINSTANCE, LPSTR lpCmdLine, int) +{ + bool bSetFullScreen = false; + bool bBoot = false; + LPSTR szImageName_drive1 = NULL; + LPSTR szImageName_drive2 = NULL; + + while(*lpCmdLine) + { + LPSTR lpNextArg = GetNextArg(lpCmdLine); + + if(strcmp(lpCmdLine, "-d1") == 0) + { + lpCmdLine = lpNextArg; + lpNextArg = GetNextArg(lpCmdLine); + szImageName_drive1 = lpCmdLine; + if(*szImageName_drive1 == '\"') + szImageName_drive1++; + } + else if(strcmp(lpCmdLine, "-d2") == 0) + { + lpCmdLine = lpNextArg; + lpNextArg = GetNextArg(lpCmdLine); + szImageName_drive2 = lpCmdLine; + if(*szImageName_drive2 == '\"') + szImageName_drive2++; + } + else if(strcmp(lpCmdLine, "-f") == 0) + { + bSetFullScreen = true; + } + else if((strcmp(lpCmdLine, "-l") == 0) && (g_fh == NULL)) + { + g_fh = fopen("AppleWin.log", "a+t"); // Open log file (append & text mode) + CHAR aDateStr[80], aTimeStr[80]; + GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, (LPTSTR)aDateStr, sizeof(aDateStr)); + GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, (LPTSTR)aTimeStr, sizeof(aTimeStr)); + fprintf(g_fh,"*** Logging started: %s %s\n",aDateStr,aTimeStr); + } + else if(strcmp(lpCmdLine, "-m") == 0) + { + g_bDisableDirectSound = true; + } +#ifdef RAMWORKS + else if(strcmp(lpCmdLine, "-r") == 0) // RamWorks size [1..127] + { + lpCmdLine = lpNextArg; + lpNextArg = GetNextArg(lpCmdLine); + g_uMaxExPages = atoi(lpCmdLine); + if (g_uMaxExPages > 127) + g_uMaxExPages = 128; + else if (g_uMaxExPages < 1) + g_uMaxExPages = 1; + } +#endif + + lpCmdLine = lpNextArg; + } + +#if 0 +#ifdef RIFF_SPKR + RiffInitWriteFile("Spkr.wav", SPKR_SAMPLE_RATE, 1); +#endif +#ifdef RIFF_MB + RiffInitWriteFile("Mockingboard.wav", 44100, 2); +#endif +#endif + + //----- + + char szPath[_MAX_PATH]; + + if(0 == GetModuleFileName(NULL, szPath, sizeof(szPath))) + { + strcpy(szPath, __argv[0]); + } + + // Extract application version and store in a global variable + DWORD dwHandle, dwVerInfoSize; + + dwVerInfoSize = GetFileVersionInfoSize(szPath, &dwHandle); + + if(dwVerInfoSize > 0) + { + char* pVerInfoBlock = new char[dwVerInfoSize]; + + if(GetFileVersionInfo(szPath, NULL, dwVerInfoSize, pVerInfoBlock)) + { + VS_FIXEDFILEINFO* pFixedFileInfo; + UINT pFixedFileInfoLen; + + VerQueryValue(pVerInfoBlock, TEXT("\\"), (LPVOID*) &pFixedFileInfo, (PUINT) &pFixedFileInfoLen); + + // Construct version string from fixed file info block + + unsigned long major = pFixedFileInfo->dwFileVersionMS >> 16; + unsigned long minor = pFixedFileInfo->dwFileVersionMS & 0xffff; + unsigned long fix = pFixedFileInfo->dwFileVersionLS >> 16; + unsigned long fix_minor = pFixedFileInfo->dwFileVersionLS & 0xffff; + + sprintf(VERSIONSTRING, "%d.%d.%d.%d", major, minor, fix, fix_minor); + } + } + +#if DBG_CALC_FREQ + QueryPerformanceFrequency((LARGE_INTEGER*)&g_nPerfFreq); + if(g_fh) fprintf(g_fh, "Performance frequency = %d\n",g_nPerfFreq); +#endif + + //----- + + // Initialize COM + CoInitialize( NULL ); + SysClk_InitTimer(); +// DSInit(); // Done when framewindow is created (WM_CREATE) + + // DO ONE-TIME INITIALIZATION + instance = passinstance; + GdiSetBatchLimit(512); + GetProgramDirectory(); + RegisterExtensions(); + FrameRegisterClass(); + ImageInitialize(); + DiskInitialize(); + CreateColorMixMap(); // For tv emulation mode + + // + + int nError = 0; + if(szImageName_drive1) + { + nError = DoDiskInsert(0, szImageName_drive1); + bBoot = true; + } + if(szImageName_drive2) + { + nError |= DoDiskInsert(1, szImageName_drive2); + } + + // + + do + { + // DO INITIALIZATION THAT MUST BE REPEATED FOR A RESTART + restart = 0; + mode = MODE_LOGO; + LoadConfiguration(); + DebugInitialize(); + JoyInitialize(); + MemInitialize(); + VideoInitialize(); + FrameCreateWindow(); + Snapshot_Startup(); // Do this after everything has been init'ed + + if(bSetFullScreen) + { + PostMessage(framewindow, WM_KEYDOWN, VK_F1+BTN_FULLSCR, 0); + PostMessage(framewindow, WM_KEYUP, VK_F1+BTN_FULLSCR, 0); + bSetFullScreen = false; + } + + if(bBoot) + { + PostMessage(framewindow, WM_KEYDOWN, VK_F1+BTN_RUN, 0); + PostMessage(framewindow, WM_KEYUP, VK_F1+BTN_RUN, 0); + bBoot = false; + } + + // ENTER THE MAIN MESSAGE LOOP + EnterMessageLoop(); + MB_Reset(); + } + while (restart); + + // Release COM + DSUninit(); + SysClk_UninitTimer(); + CoUninitialize(); + + if(g_fh) + { + fprintf(g_fh,"*** Logging ended\n\n"); + fclose(g_fh); + } + + RiffFinishWriteFile(); + + return 0; +} diff --git a/AppleWin/source/Applewin.h b/AppleWin/source/Applewin.h new file mode 100644 index 00000000..b1d7a692 --- /dev/null +++ b/AppleWin/source/Applewin.h @@ -0,0 +1,25 @@ +#pragma once + +extern char VERSIONSTRING[]; // Contructed in WinMain() + +extern BOOL apple2e; +extern BOOL behind; +extern DWORD cumulativecycles; +extern DWORD cyclenum; +extern DWORD emulmsec; +extern bool g_bFullSpeed; +extern HINSTANCE instance; +extern int mode; +extern DWORD needsprecision; +extern TCHAR progdir[MAX_PATH]; +extern BOOL resettiming; +extern BOOL restart; + +extern DWORD g_dwSpeed; +extern double g_fCurrentCLK6502; + +extern int g_nCpuCyclesFeedback; +extern FILE* g_fh; // Filehandle for log file +extern bool g_bDisableDirectSound; // Cmd line switch: don't init DS (so no MB support) + +void SetCurrentCLK6502(); diff --git a/AppleWin/source/CPU.cpp b/AppleWin/source/CPU.cpp new file mode 100644 index 00000000..c9af99a6 --- /dev/null +++ b/AppleWin/source/CPU.cpp @@ -0,0 +1,1023 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: 6502/65C02 emulation + * + * Author: Various + */ + +// TO DO: +// . All these CPP macros need to be converted to inline funcs +// + +// Note about bWrtMem: +// ------------------- +// . This is used to determine if a cycle needs to be added for a page-crossing. +// +// Modes that are affected: +// . ABS,X; ABS,Y; (IND),Y +// +// The following opcodes (when indexed) add a cycle if page is crossed: +// . ADC, AND, Bxx, CMP, EOR, LDA, LDX, LDY, ORA, SBC +// . NB. Those opcode that DO NOT write to memory. +// . 65C02: JMP (ABS-INDIRECT)? : Bug fixed for 65C02 +// . 65C02: JMP (ABS-INDIRECT,X)? +// +// The following opcodes (when indexed) DO NOT add a cycle if page is crossed: +// . ASL, DEC, INC, LSR, ROL, ROR, STA, STX, STY +// . NB. Those opcode that DO write to memory. +// +// What about these: +// . 65C02: STZ?, TRB?, TSB? +// +// NB. 'Zero-page indexed' opcodes wrap back to zero-page. +// +// NB2. bWrtMem can't be used for r/w detection, as these opcodes don’t init this flag: +// . $2C BIT ABS (because there is no BIT ABS,X or BIT ABS,Y) +// . $EC CPX ABS +// . $CC CPY ABS + + +// 65C02 info: +// + Read-modify-write instructions abs indexed in same page take 6 cycles (cf. 7 cycles for 6502) +// - ASL, DEC, INC, LSR, ROL, ROR +// + +#include "StdAfx.h" +#pragma hdrstop + +#define AF_SIGN 0x80 +#define AF_OVERFLOW 0x40 +#define AF_RESERVED 0x20 +#define AF_BREAK 0x10 +#define AF_DECIMAL 0x08 +#define AF_INTERRUPT 0x04 +#define AF_ZERO 0x02 +#define AF_CARRY 0x01 + +#define SHORTOPCODES 22 +#define BENCHOPCODES 33 + +typedef DWORD (__stdcall *cpuexecutetype)(DWORD); +typedef void (__stdcall *cpugetcodetype)(WORD,LPBYTE *,DWORD *); +typedef void (__stdcall *cpuinittype )(LPBYTE,LPBYTE *,LPBYTE *,DWORD,DWORD, + LPVOID,iofunction *,iofunction *,LPBYTE, + cxfunction, cxfunction); +typedef DWORD (__stdcall *cpuversiontype)(void); + +static BYTE benchopcode[BENCHOPCODES] = {0x06,0x16,0x24,0x45,0x48,0x65,0x68,0x76, + 0x84,0x85,0x86,0x91,0x94,0xA4,0xA5,0xA6, + 0xB1,0xB4,0xC0,0xC4,0xC5,0xE6, + 0x19,0x6D,0x8D,0x99,0x9D,0xAD,0xB9,0xBD, + 0xDD,0xED,0xEE}; + +DWORD cpuemtype = CPU_COMPILING; +static cpuexecutetype cpuexecutefunc[3] = {NULL,NULL,NULL}; +static cpugetcodetype cpugetcodefunc[3] = {NULL,NULL,NULL}; +static cpuinittype cpuinitfunc[3] = {NULL,NULL,NULL}; +static cpuversiontype cpuversionfunc[3] = {NULL,NULL,NULL}; +static HINSTANCE cpulibrary[3] = {(HINSTANCE)0,(HINSTANCE)0,(HINSTANCE)0}; + +regsrec regs; +unsigned __int64 g_nCumulativeCycles = 0; + +static ULONG g_nCyclesSubmitted; // Number of cycles submitted to CpuExecute() +static ULONG g_nCyclesExecuted; + +/**************************************************************************** +* +* GENERAL PURPOSE MACROS +* +***/ + +#define AF_TO_EF flagc = (regs.ps & AF_CARRY); \ + flagn = (regs.ps & AF_SIGN); \ + flagv = (regs.ps & AF_OVERFLOW); \ + flagz = (regs.ps & AF_ZERO); +#define EF_TO_AF regs.ps = (regs.ps & ~(AF_CARRY | AF_SIGN | \ + AF_OVERFLOW | AF_ZERO)) \ + | (flagc ? AF_CARRY : 0) \ + | (flagn ? AF_SIGN : 0) \ + | (flagv ? AF_OVERFLOW : 0) \ + | (flagz ? AF_ZERO : 0); +#define CMOS if (!apple2e) { \ + ++cycles; \ + break; \ + } +// CYC(a): This can be optimised, as only certain opcodes will affect uExtraCycles +#define CYC(a) cycles += a+uExtraCycles; MB_UpdateCycles(a+uExtraCycles); +#define POP (*(mem+((regs.sp >= 0x1FF) ? (regs.sp = 0x100) : ++regs.sp))) +#define PUSH(a) *(mem+regs.sp--) = (a); \ + if (regs.sp < 0x100) \ + regs.sp = 0x1FF; +#define READ ( \ + ((addr & 0xFF00) == 0xC000) \ + ? ioread[addr & 0xFF](regs.pc,(BYTE)addr,0,0,nCyclesLeft) \ + : ( \ + (((addr & 0xFF00) == 0xC400) || ((addr & 0xFF00) == 0xC500)) \ + ? CxReadFunc(regs.pc, addr, 0, 0, nCyclesLeft) \ + : *(mem+addr) \ + ) \ + ) +#define SETNZ(a) { \ + flagn = ((a) & 0x80); \ + flagz = !(a & 0xFF); \ + } +#define SETZ(a) flagz = !(a & 0xFF); +#define TOBCD(a) (((((a)/10) % 10) << 4) | ((a) % 10)) +#define TOBIN(a) (((a) >> 4)*10 + ((a) & 0x0F)) +#define WRITE(a) { \ + memdirty[addr >> 8] = 0xFF; \ + LPBYTE page = memwrite[0][addr >> 8]; \ + if (page) \ + *(page+(addr & 0xFF)) = (BYTE)(a); \ + else if ((addr & 0xFF00) == 0xC000) \ + iowrite[addr & 0xFF](regs.pc,(BYTE)addr,1,(BYTE)(a),nCyclesLeft); \ + else if(((addr & 0xFF00) == 0xC400) || ((addr & 0xFF00) == 0xC500)) \ + CxWriteFunc(regs.pc, addr, 1, (BYTE)(a), nCyclesLeft); \ + } + +// + +#define CLKS_BRANCH 2 + +// ExtraCycles: +// +1 if branch taken +// +1 if page boundary crossed +#define BRANCH_TAKEN { \ + base = regs.pc; \ + regs.pc += addr; \ + if ((base ^ regs.pc) & 0xFF00) \ + uExtraCycles=2; \ + else \ + uExtraCycles=1; \ + } + +// + +#define CHECK_PAGE_CHANGE if (!bWrtMem) { \ + if ((base ^ addr) & 0xFF00) \ + uExtraCycles=1; \ + } + +/**************************************************************************** +* +* ADDRESSING MODE MACROS +* +***/ + +#define ABS addr = *(LPWORD)(mem+regs.pc); regs.pc += 2; +#define ABSIINDX addr = *(LPWORD)(mem+(*(LPWORD)(mem+regs.pc))+(WORD)regs.x); regs.pc += 2; +#define ABSX base = (*(LPWORD)(mem+regs.pc)); addr = base+(WORD)regs.x; regs.pc += 2; CHECK_PAGE_CHANGE; +#define ABSY base = (*(LPWORD)(mem+regs.pc)); addr = base+(WORD)regs.y; regs.pc += 2; CHECK_PAGE_CHANGE; +#define IABS addr = *(LPWORD)(mem+*(LPWORD)(mem+regs.pc)); regs.pc += 2; +#define IMM addr = regs.pc++; +#define INDX addr = *(LPWORD)(mem+(((*(mem+regs.pc++))+regs.x) & 0xFF)); +#define INDY base = (*(LPWORD)(mem+*(mem+regs.pc++))); addr = base+(WORD)regs.y; CHECK_PAGE_CHANGE; +#define IZPG addr = *(LPWORD)(mem+*(mem+regs.pc++)); +#define REL addr = (signed char)*(mem+regs.pc++); +#define ZPG addr = *(mem+regs.pc++); +#define ZPGX addr = ((*(mem+regs.pc++))+regs.x) & 0xFF; +#define ZPGY addr = ((*(mem+regs.pc++))+regs.y) & 0xFF; + +/**************************************************************************** +* +* INSTRUCTION MACROS +* +***/ + +#define ADC bWrtMem = 0; \ + temp = READ; \ + if (regs.ps & AF_DECIMAL) { \ + val = TOBIN(regs.a)+TOBIN(temp)+(flagc != 0); \ + flagc = (val > 99); \ + regs.a = TOBCD(val); \ + if (apple2e) \ + SETNZ(regs.a); \ + } \ + else { \ + val = regs.a+temp+(flagc != 0); \ + flagc = (val > 0xFF); \ + flagv = (((regs.a & 0x80) == (temp & 0x80)) && \ + ((regs.a & 0x80) != (val & 0x80))); \ + regs.a = val & 0xFF; \ + SETNZ(regs.a); \ + } +#define AND bWrtMem = 0; \ + regs.a &= READ; \ + SETNZ(regs.a) +#define ASL bWrtMem = 1; \ + val = READ << 1; \ + flagc = (val > 0xFF); \ + SETNZ(val) \ + WRITE(val) +#define ASLA val = regs.a << 1; \ + flagc = (val > 0xFF); \ + SETNZ(val) \ + regs.a = (BYTE)val; +#define BCC if (!flagc) BRANCH_TAKEN; +#define BCS if ( flagc) BRANCH_TAKEN; +#define BEQ if ( flagz) BRANCH_TAKEN; +#define BIT val = READ; \ + flagz = !(regs.a & val); \ + flagn = val & 0x80; \ + flagv = val & 0x40; +#define BITI flagz = !(regs.a & READ); +#define BMI if ( flagn) BRANCH_TAKEN; +#define BNE if (!flagz) BRANCH_TAKEN; +#define BPL if (!flagn) BRANCH_TAKEN; +#define BRA BRANCH_TAKEN; +#define BRK regs.pc++; \ + PUSH(regs.pc >> 8) \ + PUSH(regs.pc & 0xFF) \ + EF_TO_AF \ + regs.ps |= AF_BREAK; \ + PUSH(regs.ps) \ + regs.ps |= AF_INTERRUPT; \ + regs.pc = *(LPWORD)(mem+0xFFFE); +#define BVC if (!flagv) BRANCH_TAKEN; +#define BVS if ( flagv) BRANCH_TAKEN; +#define CLC flagc = 0; +#define CLD regs.ps &= ~AF_DECIMAL; +#define CLI regs.ps &= ~AF_INTERRUPT; +#define CLV flagv = 0; +#define CMP bWrtMem = 0; \ + val = READ; \ + flagc = (regs.a >= val); \ + val = regs.a-val; \ + SETNZ(val) +#define CPX val = READ; \ + flagc = (regs.x >= val); \ + val = regs.x-val; \ + SETNZ(val) +#define CPY val = READ; \ + flagc = (regs.y >= val); \ + val = regs.y-val; \ + SETNZ(val) +#define DEA --regs.a; \ + SETNZ(regs.a) +#define DEC bWrtMem = 1; \ + val = READ-1; \ + SETNZ(val) \ + WRITE(val) +#define DEX --regs.x; \ + SETNZ(regs.x) +#define DEY --regs.y; \ + SETNZ(regs.y) +#define EOR bWrtMem = 0; \ + regs.a ^= READ; \ + SETNZ(regs.a) +#define INA ++regs.a; \ + SETNZ(regs.a) +#define INC bWrtMem = 1; \ + val = READ+1; \ + SETNZ(val) \ + WRITE(val) +#define INX ++regs.x; \ + SETNZ(regs.x) +#define INY ++regs.y; \ + SETNZ(regs.y) +#define JMP regs.pc = addr; +#define JSR --regs.pc; \ + PUSH(regs.pc >> 8) \ + PUSH(regs.pc & 0xFF) \ + regs.pc = addr; +#define LDA bWrtMem = 0; \ + regs.a = READ; \ + SETNZ(regs.a) +#define LDX bWrtMem = 0; \ + regs.x = READ; \ + SETNZ(regs.x) +#define LDY bWrtMem = 0; \ + regs.y = READ; \ + SETNZ(regs.y) +#define LSR bWrtMem = 1; \ + val = READ; \ + flagc = (val & 1); \ + flagn = 0; \ + val >>= 1; \ + SETZ(val) \ + WRITE(val) +#define LSRA flagc = (regs.a & 1); \ + flagn = 0; \ + regs.a >>= 1; \ + SETZ(regs.a) +#define NOP +#define ORA bWrtMem = 0; \ + regs.a |= READ; \ + SETNZ(regs.a) +#define PHA PUSH(regs.a) +#define PHP EF_TO_AF \ + regs.ps |= AF_RESERVED; \ + PUSH(regs.ps) +#define PHX PUSH(regs.x) +#define PHY PUSH(regs.y) +#define PLA regs.a = POP; \ + SETNZ(regs.a) +#define PLP regs.ps = POP; \ + AF_TO_EF +#define PLX regs.x = POP; \ + SETNZ(regs.x) +#define PLY regs.y = POP; \ + SETNZ(regs.y) +#define ROL bWrtMem = 1; \ + val = (READ << 1) | (flagc != 0); \ + flagc = (val > 0xFF); \ + SETNZ(val) \ + WRITE(val) +#define ROLA val = (((WORD)regs.a) << 1) | (flagc != 0); \ + flagc = (val > 0xFF); \ + regs.a = val & 0xFF; \ + SETNZ(regs.a); +#define ROR bWrtMem = 1; \ + temp = READ; \ + val = (temp >> 1) | (flagc ? 0x80 : 0); \ + flagc = temp & 1; \ + SETNZ(val) \ + WRITE(val) +#define RORA val = (((WORD)regs.a) >> 1) | (flagc ? 0x80 : 0); \ + flagc = regs.a & 1; \ + regs.a = val & 0xFF; \ + SETNZ(regs.a) +#define RTI regs.ps = POP; \ + AF_TO_EF \ + regs.pc = POP; \ + regs.pc |= (((WORD)POP) << 8); +#define RTS regs.pc = POP; \ + regs.pc |= (((WORD)POP) << 8); \ + ++regs.pc; +#define SBC bWrtMem = 0; \ + temp = READ; \ + if (regs.ps & AF_DECIMAL) { \ + val = TOBIN(regs.a)-TOBIN(temp)-!flagc; \ + flagc = (val < 0x8000); \ + if (!flagc) val += 100; /* adjust val if carry so TOBCD macro works as intended */ \ + regs.a = TOBCD(val); \ + if (apple2e) \ + SETNZ(regs.a); \ + } \ + else { \ + val = regs.a-temp-!flagc; \ + flagc = (val < 0x8000); \ + flagv = (((regs.a & 0x80) != (temp & 0x80)) && \ + ((regs.a & 0x80) != (val & 0x80))); \ + regs.a = val & 0xFF; \ + SETNZ(regs.a); \ + } +#define SEC flagc = 1; +#define SED regs.ps |= AF_DECIMAL; +#define SEI regs.ps |= AF_INTERRUPT; +#define STA bWrtMem = 1; \ + WRITE(regs.a) +#define STX bWrtMem = 1; \ + WRITE(regs.x) +#define STY bWrtMem = 1; \ + WRITE(regs.y) +#define STZ bWrtMem = 1; \ + WRITE(0) +#define TAX regs.x = regs.a; \ + SETNZ(regs.x) +#define TAY regs.y = regs.a; \ + SETNZ(regs.y) +#define TRB bWrtMem = 1; \ + val = READ; \ + flagz = !(regs.a & val); \ + val &= ~regs.a; \ + WRITE(val) +#define TSB bWrtMem = 1; \ + val = READ; \ + flagz = !(regs.a & val); \ + val |= regs.a; \ + WRITE(val) +#define TSX regs.x = regs.sp & 0xFF; \ + SETNZ(regs.x) +#define TXA regs.a = regs.x; \ + SETNZ(regs.a) +#define TXS regs.sp = 0x100 | regs.x; +#define TYA regs.a = regs.y; \ + SETNZ(regs.a) +#define INVALID1 +#define INVALID2 if (apple2e) ++regs.pc; +#define INVALID3 if (apple2e) regs.pc += 2; + +/**************************************************************************** +* +* OPCODE TABLE +* +***/ + +unsigned __int64 g_nCycleIrqStart; +unsigned __int64 g_nCycleIrqEnd; +UINT g_nCycleIrqTime; + +UINT g_nIdx = 0; +const UINT BUFFER_SIZE = 4096; // 80 secs +UINT g_nBuffer[BUFFER_SIZE]; +UINT g_nMean = 0; +UINT g_nMin = 0xFFFFFFFF; +UINT g_nMax = 0; + +static inline void DoIrqProfiling(DWORD cycles) +{ +#ifdef _DEBUG + if(regs.ps & AF_INTERRUPT) + return; // Still in Apple's ROM + + g_nCycleIrqEnd = g_nCumulativeCycles + cycles; + g_nCycleIrqTime = (UINT) (g_nCycleIrqEnd - g_nCycleIrqStart); + + if(g_nCycleIrqTime > g_nMax) g_nMax = g_nCycleIrqTime; + if(g_nCycleIrqTime < g_nMin) g_nMin = g_nCycleIrqTime; + + if(g_nIdx == BUFFER_SIZE) + return; + + g_nBuffer[g_nIdx] = g_nCycleIrqTime; + g_nIdx++; + + if(g_nIdx == BUFFER_SIZE) + { + UINT nTotal = 0; + for(UINT i=0; i> 8) + PUSH(regs.pc & 0xFF) + EF_TO_AF + regs.ps |= AF_RESERVED; + PUSH(regs.ps) + regs.ps |= AF_INTERRUPT; + regs.pc = * (WORD*) (mem+0xFFFE); + CYC(7) + continue; + } + + switch (*(mem+regs.pc++)) + { + case 0x00: BRK CYC(7) break; + case 0x01: INDX ORA CYC(6) break; + case 0x02: INVALID2 CYC(2) break; + case 0x03: INVALID1 CYC(1) break; + case 0x04: CMOS ZPG TSB CYC(5) break; + case 0x05: ZPG ORA CYC(3) break; + case 0x06: ZPG ASL CYC(5) break; + case 0x07: INVALID1 CYC(1) break; + case 0x08: PHP CYC(3) break; + case 0x09: IMM ORA CYC(2) break; + case 0x0A: ASLA CYC(2) break; + case 0x0B: INVALID1 CYC(1) break; + case 0x0C: CMOS ABS TSB CYC(6) break; + case 0x0D: ABS ORA CYC(4) break; + case 0x0E: ABS ASL CYC(6) break; +// case 0x0F: INVALID1 CYC(1) break; + case 0x0F: INVALID3 CYC(4) break; // Fix: GI-Joe + case 0x10: REL BPL CYC(CLKS_BRANCH) break; + case 0x11: INDY ORA CYC(5) break; + case 0x12: CMOS IZPG ORA CYC(5) break; + case 0x13: INVALID1 CYC(1) break; + case 0x14: CMOS ZPG TRB CYC(5) break; + case 0x15: ZPGX ORA CYC(4) break; + case 0x16: ZPGX ASL CYC(6) break; + case 0x17: INVALID1 CYC(1) break; + case 0x18: CLC CYC(2) break; + case 0x19: ABSY ORA CYC(4) break; + case 0x1A: CMOS INA CYC(2) break; + case 0x1B: INVALID1 CYC(1) break; + case 0x1C: CMOS ABS TRB CYC(6) break; + case 0x1D: ABSX ORA CYC(4) break; + case 0x1E: ABSX ASL CYC(6) break; + case 0x1F: INVALID1 CYC(1) break; + case 0x20: ABS JSR CYC(6) break; + case 0x21: INDX AND CYC(6) break; + case 0x22: INVALID2 CYC(2) break; + case 0x23: INVALID1 CYC(1) break; + case 0x24: ZPG BIT CYC(3) break; + case 0x25: ZPG AND CYC(3) break; + case 0x26: ZPG ROL CYC(5) break; + case 0x27: INVALID1 CYC(1) break; + case 0x28: PLP CYC(4) break; + case 0x29: IMM AND CYC(2) break; + case 0x2A: ROLA CYC(2) break; + case 0x2B: INVALID1 CYC(1) break; + case 0x2C: ABS BIT CYC(4) break; + case 0x2D: ABS AND CYC(2) break; + case 0x2E: ABS ROL CYC(6) break; +// case 0x2F: INVALID1 CYC(1) break; + case 0x2F: INVALID3 CYC(4) break; // Fix: GI-Joe + case 0x30: REL BMI CYC(CLKS_BRANCH) break; + case 0x31: INDY AND CYC(5) break; + case 0x32: CMOS IZPG AND CYC(5) break; + case 0x33: INVALID1 CYC(1) break; + case 0x34: CMOS ZPGX BIT CYC(4) break; + case 0x35: ZPGX AND CYC(4) break; + case 0x36: ZPGX ROL CYC(6) break; + case 0x37: INVALID1 CYC(1) break; + case 0x38: SEC CYC(2) break; + case 0x39: ABSY AND CYC(4) break; + case 0x3A: CMOS DEA CYC(2) break; + case 0x3B: INVALID1 CYC(1) break; + case 0x3C: CMOS ABSX BIT CYC(4) break; + case 0x3D: ABSX AND CYC(4) break; + case 0x3E: ABSX ROL CYC(6) break; + case 0x3F: INVALID1 CYC(1) break; + case 0x40: RTI CYC(6) DoIrqProfiling(cycles); break; + case 0x41: INDX EOR CYC(6) break; + case 0x42: INVALID2 CYC(2) break; + case 0x43: INVALID1 CYC(1) break; + case 0x44: INVALID2 CYC(3) break; + case 0x45: ZPG EOR CYC(3) break; + case 0x46: ZPG LSR CYC(5) break; + case 0x47: INVALID1 CYC(1) break; + case 0x48: PHA CYC(3) break; + case 0x49: IMM EOR CYC(2) break; + case 0x4A: LSRA CYC(2) break; + case 0x4B: INVALID1 CYC(1) break; + case 0x4C: ABS JMP CYC(3) break; + case 0x4D: ABS EOR CYC(4) break; + case 0x4E: ABS LSR CYC(6) break; + case 0x4F: INVALID1 CYC(1) break; + case 0x50: REL BVC CYC(CLKS_BRANCH) break; + case 0x51: INDY EOR CYC(5) break; + case 0x52: CMOS IZPG EOR CYC(5) break; + case 0x53: INVALID1 CYC(1) break; + case 0x54: INVALID2 CYC(4) break; + case 0x55: ZPGX EOR CYC(4) break; + case 0x56: ZPGX LSR CYC(6) break; + case 0x57: INVALID1 CYC(1) break; + case 0x58: CLI CYC(2) break; + case 0x59: ABSY EOR CYC(4) break; + case 0x5A: CMOS PHY CYC(3) break; + case 0x5B: INVALID1 CYC(1) break; + case 0x5C: INVALID3 CYC(8) break; + case 0x5D: ABSX EOR CYC(4) break; + case 0x5E: ABSX LSR CYC(6) break; + case 0x5F: INVALID1 CYC(1) break; + case 0x60: RTS CYC(6) break; + case 0x61: INDX ADC CYC(6) break; + case 0x62: INVALID2 CYC(2) break; + case 0x63: INVALID1 CYC(1) break; + case 0x64: CMOS ZPG STZ CYC(3) break; + case 0x65: ZPG ADC CYC(3) break; + case 0x66: ZPG ROR CYC(5) break; + case 0x67: INVALID1 CYC(1) break; + case 0x68: PLA CYC(4) break; + case 0x69: IMM ADC CYC(2) break; + case 0x6A: RORA CYC(2) break; + case 0x6B: INVALID1 CYC(1) break; + case 0x6C: IABS JMP CYC(6) break; + case 0x6D: ABS ADC CYC(4) break; + case 0x6E: ABS ROR CYC(6) break; + case 0x6F: INVALID1 CYC(1) break; + case 0x70: REL BVS CYC(CLKS_BRANCH) break; + case 0x71: INDY ADC CYC(5) break; + case 0x72: CMOS IZPG ADC CYC(5) break; + case 0x73: INVALID1 CYC(1) break; + case 0x74: CMOS ZPGX STZ CYC(4) break; + case 0x75: ZPGX ADC CYC(4) break; + case 0x76: ZPGX ROR CYC(6) break; + case 0x77: INVALID1 CYC(1) break; + case 0x78: SEI CYC(2) break; + case 0x79: ABSY ADC CYC(4) break; + case 0x7A: CMOS PLY CYC(4) break; + case 0x7B: INVALID1 CYC(1) break; + case 0x7C: CMOS ABSIINDX JMP CYC(6) break; + case 0x7D: ABSX ADC CYC(4) break; + case 0x7E: ABSX ROR CYC(6) break; + case 0x7F: INVALID1 CYC(1) break; + case 0x80: CMOS REL BRA CYC(CLKS_BRANCH) break; + case 0x81: INDX STA CYC(6) break; + case 0x82: INVALID2 CYC(2) break; + case 0x83: INVALID1 CYC(1) break; + case 0x84: ZPG STY CYC(3) break; + case 0x85: ZPG STA CYC(3) break; + case 0x86: ZPG STX CYC(3) break; + case 0x87: INVALID1 CYC(1) break; + case 0x88: DEY CYC(2) break; + case 0x89: CMOS IMM BITI CYC(2) break; + case 0x8A: TXA CYC(2) break; + case 0x8B: INVALID1 CYC(1) break; + case 0x8C: ABS STY CYC(4) break; + case 0x8D: ABS STA CYC(4) break; + case 0x8E: ABS STX CYC(4) break; + case 0x8F: INVALID1 CYC(1) break; + case 0x90: REL BCC CYC(CLKS_BRANCH) break; + case 0x91: INDY STA CYC(6) break; + case 0x92: CMOS IZPG STA CYC(5) break; + case 0x93: INVALID1 CYC(1) break; + case 0x94: ZPGX STY CYC(4) break; + case 0x95: ZPGX STA CYC(4) break; + case 0x96: ZPGY STX CYC(4) break; + case 0x97: INVALID1 CYC(1) break; + case 0x98: TYA CYC(2) break; + case 0x99: ABSY STA CYC(5) break; + case 0x9A: TXS CYC(2) break; + case 0x9B: INVALID1 CYC(1) break; + case 0x9C: CMOS ABS STZ CYC(4) break; + case 0x9D: ABSX STA CYC(5) break; + case 0x9E: CMOS ABSX STZ CYC(5) break; + case 0x9F: INVALID1 CYC(1) break; + case 0xA0: IMM LDY CYC(2) break; + case 0xA1: INDX LDA CYC(6) break; + case 0xA2: IMM LDX CYC(2) break; + case 0xA3: INVALID1 CYC(1) break; + case 0xA4: ZPG LDY CYC(3) break; + case 0xA5: ZPG LDA CYC(3) break; + case 0xA6: ZPG LDX CYC(3) break; + case 0xA7: INVALID1 CYC(1) break; + case 0xA8: TAY CYC(2) break; + case 0xA9: IMM LDA CYC(2) break; + case 0xAA: TAX CYC(2) break; + case 0xAB: INVALID1 CYC(1) break; + case 0xAC: ABS LDY CYC(4) break; + case 0xAD: ABS LDA CYC(4) break; + case 0xAE: ABS LDX CYC(4) break; + case 0xAF: INVALID1 CYC(1) break; + case 0xB0: REL BCS CYC(CLKS_BRANCH) break; + case 0xB1: INDY LDA CYC(5) break; + case 0xB2: CMOS IZPG LDA CYC(5) break; + case 0xB3: INVALID1 CYC(1) break; + case 0xB4: ZPGX LDY CYC(4) break; + case 0xB5: ZPGX LDA CYC(4) break; + case 0xB6: ZPGY LDX CYC(4) break; + case 0xB7: INVALID1 CYC(1) break; + case 0xB8: CLV CYC(2) break; + case 0xB9: ABSY LDA CYC(4) break; + case 0xBA: TSX CYC(2) break; + case 0xBB: INVALID1 CYC(1) break; + case 0xBC: ABSX LDY CYC(4) break; + case 0xBD: ABSX LDA CYC(4) break; + case 0xBE: ABSY LDX CYC(4) break; + case 0xBF: INVALID1 CYC(1) break; + case 0xC0: IMM CPY CYC(2) break; + case 0xC1: INDX CMP CYC(6) break; + case 0xC2: INVALID2 CYC(2) break; + case 0xC3: INVALID1 CYC(1) break; + case 0xC4: ZPG CPY CYC(3) break; + case 0xC5: ZPG CMP CYC(3) break; + case 0xC6: ZPG DEC CYC(5) break; + case 0xC7: INVALID1 CYC(1) break; + case 0xC8: INY CYC(2) break; + case 0xC9: IMM CMP CYC(2) break; + case 0xCA: DEX CYC(2) break; + case 0xCB: INVALID1 CYC(1) break; + case 0xCC: ABS CPY CYC(4) break; + case 0xCD: ABS CMP CYC(4) break; + case 0xCE: ABS DEC CYC(5) break; + case 0xCF: INVALID1 CYC(1) break; + case 0xD0: REL BNE CYC(CLKS_BRANCH) break; + case 0xD1: INDY CMP CYC(5) break; + case 0xD2: CMOS IZPG CMP CYC(5) break; + case 0xD3: INVALID1 CYC(1) break; + case 0xD4: INVALID2 CYC(4) break; + case 0xD5: ZPGX CMP CYC(4) break; + case 0xD6: ZPGX DEC CYC(6) break; + case 0xD7: INVALID1 CYC(1) break; + case 0xD8: CLD CYC(2) break; + case 0xD9: ABSY CMP CYC(4) break; + case 0xDA: CMOS PHX CYC(3) break; + case 0xDB: INVALID1 CYC(1) break; + case 0xDC: INVALID3 CYC(4) break; + case 0xDD: ABSX CMP CYC(4) break; + case 0xDE: ABSX DEC CYC(6) break; + case 0xDF: INVALID1 CYC(1) break; + case 0xE0: IMM CPX CYC(2) break; + case 0xE1: INDX SBC CYC(6) break; + case 0xE2: INVALID2 CYC(2) break; + case 0xE3: INVALID1 CYC(1) break; + case 0xE4: ZPG CPX CYC(3) break; + case 0xE5: ZPG SBC CYC(3) break; + case 0xE6: ZPG INC CYC(5) break; + case 0xE7: INVALID1 CYC(1) break; + case 0xE8: INX CYC(2) break; + case 0xE9: IMM SBC CYC(2) break; + case 0xEA: NOP CYC(2) break; + case 0xEB: INVALID1 CYC(1) break; + case 0xEC: ABS CPX CYC(4) break; + case 0xED: ABS SBC CYC(4) break; + case 0xEE: ABS INC CYC(6) break; + case 0xEF: INVALID1 CYC(1) break; + case 0xF0: REL BEQ CYC(CLKS_BRANCH) break; + case 0xF1: INDY SBC CYC(5) break; + case 0xF2: CMOS IZPG SBC CYC(5) break; + case 0xF3: INVALID1 CYC(1) break; + case 0xF4: INVALID2 CYC(4) break; + case 0xF5: ZPGX SBC CYC(4) break; + case 0xF6: ZPGX INC CYC(6) break; + case 0xF7: INVALID1 CYC(1) break; + case 0xF8: SED CYC(2) break; + case 0xF9: ABSY SBC CYC(4) break; + case 0xFA: CMOS PLX CYC(4) break; + case 0xFB: INVALID1 CYC(1) break; + case 0xFC: INVALID3 CYC(4) break; + case 0xFD: ABSX SBC CYC(4) break; + case 0xFE: ABSX INC CYC(6) break; + case 0xFF: INVALID1 CYC(1) break; + } + } + while (cycles < totalcycles); + EF_TO_AF + return cycles; +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +void CpuDestroy () { + int loop = 3; + while (loop--) { + if (cpulibrary[loop]) + FreeLibrary(cpulibrary[loop]); + cpuexecutefunc[loop] = NULL; + cpugetcodefunc[loop] = NULL; + cpulibrary[loop] = (HINSTANCE)0; + } +} + +//=========================================================================== + +// Pre: +// Call this when an IO-reg is access & accurate cycle info is needed +// Post: +// g_nCyclesExecuted +// g_nCumulativeCycles +// +void CpuCalcCycles(ULONG nCyclesLeft) +{ + ULONG nCycles; + + if((nCyclesLeft & 0x80000000) == 0) + { + nCyclesLeft >>= 8; + nCycles = g_nCyclesSubmitted - (g_nCyclesExecuted + nCyclesLeft); // Always +ve + _ASSERT(!(nCycles & 0x8000000)); + } + else + { + nCyclesLeft = ~nCyclesLeft; + nCyclesLeft >>= 8; + nCycles = nCyclesLeft + 1; + nCycles = (g_nCyclesSubmitted + nCycles) - g_nCyclesExecuted; + } + + g_nCyclesExecuted += nCycles; + g_nCumulativeCycles += nCycles; + + if (cpuexecutefunc[cpuemtype]) + MB_UpdateCycles((USHORT) nCycles); // OLD: Support external dll emulator +} + +//=========================================================================== + +DWORD CpuExecute (DWORD cycles) +{ + static BOOL laststep = 0; + DWORD result = 0; + + g_nCyclesSubmitted = cycles; + g_nCyclesExecuted = 0; + + // IF WE ARE SINGLE STEPPING, USE THE INTERPRETIVE EMULATOR + if (!cycles) + { + laststep = 1; + if (cpuexecutefunc[1]) + result=cpuexecutefunc[1](0); + else + result=InternalCpuExecute(0); + } + + // OTHERWISE, USE THE CURRENT EMULATOR. + else + { + if (laststep) + { + CpuResetCompilerData(); + laststep = 0; + } + // Don't break into 0xFFFF chunks, as at 4Mhz, /cycles/ > 0xFFFF (Spkr code ASSERTs) + // DLLs accept a 23-bit number for cycles. + if (cpuexecutefunc[cpuemtype]) + result=cpuexecutefunc[cpuemtype](cycles); + else + result=InternalCpuExecute(cycles); + } + + // IF WE ARE USING THE EXTERNAL 6502 64K EMULATOR, MARK PAGES $40-$BF AS + // DIRTY, BECAUSE IT DOES NOT KEEP TRACK OF DIRTY PAGES IN THAT RANGE. + if ((!apple2e) && cpuexecutefunc[1]) + { + int page = 0xC0; + while (page-- > 0x40) + *(memdirty+page) = 0xFF; + } + + UINT nRemainingCycles = result - g_nCyclesExecuted; + g_nCumulativeCycles += nRemainingCycles; + + if (cpuexecutefunc[cpuemtype]) + MB_UpdateCycles((USHORT) nRemainingCycles); // OLD: Support external dll emulator + + return result; +} + +//=========================================================================== +void CpuGetCode (WORD address, LPBYTE *codeptr, DWORD *codelength) { + *codeptr = NULL; + *codelength = 0; + if (cpugetcodefunc[0]) + cpugetcodefunc[0](address,codeptr,codelength); +} + +//=========================================================================== + +#define MIN_DLL_VERSION 1 + +void CpuInitialize () { + CpuDestroy(); + + regs.a = 0; + regs.x = 0; + regs.y = 0; + regs.ps = 0x20; + regs.pc = *(LPWORD)(mem+0xFFFC); + regs.sp = 0x01FF; + regs.bIRQ = 0; + +#ifdef _X86_ + if (mem) { + TCHAR filename[MAX_PATH]; + _tcscpy(filename,progdir); + _tcscat(filename,TEXT("65C02C.DLL")); + cpulibrary[CPU_COMPILING] = LoadLibrary(filename); + _tcscpy(filename,progdir); + _tcscat(filename,apple2e ? TEXT("65C02.DLL") : TEXT("6502.DLL")); + cpulibrary[CPU_INTERPRETIVE] = LoadLibrary(filename); + if (!cpulibrary[CPU_INTERPRETIVE]) { + _tcscpy(filename,progdir); + _tcscat(filename,TEXT("65C02.DLL")); + cpulibrary[CPU_INTERPRETIVE] = LoadLibrary(filename); + } + _tcscpy(filename,progdir); + _tcscat(filename,TEXT("65C02P.DLL")); + cpulibrary[CPU_FASTPAGING] = LoadLibrary(filename); + if (!cpulibrary[CPU_COMPILING]) + cpulibrary[CPU_COMPILING] = cpulibrary[CPU_INTERPRETIVE]; + int loop = 3; + while (loop--) + if (cpulibrary[loop]) { + cpuversionfunc[loop] = (cpuversiontype)GetProcAddress(cpulibrary[loop], + TEXT("CpuVersion")); + if (cpuversionfunc[loop] && (cpuversionfunc[loop]()>=MIN_DLL_VERSION)) + { + cpuexecutefunc[loop] = (cpuexecutetype)GetProcAddress(cpulibrary[loop], + TEXT("CpuExecute")); + cpugetcodefunc[loop] = (cpugetcodetype)GetProcAddress(cpulibrary[loop], + TEXT("CpuGetCode")); + cpuinitfunc[loop] = (cpuinittype)GetProcAddress(cpulibrary[loop], + TEXT("CpuInitialize")); + if (cpuinitfunc[loop]) + cpuinitfunc[loop](mem,memshadow[0],memwrite[0], + image,lastimage, + ®s,ioread,iowrite,memdirty, + CxReadFunc,CxWriteFunc); + } + } + } +#endif +} + +//=========================================================================== +void CpuReinitialize () { + if (cpulibrary[cpuemtype] && cpuinitfunc[cpuemtype]) + cpuinitfunc[cpuemtype](mem,memshadow[0],memwrite[0], + image,lastimage, + ®s,ioread,iowrite,memdirty, + CxReadFunc,CxWriteFunc); +} + +//=========================================================================== +void CpuResetCompilerData () { + if (cpulibrary[CPU_COMPILING] && + (cpulibrary[CPU_COMPILING] != cpulibrary[CPU_INTERPRETIVE])) + ZeroMemory(mem+0x10000,0x20000); +} + +//=========================================================================== +void CpuSetupBenchmark () { + regs.a = 0; + regs.x = 0; + regs.y = 0; + regs.pc = 0x300; + regs.sp = 0x1FF; + + // CREATE CODE SEGMENTS CONSISTING OF GROUPS OF COMMONLY-USED OPCODES + { + int addr = 0x300; + int opcode = 0; + do { + *(mem+addr++) = benchopcode[opcode]; + *(mem+addr++) = benchopcode[opcode]; + if (opcode >= SHORTOPCODES) + *(mem+addr++) = 0; + if ((++opcode >= BENCHOPCODES) || ((addr & 0x0F) >= 0x0B)) { + *(mem+addr++) = 0x4C; + *(mem+addr++) = (opcode >= BENCHOPCODES) ? 0x00 + : ((addr >> 4)+1) << 4; + *(mem+addr++) = 0x03; + while (addr & 0x0F) + ++addr; + } + } while (opcode < BENCHOPCODES); + } +} + +//=========================================================================== +BOOL CpuSupportsFastPaging () { + return (cpulibrary[CPU_FASTPAGING] != (HINSTANCE)0); +} + +//=========================================================================== +void CpuIRQ() +{ + regs.bIRQ = 1; +} + +//=========================================================================== + +DWORD CpuGetSnapshot(SS_CPU6502* pSS) +{ + pSS->A = regs.a; + pSS->X = regs.x; + pSS->Y = regs.y; + pSS->P = regs.ps; + pSS->S = (BYTE) (regs.sp & 0xff); + pSS->PC = regs.pc; + pSS->g_nCumulativeCycles = g_nCumulativeCycles; + + return 0; +} + +DWORD CpuSetSnapshot(SS_CPU6502* pSS) +{ + regs.a = pSS->A; + regs.x = pSS->X; + regs.y = pSS->Y; + regs.ps = pSS->P; + regs.sp = (USHORT)pSS->S + 0x100; + regs.pc = pSS->PC; + regs.bIRQ = 0; + g_nCumulativeCycles = pSS->g_nCumulativeCycles; + + return 0; +} diff --git a/AppleWin/source/CPU.h b/AppleWin/source/CPU.h new file mode 100644 index 00000000..ababc027 --- /dev/null +++ b/AppleWin/source/CPU.h @@ -0,0 +1,32 @@ +#pragma once + +#define CPU_COMPILING 0 +#define CPU_INTERPRETIVE 1 +#define CPU_FASTPAGING 2 + +typedef struct _regsrec { + BYTE a; // accumulator + BYTE x; // index X + BYTE y; // index Y + BYTE ps; // processor status + WORD pc; // program counter + WORD sp; // stack pointer + BYTE bIRQ; // IRQ asserted flag +} regsrec, *regsptr; + +extern DWORD cpuemtype; +extern regsrec regs; +extern unsigned __int64 g_nCumulativeCycles; + +void CpuDestroy (); +void CpuCalcCycles(ULONG nCyclesLeft); +DWORD CpuExecute (DWORD); +void CpuGetCode (WORD,LPBYTE *,DWORD *); +void CpuInitialize (); +void CpuReinitialize (); +void CpuResetCompilerData (); +void CpuSetupBenchmark (); +BOOL CpuSupportsFastPaging (); +void CpuIRQ (); +DWORD CpuGetSnapshot(SS_CPU6502* pSS); +DWORD CpuSetSnapshot(SS_CPU6502* pSS); diff --git a/AppleWin/source/Common.h b/AppleWin/source/Common.h new file mode 100644 index 00000000..4f909770 --- /dev/null +++ b/AppleWin/source/Common.h @@ -0,0 +1,73 @@ +#pragma once + +const double _M14 = 14.31818e6; +const double CLK_6502 = (_M14 / 14.0); + +const UINT uCyclesPerLine = 65; // 25 cycles of HBL & 40 cycles of HBL' +const UINT uVisibleLinesPerFrame = 64*3; // 192 +const UINT uLinesPerFrame = 262; // 64 in each third of the screen & 70 in VBL +const DWORD dwClksPerFrame = uCyclesPerLine * uLinesPerFrame; // 17030 + +#define MAX(a,b) (((a) > (b)) ? (a) : (b)) +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) + +#define RAMWORKS // 8MB RamWorks III support + +// Use a base freq so that DirectX (or sound h/w) doesn't have to up/down-sample +// Assume base freqs are 44.1KHz & 48KHz +const DWORD SPKR_SAMPLE_RATE = 44100; + +#define MODE_LOGO 0 +#define MODE_PAUSED 1 +#define MODE_RUNNING 2 +#define MODE_DEBUG 3 +#define MODE_STEPPING 4 + +#define SPEED_MIN 0 +#define SPEED_NORMAL 10 +#define SPEED_MAX 40 + +#define DRAW_BACKGROUND 1 +#define DRAW_LEDS 2 +#define DRAW_TITLE 4 +#define DRAW_BUTTON_DRIVES 8 + +#define BTN_HELP 0 +#define BTN_RUN 1 +#define BTN_DRIVE1 2 +#define BTN_DRIVE2 3 +#define BTN_DRIVESWAP 4 +#define BTN_FULLSCR 5 +#define BTN_DEBUG 6 +#define BTN_SETUP 7 + +#define MAXIMAGES 16 +#define TITLE TEXT("Apple //e Emulator") + +#define LOAD(a,b) RegLoadValue(TEXT("Configuration"),a,1,b) +#define SAVE(a,b) RegSaveValue(TEXT("Configuration"),a,1,b) + +#define REGVALUE_SPKR_VOLUME "Speaker Volume" +#define REGVALUE_MB_VOLUME "Mockingboard Volume" +#define REGVALUE_SOUNDCARD_TYPE "Soundcard Type" +#define REGVALUE_KEYB_BUFFER_ENABLE "Keyboard Buffer Enable" +#define REGVALUE_SAVESTATE_FILENAME "Save State Filename" +#define REGVALUE_SAVE_STATE_ON_EXIT "Save State On Exit" +#define REGVALUE_HDD_ENABLED "Harddisk Enable" +#define REGVALUE_HDD_IMAGE1 "Harddisk Image 1" +#define REGVALUE_HDD_IMAGE2 "Harddisk Image 2" +#define REGVALUE_PDL_XTRIM "PDL X-Trim" +#define REGVALUE_PDL_YTRIM "PDL Y-Trim" + +#define WM_USER_BENCHMARK WM_USER+1 +#define WM_USER_RESTART WM_USER+2 +#define WM_USER_SAVESTATE WM_USER+3 +#define WM_USER_LOADSTATE WM_USER+4 + +enum eSOUNDCARDTYPE {SC_UNINIT=0, SC_NONE, SC_MOCKINGBOARD, SC_PHASOR}; // Apple soundcard type + +typedef BYTE (__stdcall *iofunction)(WORD nPC, BYTE nAddr, BYTE nWriteFlag, BYTE nWriteValue, ULONG nCyclesLeft); +typedef BYTE (__stdcall *cxfunction)(WORD nPC, WORD nAddr, BYTE nWriteFlag, BYTE nWriteValue, ULONG nCyclesLeft); + +typedef struct _IMAGE__ { int unused; } *HIMAGE; + diff --git a/AppleWin/source/Debug.cpp b/AppleWin/source/Debug.cpp new file mode 100644 index 00000000..b890b3b0 --- /dev/null +++ b/AppleWin/source/Debug.cpp @@ -0,0 +1,11637 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Debugger + * + * Author: Copyright (C) 2006, Michael Pohoreski + */ + +// disable warning C4786: symbol greater than 255 character: +#pragma warning(disable: 4786) + +#include "StdAfx.h" +#pragma hdrstop + +// NEW UI debugging +// #define DEBUG_FORCE_DISPLAY 1 +// #define DEBUG_COMMAND_HELP 1 +// #define DEBUG_ASM_HASH 1 + +// enable warning C4786: symbol greater than 255 character: +//#pragma warning(enable: 4786) + + // TCHAR DEBUG_VERSION = "0.0.0.0"; // App Version + #define DEBUGGER_VERSION MAKE_VERSION(2,4,2,16); + +// TODO: COLOR RESET +// TODO: COLOR SAVE ["filename"] +// TODO: COLOR LOAD ["filename"] + +// Patch 22 +// .16 fixed BPM. i.e. BPM C400,100. Boot: ulti4bo.dsk, breaks at: 81BC: STA ($88),Y $0088=$C480 ... C483: A0 + +// Patch 21 +// .15 Fixed: CmdRegisterSet() equal sign is now optional. i.e. R A [=] Y +// .14 Optimized: ArgsParse() +// .13 Fixed: HELP "..." on ambigious command displays potential commands +// .12 Added: Token %, calculator mod +// .11 Added: Token /, calculator div +// .10 Added: Token ^, calculator bit-xor +// .9 Added: Token |, calculator bit-or +// .8 Added: Token &, calculator bit-and +// .7 Added: Mini-Assembler +// .6 Added: MOTD (Message of the Day) : Moved from DebugBegin() +// .5 Added: HELP SOURCE +// .4 Fixed: SYMMAIN SYMUSER SYMSRC to now only search their respective symbol tables +// .3 Added: _CmdSymbolList_Address2Symbol() _CmdSymbolList_Symbol2Address() now take bit-flags of which tables to search +// .2 Added: EB alias for E +// .1 Added: EW address value16 CmdMemoryEnterWord() to set memory with 16-Bit Values +// 2.4.2.0 +// .14 Added: SYM ! name to remove (user) symbol. _CmdSymbolsUpdate() +// .13 Added: JSR address|symbol CmdJSR() +// .12 Fixed: SYM address|symbol now reports if address or symbol not found. CmdSymbolsList() +// .11 Fixed PageUp*, PagDn* not being recognized valid commands. + +// Patch 20 +// .10 Added: SYM2 symbolname = value +// .9 Added: Undocumented command: FONT * +// .8 Improved: FONT MODE # is now more accurate. i.e. U 301 +// FONT MODE 0 Classic line spacing (19 lines: 301 .. 313) +// FONT MODE 1 Improved line spacing (20 lines: 301 .. 314) +// FONT MODE 2 Optimal line spacing (22 lines: 301 .. 316) +// .7 Fixed: ArgsParse() wasn't parsing #value properly. i.e. CALC #A+0A +// .6 Cleanup: DrawWatches() + +// Patch 19 +// .5 Fixed: ProfileSave() doesn't strip '%' percent signs anymore. Changed: fprintf() to fputs() +// Fixed: PROFILE RESET doesn't do dummy run of formatting profile data. +// .4 Fixed: Exporting Profile data is now Excel/OpenOffice friendly. +// Zero counts not listed on console. (They are when saved to file.) + +// Patch 18 +// .3 Fixed: Help_Arg_1() now copies command name into arg.name +// .2 Fixed: Temporarily removed extra windows that aren't done yet from showing up: WINDOW_IO WINDOW_SYMBOLS WINDOW_ZEROPAGE WINDOW_SOURCE +// .1 Added: PROFILE LIST -- can now view the profile data from witin the debugger! +// 2.4.1 Added: PROFILE SAVE -- now we can optimize (D0 BNE), and (10 BPL) sucking up the major of the emulator's time. WOOT! +// Added: _6502GetOpmodeOpbyte() and _6502GetOpcodeOpmode() +// .37 Fixed: Misc. commands not updating the console when processed + +// Patch 17 +// .36 Data window now shows text dump based on memory view set (ASCII or APPLE) +// MA1 D0D0; DATA; +// MT1 D0D0; DATA; +// D D0D0; DATA; +// .35 Renamed: ML1 ML2 to MT1 MT2 (Mem Text) +// .34 Removed: MH1 MH2 (redundant MEM_VIEW_APPLE_TEXT) +// .33 Fixed: Tweaking of Lo,Hi,Norm Ascii colors for Disasm Immediate & Memory Dumps +// ML1 D0D0; MH2 D0D0; U FA75 +// .32 Changed: Lo now maps High Ascii to printable chars. i.e. ML1 D0D0 +// .31 Ctrl-Tab, and Ctrl-Shift-Tab now cycle next/prev windows. +// .30 Added: Up,Down,PageUp,PageDown,Shift-PageUp,Shift-PageDown,Ctrl-PageUp,Ctrl-PageDown now scroll Data window +// .29 Added: DATA window now shows memory dump + +// Patch 16 +// .28 Fixed: MONO wasn't setting monochrome scheme +// .27 Changed: Registers now drawn in light blue for both DrawSubWindow_Info() [DrawRegisters()] and DrawBreakpoints() +// Reg names in DrawSubWindow_Info no longer hard-coded: using g_areakpointSource[] +// .26 Changed: DrawTargets() now shows Temp Address, and Final Address as orange (FG_INFO_ADDRESS) +// .25 Changed: Flag Clear "FC" to "CL" (like 6502 mnemonic) +// Changed: Flag Set "FS" to "SE" (like 6502 mnemonic) +// Added: Mirrored 6502 Mnemonics to clear/set flags as commands +// Moved: Legacy Flag Clear/Set commands "R?" "S?" to aliases +// .24 Fixed OPCODE 2F: AM_INVALID1 -> AM_INVALID3 +// .23 Fixed OPCODE 0F: AM_INVALID1 -> AM_INVALID3 +// .22 Fixed: Shift-PageUp Shift-PageDown Ctrl-PageUp Ctrl-PageDown -> _CursorMoveUpAligned() & _CursorMoveDownAligned() +// Bug: U F001, Ctrl-PageDown +// Was using current disasm cursor address instead of top disasm cursor +// .21 Fixed: _CursorMoveUpAligned() & _CursorMoveDownAligned() not wrapping around past FF00 to 0, and wrapping around past 0 to FF00 +// .20 Fixed: DisasmCalcTopFromCurAddress() causing bogus g_bDisasmCurBad when disasm invalid opcodes. +// .19 g_aAddressingFormat[] -> g_aOpmodes[] +// .18 Reverted .17 Changed StackPointer Input/Output. 'SP' is now back to 'S' (to be consistent with 6502 mnemonics) + +// Patch 15 +// .17 Changed StackPointer Input/Output from 'S' to 'SP' +// .16 Fixed Go StopAddress [SkipAddress,Length] Trace() not working afterwards +// .15 Added Info Regs color - Foreground and Background (orange) + +// Patch 14 +// .14 Added: Stack register now shows stack depth +// .13 Bugfix: CmdBreakpointAddPC() operators now don't add extra breakpoints. i.e. BPX P < FA00 +// .12 Bugfix: DrawMemory() should draw memory byte for IO address: ML1 C000 + +// Patch 13 +// NightlyBuild +// .11 Disasm now looks up symbols +1,-1. i.e. U FA85, u FAAE +// .10 Fixed '~' full console height +// .9 Fixed: FindCommand() to update command found if not exact match +// .8 Moved: Flag names from g_aFlagNames[] to "inlined" g_aBreakpointSource[] +// .7 Extended: Calc to show binary values, and char is single-quoted +// Nightly Build +// .6 Bugfix: DrawTargets() should draw target byte for IO address: R PC FB33 +// .5 Extended: FONT "FontName" [Height] +// .4 Extended: Go StopAddress [SkipAddress,Len] +// .3 Added BPR F // break on flag +// Added ! // new breakpoint operator: NOT_EQUAL + +// Patch 12 +// .2 Fixed: FindCommand() and FindParam() now returns 0 if name length is 0. +// .1 Fixed: CmdHelpSpecific() wasn't printing help for 1 argument set by other commands +// 2.4.0.0 added: uber breakpoints: BPR [A|X|Y|PC|SP] [<,<=,=,>,>=] address +// .2 fixed: parsing console input to detect immediate values on operators '+', '-' +// You can now do register arithmetic: CALC A+X+Y +// .1 added: mini-calculator 'CALC' +// 2.3.2 Rewrote parsing of console input +// You can now do stuff like: +// BPA INITAN+3 +// FONT "Lucida Console" + +// Patch 11 +// .19 fixed disasm: new color for disasm target address (orange) + // U FF14 shouldn't colorize ',X' + // U FF16 shouldn't colorize ',Y' + // U FF21 shouldn't colorze 'symbol,Y' +// Addr should be purple or orange to verify is fixed +// .18 fixed disasm: all indirects to do symbol lookup, and colorized '('...')' as operators +// .17 added disasm: syntax coloring to immediate mode prefix '#$' +// .16 fixed disasm window to work with proportional fonts +// .15 fixed buffer-overun crash in TextConvertTabsToSpaces() + +// Patch 10 +// .14 fixed help CATEGORY & SPECIFIC not working properly +// .13 fixed bug of CODE not removing CODE window split +// .12 fixed split window bug of re-sizing console too large +// .11 removed hard-coded height of 16 for line height in various Draw*() +// .10 added alpha feature: SOURCE2 now shows source assembly listing in bottom half of window DrawSourceLine() +// .9 added P [#] to step number of times specified +// .8 added Up-Arrow, Down-Arrow to scroll console by one line in full screen console window +// .7 Added source level debugger to buffer complete assembly source listing file +// .6 Added help for MA#, ML#, MH# +// .5 added 3rd symbol table: SRC +// .4 Added: seperated console input color, console output color +// .3 SYM now prints which symbol table the symbol was found in. +// .2 Added "DFB" to add assembler variable to user symbol table +// .1 Fixed FindAddressFromSymbol() and FindSymbolFromAddress() to search user symbol table first +// 2.3.1 Renamed all globals to conform to coding standard + +// .10 added TAB to move the cursor back to the PC, if there is no console input +// .9 fixed bug of setting reg, always moving the cursor back the PC +// .8 added detection if font is proportional. Still doesn't draw properly, but slowly getting there. +// .7 added colorized chars for regs, and memory ascii dump +// .6 fixed console buffering BUG: ~,~,VERSION * +// .5 added ~ to toggle full console on/off +// .4 Fixed BUG: 'G' DebugContinueStepping() disasm window cursor getting out of sync: R PC FA62; U FB40; G FB53 +// .3 Fixed spelling of CmdWindowLast() +// .2 Added undocumented "VERSION *" to show the number of bytes in the disasm "window" +// .1 Fixed BUG: CmdTrace() disasm window cursor getting out of sync: Start, F7, PageUp, Space +// 2.3.0.0 Syntax coloring for the disassembler! Plus a fancy branch indicator to 'PR#6'! Rock on! +// 38 Fixed FindParam() bug of skipping every other parameter +// 37 Fixed _PARAM_*_BEGIN _PARAM_*_END _PARAM_*_NUM +// 36 Added Regs A,X,Y to show character +// 35 Added syntax coloring for DrawBreakpoints() +// 34 Fixed DrawMemory() viewing memory ASCII to map control-chars to a printable glyph +// 33 Fixed 0 addr not working in CmdMemoryCompare() +// 32 Added BG_INFO_INVERSE, FG_INFO_INVERSE for flag hilighting +// 31 Changed FG_INFO_OPCODE color to yellow +// 30 Fixed MDC 0, bug in CmdUnassemble()with garbage address, due to var not init, and symbol lookup failed +// 29 Fixed typos in help summary, A, and D +// 28 Fixed Scrolling with and without g_bDisasmCurBad +// 27 Found bug -- can't scroll up past $5FFF with Tom's Bug Sample .. CmdCursorLineUp() not checking for gbDisamBad; +// 26 Code cleanup: still have some '#define's to convert over to 'const' +// 25 Fixed disasm singularity not showing up in DrawDisassemblyLine() +// 24 Fixed an disasm singularity in DisasmCalcTopFromCurAddress() i.e. F7, G FB53, then Space (to trace) once. +// 23 Fixed bug Watches not being cleared: _ClearViaArgs() +// 22 Code Cleanup: Moved most ExtTextOut() to DebugDrawText() +// 21 Changed End to jump $8000, due to redundant funcationality of Home, and wrap-around. +// 20 Added: DisasmCalc*From*() +// 19 New colors Enum & Array +// 18 implemented RTS. fixed RET to use common stack return address logic. +// 17 fixed console PageUp PageDn not refreshing console +// .2 WINDOW_CONSOLE & +// Implemented commands: MemoryDumpAscii*(): MA1 MA2 ML1 ML2 MH1 MH2 +// 16 removed BOOL Cmd*(), replaced with UPDATE_* +// 15 New Console Scrolling +// 14 extended FindParam() to specify [begin,end] +// 13 added split window infastructure, added Window_e +// 12 fixed PARAM aliases +// 11 fixed FindParam() to allow aliases +// 10 fixed SYM1 CLEAR, SYM2 CLEAR not actuall clearing +// 9 fixed BufferOuput() in DebugBegin() clobbering first buffered output line +// .1 since source level debugging is a minor feature +// 8 added command "VERSION *" to show internal debug info +// 7 fixed mem enter not refreshing screen +// 6 added source level debuggig back-end +// 5 fixed "SYM 0" bug + + inline void UnpackVersion( const unsigned int nVersion, + int & nMajor_, int & nMinor_, int & nFixMajor_ , int & nFixMinor_ ) + { + nMajor_ = (nVersion >> 24) & 0xFF; + nMinor_ = (nVersion >> 16) & 0xFF; + nFixMajor_ = (nVersion >> 8) & 0xFF; + nFixMinor_ = (nVersion >> 0) & 0xFF; + } + + const int MAX_BREAKPOINTS = 5; + const int MAX_WATCHES = 5; + const int MAX_ZEROPAGE_POINTERS = 5; + + const unsigned int _6502_ZEROPAGE_END = 0x00FF; + const unsigned int _6502_STACK_END = 0x01FF; + const unsigned int _6502_IO_BEGIN = 0xC000; + const unsigned int _6502_IO_END = 0xC0FF; + const unsigned int _6502_BEG_MEM_ADDRESS = 0x0000; + const unsigned int _6502_END_MEM_ADDRESS = 0xFFFF; + + +// Addressing _____________________________________________________________________________________ + + AddressingMode_t g_aOpmodes[ NUM_ADDRESSING_MODES ] = + { // Outut, but eventually used for Input when Assembler is working. + {TEXT("") , 1 , "(implied)" }, // (implied) + {TEXT("") , 1 , "n/a 1" }, // INVALID1 + {TEXT("") , 2 , "n/a 2" }, // INVALID2 + {TEXT("") , 3 , "n/a 3" }, // INVALID3 + {TEXT("%02X") , 2 , "Immediate" }, // AM_M // #$%02X -> %02X + {TEXT("%04X") , 3 , "Absolute" }, // AM_A + {TEXT("%02X") , 2 , "Zero Page" }, // AM_Z + {TEXT("%04X,X") , 3 , "Absolute,X" }, // AM_AX // %s,X + {TEXT("%04X,Y") , 3 , "Absolute,Y" }, // AM_AY // %s,Y + {TEXT("%02X,X") , 2 , "Zero Page,X" }, // AM_ZX // %s,X + {TEXT("%02X,Y") , 2 , "Zero Page,Y" }, // AM_ZY // %s,Y + {TEXT("%s") , 2 , "Relative" }, // AM_R + {TEXT("(%02X,X)"), 2 , "(Zero Page),X" }, // AM_IZX ADDR_INDX // ($%02X,X) -> %s,X + {TEXT("(%04X,X)"), 3 , "(Absolute),X" }, // AM_IAX ADDR_ABSIINDX // ($%04X,X) -> %s,X + {TEXT("(%02X),Y"), 2 , "(Zero Page),Y" }, // AM_NZY ADDR_INDY // ($%02X),Y + {TEXT("(%02X)") , 2 , "(Zero Page)" }, // AM_NZ ADDR_IZPG // ($%02X) -> $%02X + {TEXT("(%04X)") , 3 , "(Absolute)" } // AM_NA ADDR_IABS // (%04X) -> %s + }; + + +// Args ___________________________________________________________________________________________ + int g_nArgRaw; + Arg_t g_aArgRaw[ MAX_ARGS ]; // pre-processing + + Arg_t g_aArgs [ MAX_ARGS ]; // post-processing + + + const TCHAR CHAR_LF = 0x0D; + const TCHAR CHAR_CR = 0x0A; + const TCHAR CHAR_SPACE = TEXT(' '); + const TCHAR CHAR_TAB = TEXT('\t'); + const TCHAR CHAR_QUOTED= TEXT('"' ); + + // NOTE: Token_e and g_aTokens must match! + const TokenTable_t g_aTokens[ NUM_TOKENS ] = + { // Input + { TOKEN_ALPHANUMERIC, TYPE_STRING , 0 }, // Default, if doen't match anything else + { TOKEN_AMPERSAND , TYPE_OPERATOR, TEXT('&') }, // bit-and +// { TOKEN_AT , TYPE_OPERATOR, TEXT('@') }, // force Register? or PointerDeref? + { TOKEN_BSLASH , TYPE_OPERATOR, TEXT('\\') }, + { TOKEN_CARET , TYPE_OPERATOR, TEXT('^') }, // bit-eor, C/C++: xor, Math: POWER + { TOKEN_COLON , TYPE_OPERATOR, TEXT(':') }, + { TOKEN_COMMA , TYPE_OPERATOR, TEXT(',') }, + { TOKEN_DOLLAR , TYPE_STRING , TEXT('$') }, + { TOKEN_EQUAL , TYPE_OPERATOR, TEXT('=') }, + { TOKEN_EXCLAMATION , TYPE_OPERATOR, TEXT('!') }, // NOT + { TOKEN_FSLASH , TYPE_OPERATOR, TEXT('/') }, // div + { TOKEN_GREATER_THAN, TYPE_OPERATOR, TEXT('>') }, // TODO/FIXME: Parser will break up '>=' (needed for uber breakpoints) + { TOKEN_HASH , TYPE_OPERATOR, TEXT('#') }, + { TOKEN_LEFT_PAREN , TYPE_OPERATOR, TEXT('(') }, + { TOKEN_LESS_THAN , TYPE_OPERATOR, TEXT('<') }, + { TOKEN_MINUS , TYPE_OPERATOR, TEXT('-') }, // sub +// { TOKEN_TILDE , TYPE_OPERATOR, TEXT('~') }, // C/C++: Not. Used for console. + { TOKEN_PERCENT , TYPE_OPERATOR, TEXT('%') }, // mod + { TOKEN_PIPE , TYPE_OPERATOR, TEXT('|') }, // bit-or + { TOKEN_PLUS , TYPE_OPERATOR, TEXT('+') }, // add + { TOKEN_QUOTED , TYPE_QUOTED , TEXT('"') }, + { TOKEN_RIGHT_PAREN , TYPE_OPERATOR, TEXT(')') }, + { TOKEN_SEMI , TYPE_STRING , TEXT(';') }, + { TOKEN_SPACE , TYPE_STRING , TEXT(' ') } // space is also a delimiter between tokens/args +// { TOKEN_STAR , TYPE_OPERATOR, TEXT('*') }, +// { TOKEN_TAB , TYPE_STRING , TEXT('\t') } + }; + +// const TokenTable_t g_aTokens2[ ] = +// { // Input +// { TOKEN_GREATER_EQUAL,TYPE_OPERATOR, TEXT(">=\x00") }, // TODO/FIXME: Parser will break up '>=' (needed for uber breakpoints) +// { TOKEN_LESS_EQUAL , TYPE_OPERATOR, TEXT("<=\x00") }, // TODO/FIXME: Parser will break up '<=' (needed for uber breakpoints) +// } + +// Breakpoints ____________________________________________________________________________________ + int g_nBreakpoints = 0; + Breakpoint_t g_aBreakpoints[ MAX_BREAKPOINTS ]; + + // NOTE: Breakpoint_Source_t and g_aBreakpointSource must match! + const TCHAR *g_aBreakpointSource[ NUM_BREAKPOINT_SOURCES ] = + { // Used to be one char, since ArgsParse also uses // TODO/FIXME: Parser use Param[] ? + // Used for both Input & Output! + // Regs + TEXT("A"), // Reg A + TEXT("X"), // Reg X + TEXT("Y"), // Reg Y + // Special + TEXT("PC"), // Program Counter + TEXT("S" ), // Stack Pointer + // Flags -- .8 Moved: Flag names from g_aFlagNames[] to "inlined" g_aBreakpointSource[] + TEXT("P"), // Processor Status + TEXT("C"), // ---- ---1 Carry + TEXT("Z"), // ---- --1- Zero + TEXT("I"), // ---- -1-- Interrupt + TEXT("D"), // ---- 1--- Decimal + TEXT("B"), // ---1 ---- Break + TEXT("R"), // --1- ---- Reserved + TEXT("V"), // -1-- ---- Overflow + TEXT("N"), // 1--- ---- Sign + // Misc + TEXT("OP"), // Opcode/Instruction/Mnemonic + // Memory + TEXT("M") // Main + }; + + // Note: BreakpointOperator_t, _PARAM_BREAKPOINT_, and g_aBreakpointSymbols must match! + TCHAR *g_aBreakpointSymbols[ NUM_BREAKPOINT_OPERATORS] = + { // Output: Must be 2 chars! + TEXT("<="), // LESS_EQAUL + TEXT("< "), // LESS_THAN + TEXT("= "), // EQUAL + TEXT("! "), // NOT_EQUAL + TEXT("> "), // GREATER_THAN + TEXT(">="), // GREATER_EQUAL + TEXT("? "), // READ // Q. IO Read use 'I'? A. No, since I=Interrupt + TEXT("@ "), // WRITE // Q. IO Write use 'O'? A. No, since O=Opcode + TEXT("* "), // Read/Write + }; + + +// Commands _______________________________________________________________________________________ + + #define __COMMANDS_VERIFY_TXT__ "\xDE\xAD\xC0\xDE" + #define __PARAMS_VERIFY_TXT__ "\xDE\xAD\xDA\x1A" + + class commands_functor_compare + { + public: + int operator() ( const Command_t & rLHS, const Command_t & rRHS ) const + { + return _tcscmp( rLHS.m_sName, rRHS.m_sName ); + } + }; + + int g_iCommand; // last command (enum) // used for consecuitive commands + + vector g_vPotentialCommands; // global, since TAB-completion also needs + vector g_vSortedCommands; + + // Setting function to NULL, allows g_aCommands arguments to be safely listed here + // Commands should be listed alphabetically per category. + // For the list sorted by category, check Commands_e + // NOTE: Commands_e and g_aCommands[] must match! Aliases are listed at the end + Command_t g_aCommands[] = + { + // CPU (Main) + {TEXT("A") , CmdAssemble , CMD_ASSEMBLE , "Assemble instructions" }, + {TEXT("U") , CmdUnassemble , CMD_UNASSEMBLE , "Disassemble instructions" }, + {TEXT("CALC") , CmdCalculator , CMD_CALC , "Display mini calc result" }, + {TEXT("GOTO") , CmdGo , CMD_GO , "Run [until PC = address]" }, + {TEXT("I") , CmdInput , CMD_INPUT , "Input from IO $C0xx" }, + {TEXT("KEY") , CmdFeedKey , CMD_INPUT_KEY , "Feed key into emulator" }, + {TEXT("JSR") , CmdJSR , CMD_JSR , "Call sub-routine" }, + {TEXT("O") , CmdOutput , CMD_OUTPUT , "Output from io $C0xx" }, + {TEXT("NOP") , CmdNOP , CMD_NOP , "Zap the current instruction with a NOP" }, + {TEXT("P") , CmdStepOver , CMD_STEP_OVER , "Step current instruction" }, + {TEXT("RTS") , CmdStepOut , CMD_STEP_OUT , "Step out of subroutine" }, + {TEXT("T") , CmdTrace , CMD_TRACE , "Trace current instruction" }, + {TEXT("TF") , CmdTraceFile , CMD_TRACE_FILE , "Save trace to filename" }, + {TEXT("TL") , CmdTraceLine , CMD_TRACE_LINE , "Trace (with cycle counting)" }, + // Breakpoints + {TEXT("BP") , CmdBreakpoint , CMD_BREAKPOINT , "Access breakpoint options" }, + {TEXT("BPA") , CmdBreakpointAddSmart, CMD_BREAKPOINT_ADD_SMART , "Add (smart) breakpoint" }, +// {TEXT("BPP") , CmdBreakpointAddFlag , CMD_BREAKPOINT_ADD_FLAG , "Add breakpoint on flags" }, + {TEXT("BPR") , CmdBreakpointAddReg , CMD_BREAKPOINT_ADD_REG , "Add breakpoint on register value" }, // NOTE! Different from SoftICE !!!! + {TEXT("BPX") , CmdBreakpointAddPC , CMD_BREAKPOINT_ADD_PC , "Add breakpoint at current instruction" }, + {TEXT("BPIO") , CmdBreakpointAddIO , CMD_BREAKPOINT_ADD_IO , "Add breakpoint for IO address $C0xx" }, + {TEXT("BPM") , CmdBreakpointAddMem , CMD_BREAKPOINT_ADD_MEM , "Add breakpoint on memory access" }, // SoftICE + {TEXT("BC") , CmdBreakpointClear , CMD_BREAKPOINT_CLEAR , "Clear breakpoint # or *" }, // SoftICE + {TEXT("BD") , CmdBreakpointDisable , CMD_BREAKPOINT_DISABLE , "Disable breakpoint # or *" }, // SoftICE + {TEXT("BPE") , CmdBreakpointEdit , CMD_BREAKPOINT_EDIT , "Edit breakpoint # or *" }, // SoftICE + {TEXT("BE") , CmdBreakpointEnable , CMD_BREAKPOINT_ENABLE , "Enable breakpoint # or *" }, // SoftICE + {TEXT("BL") , CmdBreakpointList , CMD_BREAKPOINT_LIST , "List breakpoints" }, // SoftICE + {TEXT("BPLOAD") , CmdBreakpointLoad , CMD_BREAKPOINT_LOAD , "Loads breakpoints" }, + {TEXT("BPSAVE") , CmdBreakpointSave , CMD_BREAKPOINT_SAVE , "Saves breakpoints" }, + // Benchmark / Timing + {TEXT("BENCHMARK") , CmdBenchmark , CMD_BENCHMARK , "Benchmark the emulator" }, + {TEXT("PROFILE") , CmdProfile , CMD_PROFILE , "List/Save 6502 profiling" }, + // Config + {TEXT("COLOR") , CmdConfigColorMono , CMD_CONFIG_COLOR , "Sets/Shows RGB for color scheme" }, + {TEXT("CONFIG") , CmdConfig , CMD_CONFIG , "Access config options" }, + {TEXT("FONT") , CmdConfigFont , CMD_CONFIG_FONT , "Shows current font or sets new one" }, + {TEXT("HCOLOR") , CmdConfigHColor , CMD_CONFIG_HCOLOR , "Sets/Shows colors mapped to Apple HGR" }, + {TEXT("LOAD") , CmdConfigLoad , CMD_CONFIG_LOAD , "Load debugger configuration" }, + {TEXT("MONO") , CmdConfigColorMono , CMD_CONFIG_MONOCHROME , "Sets/Shows RGB for monochrome scheme" }, + {TEXT("RUN") , CmdConfigRun , CMD_CONFIG_RUN , "Run script file of debugger commands" }, + {TEXT("SAVE") , CmdConfigSave , CMD_CONFIG_SAVE , "Save debugger configuration" }, + // Cursor + {TEXT(".") , CmdCursorJumpPC , CMD_CURSOR_JUMP_PC , "Locate the cursor in the disasm window" }, // centered + {TEXT("=") , CmdCursorSetPC , CMD_CURSOR_SET_PC , "Sets the PC to the current instruction" }, + {TEXT("RET") , CmdCursorJumpRetAddr , CMD_CURSOR_JUMP_RET_ADDR , "Sets the cursor to the sub-routine caller" }, + {TEXT( "^") , NULL , CMD_CURSOR_LINE_UP }, // \x2191 = Up Arrow (Unicode) + {TEXT("Shift ^") , NULL , CMD_CURSOR_LINE_UP_1 }, + {TEXT( "v") , NULL , CMD_CURSOR_LINE_DOWN }, // \x2193 = Dn Arrow (Unicode) + {TEXT("Shift v") , NULL , CMD_CURSOR_LINE_DOWN_1 }, + {TEXT("PAGEUP" ) , CmdCursorPageUp , CMD_CURSOR_PAGE_UP , "Scroll up one screen" }, + {TEXT("PAGEUP256") , CmdCursorPageUp256 , CMD_CURSOR_PAGE_UP_256 , "Scroll up 256 bytes" }, // Shift + {TEXT("PAGEUP4K" ) , CmdCursorPageUp4K , CMD_CURSOR_PAGE_UP_4K , "Scroll up 4096 bytes" }, // Ctrl + {TEXT("PAGEDN" ) , CmdCursorPageDown , CMD_CURSOR_PAGE_DOWN , "Scroll down one scren" }, + {TEXT("PAGEDOWN256") , CmdCursorPageDown256 , CMD_CURSOR_PAGE_DOWN_256 , "Scroll down 256 bytes" }, // Shift + {TEXT("PAGEDOWN4K" ) , CmdCursorPageDown4K , CMD_CURSOR_PAGE_DOWN_4K , "Scroll down 4096 bytes" }, // Ctrl + // Flags +// {TEXT("FC") , CmdFlag , CMD_FLAG_CLEAR , "Clear specified Flag" }, // NVRBDIZC see AW_CPU.cpp AF_* + {TEXT("CL") , CmdFlag , CMD_FLAG_CLEAR , "Clear specified Flag" }, // NVRBDIZC see AW_CPU.cpp AF_* + + {TEXT("CLC") , CmdFlagClear , CMD_FLAG_CLR_C , "Clear Flag Carry" }, // 0 // Legacy + {TEXT("CLZ") , CmdFlagClear , CMD_FLAG_CLR_Z , "Clear Flag Zero" }, // 1 + {TEXT("CLI") , CmdFlagClear , CMD_FLAG_CLR_I , "Clear Flag Interrupts Disabled" }, // 2 + {TEXT("CLD") , CmdFlagClear , CMD_FLAG_CLR_D , "Clear Flag Decimal (BCD)" }, // 3 + {TEXT("CLB") , CmdFlagClear , CMD_FLAG_CLR_B , "CLear Flag Break" }, // 4 // Legacy + {TEXT("CLR") , CmdFlagClear , CMD_FLAG_CLR_R , "Clear Flag Reserved" }, // 5 + {TEXT("CLV") , CmdFlagClear , CMD_FLAG_CLR_V , "Clear Flag Overflow" }, // 6 + {TEXT("CLN") , CmdFlagClear , CMD_FLAG_CLR_N , "Clear Flag Negative (Sign)" }, // 7 + +// {TEXT("FS") , CmdFlag , CMD_FLAG_SET , "Set specified Flag" }, + {TEXT("SE") , CmdFlag , CMD_FLAG_SET , "Set specified Flag" }, + + {TEXT("SEC") , CmdFlagSet , CMD_FLAG_SET_C , "Set Flag Carry" }, // 0 + {TEXT("SEZ") , CmdFlagSet , CMD_FLAG_SET_Z , "Set Flag Zero" }, // 1 + {TEXT("SEI") , CmdFlagSet , CMD_FLAG_SET_I , "Set Flag Interrupts Disabled" }, // 2 + {TEXT("SED") , CmdFlagSet , CMD_FLAG_SET_D , "Set Flag Decimal (BCD)" }, // 3 + {TEXT("SEB") , CmdFlagSet , CMD_FLAG_SET_B , "Set Flag Break" }, // 4 // Legacy + {TEXT("SER") , CmdFlagSet , CMD_FLAG_SET_R , "Set Flag Reserved" }, // 5 + {TEXT("SEV") , CmdFlagSet , CMD_FLAG_SET_V , "Set Flag Overflow" }, // 6 + {TEXT("SEN") , CmdFlagSet , CMD_FLAG_SET_N , "Set Flag Negative" }, // 7 + // Help + {TEXT("?") , CmdHelpList , CMD_HELP_LIST , "List all available commands" }, + {TEXT("HELP") , CmdHelpSpecific , CMD_HELP_SPECIFIC , "Help on specific command" }, + {TEXT("VERSION") , CmdVersion , CMD_VERSION , "Displays version of emulator/debugger" }, + {TEXT("MOTD") , CmdMOTD , CMD_MOTD }, + + // Memory + {TEXT("MC") , CmdMemoryCompare , CMD_MEMORY_COMPARE }, + + {TEXT("D") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_1 , "Hex dump in the mini memory area 1" }, // FIXME: Must also work in DATA screen + {TEXT("MD") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_1 }, // alias + {TEXT("MD1") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_1 , "Hex dump in the mini memory area 1" }, + {TEXT("MD2") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_2 , "Hex dump in the mini memory area 2" }, + {TEXT("M1") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_1 }, // alias + {TEXT("M2") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_2 }, // alias + + {TEXT("MA1") , CmdMemoryMiniDumpAscii,CMD_MEM_MINI_DUMP_ASCII_1, "ASCII text in mini memory area 1" }, + {TEXT("MA2") , CmdMemoryMiniDumpAscii,CMD_MEM_MINI_DUMP_ASCII_2, "ASCII text in mini memory area 2" }, + {TEXT("MT1") , CmdMemoryMiniDumpApple,CMD_MEM_MINI_DUMP_APPLE_1, "Apple Text in mini memory area 1" }, + {TEXT("MT2") , CmdMemoryMiniDumpApple,CMD_MEM_MINI_DUMP_APPLE_2, "Apple Text in mini memory area 2" }, +// {TEXT("ML1") , CmdMemoryMiniDumpLow , CMD_MEM_MINI_DUMP_TXT_LO_1, "Text (Ctrl) in mini memory dump area 1" }, +// {TEXT("ML2") , CmdMemoryMiniDumpLow , CMD_MEM_MINI_DUMP_TXT_LO_2, "Text (Ctrl) in mini memory dump area 2" }, +// {TEXT("MH1") , CmdMemoryMiniDumpHigh, CMD_MEM_MINI_DUMP_TXT_HI_1, "Text (High) in mini memory dump area 1" }, +// {TEXT("MH2") , CmdMemoryMiniDumpHigh, CMD_MEM_MINI_DUMP_TXT_HI_2, "Text (High) in mini memory dump area 2" }, + + {TEXT("ME") , CmdMemoryEdit , CMD_MEMORY_EDIT }, // TODO: like Copy ][+ Sector Edit + {TEXT("E") , CmdMemoryEnterByte , CMD_MEMORY_ENTER_BYTE }, + {TEXT("EW") , CmdMemoryEnterWord , CMD_MEMORY_ENTER_WORD }, + {TEXT("M") , CmdMemoryMove , CMD_MEMORY_MOVE }, + {TEXT("S") , CmdMemorySearch , CMD_MEMORY_SEARCH }, + {TEXT("SA") , CmdMemorySearchText , CMD_MEMORY_SEARCH_ASCII }, // Search Ascii + {TEXT("SAL") , CmdMemorySearchLowBit, CMD_MEMORY_SEARCH_TXT_LO }, // Search Ascii Low + {TEXT("SAH") , CmdMemorySearchHiBit , CMD_MEMORY_SEARCH_TXT_HI }, // Search "Ascii" High + {TEXT("SH") , CmdMemorySearchHex , CMD_MEMORY_SEARCH_HEX }, // Search Hex + {TEXT("F") , CmdMemoryFill , CMD_MEMORY_FILL }, + // Registers + {TEXT("R") , CmdRegisterSet , CMD_REGISTER_SET }, // TODO: Set/Clear flags + // Source Level Debugging + {TEXT("SOURCE") , CmdSource , CMD_SOURCE , "Starts/Stops source level debugging" }, + {TEXT("SYNC") , CmdSync , CMD_SYNC , "Syncs the cursor to the source file" }, + // Stack + {TEXT("POP") , CmdStackPop , CMD_STACK_POP }, + {TEXT("PPOP") , CmdStackPopPseudo , CMD_STACK_POP_PSEUDO }, + {TEXT("PUSH") , CmdStackPop , CMD_STACK_PUSH }, +// {TEXT("RTS") , CmdStackReturn , CMD_STACK_RETURN }, + // Symbols + {TEXT("SYM") , CmdSymbols , CMD_SYMBOLS_LOOKUP , "Lookup symbol or address" }, + + {TEXT("SYMMAIN") , CmdSymbolsMain , CMD_SYMBOLS_MAIN , "Main symbol table lookup/menu" }, // CLEAR,LOAD,SAVE + {TEXT("SYMUSER") , CmdSymbolsUser , CMD_SYMBOLS_USER , "User symbol table lookup/menu" }, // CLEAR,LOAD,SAVE + {TEXT("SYMSRC" ) , CmdSymbolsSource , CMD_SYMBOLS_SRC , "Source symbol table lookup/menu" }, // CLEAR,LOAD,SAVE +// {TEXT("SYMCLEAR") , CmdSymbolsClear , CMD_SYMBOLS_CLEAR }, // can't use SC = SetCarry + {TEXT("SYMINFO") , CmdSymbolsInfo , CMD_SYMBOLS_INFO }, + {TEXT("SYMLIST") , CmdSymbolsList , CMD_SYMBOLS_LIST }, // 'symbolname', can't use param '*' + // Variables +// {TEXT("CLEAR") , CmdVarsClear , CMD_VARIABLES_CLEAR }, +// {TEXT("VAR") , CmdVarsDefine , CMD_VARIABLES_DEFINE }, +// {TEXT("INT8") , CmdVarsDefineInt8 , CMD_VARIABLES_DEFINE_INT8}, +// {TEXT("INT16") , CmdVarsDefineInt16 , CMD_VARIABLES_DEFINE_INT16}, +// {TEXT("VARS") , CmdVarsList , CMD_VARIABLES_LIST }, +// {TEXT("VARSLOAD") , CmdVarsLoad , CMD_VARIABLES_LOAD }, +// {TEXT("VARSSAVE") , CmdVarsSave , CMD_VARIABLES_SAVE }, +// {TEXT("SET") , CmdVarsSet , CMD_VARIABLES_SET }, + // Watch + {TEXT("W") , CmdWatchAdd , CMD_WATCH_ADD }, + {TEXT("WC") , CmdWatchClear , CMD_WATCH_CLEAR }, + {TEXT("WD") , CmdWatchDisable , CMD_WATCH_DISABLE }, + {TEXT("WE") , CmdWatchEnable , CMD_WATCH_ENABLE }, + {TEXT("WL") , CmdWatchList , CMD_WATCH_LIST }, + {TEXT("WLOAD") , CmdWatchLoad , CMD_WATCH_LOAD }, // Cant use as param to W + {TEXT("WSAVE") , CmdWatchSave , CMD_WATCH_SAVE }, // due to symbol look-up + // Window + {TEXT("WIN") , CmdWindow , CMD_WINDOW , "Show specified debugger window" }, + {TEXT("CODE") , CmdWindowViewCode , CMD_WINDOW_CODE , "Switch to full code window" }, // Can't use WC = WatchClear + {TEXT("CODE1") , CmdWindowShowCode1 , CMD_WINDOW_CODE_1 , "Show code on top split window" }, + {TEXT("CODE2") , CmdWindowShowCode2 , CMD_WINDOW_CODE_2 , "Show code on bottom split window" }, + {TEXT("CONSOLE") , CmdWindowViewConsole , CMD_WINDOW_CONSOLE , "Switch to full console window" }, + {TEXT("DATA") , CmdWindowViewData , CMD_WINDOW_DATA , "Switch to full data window" }, + {TEXT("DATA1") , CmdWindowShowCode1 , CMD_WINDOW_CODE_1 , "Show data on top split window" }, + {TEXT("DATA2") , CmdWindowShowData2 , CMD_WINDOW_DATA_2 , "Show data on bottom split window" }, + {TEXT("SOURCE1") , CmdWindowShowSource1 , CMD_WINDOW_SOURCE_1, "Show source on top split screen" }, + {TEXT("SOURCE2") , CmdWindowShowSource2 , CMD_WINDOW_SOURCE_2, "Show source on bottom split screen" }, + + {TEXT("\\") , CmdWindowViewOutput , CMD_WINDOW_OUTPUT }, +// {TEXT("INFO") , CmdToggleInfoPanel , CMD_WINDOW_TOGGLE }, +// {TEXT("WINSOURCE") , CmdWindowShowSource , CMD_WINDOW_SOURCE }, +// {TEXT("ZEROPAGE") , CmdWindowShowZeropage, CMD_WINDOW_ZEROPAGE }, + // ZeroPage + {TEXT("ZP") , CmdZeroPage , CMD_ZEROPAGE_POINTER }, + {TEXT("ZP0") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_0 }, + {TEXT("ZP1") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_1 }, + {TEXT("ZP2") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_2 }, + {TEXT("ZP3") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_3 }, + {TEXT("ZP4") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_4 }, + {TEXT("ZPA") , CmdZeroPageAdd , CMD_ZEROPAGE_POINTER_ADD }, + {TEXT("ZPC") , CmdZeroPageClear , CMD_ZEROPAGE_POINTER_CLEAR }, + {TEXT("ZPD") , CmdZeroPageDisable , CMD_ZEROPAGE_POINTER_CLEAR }, + {TEXT("ZPE") , CmdZeroPageEnable , CMD_ZEROPAGE_POINTER_CLEAR }, + {TEXT("ZPL") , CmdZeroPageList , CMD_ZEROPAGE_POINTER_LIST }, + {TEXT("ZPLOAD") , CmdZeroPageLoad , CMD_ZEROPAGE_POINTER_LOAD }, // Cant use as param to ZP + {TEXT("ZPSAVE") , CmdZeroPageSave , CMD_ZEROPAGE_POINTER_SAVE }, // due to symbol look-up + +// {TEXT("TIMEDEMO"),CmdTimeDemo, CMD_TIMEDEMO }, // CmdBenchmarkStart(), CmdBenchmarkStop() +// {TEXT("WC"),CmdShowCodeWindow}, // Can't use since WatchClear +// {TEXT("WD"),CmdShowDataWindow}, // + + // Internal Consistency Check + {TEXT(__COMMANDS_VERIFY_TXT__), NULL, NUM_COMMANDS }, + + // Aliasies - Can be in any order + {TEXT("->") , NULL , CMD_CURSOR_JUMP_PC }, + {TEXT("Ctrl ->" ) , NULL , CMD_CURSOR_SET_PC }, + {TEXT("Shift ->") , NULL , CMD_CURSOR_JUMP_PC }, // at top + {TEXT("INPUT") , CmdInput , CMD_INPUT }, + // Flags - Clear + {TEXT("RC") , CmdFlagClear , CMD_FLAG_CLR_C , "Clear Flag Carry" }, // 0 // Legacy + {TEXT("RZ") , CmdFlagClear , CMD_FLAG_CLR_Z , "Clear Flag Zero" }, // 1 + {TEXT("RI") , CmdFlagClear , CMD_FLAG_CLR_I , "Clear Flag Interrupts Disabled" }, // 2 + {TEXT("RD") , CmdFlagClear , CMD_FLAG_CLR_D , "Clear Flag Decimal (BCD)" }, // 3 + {TEXT("RB") , CmdFlagClear , CMD_FLAG_CLR_B , "CLear Flag Break" }, // 4 // Legacy + {TEXT("RR") , CmdFlagClear , CMD_FLAG_CLR_R , "Clear Flag Reserved" }, // 5 + {TEXT("RV") , CmdFlagClear , CMD_FLAG_CLR_V , "Clear Flag Overflow" }, // 6 + {TEXT("RN") , CmdFlagClear , CMD_FLAG_CLR_N , "Clear Flag Negative (Sign)" }, // 7 + // Flags - Set + {TEXT("SC") , CmdFlagSet , CMD_FLAG_SET_C , "Set Flag Carry" }, // 0 + {TEXT("SZ") , CmdFlagSet , CMD_FLAG_SET_Z , "Set Flag Zero" }, // 1 + {TEXT("SI") , CmdFlagSet , CMD_FLAG_SET_I , "Set Flag Interrupts Disabled" }, // 2 + {TEXT("SD") , CmdFlagSet , CMD_FLAG_SET_D , "Set Flag Decimal (BCD)" }, // 3 + {TEXT("SB") , CmdFlagSet , CMD_FLAG_SET_B , "CLear Flag Break" }, // 4 // Legacy + {TEXT("SR") , CmdFlagSet , CMD_FLAG_SET_R , "Clear Flag Reserved" }, // 5 + {TEXT("SV") , CmdFlagSet , CMD_FLAG_SET_V , "Clear Flag Overflow" }, // 6 + {TEXT("SN") , CmdFlagSet , CMD_FLAG_SET_N , "Clear Flag Negative" }, // 7 + + {TEXT("EB" ) , CmdMemoryEnterByte , CMD_MEMORY_ENTER_BYTE }, + {TEXT("E8" ) , CmdMemoryEnterByte , CMD_MEMORY_ENTER_BYTE }, + {TEXT("E16") , CmdMemoryEnterWord , CMD_MEMORY_ENTER_WORD }, + {TEXT("MF") , CmdMemoryFill , CMD_MEMORY_FILL }, + {TEXT("MM") , CmdMemoryMove , CMD_MEMORY_MOVE }, + {TEXT("MS") , CmdMemorySearch , CMD_MEMORY_SEARCH }, // CmdMemorySearch + {TEXT("BW") , CmdConfigColorMono , CMD_CONFIG_MONOCHROME }, + {TEXT("P0") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_0 }, + {TEXT("P1") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_1 }, + {TEXT("P2") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_2 }, + {TEXT("P3") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_3 }, + {TEXT("P4") , CmdZeroPagePointer , CMD_ZEROPAGE_POINTER_4 }, + {TEXT("REGISTER") , CmdRegisterSet , CMD_REGISTER_SET }, +// {TEXT("RET") , CmdStackReturn , CMD_STACK_RETURN }, + {TEXT("TRACE") , CmdTrace , CMD_TRACE }, + {TEXT("SYMBOLS") , CmdSymbols , CMD_SYMBOLS_LOOKUP , "Return " }, +// {TEXT("SYMBOLS1") , CmdSymbolsInfo , CMD_SYMBOLS_1 }, +// {TEXT("SYMBOLS2") , CmdSymbolsInfo , CMD_SYMBOLS_2 }, + {TEXT("SYM1" ) , CmdSymbolsInfo , CMD_SYMBOLS_MAIN }, + {TEXT("SYM2" ) , CmdSymbolsInfo , CMD_SYMBOLS_USER }, + {TEXT("SYM3" ) , CmdSymbolsInfo , CMD_SYMBOLS_SRC }, + {TEXT("WATCH") , CmdWatchAdd , CMD_WATCH_ADD }, + {TEXT("WINDOW") , CmdWindow , CMD_WINDOW }, +// {TEXT("W?") , CmdWatchAdd , CMD_WATCH_ADD }, + {TEXT("ZAP") , CmdNOP , CMD_NOP }, + + // DEPRECATED -- Probably should be removed in a future version + {TEXT("BENCH") , CmdBenchmarkStart , CMD_BENCHMARK }, + {TEXT("EXITBENCH") , CmdBenchmarkStop , CMD_BENCHMARK }, + {TEXT("MDB") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_1 }, // MemoryDumpByte // Did anyone actually use this?? + {TEXT("MDC") , CmdUnassemble , CMD_UNASSEMBLE }, // MemoryDumpCode // Did anyone actually use this?? + {TEXT("MEB") , CmdMemoryEnterByte , CMD_MEMORY_ENTER_BYTE }, // MemoryEnterByte // Did anyone actually use this?? + {TEXT("MEMORY") , CmdMemoryMiniDumpHex , CMD_MEM_MINI_DUMP_HEX_1 }, // MemoryDumpByte // Did anyone actually use this?? +}; + +// static const TCHAR g_aFlagNames[_6502_NUM_FLAGS+1] = TEXT("CZIDBRVN");// Reversed since arrays are from left-to-right + + const int NUM_COMMANDS_WITH_ALIASES = sizeof(g_aCommands) / sizeof (Command_t); // Determined at compile-time ;-) + + +// Color __________________________________________________________________________________________ + + int g_iColorScheme = SCHEME_COLOR; + + // Used when the colors are reset + COLORREF gaColorPalette[ NUM_PALETTE ] = + { + RGB(0,0,0), + // NOTE: See _SetupColorRamp() if you want to programmitically set/change + RGB(255, 0, 0), RGB(223, 0, 0), RGB(191, 0, 0), RGB(159, 0, 0), RGB(127, 0, 0), RGB( 95, 0, 0), RGB( 63, 0, 0), RGB( 31, 0, 0), // 001 // Red + RGB( 0,255, 0), RGB( 0,223, 0), RGB( 0,191, 0), RGB( 0,159, 0), RGB( 0,127, 0), RGB( 0, 95, 0), RGB( 0, 63, 0), RGB( 0, 31, 0), // 010 // Green + RGB(255,255, 0), RGB(223,223, 0), RGB(191,191, 0), RGB(159,159, 0), RGB(127,127, 0), RGB( 95, 95, 0), RGB( 63, 63, 0), RGB( 31, 31, 0), // 011 // Yellow + RGB( 0, 0,255), RGB( 0, 0,223), RGB( 0, 0,191), RGB( 0, 0,159), RGB( 0, 0,127), RGB( 0, 0, 95), RGB( 0, 0, 63), RGB( 0, 0, 31), // 100 // Blue + RGB(255, 0,255), RGB(223, 0,223), RGB(191, 0,191), RGB(159, 0,159), RGB(127, 0,127), RGB( 95, 0, 95), RGB( 63, 0, 63), RGB( 31, 0, 31), // 101 // Magenta + RGB( 0,255,255), RGB( 0,223,223), RGB( 0,191,191), RGB( 0,159,159), RGB( 0,127,127), RGB( 0, 95, 95), RGB( 0, 63, 63), RGB( 0, 31, 31), // 110 // Cyan + RGB(255,255,255), RGB(223,223,223), RGB(191,191,191), RGB(159,159,159), RGB(127,127,127), RGB( 95, 95, 95), RGB( 63, 63, 63), RGB( 31, 31, 31), // 111 // White/Gray + + // Custom Colors + RGB( 80,192,255), // Light Sky Blue // Used for console FG + RGB( 0,128,192), // Darker Sky Blue + RGB( 0, 64,128), // Deep Sky Blue + RGB(255,128, 0), // Orange (Full) + RGB(128, 64, 0), // Orange (Half) + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 0, 0, 0), + }; + + // Index into Palette + int g_aColorIndex[ NUM_COLORS ] = + { + K0, W8, // BG_CONSOLE_OUTPUT FG_CONSOLE_OUTPUT (W8) + + B1, COLOR_CUSTOM_01, // BG_CONSOLE_INPUT FG_CONSOLE_INPUT (W8) + + B2, B3, // BG_DISASM_1 BG_DISASM_2 + + R8, W8, // BG_DISASM_BP_S_C FG_DISASM_BP_S_C + R6, W5, // BG_DISASM_BP_0_C FG_DISASM_BP_0_C + + R7, // FG_DISASM_BP_S_X // Y8 lookes better on Info Cyan // R6 + W5, // FG_DISASM_BP_0_X + + W8, B8, // BG_DISASM_C FG_DISASM_C + Y8, B8, // BG_DISASM_PC_C FG_DISASM_PC_C + Y4, W8, // BG_DISASM_PC_X FG_DISASM_PC_X + + W8, // FG_DISASM_ADDRESS + G192, // FG_DISASM_OPERATOR + Y8, // FG_DISASM_OPCODE + W8, // FG_DISASM_MNEMONIC + COLOR_CUSTOM_04, // FG_DISASM_TARGET (or W8) + G8, // FG_DISASM_SYMBOL + C8, // FG_DISASM_CHAR + G8, // FG_DISASM_BRANCH + + C3, // BG_INFO (C4, C2 too dark) + W8, // FG_INFO_TITLE (or W8) + Y7, // FG_INFO_BULLET (W8) + G192, // FG_INFO_OPERATOR + COLOR_CUSTOM_04, // FG_INFO_ADDRESS (was Y8) + Y8, // FG_INFO_OPCODE + COLOR_CUSTOM_01, // FG_INFO_REG (was orange) + + W8, // BG_INFO_INVERSE + C3, // FG_INFO_INVERSE + C5, // BG_INFO_CHAR + W8, // FG_INFO_CHAR_HI + Y8, // FG_INFO_CHAR_LO + + COLOR_CUSTOM_04, // BG_INFO_IO_BYTE + COLOR_CUSTOM_04, // FG_INFO_IO_BYTE + + C2, // BG_DATA_1 + C3, // BG_DATA_2 + Y8, // FG_DATA_BYTE + W8, // FG_DATA_TEXT + + G4, // BG_SYMBOLS_1 + G3, // BG_SYMBOLS_2 + W8, // FG_SYMBOLS_ADDRESS + M8, // FG_SYMBOLS_NAME + + K0, // BG_SOURCE_TITLE + W8, // FG_SOURCE_TITLE + W2, // BG_SOURCE_1 // C2 W2 for "Paper Look" + W3, // BG_SOURCE_2 + W8 // FG_SOURCE + }; + + COLORREF g_aColors[ NUM_COLOR_SCHEMES ][ NUM_COLORS ]; + + +// Console ________________________________________________________________________________________ + + // See ConsoleInputReset() for why the console input + // is tied to the zero'th output of g_aConsoleDisplay + // and not using a seperate var: g_aConsoleInput[ CONSOLE_WIDTH ]; + // + // : g_aConsoleBuffer[4] | ^ g_aConsoleDisplay[5] : + // : g_aConsoleBuffer[3] | | g_aConsoleDisplay[4] <- g_nConsoleDisplayTotal + // g_nConsoleBuffer -> g_aConsoleBuffer[2] | | g_aConsoleDisplay[3] : + // : g_aConsoleBuffer[1] v | g_aConsoleDisplay[2] : + // . g_aConsoleBuffer[0] -----> | g_aConsoleDisplay[1] . + // | + // ConsoleInput ----> | g_aConsoleDisplay[0] + // + const int CONSOLE_HEIGHT = 384; // Lines, was 128, but need ~ 256+16 for PROFILE LIST + const int CONSOLE_WIDTH = 80; + + // Buffer + bool g_bConsoleBufferPaused = false; // buffered output is waiting for user to continue + int g_nConsoleBuffer = 0; + TCHAR g_aConsoleBuffer[ CONSOLE_HEIGHT ][ CONSOLE_WIDTH ]; // TODO: stl::vector< line_t > + + // Display + TCHAR g_aConsolePrompt[] = TEXT(">!"); // input, assembler + TCHAR g_sConsolePrompt[] = TEXT(">"); // No, NOT Integer Basic! The nostalgic '*' "Monitor" doesn't look as good, IMHO. :-( + bool g_bConsoleFullWidth = false; + + int g_iConsoleDisplayStart = 0; // to allow scrolling + int g_nConsoleDisplayTotal = 0; // number of lines added to console + int g_nConsoleDisplayHeight = 0; + int g_nConsoleDisplayWidth = 0; + TCHAR g_aConsoleDisplay[ CONSOLE_HEIGHT ][ CONSOLE_WIDTH ]; + + // Input History + int g_nHistoryLinesStart = 0; + int g_nHistoryLinesTotal = 0; // number of commands entered + TCHAR g_aHistoryLines[ CONSOLE_HEIGHT ][ CONSOLE_WIDTH ] = {TEXT("")}; + + // Input Line + // Raw input Line (has prompt) + const int CONSOLE_FIRST_LINE = 1; // where ConsoleDisplay is pushed up from + TCHAR * const g_aConsoleInput = g_aConsoleDisplay[0]; + // Cooked input line (no prompt) + int g_nConsoleInputChars = 0; + TCHAR * g_pConsoleInput = 0; // points to past prompt + bool g_bConsoleInputQuoted = false; // Allows lower-case to be entered + bool g_bConsoleInputSkip = false; + + +// Cursor _________________________________________________________________________________________ + + WORD g_nDisasmTopAddress = 0; + WORD g_nDisasmBotAddress = 0; + WORD g_nDisasmCurAddress = 0; + + bool g_bDisasmCurBad = false; + int g_nDisasmCurLine = 0; // Aligned to Top or Center + int g_iDisasmCurState = CURSOR_NORMAL; + + int g_nDisasmWinHeight = 0; + +// Disassembly + bool g_bConfigDisasmOpcodeSpaces = true; // TODO: CONFIG DISASM SPACE [0|1] + bool g_bConfigDisasmAddressColon = true; // TODO: CONFIG DISASM COLON [0|1] + bool g_bConfigDisasmFancyBranch = true; // TODO: CONFIG DISASM BRANCH [0|1] +// TCHAR g_aConfigDisasmAddressColon[] = TEXT(" :"); + + /* + * Wingdings + \xE1 Up Arrow + \xE2 Down Arrow + * Webdings // M$ Font + \x35 Up Arrow + \x33 Left Arrow + \x36 Down Arrow + * Symols + \xAD Up Arrow + \xAF Down Arrow + */ + TCHAR g_sConfigBranchIndicatorUp [] = TEXT("^\x35"); // was \x18 ?? // string + TCHAR g_sConfigBranchIndicatorEqual[] = TEXT("=\x33"); // was \x18 ?? // string + TCHAR g_sConfigBranchIndicatorDown [] = TEXT("v\x36"); // was \x19 ?? // string + +// Drawing + // Width + const int DISPLAY_WIDTH = 560; + #define SCREENSPLIT1 356 // Horizontal Column (pixels?) of Stack & Regs +// #define SCREENSPLIT2 456 // Horizontal Column (pixels?) of BPs, Watches & Mem + const int SCREENSPLIT2 = 456-7; // moved left one "char" to show PC in breakpoint: + + const int DISPLAY_BP_COLUMN = SCREENSPLIT2; + const int DISPLAY_MINI_CONSOLE = SCREENSPLIT1 - 6; // - 1 chars + const int DISPLAY_DISASM_RIGHT = SCREENSPLIT1 - 6; // - 1 char + const int DISPLAY_FLAG_COLUMN = SCREENSPLIT1 + 63; + const int DISPLAY_MINIMEM_COLUMN = SCREENSPLIT2 + 7; + const int DISPLAY_REGS_COLUMN = SCREENSPLIT1; + const int DISPLAY_STACK_COLUMN = SCREENSPLIT1; + const int DISPLAY_TARGETS_COLUMN = SCREENSPLIT1; + const int DISPLAY_WATCHES_COLUMN = SCREENSPLIT2; + const int DISPLAY_ZEROPAGE_COLUMN= SCREENSPLIT1; + + // Height +// const int DISPLAY_LINES = 24; // FIXME: Should be pixels + // 304 = bottom of disassembly + // 368 = bottom console + // 384 = 16 * 24 very bottom + const int DEFAULT_HEIGHT = 16; + const int DISPLAY_HEIGHT = 384; // 368; // DISPLAY_LINES * g_nFontHeight; + + const int WINDOW_DATA_BYTES_PER_LINE = 8; +// Font + FontConfig_t g_aFontConfig[ NUM_FONTS ]; + + TCHAR g_sFontNameDefault[ MAX_FONT_NAME ] = TEXT("Courier New"); +// TCHAR g_sFontNameCustom [ MAX_FONT_NAME ] = TEXT("Courier New"); // Arial + TCHAR g_sFontNameConsole[ MAX_FONT_NAME ] = TEXT("Courier New"); + TCHAR g_sFontNameDisasm [ MAX_FONT_NAME ] = TEXT("Courier New"); + TCHAR g_sFontNameInfo [ MAX_FONT_NAME ] = TEXT("Courier New"); + TCHAR g_sFontNameBranch [ MAX_FONT_NAME ] = TEXT("Webdings"); + int g_nFontHeight = 15; // 13 -> 12 Lucida Console is readable + int g_iFontSpacing = FONT_SPACING_CLEAN; +// int g_nFontWidthAvg = 0; +// int g_nFontWidthMax = 0; +// HFONT g_hFontDebugger = (HFONT)0; +// HFONT g_hFontDisasm = (HFONT)0; + HFONT g_hFontWebDings = (HFONT)0; + + + const int MIN_DISPLAY_CONSOLE_LINES = 4; // doesn't include ConsoleInput + + int g_nTotalLines = 0; // DISPLAY_HEIGHT / g_nFontHeight; + int MAX_DISPLAY_DISASM_LINES = 0; // g_nTotalLines - MIN_DISPLAY_CONSOLE_LINES; // 19; + + int MAX_DISPLAY_STACK_LINES = 8; + int MAX_DISPLAY_CONSOLE_LINES = 0; // MAX_DISPLAY_DISASM_LINES + MIN_DISPLAY_CONSOLE_LINES; // 23 + + +// Instructions / Opcodes _________________________________________________________________________ + + +// @reference: http://www.6502.org/tutorials/compare_instructions.html +// 10 signed: BPL BGE +// B0 unsigned: BCS BGE + + int g_bOpcodesHashed = false; + int g_aOpcodesHash[ NUM_OPCODES ]; // for faster mnemonic lookup, for the assembler + +#define R_ MEM_R +#define _W MEM_W +#define RW MEM_R | MEM_W +#define _S MEM_S +#define im MEM_IM +#define SW MEM_S | MEM_WI +#define SR MEM_S | MEM_RI +const Opcodes_t g_aOpcodes65C02[ NUM_OPCODES ] = +{ + {"BRK", 0 , 0}, {"ORA", AM_IZX, R_}, {"NOP", AM_2 , 0 }, {"NOP", AM_1 , 0 }, // 00 .. 03 + {"TSB", AM_Z , _W}, {"ORA", AM_Z , R_}, {"ASL", AM_Z , RW}, {"NOP", AM_1 , 0 }, // 04 .. 07 + {"PHP", 0 , SW}, {"ORA", AM_M , im}, {"ASL", 0 , 0}, {"NOP", AM_1 , 0 }, // 08 .. 0B + {"TSB", AM_A , _W}, {"ORA", AM_A , R_}, {"ASL", AM_A , RW}, {"NOP", AM_3 , 0 }, // 0C .. 0F + {"BPL", AM_R , 0}, {"ORA", AM_NZY, R_}, {"ORA", AM_NZ , R_}, {"NOP", AM_1 , 0 }, // 10 .. 13 + {"TRB", AM_Z , _W}, {"ORA", AM_ZX , R_}, {"ASL", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // 14 .. 17 + {"CLC", 0 , 0}, {"ORA", AM_AY , R_}, {"INA", 0 , 0}, {"NOP", AM_1 , 0 }, // 18 .. 1B + {"TRB", AM_A , _W}, {"ORA", AM_AX , R_}, {"ASL", AM_AX , RW}, {"NOP", AM_1 , 0 }, // 1C .. 1F + + {"JSR", AM_A , SW}, {"AND", AM_IZX, R_}, {"NOP", AM_2 , 0}, {"NOP", AM_1 , 0 }, // 20 .. 23 + {"BIT", AM_Z , R_}, {"AND", AM_Z , R_}, {"ROL", AM_Z , RW}, {"NOP", AM_1 , 0 }, // 24 .. 27 + {"PLP", 0 , SR}, {"AND", AM_M , im}, {"ROL", 0 , 0}, {"NOP", AM_1 , 0 }, // 28 .. 2B + {"BIT", AM_A , R_}, {"AND", AM_A , R_}, {"ROL", AM_A , RW}, {"NOP", AM_3 , 0 }, // 2C .. 2F + {"BMI", AM_R , 0}, {"AND", AM_NZY, R_}, {"AND", AM_NZ , R_}, {"NOP", AM_1 , 0 }, // 30 .. 33 + {"BIT", AM_ZX , R_}, {"AND", AM_ZX , R_}, {"ROL", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // 34 .. 37 + {"SEC", 0 , 0}, {"AND", AM_AY , R_}, {"DEA", 0 , 0}, {"NOP", AM_1 , 0 }, // 38 .. 3B + {"BIT", AM_AX , R_}, {"AND", AM_AX , R_}, {"ROL", AM_AX , RW}, {"NOP", AM_1 , 0 }, // 3C .. 3F + + {"RTI", 0 , 0}, {"EOR", AM_IZX, R_}, {"NOP", AM_2 , 0}, {"NOP", AM_1 , 0 }, // 40 .. 43 + {"NOP", AM_2 , 0}, {"EOR", AM_Z , R_}, {"LSR", AM_Z , _W}, {"NOP", AM_1 , 0 }, // 44 .. 47 + {"PHA", 0 , SW}, {"EOR", AM_M , im}, {"LSR", 0 , 0}, {"NOP", AM_1 , 0 }, // 48 .. 4B + {"JMP", AM_A , 0}, {"EOR", AM_A , R_}, {"LSR", AM_A , _W}, {"NOP", AM_1 , 0 }, // 4C .. 4F + {"BVC", AM_R , 0}, {"EOR", AM_NZY, R_}, {"EOR", AM_NZ , R_}, {"NOP", AM_1 , 0 }, // 50 .. 53 + {"NOP", AM_2 , 0}, {"EOR", AM_ZX , R_}, {"LSR", AM_ZX , _W}, {"NOP", AM_1 , 0 }, // 54 .. 57 + {"CLI", 0 , 0}, {"EOR", AM_AY , R_}, {"PHY", 0 , SW}, {"NOP", AM_1 , 0 }, // 58 .. 5B + {"NOP", AM_3 , 0}, {"EOR", AM_AX , R_}, {"LSR", AM_AX , RW}, {"NOP", AM_1 , 0 }, // 5C .. 5F + + {"RTS", 0 , SR}, {"ADC", AM_IZX, R_}, {"NOP", AM_2 , 0}, {"NOP", AM_1 , 0 }, // 60 .. 63 + {"STZ", AM_Z , _W}, {"ADC", AM_Z , R_}, {"ROR", AM_Z , RW}, {"NOP", AM_1 , 0 }, // 64 .. 67 + {"PLA", 0 , SR}, {"ADC", AM_M , im}, {"ROR", 0 , 0}, {"NOP", AM_1 , 0 }, // 68 .. 6B + {"JMP", AM_NA , 0}, {"ADC", AM_A , R_}, {"ROR", AM_A , RW}, {"NOP", AM_1 , 0 }, // 6C .. 6F + {"BVS", AM_R , 0}, {"ADC", AM_NZY, R_}, {"ADC", AM_NZ , R_}, {"NOP", AM_1 , 0 }, // 70 .. 73 + {"STZ", AM_ZX , _W}, {"ADC", AM_ZX , R_}, {"ROR", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // 74 .. 77 + {"SEI", 0 , 0}, {"ADC", AM_AY , R_}, {"PLY", 0 , SR}, {"NOP", AM_1 , 0 }, // 78 .. 7B + {"JMP", AM_IAX, 0}, {"ADC", AM_AX , R_}, {"ROR", AM_AX , RW}, {"NOP", AM_1 , 0 }, // 7C .. 7F + + {"BRA", AM_R , 0}, {"STA", AM_IZX, _W}, {"NOP", AM_2 , 0}, {"NOP", AM_1 , 0 }, // 80 .. 83 + {"STY", AM_Z , _W}, {"STA", AM_Z , _W}, {"STX", AM_Z , _W}, {"NOP", AM_1 , 0 }, // 84 .. 87 + {"DEY", 0 , 0}, {"BIT", AM_M , im}, {"TXA", 0 , 0}, {"NOP", AM_1 , 0 }, // 88 .. 8B + {"STY", AM_A , _W}, {"STA", AM_A , _W}, {"STX", AM_A , _W}, {"NOP", AM_1 , 0 }, // 8C .. 8F + {"BCC", AM_R , 0}, {"STA", AM_NZY, _W}, {"STA", AM_NZ , _W}, {"NOP", AM_1 , 0 }, // 90 .. 93 + {"STY", AM_ZX , _W}, {"STA", AM_ZX , _W}, {"STX", AM_ZY , _W}, {"NOP", AM_1 , 0 }, // 94 .. 97 + {"TYA", 0 , 0}, {"STA", AM_AY , _W}, {"TXS", 0 , 0}, {"NOP", AM_1 , 0 }, // 98 .. 9B + {"STZ", AM_A , _W}, {"STA", AM_AX , _W}, {"STZ", AM_AX , _W}, {"NOP", AM_1 , 0 }, // 9C .. 9F + + {"LDY", AM_M , im}, {"LDA", AM_IZX, R_}, {"LDX", AM_M , im}, {"NOP", AM_1 , 0 }, // A0 .. A3 + {"LDY", AM_Z , R_}, {"LDA", AM_Z , R_}, {"LDX", AM_Z , R_}, {"NOP", AM_1 , 0 }, // A4 .. A7 + {"TAY", 0 , 0}, {"LDA", AM_M , im}, {"TAX", 0 , 0 }, {"NOP", AM_1 , 0 }, // A8 .. AB + {"LDY", AM_A , R_}, {"LDA", AM_A , R_}, {"LDX", AM_A , R_}, {"NOP", AM_1 , 0 }, // AC .. AF + {"BCS", AM_R , 0}, {"LDA", AM_NZY, R_}, {"LDA", AM_NZ , R_}, {"NOP", AM_1 , 0 }, // B0 .. B3 + {"LDY", AM_ZX , R_}, {"LDA", AM_ZX , R_}, {"LDX", AM_ZY , R_}, {"NOP", AM_1 , 0 }, // B4 .. B7 + {"CLV", 0 , 0}, {"LDA", AM_AY , R_}, {"TSX", 0 , 0 }, {"NOP", AM_1 , 0 }, // B8 .. BB + {"LDY", AM_AX , R_}, {"LDA", AM_AX , R_}, {"LDX", AM_AY , R_}, {"NOP", AM_1 , 0 }, // BC .. BF + + {"CPY", AM_M , im}, {"CMP", AM_IZX, R_}, {"NOP", AM_2 , 0}, {"NOP", AM_1 , 0 }, // C0 .. C3 + {"CPY", AM_Z , R_}, {"CMP", AM_Z , R_}, {"DEC", AM_Z , RW}, {"NOP", AM_1 , 0 }, // C4 .. C7 + {"INY", 0 , 0}, {"CMP", AM_M , im}, {"DEX", 0 , 0}, {"NOP", AM_1 , 0 }, // C8 .. CB + {"CPY", AM_A , R_}, {"CMP", AM_A , R_}, {"DEC", AM_A , RW}, {"NOP", AM_1 , 0 }, // CC .. CF + {"BNE", AM_R , 0}, {"CMP", AM_NZY, R_}, {"CMP", AM_NZ , 0}, {"NOP", AM_1 , 0 }, // D0 .. D3 + {"NOP", AM_2 , 0}, {"CMP", AM_ZX , R_}, {"DEC", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // D4 .. D7 + {"CLD", 0 , 0}, {"CMP", AM_AY , R_}, {"PHX", 0 , 0}, {"NOP", AM_1 , 0 }, // D8 .. DB + {"NOP", AM_3 , 0}, {"CMP", AM_AX , R_}, {"DEC", AM_AX , RW}, {"NOP", AM_1 , 0 }, // DC .. DF + + {"CPX", AM_M , im}, {"SBC", AM_IZX, R_}, {"NOP", AM_2 , 0}, {"NOP", AM_1 , 0 }, // E0 .. E3 + {"CPX", AM_Z , R_}, {"SBC", AM_Z , R_}, {"INC", AM_Z , RW}, {"NOP", AM_1 , 0 }, // E4 .. E7 + {"INX", 0 , 0}, {"SBC", AM_M , R_}, {"NOP", 0 , 0}, {"NOP", AM_1 , 0 }, // E8 .. EB + {"CPX", AM_A , R_}, {"SBC", AM_A , R_}, {"INC", AM_A , RW}, {"NOP", AM_1 , 0 }, // EC .. EF + {"BEQ", AM_R , 0}, {"SBC", AM_NZY, R_}, {"SBC", AM_NZ , 0}, {"NOP", AM_1 , 0 }, // F0 .. F3 + {"NOP", AM_2 , 0}, {"SBC", AM_ZX , R_}, {"INC", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // F4 .. F7 + {"SED", 0 , 0}, {"SBC", AM_AY , R_}, {"PLX", 0 , 0}, {"NOP", AM_1 , 0 }, // F8 .. FB + {"NOP", AM_3 , 0}, {"SBC", AM_AX , R_}, {"INC", AM_AX , RW}, {"NOP", AM_1 , 0 } // FF .. FF +}; + +const Opcodes_t g_aOpcodes6502[ NUM_OPCODES ] = +{ // Should match Cpu.cpp InternalCpuExecute() switch (*(mem+regs.pc++)) !! + +/* + Based on: http://axis.llx.com/~nparker/a2/opcodes.html + + If you really want to know what the undocumented --- (n/a) opcodes do, see: + http://www.strotmann.de/twiki/bin/view/APG/AsmUnusedOpcodes + + x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF +0x BRK ORA (d,X) --- --- tsb d ORA d ASL d --- PHP ORA # ASL A --- tsb a ORA a ASL a --- +1x BPL r ORA (d),Y ora (d) --- trb d ORA d,X ASL d,X --- CLC ORA a,Y ina A --- trb a ORA a,X ASL a,X --- +2x JSR a AND (d,X) --- --- BIT d AND d ROL d --- PLP AND # ROL A --- BIT a AND a ROL a --- +3x BMI r AND (d),Y and (d) --- bit d,X AND d,X ROL d,X --- SEC AND a,Y dea A --- bit a,X AND a,X ROL a,X --- +4x RTI EOR (d,X) --- --- --- EOR d LSR d --- PHA EOR # LSR A --- JMP a EOR a LSR a --- +5x BVC r EOR (d),Y eor (d) --- --- EOR d,X LSR d,X --- CLI EOR a,Y phy --- --- EOR a,X LSR a,X --- +6x RTS ADC (d,X) --- --- stz d ADC d ROR d --- PLA ADC # ROR A --- JMP (a) ADC a ROR a --- +7x BVS r ADC (d),Y adc (d) --- stz d,X ADC d,X ROR d,X --- SEI ADC a,Y ply --- jmp (a,X) ADC a,X ROR a,X --- +8x bra r STA (d,X) --- --- STY d STA d STX d --- DEY bit # TXA --- STY a STA a STX a --- +9x BCC r STA (d),Y sta (d) --- STY d,X STA d,X STX d,Y --- TYA STA a,Y TXS --- Stz a STA a,X stz a,X --- +Ax LDY # LDA (d,X) LDX # --- LDY d LDA d LDX d --- TAY LDA # TAX --- LDY a LDA a LDX a --- +Bx BCS r LDA (d),Y lda (d) --- LDY d,X LDA d,X LDX d,Y --- CLV LDA a,Y TSX --- LDY a,X LDA a,X LDX a,Y --- +Cx CPY # CMP (d,X) --- --- CPY d CMP d DEC d --- INY CMP # DEX --- CPY a CMP a DEC a --- +Dx BNE r CMP (d),Y cmp (d) --- --- CMP d,X DEC d,X --- CLD CMP a,Y phx --- --- CMP a,X DEC a,X --- +Ex CPX # SBC (d,X) --- --- CPX d SBC d INC d --- INX SBC # NOP --- CPX a SBC a INC a --- +Fx BEQ r SBC (d),Y sbc (d) --- --- SBC d,X INC d,X --- SED SBC a,Y plx --- --- SBC a,X INC a,X --- + + Legend: + UPPERCASE 6502 + lowercase 65C02 + 80 + 12, 32, 52, 72, 92, B2, D2, F2 + 04, 14, 34, 64, 74 + 89 + 1A, 3A, 5A, 7A, DA, FA + 0C, 1C, 3C, 7C, 9C; + # Immediate + A Accumulator (implicit for mnemonic) + a absolute + r Relative + d Destination + z Zero Page + d,x + (d,X) + (d),Y + +*/ + // x3 x7 xB xF are never used + {TEXT("BRK"), 0 , 0 }, // 00h + {TEXT("ORA"), ADDR_INDX , R_ }, // 01h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 02h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 03h + {TEXT("TSB"), ADDR_ZP , _W }, // 04h // 65C02 + {TEXT("ORA"), ADDR_ZP , R_ }, // 05h + {TEXT("ASL"), ADDR_ZP , _W }, // 06h // MEM_R ? + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 07h + {TEXT("PHP"), 0 , SW }, // 08h + {TEXT("ORA"), ADDR_IMM , im }, // 09h + {TEXT("ASL"), 0 , 0 }, // 0Ah // MEM_IMPLICIT + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 0Bh + {TEXT("TSB"), ADDR_ABS , _W }, // 0Ch // 65C02 + {TEXT("ORA"), ADDR_ABS , R_ }, // 0Dh + {TEXT("ASL"), ADDR_ABS , _W }, // 0Eh // MEM_R ? + {TEXT("NOP"), ADDR_INVALID3 , 0 }, // 0Fh + {TEXT("BPL"), ADDR_REL , 0 }, // 10h // signed: BGE @reference: http://www.6502.org/tutorials/compare_instructions.html + {TEXT("ORA"), ADDR_INDY , R_ }, // 11h + {TEXT("ORA"), ADDR_IZPG , R_ }, // 12h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 13h + {TEXT("TRB"), ADDR_ZP , _W }, // 14h + {TEXT("ORA"), ADDR_ZP_X , R_ }, // 15h + {TEXT("ASL"), ADDR_ZP_X , _W }, // 16h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 17h + {TEXT("CLC"), 0 , 0 }, // 18h + {TEXT("ORA"), ADDR_ABSY , R_ }, // 19h + {TEXT("INA"), 0 , 0 }, // 1Ah INC A + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 1Bh + {TEXT("TRB"), ADDR_ABS , _W }, // 1Ch + {TEXT("ORA"), ADDR_ABSX , R_ }, // 1Dh + {TEXT("ASL"), ADDR_ABSX }, // 1Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 1Fh + {TEXT("JSR"), ADDR_ABS }, // 20h + {TEXT("AND"), ADDR_INDX }, // 21h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 22h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 23h + {TEXT("BIT"), ADDR_ZP }, // 24h + {TEXT("AND"), ADDR_ZP }, // 25h + {TEXT("ROL"), ADDR_ZP }, // 26h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 27h + {TEXT("PLP"), 0 }, // 28h + {TEXT("AND"), ADDR_IMM }, // 29h + {TEXT("ROL"), 0 }, // 2Ah + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 2Bh + {TEXT("BIT"), ADDR_ABS }, // 2Ch + {TEXT("AND"), ADDR_ABS }, // 2Dh + {TEXT("ROL"), ADDR_ABS }, // 2Eh + {TEXT("NOP"), ADDR_INVALID3 , 0 }, // 2Fh + {TEXT("BMI"), ADDR_REL }, // 30h + {TEXT("AND"), ADDR_INDY }, // 31h + {TEXT("AND"), ADDR_IZPG }, // 32h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 33h + {TEXT("BIT"), ADDR_ZP_X }, // 34h + {TEXT("AND"), ADDR_ZP_X }, // 35h + {TEXT("ROL"), ADDR_ZP_X }, // 36h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 37h + {TEXT("SEC"), 0 }, // 38h + {TEXT("AND"), ADDR_ABSY }, // 39h + {TEXT("DEA"), 0 }, // 3Ah + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 3Bh + {TEXT("BIT"), ADDR_ABSX }, // 3Ch + {TEXT("AND"), ADDR_ABSX }, // 3Dh + {TEXT("ROL"), ADDR_ABSX }, // 3Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 3Fh + {TEXT("RTI"), 0 , 0 }, // 40h + {TEXT("EOR"), ADDR_INDX }, // 41h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 42h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 43h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 44h + {TEXT("EOR"), ADDR_ZP }, // 45h + {TEXT("LSR"), ADDR_ZP , _W }, // 46h // MEM_R ? + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 47h + {TEXT("PHA"), 0 }, // 48h // MEM_WRITE_IMPLIED | MEM_STACK + {TEXT("EOR"), ADDR_IMM }, // 49h + {TEXT("LSR"), 0 }, // 4Ah + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 4Bh + {TEXT("JMP"), ADDR_ABS }, // 4Ch + {TEXT("EOR"), ADDR_ABS }, // 4Dh + {TEXT("LSR"), ADDR_ABS , _W }, // 4Eh // MEM_R ? + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 4Fh + {TEXT("BVC"), ADDR_REL }, // 50h + {TEXT("EOR"), ADDR_INDY }, // 51h + {TEXT("EOR"), ADDR_IZPG }, // 52h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 53h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 54h + {TEXT("EOR"), ADDR_ZP_X }, // 55h + {TEXT("LSR"), ADDR_ZP_X , _W }, // 56h // MEM_R ? + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 57h + {TEXT("CLI"), 0 }, // 58h + {TEXT("EOR"), ADDR_ABSY }, // 59h + {TEXT("PHY"), 0 }, // 5Ah + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 5Bh + {TEXT("NOP"), ADDR_INVALID3 , 0 }, // 5Ch + {TEXT("EOR"), ADDR_ABSX }, // 5Dh + {TEXT("LSR"), ADDR_ABSX }, // 5Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 5Fh + {TEXT("RTS"), 0 , SR }, // 60h + {TEXT("ADC"), ADDR_INDX }, // 61h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 62h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 63h + {TEXT("STZ"), ADDR_ZP }, // 64h + {TEXT("ADC"), ADDR_ZP }, // 65h + {TEXT("ROR"), ADDR_ZP }, // 66h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 67h + {TEXT("PLA"), 0 , SW }, // 68h + {TEXT("ADC"), ADDR_IMM }, // 69h + {TEXT("ROR"), 0 }, // 6Ah + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 6Bh + {TEXT("JMP"), ADDR_IABS }, // 6Ch + {TEXT("ADC"), ADDR_ABS }, // 6Dh + {TEXT("ROR"), ADDR_ABS }, // 6Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 6Fh + {TEXT("BVS"), ADDR_REL }, // 70h + {TEXT("ADC"), ADDR_INDY }, // 71h + {TEXT("ADC"), ADDR_IZPG }, // 72h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 73h + {TEXT("STZ"), ADDR_ZP_X }, // 74h + {TEXT("ADC"), ADDR_ZP_X }, // 75h + {TEXT("ROR"), ADDR_ZP_X }, // 76h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 77h + {TEXT("SEI"), 0 }, // 78h + {TEXT("ADC"), ADDR_ABSY }, // 79h + {TEXT("PLY"), 0 , SR }, // 7Ah + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 7Bh + {TEXT("JMP"), ADDR_ABSIINDX }, // 7Ch + {TEXT("ADC"), ADDR_ABSX }, // 7Dh + {TEXT("ROR"), ADDR_ABSX }, // 7Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 7Fh + {TEXT("BRA"), ADDR_REL }, // 80h + {TEXT("STA"), ADDR_INDX , _W }, // 81h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // 82h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 83h + {TEXT("STY"), ADDR_ZP , _W }, // 84h + {TEXT("STA"), ADDR_ZP , _W }, // 85h + {TEXT("STX"), ADDR_ZP , _W }, // 86h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 87h + {TEXT("DEY"), 0 , 0 }, // 88h // Explicit + {TEXT("BIT"), ADDR_IMM }, // 89h + {TEXT("TXA"), 0 , 0 }, // 8Ah // Explicit + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 8Bh + {TEXT("STY"), ADDR_ABS , _W }, // 8Ch + {TEXT("STA"), ADDR_ABS , _W }, // 8Dh + {TEXT("STX"), ADDR_ABS , _W }, // 8Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 8Fh + {TEXT("BCC"), ADDR_REL , 0 }, // 90h // MEM_IMMEDIATE + {TEXT("STA"), ADDR_INDY , _W }, // 91h + {TEXT("STA"), ADDR_IZPG , _W }, // 92h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 93h + {TEXT("STY"), ADDR_ZP_X , _W }, // 94h + {TEXT("STA"), ADDR_ZP_X , _W }, // 95h + {TEXT("STX"), ADDR_ZP_Y , _W }, // 96h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 97h + {TEXT("TYA"), 0 , 0 }, // 98h // Explicit + {TEXT("STA"), ADDR_ABSY , _W }, // 99h + {TEXT("TXS"), 0 , 0 }, // 9Ah // EXplicit + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 9Bh + {TEXT("STZ"), ADDR_ABS , _W }, // 9Ch + {TEXT("STA"), ADDR_ABSX , _W }, // 9Dh + {TEXT("STZ"), ADDR_ABSX , _W }, // 9Eh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // 9Fh + {TEXT("LDY"), ADDR_IMM , 0 }, // A0h // MEM_IMMEDIATE + {TEXT("LDA"), ADDR_INDX , R_ }, // A1h + {TEXT("LDX"), ADDR_IMM , 0 }, // A2h // MEM_IMMEDIATE + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // A3h + {TEXT("LDY"), ADDR_ZP , R_ }, // A4h + {TEXT("LDA"), ADDR_ZP , R_ }, // A5h + {TEXT("LDX"), ADDR_ZP , R_ }, // A6h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // A7h + {TEXT("TAY"), 0 , 0 }, // A8h // Explicit + {TEXT("LDA"), ADDR_IMM , 0 }, // A9h // MEM_IMMEDIATE + {TEXT("TAX"), 0 , 0 }, // AAh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // ABh + {TEXT("LDY"), ADDR_ABS , R_ }, // ACh + {TEXT("LDA"), ADDR_ABS , R_ }, // ADh + {TEXT("LDX"), ADDR_ABS , R_ }, // AEh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // AFh + {TEXT("BCS"), ADDR_REL , 0 }, // B0h // MEM_IMMEDIATE // unsigned: BGE + {TEXT("LDA"), ADDR_INDY , R_ }, // B1h + {TEXT("LDA"), ADDR_IZPG , R_ }, // B2h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // B3h + {TEXT("LDY"), ADDR_ZP_X , R_ }, // B4h + {TEXT("LDA"), ADDR_ZP_X , R_ }, // B5h + {TEXT("LDX"), ADDR_ZP_Y , R_ }, // B6h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // B7h + {TEXT("CLV"), 0 , 0 }, // B8h // Explicit + {TEXT("LDA"), ADDR_ABSY , R_ }, // B9h + {TEXT("TSX"), 0 , 0 }, // BAh // Explicit + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // BBh + {TEXT("LDY"), ADDR_ABSX , R_ }, // BCh + {TEXT("LDA"), ADDR_ABSX , R_ }, // BDh + {TEXT("LDX"), ADDR_ABSY , R_ }, // BEh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // BFh + {TEXT("CPY"), ADDR_IMM }, // C0h + {TEXT("CMP"), ADDR_INDX }, // C1h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // C2h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // C3h + {TEXT("CPY"), ADDR_ZP }, // C4h + {TEXT("CMP"), ADDR_ZP }, // C5h + {TEXT("DEC"), ADDR_ZP }, // C6h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // C7h + {TEXT("INY"), 0 }, // C8h + {TEXT("CMP"), ADDR_IMM }, // C9h + {TEXT("DEX"), 0 }, // CAh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // CBh + {TEXT("CPY"), ADDR_ABS }, // CCh + {TEXT("CMP"), ADDR_ABS }, // CDh + {TEXT("DEC"), ADDR_ABS }, // CEh + {TEXT("NOP"), ADDR_INVALID1 }, // CFh + {TEXT("BNE"), ADDR_REL }, // D0h + {TEXT("CMP"), ADDR_INDY }, // D1h + {TEXT("CMP"), ADDR_IZPG }, // D2h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // D3h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // D4h + {TEXT("CMP"), ADDR_ZP_X }, // D5h + {TEXT("DEC"), ADDR_ZP_X }, // D6h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // D7h + {TEXT("CLD"), 0 }, // D8h + {TEXT("CMP"), ADDR_ABSY }, // D9h + {TEXT("PHX"), 0 }, // DAh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // DBh + {TEXT("NOP"), ADDR_INVALID3 , 0 }, // DCh + {TEXT("CMP"), ADDR_ABSX }, // DDh + {TEXT("DEC"), ADDR_ABSX }, // DEh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // DFh + {TEXT("CPX"), ADDR_IMM }, // E0h + {TEXT("SBC"), ADDR_INDX }, // E1h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // E2h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // E3h + {TEXT("CPX"), ADDR_ZP }, // E4h + {TEXT("SBC"), ADDR_ZP }, // E5h + {TEXT("INC"), ADDR_ZP }, // E6h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // E7h + {TEXT("INX"), 0 }, // E8h + {TEXT("SBC"), ADDR_IMM }, // E9h + {TEXT("NOP"), 0 , 0 }, // EAh + {TEXT("NOP"), ADDR_INVALID1 }, // EBh + {TEXT("CPX"), ADDR_ABS }, // ECh + {TEXT("SBC"), ADDR_ABS }, // EDh + {TEXT("INC"), ADDR_ABS }, // EEh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // EFh + {TEXT("BEQ"), ADDR_REL }, // F0h + {TEXT("SBC"), ADDR_INDY }, // F1h + {TEXT("SBC"), ADDR_IZPG }, // F2h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // F3h + {TEXT("NOP"), ADDR_INVALID2 , 0 }, // F4h + {TEXT("SBC"), ADDR_ZP_X }, // F5h + {TEXT("INC"), ADDR_ZP_X }, // F6h + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // F7h + {TEXT("SED"), 0 }, // F8h + {TEXT("SBC"), ADDR_ABSY }, // F9h + {TEXT("PLX"), 0 }, // FAh + {TEXT("NOP"), ADDR_INVALID1 , 0 }, // FBh + {TEXT("NOP"), ADDR_INVALID3 , 0 }, // FCh + {TEXT("SBC"), ADDR_ABSX }, // FDh + {TEXT("INC"), ADDR_ABSX }, // FEh + {TEXT("NOP"), ADDR_INVALID1 , 0 } // FFh +}; + +#undef R_ +#undef _W +#undef RW +#undef _S +#undef im +#undef SW +#undef SR + + const Opcodes_t *g_aOpcodes = NULL; // & g_aOpcodes65C02[ 0 ]; + + +// Memory _________________________________________________________________________________________ + MemoryDump_t g_aMemDump[ NUM_MEM_DUMPS ]; + + +// Parameters _____________________________________________________________________________________ + + // NOTE: Order MUST match Parameters_e[] !!! + Command_t g_aParameters[] = + { +// Breakpoint + {TEXT("<=") , NULL, PARAM_BP_LESS_EQUAL }, + {TEXT("<" ) , NULL, PARAM_BP_LESS_THAN }, + {TEXT("=" ) , NULL, PARAM_BP_EQUAL }, + {TEXT("!" ) , NULL, PARAM_BP_NOT_EQUAL }, + {TEXT(">" ) , NULL, PARAM_BP_GREATER_THAN }, + {TEXT(">=") , NULL, PARAM_BP_GREATER_EQUAL }, + {TEXT("R") , NULL, PARAM_BP_READ }, + {TEXT("?") , NULL, PARAM_BP_READ }, + {TEXT("W") , NULL, PARAM_BP_WRITE }, + {TEXT("@") , NULL, PARAM_BP_WRITE }, + {TEXT("*") , NULL, PARAM_BP_READ_WRITE }, +// Regs (for PUSH / POP) + {TEXT("A") , NULL, PARAM_REG_A }, + {TEXT("X") , NULL, PARAM_REG_X }, + {TEXT("Y") , NULL, PARAM_REG_Y }, + {TEXT("PC") , NULL, PARAM_REG_PC }, + {TEXT("S") , NULL, PARAM_REG_SP }, +// Flags + {TEXT("P") , NULL, PARAM_FLAGS }, + {TEXT("C") , NULL, PARAM_FLAG_C }, // ---- ---1 Carry + {TEXT("Z") , NULL, PARAM_FLAG_Z }, // ---- --1- Zero + {TEXT("I") , NULL, PARAM_FLAG_I }, // ---- -1-- Interrupt + {TEXT("D") , NULL, PARAM_FLAG_D }, // ---- 1--- Decimal + {TEXT("B") , NULL, PARAM_FLAG_B }, // ---1 ---- Break + {TEXT("R") , NULL, PARAM_FLAG_R }, // --1- ---- Reserved + {TEXT("V") , NULL, PARAM_FLAG_V }, // -1-- ---- Overflow + {TEXT("N") , NULL, PARAM_FLAG_N }, // 1--- ---- Sign +// Font + {TEXT("MODE") , NULL, PARAM_FONT_MODE }, // also INFO, CONSOLE, DISASM (from Window) +// General + {TEXT("FIND") , NULL, PARAM_FIND }, + {TEXT("CLEAR") , NULL, PARAM_CLEAR }, + {TEXT("LOAD") , NULL, PARAM_LOAD }, + {TEXT("LIST") , NULL, PARAM_LIST }, + {TEXT("OFF") , NULL, PARAM_OFF }, + {TEXT("ON") , NULL, PARAM_ON }, + {TEXT("RESET") , NULL, PARAM_RESET }, + {TEXT("SAVE") , NULL, PARAM_SAVE }, + {TEXT("START") , NULL, PARAM_START }, // benchmark + {TEXT("STOP") , NULL, PARAM_STOP }, // benchmark +// Help Categories + {TEXT("*") , NULL, PARAM_WILDSTAR }, + {TEXT("BREAKPOINTS"), NULL, PARAM_CAT_BREAKPOINTS }, + {TEXT("CONFIG") , NULL, PARAM_CAT_CONFIG }, + {TEXT("CPU") , NULL, PARAM_CAT_CPU }, + {TEXT("FLAGS") , NULL, PARAM_CAT_FLAGS }, + {TEXT("MEMORY") , NULL, PARAM_CAT_MEMORY }, + {TEXT("MEM") , NULL, PARAM_CAT_MEMORY }, // alias // SOURCE [SYMBOLS] [MEMORY] filename + {TEXT("SYMBOLS") , NULL, PARAM_CAT_SYMBOLS }, + {TEXT("WATCHES") , NULL, PARAM_CAT_WATCHES }, + {TEXT("WINDOW") , NULL, PARAM_CAT_WINDOW }, + {TEXT("ZEROPAGE") , NULL, PARAM_CAT_ZEROPAGE }, +// Source level debugging + {TEXT("MEM") , NULL, PARAM_SRC_MEMORY }, + {TEXT("MEMORY") , NULL, PARAM_SRC_MEMORY }, + {TEXT("SYM") , NULL, PARAM_SRC_SYMBOLS }, + {TEXT("SYMBOLS") , NULL, PARAM_SRC_SYMBOLS }, + {TEXT("MERLIN") , NULL, PARAM_SRC_MERLIN }, + {TEXT("ORCA") , NULL, PARAM_SRC_ORCA }, +// Window Win Cmd WinEffects CmdEffects + {TEXT("CODE") , NULL, PARAM_CODE }, // x x code win only switch to code window +// {TEXT("CODE1") , NULL, PARAM_CODE_1 }, // - x code/data win + {TEXT("CODE2") , NULL, PARAM_CODE_2 }, // - x code/data win + {TEXT("CONSOLE") , NULL, PARAM_CONSOLE }, // x - switch to console window + {TEXT("DATA") , NULL, PARAM_DATA }, // x x data win only switch to data window +// {TEXT("DATA1") , NULL, PARAM_DATA_1 }, // - x code/data win + {TEXT("DATA2") , NULL, PARAM_DATA_2 }, // - x code/data win + {TEXT("DISASM") , NULL, PARAM_DISASM }, // + {TEXT("INFO") , NULL, PARAM_INFO }, // - x code/data Toggles showing/hiding Regs/Stack/BP/Watches/ZP + {TEXT("SOURCE") , NULL, PARAM_SOURCE }, // x x switch to source window + {TEXT("SRC") , NULL, PARAM_SOURCE }, // alias +// {TEXT("SOURCE_1") , NULL, PARAM_SOURCE_1 }, // - x code/data + {TEXT("SOURCE2 ") , NULL, PARAM_SOURCE_2 }, // - x + {TEXT("SYMBOLS") , NULL, PARAM_SYMBOLS }, // x x code/data win switch to symbols window + {TEXT("SYM") , NULL, PARAM_SYMBOLS }, // alias x SOURCE [SYM] [MEM] filename +// {TEXT("SYMBOL1") , NULL, PARAM_SYMBOL_1 }, // - x code/data win + {TEXT("SYMBOL2") , NULL, PARAM_SYMBOL_2 }, // - x code/data win +// Internal Consistency Check + { TEXT( __PARAMS_VERIFY_TXT__), NULL, NUM_PARAMS }, + }; + +// Profile + const int NUM_PROFILE_LINES = NUM_OPCODES + NUM_OPMODES + 16; + + ProfileOpcode_t g_aProfileOpcodes[ NUM_OPCODES ]; + ProfileOpmode_t g_aProfileOpmodes[ NUM_OPMODES ]; + + TCHAR g_FileNameProfile[] = TEXT("Profile.txt"); // changed from .csv to .txt since Excel doesn't give import options. + int g_nProfileLine = 0; + char g_aProfileLine[ NUM_PROFILE_LINES ][ CONSOLE_WIDTH ]; + + void ProfileReset (); + bool ProfileSave (); + void ProfileFormat( bool bSeperateColumns, ProfileFormat_e eFormatMode ); + + char * ProfileLinePeek ( int iLine ); + char * ProfileLinePush (); + void ProfileLineReset (); + + +// Source Level Debugging _________________________________________________________________________ + bool g_bSourceLevelDebugging = false; + bool g_bSourceAddSymbols = false; + bool g_bSourceAddMemory = false; + + TCHAR g_aSourceFileName[ MAX_PATH ] = TEXT(""); + TCHAR g_aSourceFontName[ MAX_FONT_NAME ] = TEXT("Arial"); + int g_nSourceBuffer = 0; // Allocated bytes for buffer + char *g_pSourceBuffer = NULL; // Buffer of File + vector g_vSourceLines; // array of pointers to start of lines + + int g_iSourceDisplayStart = 0; +// int g_nSourceDisplayTotal = 0; + + int g_nSourceAssembleBytes = 0; + int g_nSourceAssemblyLines = 0; + int g_nSourceAssemblySymbols = 0; + + // TODO: Support multiple source filenames + SourceAssembly_t g_aSourceDebug; + + +// Symbols ________________________________________________________________________________________ + TCHAR * g_aSymbolTableNames[ NUM_SYMBOL_TABLES ] = + { + TEXT("Main"), + TEXT("User"), + TEXT("Src" ) + }; + + SymbolTable_t g_aSymbols[ NUM_SYMBOL_TABLES ]; + int g_nSymbolsLoaded = 0; // on Last Load + bool g_aConfigSymbolsDisplayed[ NUM_SYMBOL_TABLES ] = + { + true, + true, + true + }; + + +// Watches ________________________________________________________________________________________ + int g_nWatches = 0; + Watches_t g_aWatches[ MAX_WATCHES ]; // use vector ?? + + +// Window _________________________________________________________________________________________ + int g_iWindowLast = WINDOW_CODE; + int g_iWindowThis = WINDOW_CODE; + WindowSplit_t g_aWindowConfig[ NUM_WINDOWS ]; + + +// Zero Page Pointers _____________________________________________________________________________ + int g_nZeroPagePointers = 0; + ZeroPagePointers_t g_aZeroPagePointers[ MAX_ZEROPAGE_POINTERS ]; // TODO: use vector<> ? + + + enum DebugConfigVersion_e + { + VERSION_0, + CURRENT_VERSION = VERSION_0 + }; + + +// Misc. __________________________________________________________________________________________ + + TCHAR g_FileNameConfig [] = TEXT("Debug.cfg"); // CONFIGSAVE + TCHAR g_FileNameSymbolsMain[] = TEXT("APPLE2E.SYM"); + TCHAR g_FileNameSymbolsUser[ MAX_PATH ] = TEXT(""); + TCHAR g_FileNameTrace [] = TEXT("Trace.txt"); + + bool g_bBenchmarking = false; + + BOOL fulldisp = 0; + WORD lastpc = 0; + LPBYTE membank = NULL; + + BOOL g_bProfiling = 0; + int g_nDebugSteps = 0; + DWORD g_nDebugStepCycles = 0; + int g_nDebugStepStart = 0; + int g_nDebugStepUntil = -1; + + int g_nDebugSkipStart = 0; + int g_nDebugSkipLen = 0; + + FILE *g_hTraceFile = NULL; + +// PUBLIC + DWORD extbench = 0; + bool g_bDebuggerViewingAppleOutput = false; + +// Prototypes _______________________________________________________________ + +// Command Processing + Update_t Help_Arg_1( int iCommandHelp ); + int _Arg_1 ( int nValue ); + int _Arg_1 ( LPTSTR pName ); + int _Arg_Shift ( int iSrc, int iEnd, int iDst = 0 ); + void ArgsClear (); + int ArgsGet (TCHAR *pInput); + int ArgsParse (const int nArgs); + + void DisplayAmbigiousCommands ( int nFound ); + + enum Match_e + { + MATCH_EXACT, + MATCH_FUZZY + }; + int FindParam( LPTSTR pLookupName, Match_e eMatch, int & iParam_, const int iParamBegin = 0, const int iParamEnd = NUM_PARAMS - 1 ); + int FindCommand( LPTSTR pName, CmdFuncPtr_t & pFunction_, int * iCommand_ = NULL ); + + int ParseConsoleInput( LPTSTR pConsoleInput ); + +// Console +// DWORD _Color( int iWidget ); + + // Buffered + void ConsoleBufferToDisplay(); + LPCSTR ConsoleBufferPeek(); + void ConsoleBufferPop(); + bool ConsoleBufferPush( const TCHAR * pString ); + + // Display + Update_t ConsoleDisplayError (LPCTSTR errortext); + void ConsoleDisplayPause (); + void ConsoleDisplayPush ( LPCSTR pText ); + Update_t ConsoleUpdate (); + + // Input + void ConsoleInputToDisplay(); + LPCSTR ConsoleInputPeek (); + bool ConsoleInputClear (); + bool ConsoleInputBackSpace(); + bool ConsoleInputChar ( TCHAR ch ); + void ConsoleInputReset (); + int ConsoleInputTabCompletion(); + + // Scrolling + Update_t ConsoleScrollHome (); + Update_t ConsoleScrollEnd (); + Update_t ConsoleScrollUp ( int nLines ); + Update_t ConsoleScrollDn ( int nLines ); + Update_t ConsoleScrollPageUp (); + Update_t ConsoleScrollPageDn (); + +// Source Level Debugging + bool BufferAssemblyListing ( TCHAR * pFileName ); + bool ParseAssemblyListing ( bool bBytesToMemory, bool bAddSymbols ); + +// Font + void _UpdateWindowFontHeights(int nFontHeight); + +// Drawing + COLORREF DebugGetColor ( int iColor ); + bool DebugSetColor ( const int iScheme, const int iColor, const COLORREF nColor ); + void _CmdColorGet ( const int iScheme, const int iColor ); + + HDC g_hDC = 0; + + int DebugDrawText ( LPCTSTR pText, RECT & rRect ); + int DebugDrawTextFixed ( LPCTSTR pText, RECT & rRect ); + int DebugDrawTextLine ( LPCTSTR pText, RECT & rRect ); + int DebugDrawTextHorz ( LPCTSTR pText, RECT & rRect ); + + + void DrawWindow_Source (Update_t bUpdate); + + void DrawSubWindow_IO (Update_t bUpdate); + void DrawSubWindow_Source1 (Update_t bUpdate); + void DrawSubWindow_Source2 (Update_t bUpdate); + void DrawSubWindow_Symbols (Update_t bUpdate); + void DrawSubWindow_ZeroPage (Update_t bUpdate); + + void DrawBreakpoints (HDC dc, int line); + void DrawConsoleInput (HDC dc); + void DrawConsoleLine (LPCSTR pText, int y); + WORD DrawDisassemblyLine (HDC dc, int line, WORD offset, LPTSTR text); + void DrawFlags (HDC dc, int line, WORD nRegFlags, LPTSTR pFlagNames_); + void DrawMemory (HDC dc, int line, int iMem ); + void DrawRegister (HDC dc, int line, LPCTSTR name, int bytes, WORD value, int iSource = 0 ); + void DrawStack (HDC dc, int line); + void DrawTargets (HDC dc, int line); + void DrawWatches (HDC dc, int line); + void DrawZeroPagePointers (HDC dc, int line); + + void UpdateDisplay( Update_t bUpdate ); + +// Symbol Table / Memory + Update_t _CmdSymbolsClear ( Symbols_e eSymbolTable ); + Update_t _CmdSymbolsCommon ( int nArgs, int bSymbolTables ); + Update_t _CmdSymbolsListTables (int nArgs, int bSymbolTables ); + Update_t _CmdSymbolsUpdate ( int nArgs ); + + bool _CmdSymbolList_Address2Symbol( int nAddress , int bSymbolTables ); + bool _CmdSymbolList_Symbol2Address( LPCTSTR pSymbol, int bSymbolTables ); + + bool FindAddressFromSymbol( LPCSTR pSymbol, WORD * pAddress_ = NULL, int * iTable_ = NULL ); + WORD GetAddressFromSymbol (LPCTSTR symbol); // -PATCH MJP, HACK: returned 0 if symbol not found + + LPCTSTR FindSymbolFromAddress (WORD nAdress, int * iTable_ = NULL ); + LPCTSTR GetSymbol (WORD nAddress, int nBytes); + bool Get6502Targets (int *pTemp_, int *pFinal_, int *pBytes_ ); + +// Window + void _WindowJoin (); + void _WindowSplit (Window_e eNewBottomWindow ); + void _WindowLast (); + void _WindowSwitch ( int eNewWindow ); + int WindowGetHeight ( int iWindow ); + void WindowUpdateDisasmSize (); + void WindowUpdateConsoleDisplayedSize (); + void WindowUpdateSizes (); + Update_t _CmdWindowViewFull (int iNewWindow); + Update_t _CmdWindowViewCommon (int iNewWindow); + + +// Utility + BYTE Chars2ToByte( char *pText ); + bool IsHexString( LPCSTR pText ); + + int RemoveWhiteSpaceReverse ( char *pSrc ); + const TCHAR* SkipEOL ( const TCHAR *pSrc ); + const TCHAR* SkipUntilChar ( const TCHAR *pSrc, const TCHAR nDelim ); + const TCHAR* SkipUntilEOL ( const TCHAR *pSrc ); + const TCHAR* SkipWhiteSpace ( const TCHAR *pSrc ); + const TCHAR* SkipUntilWhiteSpace ( const TCHAR *pSrc ); + const TCHAR* SkipUntilTab ( const TCHAR *pSrc); + const TCHAR* SkipWhiteSpaceReverse ( const TCHAR *pSrc, const TCHAR *pStart ); + const TCHAR* SkipUntilWhiteSpaceReverse ( const TCHAR *pSrc, const TCHAR *pStart ); + void TextConvertTabsToSpaces( TCHAR *pDeTabified_, LPCTSTR pText, const int nDstSize, int nTabStop = 0 ); + + bool StringCat( TCHAR * pDst, LPCSTR pSrc, const int nDstSize ); + bool TestStringCat ( TCHAR * pDst, LPCSTR pSrc, const int nDstSize ); + bool TryStringCat ( TCHAR * pDst, LPCSTR pSrc, const int nDstSize ); + + char FormatCharTxtCtrl ( const BYTE b, bool *pWasCtrl_ ); + char FormatCharTxtAsci ( const BYTE b, bool *pWasAsci_ ); + char FormatCharTxtHigh ( const BYTE b, bool *pWasHi_ ); + char FormatChar4Font ( const BYTE b, bool *pWasHi_, bool *pWasLo_ ); + void SetupColorsHiLoBits ( HDC dc, bool bHiBit, bool bLoBit, + const int iBackground, const int iForeground, + const int iColorHiBG , /*const int iColorHiFG, + const int iColorLoBG , */const int iColorLoFG ); + char ColorizeSpecialChar( HDC hDC, TCHAR * sText, BYTE nData, const MemoryView_e iView, + const int iTxtBackground = BG_INFO , const int iTxtForeground = FG_DISASM_CHAR, + const int iHighBackground = BG_INFO_CHAR, const int iHighForeground = FG_INFO_CHAR_HI, + const int iLowBackground = BG_INFO_CHAR, const int iLowForeground = FG_INFO_CHAR_LO ); + + int FormatDisassemblyLine( WORD nOffset, int iMode, int nOpBytes, + char *sAddress_, char *sOpCodes_, char *sTarget_, char *sTargetOffset_, int & nTargetOffset_, char * sImmediate_, char & nImmediate_, char *sBranch_ ); + +// bool CheckBreakpoint (WORD address, BOOL memory); + bool CheckBreakpointsIO (); + bool CheckBreakpointsReg (); + bool _CmdBreakpointAddReg ( Breakpoint_t *pBP, BreakpointSource_t iSrc, BreakpointOperator_t iCmp, WORD nAddress, int nLen ); + bool _CmdBreakpointAddCommonArg ( int iArg, int nArg, BreakpointSource_t iSrc, BreakpointOperator_t iCmp ); + void _CursorMoveDownAligned( int nDelta ); + void _CursorMoveUpAligned( int nDelta ); + + void DisasmCalcTopFromCurAddress( bool bUpdateTop = true ); + bool InternalSingleStep (); + + void DisasmCalcCurFromTopAddress(); + void DisasmCalcBotFromTopAddress(); + void DisasmCalcTopBotAddress (); + WORD DisasmCalcAddressFromLines( WORD iAddress, int nLines ); + + int _6502GetOpmodeOpbyte( const int iAddress, int & iOpmode_, int & nOpbyte_ ); + void _6502GetOpcodeOpmode( int & iOpcode_, int & iOpmode_, int & nOpbyte_ ); + +// Utility ________________________________________________________________________________________ + + +int _6502GetOpmodeOpbyte( const int iAddress, int & iOpmode_, int & nOpbyte_ ) +{ + int iOpcode_ = *(mem + iAddress); + iOpmode_ = g_aOpcodes[ iOpcode_ ].nAddressMode; + nOpbyte_ = g_aOpmodes[ iOpmode_ ].m_nBytes; + +#if _DEBUG + if (iOpcode_ >= NUM_OPCODES) + { + bool bStop = true; + } +#endif + + return iOpcode_; +} + +inline +void _6502GetOpcodeOpmodeOpbyte( int & iOpcode_, int & iOpmode_, int & nOpbyte_ ) +{ + iOpcode_ = _6502GetOpmodeOpbyte( regs.pc, iOpmode_, nOpbyte_ ); +} + + +//=========================================================================== +char FormatCharTxtAsci ( const BYTE b, bool * pWasAsci_ ) +{ + if (pWasAsci_) + *pWasAsci_ = false; + + char c = (b & 0x7F); + if (b <= 0x7F) + { + if (pWasAsci_) + { + *pWasAsci_ = true; + } + } + return c; +} + +//=========================================================================== +char FormatCharTxtCtrl ( const BYTE b, bool * pWasCtrl_ ) +{ + if (pWasCtrl_) + *pWasCtrl_ = false; + + char c = (b & 0x7F); // .32 Changed: Lo now maps High Ascii to printable chars. i.e. ML1 D0D0 + if (b < 0x20) // SPACE + { + if (pWasCtrl_) + { + *pWasCtrl_ = true; + } + c = b + '@'; // map ctrl chars to visible + } + return c; +} + +//=========================================================================== +char FormatCharTxtHigh ( const BYTE b, bool *pWasHi_ ) +{ + if (pWasHi_) + *pWasHi_ = false; + + char c = b; + if (b > 0x7F) + { + if (pWasHi_) + { + *pWasHi_ = true; + } + c = (b & 0x7F); + } + return c; +} + + +//=========================================================================== +char FormatChar4Font ( const BYTE b, bool *pWasHi_, bool *pWasLo_ ) +{ + // Most Windows Fonts don't have (printable) glyphs for control chars + BYTE b1 = FormatCharTxtHigh( b , pWasHi_ ); + BYTE b2 = FormatCharTxtCtrl( b1, pWasLo_ ); + return b2; +} + + +//=========================================================================== +void SetupColorsHiLoBits ( HDC hDC, bool bHighBit, bool bCtrlBit, + const int iBackground, const int iForeground, + const int iColorHiBG , const int iColorHiFG, + const int iColorLoBG , const int iColorLoFG ) +{ + // 4 cases: + // Hi Lo Background Foreground -> just map Lo -> FG, Hi -> BG + // 0 0 normal normal BG_INFO FG_DISASM_CHAR (dark cyan bright cyan) + // 0 1 normal LoFG BG_INFO FG_DISASM_OPCODE (dark cyan yellow) + // 1 0 HiBG normal BG_INFO_CHAR FG_DISASM_CHAR (mid cyan bright cyan) + // 1 1 HiBG LoFG BG_INFO_CHAR FG_DISASM_OPCODE (mid cyan yellow) + + SetBkColor( hDC, DebugGetColor( iBackground )); + SetTextColor( hDC, DebugGetColor( iForeground )); + + if (bHighBit) + { + SetBkColor( hDC, DebugGetColor( iColorHiBG )); + SetTextColor( hDC, DebugGetColor( iColorHiFG )); // was iForeground + } + + if (bCtrlBit) + { + SetBkColor( hDC, DebugGetColor( iColorLoBG )); + SetTextColor( hDC, DebugGetColor( iColorLoFG )); + } +} + + +// To flush out color bugs... swap: iAsciBackground & iHighBackground +//=========================================================================== +char ColorizeSpecialChar( HDC hDC, TCHAR * sText, BYTE nData, const MemoryView_e iView, + const int iAsciBackground /*= 0 */, const int iTextForeground /*= FG_DISASM_CHAR */, + const int iHighBackground /*= BG_INFO_CHAR*/, const int iHighForeground /*= FG_INFO_CHAR_HI*/, + const int iCtrlBackground /*= BG_INFO_CHAR*/, const int iCtrlForeground /*= FG_INFO_CHAR_LO*/ ) +{ + bool bHighBit = false; + bool bAsciBit = false; + bool bCtrlBit = false; + + int iTextBG = iAsciBackground; + int iHighBG = iHighBackground; + int iCtrlBG = iCtrlBackground; + int iTextFG = iTextForeground; + int iHighFG = iHighForeground; + int iCtrlFG = iCtrlForeground; + + BYTE nByte = FormatCharTxtHigh( nData, & bHighBit ); + char nChar = FormatCharTxtCtrl( nByte, & bCtrlBit ); + + switch (iView) + { + case MEM_VIEW_ASCII: + iHighBG = iTextBG; + iCtrlBG = iTextBG; + break; + case MEM_VIEW_APPLE: + iHighBG = iTextBG; + if (!bHighBit) + { + iTextBG = iCtrlBG; + } + + if (bCtrlBit) + { + iTextFG = iCtrlFG; + if (bHighBit) + { + iHighFG = iTextFG; + } + } + bCtrlBit = false; + break; + default: break; + } + + if (sText) + wsprintf( sText, TEXT("%c"), nChar ); + + if (hDC) + { + SetupColorsHiLoBits( hDC, bHighBit, bCtrlBit + , iTextBG, iTextFG // FG_DISASM_CHAR + , iHighBG, iHighFG // BG_INFO_CHAR + , iCtrlBG, iCtrlFG // FG_DISASM_OPCODE + ); + } + return nChar; +} + + +//=========================================================================== +LPCTSTR FormatAddress( WORD nAddress, int nBytes ) +{ + // No symbol for this addres -- string with nAddress + static TCHAR sSymbol[8] = TEXT(""); + switch (nBytes) + { + case 2: wsprintf(sSymbol,TEXT("$%02X"),(unsigned)nAddress); break; + case 3: wsprintf(sSymbol,TEXT("$%04X"),(unsigned)nAddress); break; + default: sSymbol[0] = 0; break; // clear since is static + } + return sSymbol; +} + + +//=========================================================================== +void TextConvertTabsToSpaces( TCHAR *pDeTabified_, LPCTSTR pText, const int nDstSize, int nTabStop ) +{ + int nLen = _tcslen( pText ); + + int TAB_SPACING = 8; + int TAB_SPACING_1 = 16; + int TAB_SPACING_2 = 21; + + if (nTabStop) + TAB_SPACING = nTabStop; + + LPCTSTR pSrc = pText; + LPTSTR pDst = pDeTabified_; + + int iTab = 0; // number of tabs seen + int nTab = 0; // gap left to next tab + int nGap = 0; // actual gap + int nCur = 0; // current cursor position + while (pSrc && *pSrc && (nCur < nDstSize)) + { + if (*pSrc == CHAR_TAB) + { + if (nTabStop) + { + nTab = nCur % TAB_SPACING; + nGap = (TAB_SPACING - nTab); + } + else + { + if (nCur <= TAB_SPACING_1) + { + nGap = (TAB_SPACING_1 - nCur); + } + else + if (nCur <= TAB_SPACING_2) + { + nGap = (TAB_SPACING_2 - nCur); + } + else + { + nTab = nCur % TAB_SPACING; + nGap = (TAB_SPACING - nTab); + } + } + + + if ((nCur + nGap) >= nDstSize) + break; + + for( int iSpc = 0; iSpc < nGap; iSpc++ ) + { + *pDst++ = CHAR_SPACE; + } + nCur += nGap; + } + else + if ((*pSrc == CHAR_LF) || (*pSrc == CHAR_CR)) + { + *pDst++ = 0; // *pSrc; + nCur++; + } + else + { + *pDst++ = *pSrc; + nCur++; + } + pSrc++; + } + *pDst = 0; +} + + +/* + String types: + + http://www.codeproject.com/cpp/unicode.asp + + TEXT() _tcsrev + _UNICODE Unicode _wcsrev + _MBCS Multi-byte _mbsrev + n/a ASCIi strrev + +*/ + +// tests if pSrc fits into pDst +// returns true if pSrc safely fits into pDst, else false (pSrc would of overflowed pDst) +//=========================================================================== +bool TestStringCat ( TCHAR * pDst, LPCSTR pSrc, const int nDstSize ) +{ + int nLenDst = _tcslen( pDst ); + int nLenSrc = _tcslen( pSrc ); + int nSpcDst = nDstSize - nLenDst; + int nChars = MIN( nLenSrc, nSpcDst ); + + bool bOverflow = (nSpcDst < nLenSrc); + if (bOverflow) + { + return false; + } + return true; +} + + +// tests if pSrc fits into pDst +// returns true if pSrc safely fits into pDst, else false (pSrc would of overflowed pDst) +//=========================================================================== +bool TryStringCat ( TCHAR * pDst, LPCSTR pSrc, const int nDstSize ) +{ + int nLenDst = _tcslen( pDst ); + int nLenSrc = _tcslen( pSrc ); + int nSpcDst = nDstSize - nLenDst; + int nChars = MIN( nLenSrc, nSpcDst ); + + bool bOverflow = (nSpcDst < nLenSrc); + if (bOverflow) + { + return false; + } + + _tcsncat( pDst, pSrc, nChars ); + return true; +} + +// cats string as much as possible +// returns true if pSrc safely fits into pDst, else false (pSrc would of overflowed pDst) +//=========================================================================== +bool StringCat ( TCHAR * pDst, LPCSTR pSrc, const int nDstSize ) +{ + int nLenDst = _tcslen( pDst ); + int nLenSrc = _tcslen( pSrc ); + int nSpcDst = nDstSize - nLenDst; + int nChars = MIN( nLenSrc, nSpcDst ); + + _tcsncat( pDst, pSrc, nChars ); + + bool bOverflow = (nSpcDst < nLenSrc); + if (bOverflow) + return false; + + return true; +} + +//=========================================================================== +inline +BYTE Chars2ToByte ( char *pText ) +{ + BYTE n = ((pText[0] <= '@') ? (pText[0] - '0') : (pText[0] - 'A' + 10)) << 4; + n += ((pText[1] <= '@') ? (pText[1] - '0') : (pText[1] - 'A' + 10)) << 0; + return n; +} + +//=========================================================================== +inline +bool IsHexString ( LPCSTR pText ) +{ +// static const TCHAR sHex[] = "0123456789ABCDEF"; + + while (*pText) + { + if (*pText < TEXT('0')) + return false; + if (*pText > TEXT('f')) + return false; + if ((*pText > TEXT('9')) && (*pText < TEXT('A')) || + ((*pText > TEXT('F') && (*pText < TEXT('a'))))) + return false; + + pText++; + } + return true; +} + + +// @return Length of new string +//=========================================================================== +int RemoveWhiteSpaceReverse ( TCHAR *pSrc ) +{ + int nLen = _tcslen( pSrc ); + char *pDst = pSrc + nLen; + while (nLen--) + { + pDst--; + if (*pDst == CHAR_SPACE) + { + *pDst = 0; + } + else + { + break; + } + } + return nLen; +} + + +//=========================================================================== +inline +const TCHAR* SkipEOL ( const TCHAR *pSrc ) +{ + while (pSrc && ((*pSrc == CHAR_LF) || (*pSrc == CHAR_CR))) + { + pSrc++; + } + return pSrc; +} + +//=========================================================================== +//const char* SkipUntilChar ( const char *pSrc, const char nDelim ) +const TCHAR* SkipUntilChar ( const TCHAR *pSrc, const TCHAR nDelim ) +{ + while (pSrc && (*pSrc)) + { + if (*pSrc == nDelim) + break; + pSrc++; + } + return pSrc; +} + +//=========================================================================== +const TCHAR * FindTokenOrAlphaNumeric ( const TCHAR *pSrc, const TokenTable_t *aTokens, const int nTokens, ArgToken_e * pToken_ ) +{ + if (pToken_) + *pToken_ = NO_TOKEN; + + const TCHAR *pEnd = pSrc; + + if (pSrc && (*pSrc)) + { + if (isalnum( *pSrc )) + { + if (pToken_) + *pToken_ = TOKEN_ALPHANUMERIC; + } + else + { + const TokenTable_t *pEntry = aTokens; + const TCHAR *pToken = NULL; + for (int iToken = 0; iToken < nTokens; iToken++ ) + { + pToken = & (pEntry->sToken); + if (*pSrc == *pToken) + { + if (pToken_) + *pToken_ = (ArgToken_e) iToken; + pEnd = pSrc + 1; // _tcslen( pToken ); + break; + } + pEntry++; + } + } + } + return pEnd; +} + +//=========================================================================== +const TCHAR* SkipUntilToken ( const TCHAR *pSrc, const TokenTable_t *aTokens, const int nTokens, ArgToken_e *pToken_ ) +{ + if ( pToken_) + *pToken_ = NO_TOKEN; + + + while (pSrc && (*pSrc)) + { + // Common case is TOKEN_ALPHANUMERIC, so continue until we don't have one +// if (isalnum( *pSrc )) +// { +// if ( pToken_) +// { +// *pToken_ = TOKEN_ALPHANUMERIC; +// } +// return pSrc; +// } + + const TokenTable_t *pEntry = aTokens; + const TCHAR *pToken = NULL; + for (int iToken = 0; iToken < nTokens; iToken++ ) + { + pToken = & (pEntry->sToken); + if (*pSrc == *pToken) + { + if ( pToken_) + { + *pToken_ = (ArgToken_e) iToken; + } + return pSrc; + } + pEntry++; + } + pSrc++; + } + return pSrc; +} + +//=========================================================================== +inline +// const char* SkipUntilEOL ( const char *pSrc ) +const TCHAR* SkipUntilEOL ( const TCHAR *pSrc ) +{ + + while (pSrc && (*pSrc)) + { + if ((*pSrc == CHAR_LF) || (*pSrc == CHAR_CR)) + { + break; + } + pSrc++; + } + return pSrc; +} + +//=========================================================================== +inline +//const char* SkipWhiteSpace ( const char *pSrc ) +const TCHAR* SkipWhiteSpace ( const TCHAR *pSrc ) +{ + while (pSrc && ((*pSrc == CHAR_SPACE) || (*pSrc == CHAR_TAB))) + { + pSrc++; + } + return pSrc; +} + +//=========================================================================== +inline +//const char* SkipUntilWhiteSpace ( const char *pSrc ) +const TCHAR* SkipUntilWhiteSpace ( const TCHAR *pSrc ) +{ + while (pSrc && (*pSrc)) + { + if ((*pSrc == CHAR_SPACE) || (*pSrc == CHAR_TAB)) + { + break; + } + pSrc++; + } + return pSrc; +} + +//=========================================================================== +inline +//const char* SkipUntilTab ( const char *pSrc ) +const TCHAR* SkipUntilTab ( const TCHAR *pSrc ) +{ + while (pSrc && (*pSrc)) + { + if (*pSrc == CHAR_TAB) + { + break; + } + pSrc++; + } + return pSrc; +} + +// @param pStart Start of line. +//=========================================================================== +inline +//const char *SkipWhiteSpaceReverse ( const char *pSrc, const char *pStart ) +const TCHAR *SkipWhiteSpaceReverse ( const TCHAR *pSrc, const TCHAR *pStart ) +{ + while (pSrc && ((*pSrc == CHAR_SPACE) || (*pSrc == CHAR_TAB)) && (pSrc > pStart)) + { + pSrc--; + } + return pSrc; +} + +// @param pStart Start of line. +//=========================================================================== +inline +//const char *SkipUntilWhiteSpaceReverse ( const char *pSrc, const char *pStart ) +const TCHAR *SkipUntilWhiteSpaceReverse ( const TCHAR *pSrc, const TCHAR *pStart ) +{ + while (pSrc && (pSrc > pStart)) + { + if ((*pSrc == CHAR_SPACE) || (*pSrc == CHAR_TAB)) + { + break; + } + pSrc--; + } + return pSrc; +} + + +// Breakpoints ____________________________________________________________________________________ + + +// bool bBP = g_nBreakpoints && CheckBreakpoint(nOffset,nOffset == regs.pc); +//=========================================================================== +bool GetBreakpointInfo ( WORD nOffset, bool & bBreakpointActive_, bool & bBreakpointEnable_ ) +{ + for (int iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++) + { + Breakpoint_t *pBP = &g_aBreakpoints[ iBreakpoint ]; + + if ((pBP->nLength) +// && (pBP->bEnabled) // not bSet + && (nOffset >= pBP->nAddress) && (nOffset < (pBP->nAddress + pBP->nLength))) // [nAddress,nAddress+nLength] + { + bBreakpointActive_ = pBP->bSet; + bBreakpointEnable_ = pBP->bEnabled; + return true; + } + +// if (g_aBreakpoints[iBreakpoint].nLength && g_aBreakpoints[iBreakpoint].bEnabled && +// (g_aBreakpoints[iBreakpoint].nAddress <= targetaddr) && +// (g_aBreakpoints[iBreakpoint].nAddress + g_aBreakpoints[iBreakpoint].nLength > targetaddr)) + } + + bBreakpointActive_ = false; + bBreakpointEnable_ = false; + + return false; +} + + +// Returns true if we should continue checking breakpoint details, else false +//=========================================================================== +bool _BreakpointValid( Breakpoint_t *pBP ) //, BreakpointSource_t iSrc ) +{ + bool bStatus = false; + + if (! pBP->bEnabled) + return bStatus; + +// if (pBP->eSource != iSrc) +// return bStatus; + + if (! pBP->nLength) + return bStatus; + + return true; +} + + +//=========================================================================== +bool _CheckBreakpointValue( Breakpoint_t *pBP, int nVal ) +{ + bool bStatus = false; + + int iCmp = pBP->eOperator; + switch (iCmp) + { + case BP_OP_LESS_EQUAL : + if (nVal <= pBP->nAddress) + bStatus = true; + break; + case BP_OP_LESS_THAN : + if (nVal < pBP->nAddress) + bStatus = true; + break; + case BP_OP_EQUAL : // Range is like C++ STL: [,) (inclusive,not-inclusive) + if ((nVal >= pBP->nAddress) && (nVal < (pBP->nAddress + pBP->nLength))) + bStatus = true; + break; + case BP_OP_NOT_EQUAL : // Rnage is: (,] (not-inclusive, inclusive) + if ((nVal < pBP->nAddress) || (nVal >= (pBP->nAddress + pBP->nLength))) + bStatus = true; + break; + case BP_OP_GREATER_THAN : + if (nVal > pBP->nAddress) + bStatus = true; + break; + case BP_OP_GREATER_EQUAL: + if (nVal >= pBP->nAddress) + bStatus = true; + break; + default: + break; + } + + return bStatus; +} + + +bool CheckBreakpointsIO () +{ + const int NUM_TARGETS = 2; + + int aTarget[ NUM_TARGETS ] = + { + NO_6502_TARGET, + NO_6502_TARGET + }; + int nBytes; + bool bStatus = false; + + int iTarget; + int nAddress; + + Get6502Targets( &aTarget[0], &aTarget[1], &nBytes ); + + if (nBytes) + { + for (iTarget = 0; iTarget < NUM_TARGETS; iTarget++ ) + { + nAddress = aTarget[ iTarget ]; + if (nAddress != NO_6502_TARGET) + { + for (int iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++) + { + Breakpoint_t *pBP = &g_aBreakpoints[iBreakpoint]; + if (_BreakpointValid( pBP )) + { + if (pBP->eSource == BP_SRC_MEM_1) + { + if (_CheckBreakpointValue( pBP, nAddress )) + { + return true; + } + } + } + } + } + } + } + return bStatus; +} + +// Returns true if a register breakpoint is triggered +//=========================================================================== +bool CheckBreakpointsReg () +{ + bool bStatus = false; + + for (int iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++) + { + Breakpoint_t *pBP = &g_aBreakpoints[iBreakpoint]; + + if (! _BreakpointValid( pBP )) + continue; + + switch (pBP->eSource) + { + case BP_SRC_REG_PC: + if (_CheckBreakpointValue( pBP, regs.pc )) + return true; + break; + case BP_SRC_REG_A: + if (_CheckBreakpointValue( pBP, regs.a )) + return true; + break; + case BP_SRC_REG_X: + if (_CheckBreakpointValue( pBP, regs.x )) + return true; + break; + case BP_SRC_REG_Y: + if (_CheckBreakpointValue( pBP, regs.y )) + return true; + break; + case BP_SRC_REG_P: + if (_CheckBreakpointValue( pBP, regs.ps )) + return true; + break; + case BP_SRC_REG_S: + if (_CheckBreakpointValue( pBP, regs.sp )) + return true; + break; + default: + break; + } + } + + return bStatus; +} + +//=========================================================================== +BOOL CheckJump (WORD targetaddress) +{ + WORD savedpc = regs.pc; + InternalSingleStep(); + BOOL result = (regs.pc == targetaddress); + regs.pc = savedpc; + return result; +} + + +// Console ________________________________________________________________________________________ + +//=========================================================================== +LPCSTR ConsoleBufferPeek() +{ + return g_aConsoleBuffer[ 0 ]; +} + + +// Add string to buffered output +// Shifts the buffered console output lines "Up" +//=========================================================================== +bool ConsoleBufferPush( const TCHAR * pString ) // LPCSTR +{ + if (g_nConsoleBuffer < CONSOLE_HEIGHT) + { + int nLen = _tcslen( pString ); + if (nLen < g_nConsoleDisplayWidth) + { + _tcscpy( g_aConsoleBuffer[ g_nConsoleBuffer ], pString ); + g_nConsoleBuffer++; + return true; + } + else + { +#if _DEBUG +// TCHAR sText[ CONSOLE_WIDTH * 2 ]; +// sprintf( sText, "ConsoleBufferPush(pString) > g_nConsoleDisplayWidth: %d", g_nConsoleDisplayWidth ); +// MessageBox( framewindow, sText, "Warning", MB_OK ); +#endif + // push multiple lines + while ((nLen >= g_nConsoleDisplayWidth) && (g_nConsoleBuffer < CONSOLE_HEIGHT)) + { +// _tcsncpy( g_aConsoleBuffer[ g_nConsoleBuffer ], pString, (g_nConsoleDisplayWidth-1) ); +// pString += g_nConsoleDisplayWidth; + _tcsncpy( g_aConsoleBuffer[ g_nConsoleBuffer ], pString, (CONSOLE_WIDTH-1) ); + pString += (CONSOLE_WIDTH-1); + g_nConsoleBuffer++; + nLen = _tcslen( pString ); + } + return true; + } + } + + // TODO: Warning: Too much output. + return false; +} + +// Shifts the buffered console output "down" +//=========================================================================== +void ConsoleBufferPop() +{ + int y = 0; + while (y < g_nConsoleBuffer) + { + _tcscpy( g_aConsoleBuffer[ y ], g_aConsoleBuffer[ y+1 ] ); + y++; + } + + g_nConsoleBuffer--; + if (g_nConsoleBuffer < 0) + g_nConsoleBuffer = 0; +} + +// Remove string from buffered output +//=========================================================================== +void ConsoleBufferToDisplay() +{ + ConsoleDisplayPush( ConsoleBufferPeek() ); + ConsoleBufferPop(); +} + +//=========================================================================== +Update_t ConsoleDisplayError (LPCTSTR pText) +{ + ConsoleBufferPush( pText ); + return ConsoleUpdate(); +} + +// ConsoleDisplayPush() +// Shifts the console display lines "up" +//=========================================================================== +void ConsoleDisplayPush( LPCSTR pText ) +{ + int nLen = MIN( g_nConsoleDisplayTotal, CONSOLE_HEIGHT - 1 - CONSOLE_FIRST_LINE); + while (nLen--) + { + _tcsncpy( + g_aConsoleDisplay[(nLen + 1 + CONSOLE_FIRST_LINE )], + g_aConsoleDisplay[nLen + CONSOLE_FIRST_LINE], + CONSOLE_WIDTH ); + } + + if (pText) + _tcsncpy( g_aConsoleDisplay[ CONSOLE_FIRST_LINE ], pText, CONSOLE_WIDTH ); + + g_nConsoleDisplayTotal++; + if (g_nConsoleDisplayTotal > (CONSOLE_HEIGHT - CONSOLE_FIRST_LINE)) + g_nConsoleDisplayTotal = (CONSOLE_HEIGHT - CONSOLE_FIRST_LINE); + +} + + +//=========================================================================== +void ConsoleDisplayPause() +{ + if (g_nConsoleBuffer) + { + _tcscpy( g_pConsoleInput, TEXT("...press SPACE continue, ESC skip..." ) ); + g_bConsoleBufferPaused = true; + } + else + { + ConsoleInputReset(); + } +} + +//=========================================================================== +bool ConsoleInputBackSpace() +{ + if (g_nConsoleInputChars) + { + g_nConsoleInputChars--; + + if (g_pConsoleInput[ g_nConsoleInputChars ] == TEXT('"')) + g_bConsoleInputQuoted = ! g_bConsoleInputQuoted; + + g_pConsoleInput[ g_nConsoleInputChars ] = 0; + return true; + } + return false; +} + +//=========================================================================== +bool ConsoleInputClear() +{ + if (g_nConsoleInputChars) + { + ZeroMemory( g_pConsoleInput, g_nConsoleDisplayWidth ); + g_nConsoleInputChars = 0; + return true; + } + return false; +} + +//=========================================================================== +bool ConsoleInputChar( TCHAR ch ) +{ + if (g_nConsoleInputChars < g_nConsoleDisplayWidth) // bug? include prompt? + { + g_pConsoleInput[ g_nConsoleInputChars ] = ch; + g_nConsoleInputChars++; + return true; + } + return false; +} + +//=========================================================================== +LPCSTR ConsoleInputPeek() +{ + return g_aConsoleDisplay[0]; +} + +//=========================================================================== +void ConsoleInputReset () +{ + // Not using g_aConsoleInput since we get drawing of the input Line for "Free" + // Even if we add console scrolling, we don't need any special logic to draw the input line. + g_bConsoleInputQuoted = false; + + ZeroMemory( g_aConsoleInput, CONSOLE_WIDTH ); + _tcscpy( g_aConsoleInput, g_sConsolePrompt ); + _tcscat( g_aConsoleInput, TEXT(" " ) ); + + int nLen = _tcslen( g_aConsoleInput ); + g_pConsoleInput = &g_aConsoleInput[nLen]; + g_nConsoleInputChars = 0; +} + +//=========================================================================== +int ConsoleInputTabCompletion () +{ + return UPDATE_CONSOLE_INPUT; +} + +//=========================================================================== +Update_t ConsoleScrollHome () +{ + g_iConsoleDisplayStart = g_nConsoleDisplayTotal - CONSOLE_FIRST_LINE; + if (g_iConsoleDisplayStart < 0) + g_iConsoleDisplayStart = 0; + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t ConsoleScrollEnd () +{ + g_iConsoleDisplayStart = 0; + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t ConsoleScrollUp ( int nLines ) +{ + g_iConsoleDisplayStart += nLines; + + if (g_iConsoleDisplayStart > (g_nConsoleDisplayTotal - CONSOLE_FIRST_LINE)) + g_iConsoleDisplayStart = (g_nConsoleDisplayTotal - CONSOLE_FIRST_LINE); + + if (g_iConsoleDisplayStart < 0) + g_iConsoleDisplayStart = 0; + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t ConsoleScrollDn ( int nLines ) +{ + g_iConsoleDisplayStart -= nLines; + if (g_iConsoleDisplayStart < 0) + g_iConsoleDisplayStart = 0; + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t ConsoleScrollPageUp () +{ + ConsoleScrollUp( g_nConsoleDisplayHeight - CONSOLE_FIRST_LINE ); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t ConsoleScrollPageDn() +{ + ConsoleScrollDn( g_nConsoleDisplayHeight - CONSOLE_FIRST_LINE ); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +void ConsoleBufferTryUnpause (int nLines) +{ + for( int y = 0; y < nLines; y++ ) + { + ConsoleBufferToDisplay(); + } + + g_bConsoleBufferPaused = false; + if (g_nConsoleBuffer) + { + g_bConsoleBufferPaused = true; + ConsoleDisplayPause(); + } +} + +//=========================================================================== +Update_t ConsoleUpdate() +{ + if (! g_bConsoleBufferPaused) + { + int nLines = MIN( g_nConsoleBuffer, g_nConsoleDisplayHeight - 1); + ConsoleBufferTryUnpause( nLines ); + } + + return UPDATE_CONSOLE_DISPLAY; +} + + + +// Commands _______________________________________________________________________________________ + + +//=========================================================================== +int HashMnemonic( const TCHAR * pMnemonic ) +{ + const TCHAR *pText = pMnemonic; + int nMnemonicHash = 0; + int iHighBits; + + const int NUM_LOW_BITS = 19; // 24 -> 19 prime + const int NUM_MSK_BITS = 5; // 4 -> 5 prime + const Hash_t BIT_MSK_HIGH = ((1 << NUM_MSK_BITS) - 1) << NUM_LOW_BITS; + + for( int iChar = 0; iChar < 4; iChar++ ) + { + nMnemonicHash = (nMnemonicHash << NUM_MSK_BITS) + *pText; + iHighBits = (nMnemonicHash & BIT_MSK_HIGH); + if (iHighBits) + { + nMnemonicHash = (nMnemonicHash ^ (iHighBits >> NUM_LOW_BITS)) & ~ BIT_MSK_HIGH; + } + pText++; + } + + return nMnemonicHash; +} + + +//=========================================================================== +void _CmdAssembleHashOpcodes() +{ + int nMnemonicHash; + int iOpcode; + + for( iOpcode = 0; iOpcode < NUM_OPCODES; iOpcode++ ) + { + const TCHAR *pMnemonic = g_aOpcodes65C02[ iOpcode ].sMnemonic; + nMnemonicHash = HashMnemonic( pMnemonic ); + g_aOpcodesHash[ iOpcode ] = nMnemonicHash; + } +} + + +//=========================================================================== +void _CmdAssembleHashDump() +{ +// #if DEBUG_ASM_HASH + vector vHashes; + HashOpcode_t tHash; + TCHAR sText[ CONSOLE_WIDTH ]; + + int iOpcode; + for( iOpcode = 0; iOpcode < NUM_OPCODES; iOpcode++ ) + { + tHash.m_iOpcode = iOpcode; + tHash.m_nValue = g_aOpcodesHash[ iOpcode ]; + vHashes.push_back( tHash ); + } + + sort( vHashes.begin(), vHashes.end(), HashOpcode_t() ); + + Hash_t nPrevHash = vHashes.at( 0 ).m_nValue; + Hash_t nThisHash = 0; + + for( iOpcode = 0; iOpcode < NUM_OPCODES; iOpcode++ ) + { + tHash = vHashes.at( iOpcode ); + + Hash_t iThisHash = tHash.m_nValue; + int nOpcode = tHash.m_iOpcode; + int nOpmode = g_aOpcodes[ nOpcode ].nAddressMode; + + wsprintf( sText, "%08X %02X %s %s" + , iThisHash + , nOpcode + , g_aOpcodes65C02[ nOpcode ].sMnemonic + , g_aOpmodes[ nOpmode ].m_sName + ); + ConsoleBufferPush( sText ); + nThisHash++; + +// if (nPrevHash != iThisHash) +// { +// wsprintf( sText, "Total: %d", nThisHash ); +// ConsoleBufferPush( sText ); +// nThisHash = 0; +// } + } + + ConsoleUpdate(); +//#endif +} + + +//=========================================================================== +bool AssemblerOpcodeIsBranch( int nOpcode ) +{ + // 76543210 Bit + // xxx10000 Branch + + if (nOpcode == OPCODE_BRA) + return true; + + if ((nOpcode & 0x1F) != 0x10) // low nibble not zero? + return false; + + if ((nOpcode >> 4) & 1) + return true; + +// (nOpcode == 0x10) || // BPL +// (nOpcode == 0x30) || // BMI +// (nOpcode == 0x50) || // BVC +// (nOpcode == 0x70) || // BVS +// (nOpcode == 0x90) || // BCC +// (nOpcode == 0xB0) || // BCS +// (nOpcode == 0xD0) || // BNE +// (nOpcode == 0xF0) || // BEQ + return false; +} + + +//=========================================================================== +bool AssemblerGetAddressingMode( int nArgs, WORD nAddress, vector vOpcodes ) +{ + bool bHaveComma = false; + bool bHaveHash = false; + bool bHaveDollar = false; + bool bHaveLeftParen = false; + bool bHaveRightParen = false; + bool bHaveParen = false; + bool bHaveRegisterX = false; + bool bHaveRegisterY = false; + bool bHaveZeroPage = false; + +// int iArgRawMnemonic = 0; + int iArg; + + // Sync up to Raw Args for matching mnemonic + iArg = 3; + Arg_t *pArg = &g_aArgRaw[ iArg ]; + + // Process them instead of the cooked args, since we need the orginal tokens + int iAddressMode = AM_IMPLIED; + int nBytes = 0; + WORD nTarget = 0; + + while (iArg <= g_nArgRaw) + { + int iToken = pArg->eToken; + int iType = pArg->bType; + + if (iToken == TOKEN_HASH) + { + if (bHaveHash) + { + ConsoleBufferPush( TEXT( " Syntax Error: Extra '#'" ) ); // No thanks, we already have one + return false; + } + bHaveHash = true; + + iAddressMode = AM_M; // Immediate + nTarget = pArg[1].nVal1; + nBytes = 1; + } + else + if (iToken == TOKEN_DOLLAR) + { + if (bHaveDollar) + { + ConsoleBufferPush( TEXT( " Syntax Error: Extra '$'" ) ); // No thanks, we already have one + return false; + } + bHaveDollar = true; + + iAddressMode = AM_A; // Absolute + nTarget = pArg[1].nVal1; + nBytes = 2; + + if (nTarget <= _6502_ZEROPAGE_END) + { + iAddressMode = AM_Z; + nBytes = 1; + } + } + else + if (iToken == TOKEN_LEFT_PAREN) + { + if (bHaveLeftParen) + { + ConsoleBufferPush( TEXT( " Syntax Error: Extra '('" ) ); // No thanks, we already have one + return false; + } + bHaveLeftParen = true; + + // Indexed or Indirect + iAddressMode = AM_IZX; + } + else + if (iToken == TOKEN_RIGHT_PAREN) + { + if (bHaveRightParen) + { + ConsoleBufferPush( TEXT( " Syntax Error: Extra ')'" ) ); // No thanks, we already have one + return false; + } + bHaveRightParen = true; + + // Indexed or Indirect + iAddressMode = AM_IZX; + } + else + if (iToken == TOKEN_COMMA) + { + if (bHaveComma) + { + ConsoleBufferPush( TEXT( " Syntax Error: Extra ','" ) ); // No thanks, we already have one + return false; + } + bHaveComma = true; + // We should have address by now + } + else + if (iToken = TOKEN_ALPHANUMERIC) + { + if (pArg->nArgLen == 1) + { + if (pArg->sArg[0] == 'X') + { + if (! bHaveComma) + { + ConsoleBufferPush( TEXT( " Syntax Error: Missing ','" ) ); + return false; + } + bHaveRegisterX = true; + } + if (pArg->sArg[0] == 'Y') + { + if (! bHaveComma) + { + ConsoleBufferPush( TEXT( " Syntax Error: Missing ','" ) ); + return false; + } + bHaveRegisterY = true; + } + } + } +/* + if (iType & TYPE_VALUE) + { + iAddressMode = AM_M; // Immediate + nTarget = g_aArgs[ iArg ].nVal1; + nBytes = 1; + } + if (iType & TYPE_ADDRESS) + { + iAddressMode = AM_A; // Absolute + nTarget = g_aArgs[ iArg ].nVal1; + nBytes = 2; + + if (nTarget <= _6502_ZEROPAGE_END) + { + iAddressMode = AM_Z; + nBytes = 1; + } + } +*/ + + iArg++; + } + + if (( bHaveLeftParen) && (! bHaveRightParen)) + { + ConsoleBufferPush( TEXT( " Syntax Error: Missing ')'" ) ); + return false; + } + + if ((! bHaveLeftParen) && ( bHaveRightParen)) + { + ConsoleBufferPush( TEXT( " Syntax Error: Missing '('" ) ); + return false; + } + + if (bHaveComma) + { + if ((! bHaveRegisterX) && (! bHaveRegisterY)) + { + ConsoleBufferPush( TEXT( " Syntax Error: Index 'X' or 'Y'" ) ); + return false; + } + } + + bHaveParen = (bHaveLeftParen || bHaveRightParen); + if (! bHaveParen) + { + if (bHaveComma) + { + if (bHaveRegisterX) + { + iAddressMode = AM_AX; + nBytes = 2; + if (nTarget <= _6502_ZEROPAGE_END) + { + iAddressMode = AM_ZX; + nBytes = 1; + } + } + if (bHaveRegisterY) + { + iAddressMode = AM_AY; + nBytes = 2; + if (nTarget <= _6502_ZEROPAGE_END) + { + iAddressMode = AM_ZY; + nBytes = 1; + } + } + } + } + + int iOpcode; + int nOpcodes = vOpcodes.size(); + + for( iOpcode = 0; iOpcode < nOpcodes; iOpcode++ ) + { + int nOpcode = vOpcodes.at( iOpcode ); // m_iOpcode; + int nOpmode = g_aOpcodes[ nOpcode ].nAddressMode; + + if (AssemblerOpcodeIsBranch( nOpcode)) + nOpmode = AM_R; + + if (nOpmode == iAddressMode) + { + *(memdirty + (nAddress >> 8)) |= 1; + *(mem + nAddress) = (BYTE) nOpcode; + + if (nBytes > 0) + *(mem + nAddress + 1) = (BYTE)(nTarget >> 0); + + if (nBytes > 1) + *(mem + nAddress + 2) = (BYTE)(nTarget >> 8); + + break; + } + + return true; + } + + return false; +} + + +//=========================================================================== +Update_t CmdAssemble (int nArgs) +{ + if (! g_bOpcodesHashed) + { + _CmdAssembleHashOpcodes(); + g_bOpcodesHashed = true; + } + + if (! nArgs) + return Help_Arg_1( CMD_ASSEMBLE ); + + if (nArgs == 1) // undocumented ASM * + { + if (_tcscmp( g_aArgs[ 1 ].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName ) == 0) + { + _CmdAssembleHashDump(); + + return UPDATE_CONSOLE_DISPLAY; + } + +// g_nAssemblerAddress = g_aArgs[1].nVal1; + return Help_Arg_1( CMD_ASSEMBLE ); + } + + if (nArgs < 2) + return Help_Arg_1( CMD_ASSEMBLE ); + + WORD nAddress = g_aArgs[1].nVal1; + + TCHAR *pMnemonic = g_aArgs[2].sArg; + int nMnemonicHash = HashMnemonic( pMnemonic ); + + vector vOpcodes; // Candiate opcodes + int iOpcode; + + // Ugh! Linear search. + for( iOpcode = 0; iOpcode < NUM_OPCODES; iOpcode++ ) + { + if (nMnemonicHash == g_aOpcodesHash[ iOpcode ]) + { + vOpcodes.push_back( iOpcode ); + } + } + + int nOpcodes = vOpcodes.size(); + if (! nOpcodes) + { + ConsoleBufferPush( TEXT(" Syntax Error: Invalid mnemonic") ); + } + else + if (nOpcodes == 1) + { + *(memdirty + (nAddress >> 8)) |= 1; + + int nOpcode = vOpcodes.at( 0 ); + *(mem + nAddress) = (BYTE) nOpcode; + } + else // ambigious -- need to parse Addressing Mode + { + bool bStatus = AssemblerGetAddressingMode( nArgs, nAddress, vOpcodes ); + } + + return UPDATE_CONSOLE_DISPLAY; +} + + + + +// Unassemble +//=========================================================================== +Update_t CmdUnassemble (int nArgs) +{ + if (! nArgs) + return Help_Arg_1( CMD_UNASSEMBLE ); + + WORD nAddress = g_aArgs[1].nVal1; + g_nDisasmTopAddress = nAddress; + + DisasmCalcCurFromTopAddress(); + DisasmCalcBotFromTopAddress(); + + return UPDATE_DISASM; +} + + +//=========================================================================== +Update_t CmdCalculator (int nArgs) +{ + const int nBits = 8; + + if (! nArgs) + return Help_Arg_1( CMD_CALC ); + + WORD nAddress = g_aArgs[1].nVal1; + TCHAR sText [ CONSOLE_WIDTH ]; + + bool bHi = false; + bool bLo = false; + char c = FormatChar4Font( (BYTE) nAddress, &bHi, &bLo ); + bool bParen = bHi || bLo; + + int nBit = 0; + int iBit = 0; + for( iBit = 0; iBit < nBits; iBit++ ) + { + bool bSet = (nAddress >> iBit) & 1; + if (bSet) + nBit |= (1 << (iBit * 4)); // 4 bits per hex digit + } + + wsprintf( sText, TEXT("$%04X 0z%08X %5d '%c' "), + nAddress, nBit, nAddress, c ); + + if (bParen) + _tcscat( sText, TEXT("(") ); + + if (bHi & bLo) + _tcscat( sText, TEXT("High Ctrl") ); + else + if (bHi) + _tcscat( sText, TEXT("High") ); + else + if (bLo) + _tcscat( sText, TEXT("Ctrl") ); + + if (bParen) + _tcscat( sText, TEXT(")") ); + + ConsoleBufferPush( sText ); + return ConsoleUpdate(); +} + +//=========================================================================== +Update_t CmdFeedKey (int nArgs) +{ + KeybQueueKeypress( + nArgs ? g_aArgs[1].nVal1 ? g_aArgs[1].nVal1 : g_aArgs[1].sArg[0] : TEXT(' '), 1); // FIXME!!! + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdInput (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_INPUT ); + + WORD nAddress = g_aArgs[1].nVal1; + +// ioread[ g_aArgs[1].nVal1 & 0xFF ](regs.pc,g_aArgs[1].nVal1 & 0xFF,0,0,0); + ioread[ nAddress & 0xFF ](regs.pc, nAddress & 0xFF,0,0,0); // g_aArgs[1].nVal1 + + return UPDATE_CONSOLE_DISPLAY; // TODO: Verify // 1 +} + + +//=========================================================================== +Update_t CmdJSR (int nArgs) +{ + if (! nArgs) + return Help_Arg_1( CMD_JSR ); + + WORD nAddress = g_aArgs[1].nVal1 & _6502_END_MEM_ADDRESS; + + // Mark Stack Page as dirty + *(memdirty+(regs.sp >> 8)) = 1; + + // Push PC onto stack + *(mem + regs.sp) = ((regs.pc >> 8) & 0xFF); + regs.sp--; + + *(mem + regs.sp) = ((regs.pc >> 0) - 1) & 0xFF; + regs.sp--; + + + // Jump to new address + regs.pc = nAddress; + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdNOP (int nArgs) +{ + int iOpcode; + int iOpmode; + int nOpbyte; + + _6502GetOpcodeOpmodeOpbyte( iOpcode, iOpmode, nOpbyte ); + + while (nOpbyte--) + { + *(mem+regs.pc + nOpbyte) = 0xEA; + } + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdOutput (int nArgs) +{ +// if ((!nArgs) || +// ((g_aArgs[1].sArg[0] != TEXT('0')) && (!g_aArgs[1].nVal1) && (!GetAddress(g_aArgs[1].sArg)))) +// return DisplayHelp(CmdInput); + + if (!nArgs) + Help_Arg_1( CMD_OUTPUT ); + + WORD nAddress = g_aArgs[1].nVal1; + +// iowrite[ g_aArgs[1].nVal1 & 0xFF](regs.pc,g_aArgs[1].nVal1 & 0xFF,1,g_aArgs[2].nVal1 & 0xFF,0); + iowrite[ nAddress & 0xFF ] (regs.pc, nAddress & 0xFF, 1, g_aArgs[2].nVal1 & 0xFF,0); + + return UPDATE_CONSOLE_DISPLAY; // TODO: Verify // 1 +} + + +// Benchmark ______________________________________________________________________________________ + +//=========================================================================== +Update_t CmdBenchmark (int nArgs) +{ + if (g_bBenchmarking) + CmdBenchmarkStart(0); + else + CmdBenchmarkStop(0); + + return UPDATE_ALL; // TODO/FIXME Verify +} + +//=========================================================================== +Update_t CmdBenchmarkStart (int nArgs) +{ + CpuSetupBenchmark(); + g_nDisasmCurAddress = regs.pc; + DisasmCalcTopBotAddress(); + g_bBenchmarking = true; + return UPDATE_ALL; // 1; +} + +//=========================================================================== +Update_t CmdBenchmarkStop (int nArgs) +{ + g_bBenchmarking = false; + DebugEnd(); + mode = MODE_RUNNING; + FrameRefreshStatus(DRAW_TITLE); + VideoRedrawScreen(); + DWORD currtime = GetTickCount(); + while ((extbench = GetTickCount()) != currtime) + ; // intentional busy-waiting + KeybQueueKeypress(TEXT(' '),1); + resettiming = 1; + + return UPDATE_ALL; // 0; +} + +//=========================================================================== +Update_t CmdProfile (int nArgs) +{ + if (! nArgs) + { + sprintf( g_aArgs[ 1 ].sArg, g_aParameters[ PARAM_RESET ].m_sName ); + nArgs = 1; + } + + if (nArgs == 1) + { + int iParam; + int nFound = FindParam( g_aArgs[ 1 ].sArg, MATCH_EXACT, iParam, _PARAM_GENERAL_BEGIN, _PARAM_GENERAL_END ); + + if (! nFound) + goto _Help; + + if (iParam == PARAM_RESET) + { + ProfileReset(); + g_bProfiling = 1; + ConsoleBufferPush( TEXT(" Resetting profile data." ) ); + } + else + { + if ((iParam != PARAM_SAVE) && (iParam != PARAM_LIST)) + goto _Help; + + bool bExport = true; + if (iParam == PARAM_LIST) + bExport = false; + + // .csv (Comma Seperated Value) +// ProfileFormat( bExport, bExport ? PROFILE_FORMAT_COMMA : PROFILE_FORMAT_SPACE ); + // .txt (Tab Seperated Value) + ProfileFormat( bExport, bExport ? PROFILE_FORMAT_TAB : PROFILE_FORMAT_SPACE ); + + // Dump to console + if (iParam == PARAM_LIST) + { + + char *pText; + char sText[ CONSOLE_WIDTH ]; + + int nLine = g_nProfileLine; + int iLine; + + for( iLine = 0; iLine < nLine; iLine++ ) + { + pText = ProfileLinePeek( iLine ); + if (pText) + { + TextConvertTabsToSpaces( sText, pText, CONSOLE_WIDTH, 4 ); + ConsoleBufferPush( sText ); + } + } + } + + if (iParam == PARAM_SAVE) + { + if (ProfileSave()) + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, " Saved: %s", g_FileNameProfile ); + ConsoleBufferPush( sText ); + } + else + ConsoleBufferPush( TEXT(" ERROR: Couldn't save file. (In use?)" ) ); + } + } + } + else + goto _Help; + + return ConsoleUpdate(); // UPDATE_CONSOLE_DISPLAY; + +_Help: + return Help_Arg_1( CMD_PROFILE ); +} + + +// Breakpoint _____________________________________________________________________________________ + +// Menu: LOAD SAVE RESET +//=========================================================================== +Update_t CmdBreakpoint (int nArgs) +{ + // This is temporary until the menu is in. + CmdBreakpointAddPC( nArgs ); + + return UPDATE_CONSOLE_DISPLAY; +} + + +// smart breakpoint +//=========================================================================== +Update_t CmdBreakpointAddSmart (int nArgs) +{ + int nAddress = g_aArgs[1].nVal1; + + if (! nArgs) + { +// return Help_Arg_1( CMD_BREAKPOINT_ADD_SMART ); + g_aArgs[1].nVal1 = g_nDisasmCurAddress; + } + + if ((nAddress >= _6502_IO_BEGIN) && (nAddress <= _6502_IO_END)) + { + return CmdBreakpointAddIO( nArgs ); + } + else + { + CmdBreakpointAddReg( nArgs ); + CmdBreakpointAddMem( nArgs ); + return UPDATE_BREAKPOINTS; + } + + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdBreakpointAddReg (int nArgs) +{ + if (! nArgs) + { + return Help_Arg_1( CMD_BREAKPOINT_ADD_REG ); + } + + BreakpointSource_t iSrc = BP_SRC_REG_PC; + BreakpointOperator_t iCmp = BP_OP_EQUAL ; + int nLen = 1; + + bool bHaveSrc = false; + bool bHaveCmp = false; + + int iParamSrc; + int iParamCmp; + + int nFound; + bool bAdded = false; + + int iArg = 0; + while (iArg++ < nArgs) + { + char *sArg = g_aArgs[iArg].sArg; + + bHaveSrc = false; + bHaveCmp = false; + + nFound = FindParam( sArg, MATCH_EXACT, iParamSrc, _PARAM_REGS_BEGIN, _PARAM_REGS_END ); + if (nFound) + { + switch (iParamSrc) + { + case PARAM_REG_A : iSrc = BP_SRC_REG_A ; bHaveSrc = true; break; + case PARAM_FLAGS : iSrc = BP_SRC_REG_P ; bHaveSrc = true; break; + case PARAM_REG_X : iSrc = BP_SRC_REG_X ; bHaveSrc = true; break; + case PARAM_REG_Y : iSrc = BP_SRC_REG_Y ; bHaveSrc = true; break; + case PARAM_REG_PC: iSrc = BP_SRC_REG_PC; bHaveSrc = true; break; + case PARAM_REG_SP: iSrc = BP_SRC_REG_S ; bHaveSrc = true; break; + default: + break; + } + } + + nFound = FindParam( sArg, MATCH_EXACT, iParamCmp, _PARAM_BREAKPOINT_BEGIN, _PARAM_BREAKPOINT_END ); + if (nFound) + { + switch (iParamCmp) + { + case PARAM_BP_LESS_EQUAL : iCmp = BP_OP_LESS_EQUAL ; bHaveCmp = true; break; + case PARAM_BP_LESS_THAN : iCmp = BP_OP_LESS_THAN ; bHaveCmp = true; break; + case PARAM_BP_EQUAL : iCmp = BP_OP_EQUAL ; bHaveCmp = true; break; + case PARAM_BP_NOT_EQUAL : iCmp = BP_OP_NOT_EQUAL ; bHaveCmp = true; break; + case PARAM_BP_GREATER_THAN : iCmp = BP_OP_GREATER_THAN ; bHaveCmp = true; break; + case PARAM_BP_GREATER_EQUAL: iCmp = BP_OP_GREATER_EQUAL; bHaveCmp = true; break; + default: + break; + } + } + + if ((! bHaveSrc) && (! bHaveCmp)) + { + bAdded = _CmdBreakpointAddCommonArg( iArg, nArgs, iSrc, iCmp ); + if (!bAdded) + { + return Help_Arg_1( CMD_BREAKPOINT_ADD_REG ); + } + } + } + + return UPDATE_ALL; +} + + +//=========================================================================== +bool _CmdBreakpointAddReg( Breakpoint_t *pBP, BreakpointSource_t iSrc, BreakpointOperator_t iCmp, WORD nAddress, int nLen ) +{ + bool bStatus = false; + + if (pBP) + { + pBP->eSource = iSrc; + pBP->eOperator = iCmp; + pBP->nAddress = nAddress; + pBP->nLength = nLen; + pBP->bSet = true; + pBP->bEnabled = true; + bStatus = true; + } + + return bStatus; +} + + +//=========================================================================== +bool _CmdBreakpointAddCommonArg ( int iArg, int nArg, BreakpointSource_t iSrc, BreakpointOperator_t iCmp ) +{ + bool bStatus = false; + + int iBreakpoint = 0; + Breakpoint_t *pBP = & g_aBreakpoints[ iBreakpoint ]; + + while ((iBreakpoint < MAX_BREAKPOINTS) && g_aBreakpoints[iBreakpoint].nLength) + { + iBreakpoint++; + pBP++; + } + + if (iBreakpoint >= MAX_BREAKPOINTS) + { + ConsoleDisplayError(TEXT("All Breakpoints slots are currently in use.")); + return bStatus; + } + + if (iArg <= nArg) + { + WORD nAddress = g_aArgs[iArg].nVal1; + + int nLen = g_aArgs[iArg].nVal2; + if ( !nLen) + { + nLen = 1; + } + else + { + // Clamp Length so it stays within the 6502 memory address + int nSlack = (_6502_END_MEM_ADDRESS + 1) - nAddress; + int nWantedLength = g_aArgs[iArg].nVal2; + nLen = MIN( nSlack, nWantedLength ); + } + + bStatus = _CmdBreakpointAddReg( pBP, iSrc, iCmp, nAddress, nLen ); + g_nBreakpoints++; + } + + return bStatus; +} + + +//=========================================================================== +Update_t CmdBreakpointAddPC (int nArgs) +{ + BreakpointSource_t iSrc = BP_SRC_REG_PC; + BreakpointOperator_t iCmp = BP_OP_EQUAL ; + + if (!nArgs) + { + nArgs = 1; + g_aArgs[1].nVal1 = regs.pc; + } + + bool bHaveSrc = false; + bool bHaveCmp = false; + +// int iParamSrc; + int iParamCmp; + + int nFound = 0; + bool bAdded = false; + + int iArg = 0; + while (iArg++ < nArgs) + { + char *sArg = g_aArgs[iArg].sArg; + + if (g_aArgs[iArg].bType & TYPE_OPERATOR) + { + nFound = FindParam( sArg, MATCH_EXACT, iParamCmp, _PARAM_BREAKPOINT_BEGIN, _PARAM_BREAKPOINT_END ); + if (nFound) + { + switch (iParamCmp) + { + case PARAM_BP_LESS_EQUAL : iCmp = BP_OP_LESS_EQUAL ; bHaveCmp = true; break; + case PARAM_BP_LESS_THAN : iCmp = BP_OP_LESS_THAN ; bHaveCmp = true; break; + case PARAM_BP_EQUAL : iCmp = BP_OP_EQUAL ; bHaveCmp = true; break; + case PARAM_BP_NOT_EQUAL : iCmp = BP_OP_NOT_EQUAL ; bHaveCmp = true; break; + case PARAM_BP_GREATER_THAN : iCmp = BP_OP_GREATER_THAN ; bHaveCmp = true; break; + case PARAM_BP_GREATER_EQUAL: iCmp = BP_OP_GREATER_EQUAL; bHaveCmp = true; break; + default: + break; + } + } + } + else + { + bAdded = _CmdBreakpointAddCommonArg( iArg, nArgs, iSrc, iCmp ); + if (!bAdded) + { + return Help_Arg_1( CMD_BREAKPOINT_ADD_PC ); + } + } + } + + return UPDATE_BREAKPOINTS | UPDATE_CONSOLE_DISPLAY; // 1; +} + + +//=========================================================================== +Update_t CmdBreakpointAddIO (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdBreakpointAddMem (int nArgs) +{ + BreakpointSource_t iSrc = BP_SRC_MEM_1; + BreakpointOperator_t iCmp = BP_OP_EQUAL ; + + bool bAdded = false; + + int iArg = 0; + + while (iArg++ < nArgs) + { + char *sArg = g_aArgs[iArg].sArg; + + if (g_aArgs[iArg].bType & TYPE_OPERATOR) + { + return Help_Arg_1( CMD_BREAKPOINT_ADD_MEM ); + } + else + { + bAdded = _CmdBreakpointAddCommonArg( iArg, nArgs, iSrc, iCmp ); + if (!bAdded) + { + return Help_Arg_1( CMD_BREAKPOINT_ADD_MEM ); + } + } + } + + return UPDATE_BREAKPOINTS | UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +void _Clear( Breakpoint_t * aBreakWatchZero, int iBreakpoint ) +{ + aBreakWatchZero[iBreakpoint].bSet = false; + aBreakWatchZero[iBreakpoint].bEnabled = false; + aBreakWatchZero[iBreakpoint].nLength = 0; +} + + +// called by BreakpointsClear, WatchesClear, ZeroPagePointersClear +//=========================================================================== +void _ClearViaArgs( int nArgs, Breakpoint_t * aBreakWatchZero, const int nMax, int & gnBWZ ) +{ + int iBWZ; + + // CLEAR EACH BREAKPOINT IN THE LIST + while (nArgs) + { + iBWZ = g_aArgs[nArgs].nVal1; + if (! _tcscmp(g_aArgs[nArgs].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName)) + { + iBWZ = nMax; + while (iBWZ--) + { + if (aBreakWatchZero[iBWZ].bSet) + { + _Clear( aBreakWatchZero, iBWZ ); + gnBWZ--; + } + } + break; + } + else if ((iBWZ >= 1) && (iBWZ <= nMax)) + { + if (aBreakWatchZero[iBWZ-1].bSet) + { + _Clear( aBreakWatchZero, iBWZ - 1 ); + gnBWZ--; + } + } + nArgs--; + } +} + +// called by BreakpointsEnable, WatchesEnable, ZeroPagePointersEnable +// called by BreakpointsDisable, WatchesDisable, ZeroPagePointersDisable +void _EnableDisableViaArgs( int nArgs, Breakpoint_t * aBreakWatchZero, const int nMax, const bool bEnabled ) +{ + // Enable each breakpoint in the list + while (nArgs) + { + int iBWZ = g_aArgs[nArgs].nVal1; + if (! _tcscmp(g_aArgs[nArgs].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName)) + { + int iBWZ = nMax; + while (iBWZ--) + { + aBreakWatchZero[iBWZ].bEnabled = bEnabled; + } + break; + } + else + if ((iBWZ >= 1) && (iBWZ <= nMax)) + { + aBreakWatchZero[iBWZ-1].bEnabled = bEnabled; + } + nArgs--; + } +} + +//=========================================================================== +Update_t CmdBreakpointClear (int nArgs) +{ + if (!g_nBreakpoints) + return ConsoleDisplayError(TEXT("There are no breakpoints defined.")); + + int iBreakpoint; + + // CHECK FOR ERRORS + if (!nArgs) + { + iBreakpoint = MAX_BREAKPOINTS; + while (iBreakpoint--) + { + if ((g_aBreakpoints[iBreakpoint].bSet) && + (g_aBreakpoints[iBreakpoint].nAddress == regs.pc)) // TODO: FIXME + { + _Clear( g_aBreakpoints, iBreakpoint ); + g_nBreakpoints--; + } + } +// return DisplayHelp(CmdBreakpointClear); + } + + _ClearViaArgs( nArgs, g_aBreakpoints, MAX_BREAKPOINTS, g_nBreakpoints ); + + if (! g_nBreakpoints) + { + return (UPDATE_DISASM | UPDATE_BREAKPOINTS); + } + + return UPDATE_BREAKPOINTS | UPDATE_CONSOLE_DISPLAY; // 1; +} + +//=========================================================================== +Update_t CmdBreakpointDisable (int nArgs) +{ + if (! g_nBreakpoints) + return ConsoleDisplayError(TEXT("There are no (PC) Breakpoints defined.")); + + if (! nArgs) + return Help_Arg_1( CMD_BREAKPOINT_DISABLE ); + + _EnableDisableViaArgs( nArgs, g_aBreakpoints, MAX_BREAKPOINTS, false ); + + return UPDATE_BREAKPOINTS; +} + +//=========================================================================== +Update_t CmdBreakpointEdit (int nArgs) +{ + return (UPDATE_DISASM | UPDATE_BREAKPOINTS); +} + + +//=========================================================================== +Update_t CmdBreakpointEnable (int nArgs) { + + if (! g_nBreakpoints) + return ConsoleDisplayError(TEXT("There are no (PC) Breakpoints defined.")); + + if (! nArgs) + return Help_Arg_1( CMD_BREAKPOINT_ENABLE ); + + _EnableDisableViaArgs( nArgs, g_aBreakpoints, MAX_BREAKPOINTS, true ); + + return UPDATE_BREAKPOINTS; +} + +void _ListBreakWatchZero( Breakpoint_t * aBreakWatchZero, int iBWZ ) +{ + static TCHAR sText[ CONSOLE_WIDTH ]; + static const TCHAR sFlags[] = "-*"; + static TCHAR sName[ MAX_SYMBOLS_LEN+1 ]; + + WORD nAddress = aBreakWatchZero[ iBWZ ].nAddress; + LPCTSTR pSymbol = GetSymbol( nAddress, 2 ); + if (! pSymbol) + { + sName[0] = 0; + pSymbol = sName; + } + + wsprintf( sText, " #%d %c %04X %s", + iBWZ + 1, + sFlags[ (int) aBreakWatchZero[ iBWZ ].bEnabled ], + aBreakWatchZero[ iBWZ ].nAddress, + pSymbol + ); + ConsoleBufferPush( sText ); +} + +//=========================================================================== +Update_t CmdBreakpointList (int nArgs) +{ +// ConsoleBufferPush( ); +// vector vBreakpoints; +// int iBreakpoint = MAX_BREAKPOINTS; +// while (iBreakpoint--) +// { +// if (g_aBreakpoints[iBreakpoint].enabled) +// { +// vBreakpoints.push_back( g_aBreakpoints[iBreakpoint].address ); +// } +// } +// sort( vBreakpoints.begin(), vBreakpoints.end() ); +// iBreakpoint = vBreakPoints.size(); + + if (! g_nBreakpoints) + { + ConsoleBufferPush( TEXT(" There are no current breakpoints." ) ); + } + else + { + int iBreakpoint = 0; + while (iBreakpoint < MAX_BREAKPOINTS) + { + if (g_aBreakpoints[ iBreakpoint ].bSet) + { + _ListBreakWatchZero( g_aBreakpoints, iBreakpoint ); + } + iBreakpoint++; + } + } + return ConsoleUpdate(); +} + +//=========================================================================== +Update_t CmdBreakpointLoad (int nArgs) +{ + return UPDATE_ALL; +} + + +//=========================================================================== +Update_t CmdBreakpointSave (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +// Config _________________________________________________________________________________________ + +//=========================================================================== +Update_t CmdConfig (int nArgs) +{ + if (nArgs) + { + int iParam; + int iArg = 1; + if (FindParam( g_aArgs[iArg].sArg, MATCH_FUZZY, iParam )) + { + switch (iParam) + { + case PARAM_SAVE: + nArgs = _Arg_Shift( iArg, nArgs ); + return CmdConfigSave( nArgs ); + break; + case PARAM_LOAD: + nArgs = _Arg_Shift( iArg, nArgs ); + return CmdConfigLoad( nArgs ); + break; + default: + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, "Syntax error: %s", g_aArgs[1].sArg ); + return ConsoleDisplayError( sText ); + break; + } + } + } + } + + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdConfigLoad (int nArgs) +{ + // TODO: CmdRun( gaFileNameConfig ) + +// TCHAR sFileNameConfig[ MAX_PATH ]; + if (! nArgs) + { + + } + +// gDebugConfigName + // DEBUGLOAD file // load debugger setting + return UPDATE_ALL; +} + + +Update_t CmdConfigRun (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +// Save Debugger Settings +//=========================================================================== +Update_t CmdConfigSave (int nArgs) +{ + TCHAR filename[ MAX_PATH ]; + _tcscpy(filename, progdir); + _tcscat(filename, g_FileNameConfig ); + + HANDLE hFile = CreateFile(filename, + GENERIC_WRITE, + 0, + (LPSECURITY_ATTRIBUTES)NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, + NULL); + + if (hFile != INVALID_HANDLE_VALUE) + { + void *pSrc; + int nLen; + DWORD nPut; + + int nVersion = CURRENT_VERSION; + pSrc = (void *) &nVersion; + nLen = sizeof( nVersion ); + WriteFile( hFile, pSrc, nLen, &nPut, NULL ); + + pSrc = (void *) & gaColorPalette; + nLen = sizeof( gaColorPalette ); + WriteFile( hFile, pSrc, nLen, &nPut, NULL ); + + pSrc = (void *) & g_aColorIndex; + nLen = sizeof( g_aColorIndex ); + WriteFile( hFile, pSrc, nLen, &nPut, NULL ); + + // History + // UserSymbol + + CloseHandle( hFile ); + } + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdConfigFontLoad( int nArgs ) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdConfigFontSave( int nArgs ) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdConfigFontMode( int nArgs ) +{ + if (nArgs != 2) + return Help_Arg_1( CMD_CONFIG_FONT ); + + int nMode = g_aArgs[ 2 ].nVal1; + + if ((nMode < 0) || (nMode >= NUM_FONT_SPACING)) + return Help_Arg_1( CMD_CONFIG_FONT ); + + g_iFontSpacing = nMode; + _UpdateWindowFontHeights( g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontHeight ); + + return UPDATE_CONSOLE_DISPLAY | UPDATE_DISASM; +} + + +//=========================================================================== +Update_t CmdConfigFont (int nArgs) +{ + int iArg; + + if (! nArgs) + return CmdConfigGetFont( nArgs ); + else + if (nArgs <= 2) + { + iArg = 1; + + if (nArgs == 1) + { + // FONT * is undocumented, like VERSION * + if (_tcscmp( g_aArgs[ iArg ].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName ) == 0) + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, "Lines: %d Font Px: %d Line Px: %d" + , g_nTotalLines + , g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontHeight + , g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight ); + ConsoleBufferPush( sText ); + ConsoleBufferToDisplay(); + return UPDATE_CONSOLE_DISPLAY; + } + } + + int iFound; + int nFound; + + nFound = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_GENERAL_BEGIN, _PARAM_GENERAL_END ); + if (nFound) + { + switch( iFound ) + { + case PARAM_LOAD: + return CmdConfigFontLoad( nArgs ); + break; + case PARAM_SAVE: + return CmdConfigFontSave( nArgs ); + break; + // TODO: FONT SIZE # + // TODO: AA {ON|OFF} + default: + break; + } + } + + nFound = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_FONT_BEGIN, _PARAM_FONT_END ); + if (nFound) + { + if (iFound == PARAM_FONT_MODE) + return CmdConfigFontMode( nArgs ); + } + + return CmdConfigSetFont( nArgs ); + } + + return Help_Arg_1( CMD_CONFIG_FONT ); +} + +int GetConsoleHeightPixels() +{ + int nHeight = nHeight = g_aFontConfig[ FONT_CONSOLE ]._nFontHeight; // _nLineHeight; // _nFontHeight; + + if (g_iFontSpacing == FONT_SPACING_CLEAN) + { +// int nHeight = g_aFontConfig[ FONT_DEFAULT ]._nFontHeight + 1; // "Classic" Height/Spacing + nHeight++; // "Classic" Height/Spacing + } + else + if (g_iFontSpacing == FONT_SPACING_COMPRESSED) + { + // default case handled + } + else + if (g_iFontSpacing == FONT_SPACING_CLASSIC) + { + nHeight++; + } + + return nHeight; +} + +int GetConsoleTopPixels( int y ) +{ + int nLineHeight = GetConsoleHeightPixels(); + int nTop = DISPLAY_HEIGHT - ((y + 1) * nLineHeight); // DISPLAY_HEIGHT - (y * nFontHeight); // ((g_nTotalLines - y) * g_nFontHeight; // 368 = 23 lines * 16 pixels/line // MAX_DISPLAY_CONSOLE_LINES + return nTop; +} + + +// Only for FONT_DISASM_DEFAULT ! +void _UpdateWindowFontHeights( int nFontHeight ) +{ + if (nFontHeight) + { + // The screen layout defaults to a "virtal" font height of 16 pixels. + // The disassmebler has 19 lines. + // Total: 19 * 16 pixels + // + // Figure out how many lines we can display, given our new font height. + // Given: Total_Pixels = Lines * Pixels_Line + // Calc: Lines = Total_Pixels / Pixels_Line + int nConsoleTopY = 19 * 16; + int nHeight = 0; + + if (g_iFontSpacing == FONT_SPACING_CLASSIC) + { + nHeight = nFontHeight + 1; + g_nTotalLines = nConsoleTopY / nHeight; + } + else + if (g_iFontSpacing == FONT_SPACING_CLEAN) + { + nHeight = nFontHeight; + g_nTotalLines = nConsoleTopY / nHeight; + } + else + if (g_iFontSpacing == FONT_SPACING_COMPRESSED) + { + nHeight = nFontHeight - 1; + g_nTotalLines = (nConsoleTopY + nHeight) / nHeight; // Ceil() + } + + g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight = nHeight; + +// int nHeightOptimal = (nHeight0 + nHeight1) / 2; +// int nLinesOptimal = nConsoleTopY / nHeightOptimal; +// g_nTotalLines = nLinesOptimal; + + MAX_DISPLAY_DISASM_LINES = g_nTotalLines; + + // TODO/FIXME: Needs to take into account the console height + MAX_DISPLAY_CONSOLE_LINES = MAX_DISPLAY_DISASM_LINES + MIN_DISPLAY_CONSOLE_LINES; // 23 +// if (MAX_DISPLAY_CONSOLE_LINES > 23) +// MAX_DISPLAY_CONSOLE_LINES = 23; + + WindowUpdateSizes(); + } +} + +//=========================================================================== +bool _CmdConfigFont ( int iFont, LPCSTR pFontName, int iPitchFamily, int nFontHeight ) +{ + bool bStatus = false; + HFONT hFont = (HFONT) 0; + FontConfig_t *pFont = NULL; + + if (iFont < NUM_FONTS) + pFont = & g_aFontConfig[ iFont ]; + + if (pFontName) + { +// int nFontHeight = g_nFontHeight - 1; + + int bAntiAlias = (nFontHeight < 14) ? DEFAULT_QUALITY : ANTIALIASED_QUALITY; + + // Try allow new font + hFont = CreateFont( + nFontHeight + , 0 // Width + , 0 // Escapement + , 0 // Orientatin + , FW_MEDIUM // Weight + , 0 // Italic + , 0 // Underline + , 0 // Strike Out + , DEFAULT_CHARSET // OEM_CHARSET + , OUT_DEFAULT_PRECIS + , CLIP_DEFAULT_PRECIS + , bAntiAlias // ANTIALIASED_QUALITY // DEFAULT_QUALITY + , iPitchFamily // HACK: MAGIC #: 4 + , pFontName ); + + if (hFont) + { + if (iFont == FONT_DISASM_DEFAULT) + _UpdateWindowFontHeights( nFontHeight ); + + _tcsncpy( pFont->_sFontName, pFontName, MAX_FONT_NAME-1 ); + pFont->_sFontName[ MAX_FONT_NAME-1 ] = 0; + + HDC hDC = FrameGetDC(); + + TEXTMETRIC tm; + GetTextMetrics(hDC, &tm); + + SIZE size; + TCHAR sText[] = "W"; + int nLen = 1; + + int nFontWidthAvg; + int nFontWidthMax; + +// if (! (tm.tmPitchAndFamily & TMPF_FIXED_PITCH)) // Windows has this bitflag reversed! +// { // Proportional font? +// bool bStop = true; +// } + + // GetCharWidth32() doesn't work with TrueType Fonts + if (GetTextExtentPoint32( hDC, sText, nLen, &size )) + { + nFontWidthAvg = tm.tmAveCharWidth; + nFontWidthMax = size.cx; + } + else + { + // Font Name Avg Max "W" + // Arial 7 8 11 + // Courier 5 32 11 + // Courier New 7 14 + nFontWidthAvg = tm.tmAveCharWidth; + nFontWidthMax = tm.tmMaxCharWidth; + } + + if (! nFontWidthAvg) + { + nFontWidthAvg = 7; + nFontWidthMax = 7; + } + + FrameReleaseDC(); + +// DeleteObject( g_hFontDisasm ); +// g_hFontDisasm = hFont; + pFont->_hFont = hFont; + + pFont->_nFontWidthAvg = nFontWidthAvg; + pFont->_nFontWidthMax = nFontWidthMax; + pFont->_nFontHeight = nFontHeight; + + bStatus = true; + } + } + return bStatus; +} + + +//=========================================================================== +Update_t CmdConfigSetFont (int nArgs) +{ + HFONT hFont = (HFONT) 0; + TCHAR *pFontName = NULL; + int nHeight = g_nFontHeight; + int iFontTarget = FONT_DISASM_DEFAULT; + int iFontPitch = FIXED_PITCH | FF_MODERN; +// int iFontMode = + bool bHaveTarget = false; + bool bHaveFont = false; + + if (! nArgs) + { // reset to defaut font + pFontName = g_sFontNameDefault; + } + else + if (nArgs <= 3) + { + int iArg = 1; + pFontName = g_aArgs[1].sArg; + + // [DISASM|INFO|CONSOLE] "FontName" [#] + // "FontName" can be either arg 1 or 2 + + int iFound; + int nFound = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iFound, _PARAM_WINDOW_BEGIN, _PARAM_WINDOW_END ); + if (nFound) + { + switch( iFound ) + { + case PARAM_DISASM : iFontTarget = FONT_DISASM_DEFAULT; iFontPitch = FIXED_PITCH | FF_MODERN ; bHaveTarget = true; break; + case PARAM_INFO : iFontTarget = FONT_INFO ; iFontPitch = FIXED_PITCH | FF_MODERN ; bHaveTarget = true; break; + case PARAM_CONSOLE: iFontTarget = FONT_CONSOLE ; iFontPitch = DEFAULT_PITCH | FF_DECORATIVE; bHaveTarget = true; break; + default: + if (g_aArgs[2].bType != TOKEN_QUOTED) + return Help_Arg_1( CMD_CONFIG_FONT ); + break; + } + if (bHaveTarget) + { + pFontName = g_aArgs[2].sArg; + } + } + else + if (nArgs == 2) + { + nHeight = atoi(g_aArgs[2].sArg ); + if ((nHeight < 6) || (nHeight > 36)) + nHeight = g_nFontHeight; + } + } + else + { + return Help_Arg_1( CMD_CONFIG_FONT ); + } + + if (! _CmdConfigFont( iFontTarget, pFontName, iFontPitch, nHeight )) + { + } + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdConfigGetFont (int nArgs) +{ + if (! nArgs) + { + for (int iFont = 0; iFont < NUM_FONTS; iFont++ ) + { + TCHAR sText[ CONSOLE_WIDTH ] = TEXT(""); + wsprintf( sText, " Font: %-20s A:%2d M:%2d", +// g_sFontNameCustom, g_nFontWidthAvg, g_nFontWidthMax ); + g_aFontConfig[ iFont ]._sFontName, + g_aFontConfig[ iFont ]._nFontWidthAvg, + g_aFontConfig[ iFont ]._nFontWidthMax ); + ConsoleBufferPush( sText ); + } + return ConsoleUpdate(); + } + + return UPDATE_CONSOLE_DISPLAY; +} + + + +// Cursor _________________________________________________________________________________________ + +// Given an Address, and Line to display it on +// Calculate the address of the top and bottom lines +// @param bUpdateCur +// true = Update Cur based on Top +// false = Update Top & Bot based on Cur +//=========================================================================== +void DisasmCalcTopFromCurAddress( bool bUpdateTop ) +{ + int nLen = ((g_nDisasmWinHeight - g_nDisasmCurLine) * 3); // max 3 opcodes/instruction, is our search window + + // Look for a start address that when disassembled, + // will have the cursor on the specified line and address + int iTop = g_nDisasmCurAddress - nLen; + int iCur = g_nDisasmCurAddress; + + g_bDisasmCurBad = false; + + bool bFound = false; + while (iTop <= iCur) + { + WORD iAddress = iTop; + for( int iLine = 0; iLine <= nLen; iLine++ ) // min 1 opcode/instruction + { + if (iLine == g_nDisasmCurLine) // && (iAddress == g_nDisasmCurAddress)) + { + if (iAddress == g_nDisasmCurAddress) + { + g_nDisasmTopAddress = iTop; + bFound = true; + break; + } + } + + int iOpmode; + int nOpbyte; + _6502GetOpmodeOpbyte( iAddress, iOpmode, nOpbyte ); + + // .20 Fixed: DisasmCalcTopFromCurAddress() + //if ((eMode >= ADDR_INVALID1) && (eMode <= ADDR_INVALID3)) + { +#if 0 // _DEBUG + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, "%04X : %d bytes\n", iAddress, nOpbyte ); + OutputDebugString( sText ); +#endif + iAddress += nOpbyte; + } + } + if (bFound) + { + break; + } + iTop++; + } + + if (! bFound) + { + // Well, we're up the creek. + // There is no (valid) solution! + // Basically, there is no address, that when disassembled, + // will put our Address on the cursor Line! + // So, like typical game programming, when we don't like the solution, change the problem! +// if (bUpdateTop) + g_nDisasmTopAddress = g_nDisasmCurAddress; + + g_bDisasmCurBad = true; // Bad Disassembler, no opcode for you! + + // We reall should move the cursor line to the top for one instruction. + // Moving the cursor line is not really a good idea, since we're breaking the user paradigm. + // g_nDisasmCurLine = 0; +#if 0 // _DEBUG + TCHAR sText[ CONSOLE_WIDTH * 2 ]; + sprintf( sText, TEXT("DisasmCalcTopFromCurAddress()\n" + "\tTop: %04X\n" + "\tLen: %04X\n" + "\tMissed: %04X"), + g_nDisasmCurAddress - nLen, nLen, g_nDisasmCurAddress ); + MessageBox( framewindow, sText, "ERROR", MB_OK ); +#endif + } + } + + + +WORD DisasmCalcAddressFromLines( WORD iAddress, int nLines ) +{ + while (nLines-- > 0) + { + int iOpmode; + int nOpbyte; + _6502GetOpmodeOpbyte( iAddress, iOpmode, nOpbyte ); + iAddress += nOpbyte; + } + return iAddress; +} + +void DisasmCalcCurFromTopAddress() +{ + g_nDisasmCurAddress = DisasmCalcAddressFromLines( g_nDisasmTopAddress, g_nDisasmCurLine ); +} + +void DisasmCalcBotFromTopAddress( ) +{ + g_nDisasmBotAddress = DisasmCalcAddressFromLines( g_nDisasmTopAddress, g_nDisasmWinHeight ); +} + +void DisasmCalcTopBotAddress () +{ + DisasmCalcTopFromCurAddress(); + DisasmCalcBotFromTopAddress(); +} + + +//=========================================================================== +Update_t CmdCursorLineDown (int nArgs) +{ + int iOpmode; + int nOpbyte; + _6502GetOpmodeOpbyte( g_nDisasmCurAddress, iOpmode, nOpbyte ); // g_nDisasmTopAddress + + if (g_iWindowThis == WINDOW_DATA) + { + _CursorMoveDownAligned( WINDOW_DATA_BYTES_PER_LINE ); + } + else + if (nArgs) + { + nOpbyte = nArgs; // HACKL g_aArgs[1].val + + g_nDisasmTopAddress += nOpbyte; + g_nDisasmCurAddress += nOpbyte; + g_nDisasmBotAddress += nOpbyte; + } + else + { + // Works except on one case: G FB53, SPACE, DOWN + WORD nTop = g_nDisasmTopAddress; + WORD nCur = g_nDisasmCurAddress + nOpbyte; + if (g_bDisasmCurBad) + { + g_nDisasmCurAddress = nCur; + g_bDisasmCurBad = false; + DisasmCalcTopFromCurAddress(); + return UPDATE_DISASM; + } + + // Adjust Top until nNewCur is at > Cur + do + { + g_nDisasmTopAddress++; + DisasmCalcCurFromTopAddress(); + } while (g_nDisasmCurAddress < nCur); + + DisasmCalcCurFromTopAddress(); + DisasmCalcBotFromTopAddress(); + g_bDisasmCurBad = false; + } + + // Can't use use + nBytes due to Disasm Singularity +// DisasmCalcTopBotAddress(); + + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorLineUp (int nArgs) +{ + WORD nBest = g_nDisasmTopAddress; + int nBytes = 1; + + if (g_iWindowThis == WINDOW_DATA) + { + _CursorMoveUpAligned( WINDOW_DATA_BYTES_PER_LINE ); + } + else + if (nArgs) + { + nBytes = nArgs; // HACK: g_aArgs[1].nVal1 + + g_nDisasmTopAddress--; + DisasmCalcCurFromTopAddress(); + DisasmCalcBotFromTopAddress(); + } + else + { + nBytes = 1; + + // SmartLineUp() + // Figure out if we should move up 1, 2, or 3 bytes since we have 2 possible cases: + // + // a) Scroll up by 2 bytes + // xx-2: A9 yy LDA #xx + // xxxx: top + // + // b) Scroll up by 3 bytes + // xx-3: 20 A9 xx JSR $00A9 + // xxxx: top of window + // + WORD nCur = g_nDisasmCurAddress - nBytes; + + // Adjust Top until nNewCur is at > Cur + do + { + g_nDisasmTopAddress--; + DisasmCalcCurFromTopAddress(); + } while (g_nDisasmCurAddress > nCur); + + DisasmCalcCurFromTopAddress(); + DisasmCalcBotFromTopAddress(); + g_bDisasmCurBad = false; + } + + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorJumpPC (int nArgs) +{ + // TODO: Allow user to decide if they want next g_aOpcodes at + // 1) Centered (traditionaly), or + // 2) Top of the screen + + // if (UserPrefs.bNextInstructionCentered) + if (CURSOR_ALIGN_CENTER == nArgs) + { + g_nDisasmCurAddress = regs.pc; // (2) + WindowUpdateDisasmSize(); // calc cur line + } + else + if (CURSOR_ALIGN_TOP == nArgs) + { + g_nDisasmCurAddress = regs.pc; // (2) + g_nDisasmCurLine = 0; + } + + DisasmCalcTopBotAddress(); + + return UPDATE_ALL; +} + + +//=========================================================================== +bool _Get6502ReturnAddress( WORD & nAddress_ ) +{ + unsigned nStack = regs.sp; + nStack++; + + if (nStack <= (_6502_STACK_END - 1)) + { + nAddress_ = 0; + nAddress_ = (unsigned)*(LPBYTE)(mem + nStack); + nStack++; + + nAddress_ += ((unsigned)*(LPBYTE)(mem + nStack)) << 8; + nAddress_++; + return true; + } + return false; +} + +//=========================================================================== +Update_t CmdCursorJumpRetAddr (int nArgs) +{ + WORD nAddress; + if (_Get6502ReturnAddress( nAddress )) + { + g_nDisasmCurAddress = nAddress; + + if (CURSOR_ALIGN_CENTER == nArgs) + { + WindowUpdateDisasmSize(); + } + else + if (CURSOR_ALIGN_TOP == nArgs) + { + g_nDisasmCurLine = 0; + } + DisasmCalcTopBotAddress(); + } + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdCursorRunUntil (int nArgs) +{ + nArgs = _Arg_1( g_nDisasmCurAddress ); + return CmdGo( nArgs ); +} + + +WORD _ClampAddress( int nAddress ) +{ + if (nAddress < 0) + nAddress = 0; + if (nAddress > 0xFFFF) + nAddress = 0xFFFF; + + return (WORD) nAddress; +} + + +// nDelta must be a power of 2 +//=========================================================================== +void _CursorMoveDownAligned( int nDelta ) +{ + if (g_iWindowThis == WINDOW_DATA) + { + if (g_aMemDump[0].bActive) + { + if (g_aMemDump[0].eDevice == DEV_MEMORY) + { + g_aMemDump[0].nAddress += nDelta; + g_aMemDump[0].nAddress &= _6502_END_MEM_ADDRESS; + } + } + } + else + { + int nNewAddress = g_nDisasmTopAddress; // BUGFIX: g_nDisasmCurAddress; + + if ((nNewAddress & (nDelta-1)) == 0) + nNewAddress += nDelta; + else + nNewAddress += (nDelta - (nNewAddress & (nDelta-1))); // .22 Fixed: Shift-PageUp Shift-PageDown Ctrl-PageUp Ctrl-PageDown -> _CursorMoveUpAligned() & _CursorMoveDownAligned() + + g_nDisasmTopAddress = nNewAddress & _6502_END_MEM_ADDRESS; // .21 Fixed: _CursorMoveUpAligned() & _CursorMoveDownAligned() not wrapping around past FF00 to 0, and wrapping around past 0 to FF00 + } +} + +// nDelta must be a power of 2 +//=========================================================================== +void _CursorMoveUpAligned( int nDelta ) +{ + if (g_iWindowThis == WINDOW_DATA) + { + if (g_aMemDump[0].bActive) + { + if (g_aMemDump[0].eDevice == DEV_MEMORY) + { + g_aMemDump[0].nAddress -= nDelta; + g_aMemDump[0].nAddress &= _6502_END_MEM_ADDRESS; + } + } + } + else + { + int nNewAddress = g_nDisasmTopAddress; // BUGFIX: g_nDisasmCurAddress; + + if ((nNewAddress & (nDelta-1)) == 0) + nNewAddress -= nDelta; + else + nNewAddress -= (nNewAddress & (nDelta-1)); // .22 Fixed: Shift-PageUp Shift-PageDown Ctrl-PageUp Ctrl-PageDown -> _CursorMoveUpAligned() & _CursorMoveDownAligned() + + g_nDisasmTopAddress = nNewAddress & _6502_END_MEM_ADDRESS; // .21 Fixed: _CursorMoveUpAligned() & _CursorMoveDownAligned() not wrapping around past FF00 to 0, and wrapping around past 0 to FF00 + } +} + + +//=========================================================================== +Update_t CmdCursorPageDown (int nArgs) +{ + int iLines = 1; // show at least 1 line from previous display + int nLines = WindowGetHeight( g_iWindowThis ); + + if (nLines < 2) + nLines = 2; + + if (g_iWindowThis == WINDOW_DATA) + { + const int nStep = 128; + _CursorMoveDownAligned( nStep ); + } + else + { + while (++iLines < nLines) + CmdCursorLineDown(nArgs); + } + + return UPDATE_DISASM; +} + + +//=========================================================================== +Update_t CmdCursorPageDown256 (int nArgs) +{ + const int nStep = 256; + _CursorMoveDownAligned( nStep ); + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorPageDown4K (int nArgs) +{ + const int nStep = 4096; + _CursorMoveDownAligned( nStep ); + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorPageUp (int nArgs) +{ + int iLines = 1; // show at least 1 line from previous display + int nLines = WindowGetHeight( g_iWindowThis ); + + if (nLines < 2) + nLines = 2; + + if (g_iWindowThis == WINDOW_DATA) + { + const int nStep = 128; + _CursorMoveUpAligned( nStep ); + } + else + { + while (++iLines < nLines) + CmdCursorLineUp(nArgs); + } + + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorPageUp256 (int nArgs) +{ + const int nStep = 256; + _CursorMoveUpAligned( nStep ); + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorPageUp4K (int nArgs) +{ + const int nStep = 4096; + _CursorMoveUpAligned( nStep ); + return UPDATE_DISASM; +} + +//=========================================================================== +Update_t CmdCursorSetPC( int nArgs) // TODO rename +{ + regs.pc = nArgs; // HACK: + return UPDATE_DISASM; +} + + +// Flags __________________________________________________________________________________________ + + +//=========================================================================== +Update_t CmdFlagClear (int nArgs) +{ + int iFlag = (g_iCommand - CMD_FLAG_CLR_C); + + if (g_iCommand == CMD_FLAG_CLEAR) + { + int iArg = nArgs; + while (iArg) + { + iFlag = 0; + while (iFlag < _6502_NUM_FLAGS) + { +// if (g_aFlagNames[iFlag] == g_aArgs[iArg].sArg[0]) + if (g_aBreakpointSource[ BP_SRC_FLAG_N + iFlag ][0] == g_aArgs[iArg].sArg[0]) + { + regs.ps &= ~(1 << iFlag); + } + iFlag++; + } + iArg--; + } + } + else + { + regs.ps &= ~(1 << iFlag); + } + + return UPDATE_FLAGS; // 1; +} + +//=========================================================================== +Update_t CmdFlagSet (int nArgs) +{ + int iFlag = (g_iCommand - CMD_FLAG_SET_C); + + if (g_iCommand == CMD_FLAG_SET) + { + int iArg = nArgs; + while (iArg) + { + iFlag = 0; + while (iFlag < _6502_NUM_FLAGS) + { +// if (g_aFlagNames[iFlag] == g_aArgs[iArg].sArg[0]) + if (g_aBreakpointSource[ BP_SRC_FLAG_N + iFlag ][0] == g_aArgs[iArg].sArg[0]) + { + regs.ps |= (1 << iFlag); + } + iFlag++; + } + iArg--; + } + } + else + { + regs.ps |= (1 << iFlag); + } + return UPDATE_FLAGS; // 1; +} + +//=========================================================================== +Update_t CmdFlag (int nArgs) +{ +// if (g_aArgs[0].sArg[0] == g_aParameters[PARAM_FLAG_CLEAR].aName[0] ) // TEXT('R') + if (g_iCommand == CMD_FLAG_CLEAR) + return CmdFlagClear( nArgs ); + else + if (g_iCommand == CMD_FLAG_SET) +// if (g_aArgs[0].sArg[0] == g_aParameters[PARAM_FLAG_SET].aName[0] ) // TEXT('S') + return CmdFlagSet( nArgs ); + + return UPDATE_ALL; // 0; +} + + +// Help ___________________________________________________________________________________________ + + +// Loads the arguments with the command to get help on and call display help. +//=========================================================================== +Update_t Help_Arg_1( int iCommandHelp ) +{ + _Arg_1( iCommandHelp ); + + wsprintf( g_aArgs[ 1 ].sArg, g_aCommands[ iCommandHelp ].m_sName ); // .3 Fixed: Help_Arg_1() now copies command name into arg.name + + return CmdHelpSpecific( 1 ); +} + + + +//=========================================================================== +void _CmdHelpSpecific() +{ + +} + + +//=========================================================================== +Update_t CmdMOTD( int nArgs ) +{ + TCHAR sText[ CONSOLE_WIDTH ]; + + ConsoleBufferPush( TEXT(" Apple ][+ //e Emulator for Windows") ); + CmdVersion(0); + CmdSymbols(0); + wsprintf( sText, " '~' console, '%s' (specific), '%s' (all)" + , g_aCommands[ CMD_HELP_SPECIFIC ].m_sName +// , g_aCommands[ CMD_HELP_SPECIFIC ].pHelpSummary + , g_aCommands[ CMD_HELP_LIST ].m_sName +// , g_aCommands[ CMD_HELP_LIST ].pHelpSummary + ); + ConsoleBufferPush( sText ); + + ConsoleUpdate(); + + return UPDATE_ALL; +} + + +// Help on specific command +//=========================================================================== +Update_t CmdHelpSpecific (int nArgs) +{ + int iArg; + TCHAR sText[ CONSOLE_WIDTH ]; + ZeroMemory( sText, CONSOLE_WIDTH ); + + if (! nArgs) + { +// ConsoleBufferPush( TEXT(" [] = optional, {} = mandatory. Categories are: ") ); + + _tcscpy( sText, TEXT("Usage: [{ ") ); + for (int iCategory = _PARAM_HELPCATEGORIES_BEGIN ; iCategory < _PARAM_HELPCATEGORIES_END; iCategory++) + { + TCHAR *pName = g_aParameters[ iCategory ].m_sName; + if (! TestStringCat( sText, pName, g_nConsoleDisplayWidth - 3 )) // CONSOLE_WIDTH + { + ConsoleBufferPush( sText ); + _tcscpy( sText, TEXT(" ") ); + } + + StringCat( sText, pName, CONSOLE_WIDTH ); + if (iCategory < (_PARAM_HELPCATEGORIES_END - 1)) + { + StringCat( sText, TEXT(" | "), CONSOLE_WIDTH ); + } + } + StringCat( sText, TEXT(" }]"), CONSOLE_WIDTH ); + ConsoleBufferPush( sText ); + + wsprintf( sText, TEXT("Note: [] = optional, {} = mandatory"), CONSOLE_WIDTH ); + ConsoleBufferPush( sText ); + } + + + bool bAllCommands = false; + bool bCategory = false; + + if (! _tcscmp( g_aArgs[1].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName)) + { + bAllCommands = true; + nArgs = NUM_COMMANDS; + } + + // If Help on category, push command name as arg + int nNewArgs = 0; + int iCmdBegin = 0; + int iCmdEnd = 0; + for (iArg = 1; iArg <= nArgs; iArg++ ) + { + int iParam; + int nFoundCategory = FindParam( g_aArgs[ iArg ].sArg, MATCH_EXACT, iParam, _PARAM_HELPCATEGORIES_BEGIN, _PARAM_HELPCATEGORIES_END ); + switch( iParam ) + { + case PARAM_CAT_BREAKPOINTS: iCmdBegin = CMD_BREAKPOINT ; iCmdEnd = CMD_BREAKPOINT_SAVE + 1; break; + case PARAM_CAT_CONFIG : iCmdBegin = CMD_CONFIG_COLOR ; iCmdEnd = CMD_CONFIG_SAVE + 1; break; + case PARAM_CAT_CPU : iCmdBegin = CMD_ASSEMBLE ; iCmdEnd = CMD_TRACE_LINE + 1; break; + case PARAM_CAT_FLAGS : iCmdBegin = CMD_FLAG_CLEAR ; iCmdEnd = CMD_FLAG_SET_N + 1; break; + case PARAM_CAT_MEMORY : iCmdBegin = CMD_MEMORY_COMPARE ; iCmdEnd = CMD_MEMORY_FILL + 1; break; + case PARAM_CAT_SYMBOLS : iCmdBegin = CMD_SYMBOLS_LOOKUP ; iCmdEnd = CMD_SYMBOLS_LIST + 1; break; + case PARAM_CAT_WATCHES : iCmdBegin = CMD_WATCH_ADD ; iCmdEnd = CMD_WATCH_LIST + 1; break; + case PARAM_CAT_WINDOW : iCmdBegin = CMD_WINDOW ; iCmdEnd = CMD_WINDOW_OUTPUT + 1; break; + case PARAM_CAT_ZEROPAGE : iCmdBegin = CMD_ZEROPAGE_POINTER; iCmdEnd = CMD_ZEROPAGE_POINTER_SAVE+1;break; + default: break; + } + nNewArgs = (iCmdEnd - iCmdBegin); + if (nNewArgs > 0) + break; + } + + if (nNewArgs > 0) + { + bCategory = true; + + nArgs = nNewArgs; + for (iArg = 1; iArg <= nArgs; iArg++ ) + { + g_aArgs[ iArg ].nVal2 = iCmdBegin + iArg - 1; + } + } + + CmdFuncPtr_t pFunction; + + for (iArg = 1; iArg <= nArgs; iArg++ ) + { + int iCommand = 0; + int nFound = FindCommand( g_aArgs[iArg].sArg, pFunction, & iCommand ); + + if (bCategory) + { + iCommand = g_aArgs[iArg].nVal2; + } + + if (bAllCommands) + { + iCommand = iArg; + if (iCommand == NUM_COMMANDS) // skip: Internal Consistency Check __COMMANDS_VERIFY_TXT__ + continue; + } + + if (nFound > 1) + { + DisplayAmbigiousCommands( nFound ); + } + + if (iCommand > NUM_COMMANDS) + continue; + + if ((nArgs == 1) && (! nFound)) + iCommand = g_aArgs[iArg].nVal1; + + Command_t *pCommand = & g_aCommands[ iCommand ]; + + if (! nFound) + { + iCommand = NUM_COMMANDS; + pCommand = NULL; + } + + if (nFound && (! bAllCommands)) + { + TCHAR sCategory[ CONSOLE_WIDTH ]; + int iCmd = g_aCommands[ iCommand ].iCommand; // Unaliased command + + // HACK: Major kludge to display category!!! + if (iCmd <= CMD_TRACE_LINE) + wsprintf( sCategory, "Main" ); + else + if (iCmd <= CMD_BREAKPOINT_SAVE) + wsprintf( sCategory, "Breakpoint" ); + else + if (iCmd <= CMD_PROFILE) + wsprintf( sCategory, "Profile" ); + else + if (iCmd <= CMD_CONFIG_SAVE) + wsprintf( sCategory, "Config" ); + else + if (iCmd <= CMD_CURSOR_PAGE_DOWN_4K) + wsprintf( sCategory, "Scrolling" ); + else + if (iCmd <= CMD_FLAG_SET_N) + wsprintf( sCategory, "Flags" ); + else + if (iCmd <= CMD_MOTD) + wsprintf( sCategory, "Help" ); + else + if (iCmd <= CMD_MEMORY_FILL) + wsprintf( sCategory, "Memory" ); + else + if (iCmd <= CMD_REGISTER_SET) + wsprintf( sCategory, "Registers" ); + else + if (iCmd <= CMD_SYNC) + wsprintf( sCategory, "Source" ); + else + if (iCmd <= CMD_STACK_PUSH) + wsprintf( sCategory, "Stack" ); + else + if (iCmd <= CMD_SYMBOLS_LIST) + wsprintf( sCategory, "Symbols" ); + else + if (iCmd <= CMD_WATCH_SAVE) + wsprintf( sCategory, "Watch" ); + else + if (iCmd <= CMD_WINDOW_OUTPUT) + wsprintf( sCategory, "Window" ); + else + if (iCmd <= CMD_ZEROPAGE_POINTER_SAVE) + wsprintf( sCategory, "Zero Page" ); + else + wsprintf( sCategory, "Unknown!" ); + + wsprintf( sText, "Category: %s", sCategory ); + ConsoleBufferPush( sText ); + } + + if (pCommand) + { + char *pHelp = pCommand->pHelpSummary; + if (pHelp) + { + wsprintf( sText, "%s, ", pCommand->m_sName ); + if (! TryStringCat( sText, pHelp, g_nConsoleDisplayWidth )) + { + if (! TryStringCat( sText, pHelp, CONSOLE_WIDTH )) + { + StringCat( sText, pHelp, CONSOLE_WIDTH ); + ConsoleBufferPush( sText ); + } + } + ConsoleBufferPush( sText ); + } + else + { + wsprintf( sText, "%s", pCommand->m_sName ); + ConsoleBufferPush( sText ); + #if DEBUG_COMMAND_HELP + if (! bAllCommands) // Release version doesn't display message + { + wsprintf( sText, "Missing Summary Help: %s", g_aCommands[ iCommand ].aName ); + ConsoleBufferPush( sText ); + } + #endif + } + } + + // MASTER HELP + switch (iCommand) + { + // CPU / General + case CMD_ASSEMBLE: + ConsoleBufferPush( TEXT(" Built-in assember isn't functional yet.") ); + break; + case CMD_UNASSEMBLE: + ConsoleBufferPush( TEXT(" Usage: {address | symbol}") ); + ConsoleBufferPush( TEXT(" Disassembles memory.") ); + break; + case CMD_CALC: + ConsoleBufferPush( TEXT(" Usage: {address | symbol | + | - }" ) ); + ConsoleBufferPush( TEXT(" Output order is: Hex Bin Dec Char" ) ); + ConsoleBufferPush( TEXT(" Note: symbols take piority." ) ); + ConsoleBufferPush( TEXT("i.e. #A (if you don't want accum. val)" ) ); + ConsoleBufferPush( TEXT("i.e. #F (if you don't want flags val)" ) ); + break; + case CMD_GO: + ConsoleBufferPush( TEXT(" Usage: [address | symbol [Skip,End]]") ); + ConsoleBufferPush( TEXT(" Skip: Start address to skip stepping" ) ); + ConsoleBufferPush( TEXT(" End : End address to skip stepping" ) ); + ConsoleBufferPush( TEXT(" If the Program Counter is outside the" ) ); + ConsoleBufferPush( TEXT(" skip range, resumes single-stepping." ) ); + ConsoleBufferPush( TEXT(" Can be used to skip ROM/OS/user code." )); + ConsoleBufferPush( TEXT(" i.e. G C600 F000,FFFF" ) ); + break; + case CMD_NOP: + ConsoleBufferPush( TEXT(" Puts a NOP opcode at current instruction") ); + break; + case CMD_JSR: + ConsoleBufferPush( TEXT(" Usage: {symbol | address}") ); + ConsoleBufferPush( TEXT(" Pushes PC on stack; calls the named subroutine.") ); + break; + case CMD_PROFILE: + wsprintf( sText, TEXT(" Usage: [%s | %s | %s]") + , g_aParameters[ PARAM_RESET ].m_sName + , g_aParameters[ PARAM_SAVE ].m_sName + , g_aParameters[ PARAM_LIST ].m_sName + ); + ConsoleBufferPush( sText ); + ConsoleBufferPush( TEXT(" No arguments resets the profile.") ); + break; + case CMD_SOURCE: + ConsoleBufferPush( TEXT(" Reads assembler source file." ) ); + wsprintf( sText, TEXT(" Usage: [ %s | %s ] \"filename\"" ), g_aParameters[ PARAM_SRC_MEMORY ].m_sName, g_aParameters[ PARAM_SRC_SYMBOLS ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" %s: read source bytes into memory." ), g_aParameters[ PARAM_SRC_MEMORY ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" %s: read symbols into Source symbol table."), g_aParameters[ PARAM_SRC_SYMBOLS ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" Supports: %s." ), g_aParameters[ PARAM_SRC_MERLIN ].m_sName ); ConsoleBufferPush( sText ); + break; + case CMD_STEP_OUT: + ConsoleBufferPush( TEXT(" Steps out of current subroutine") ); + ConsoleBufferPush( TEXT(" Hotkey: Ctrl-Space" ) ); + break; + case CMD_STEP_OVER: // Bad name? FIXME/TODO: do we need to rename? + ConsoleBufferPush( TEXT(" Usage: [#]") ); + ConsoleBufferPush( TEXT(" Steps, # times, thru current instruction") ); + ConsoleBufferPush( TEXT(" JSR will be stepped into AND out of.") ); + ConsoleBufferPush( TEXT(" Hotkey: Ctrl-Space" ) ); + break; + case CMD_TRACE: + ConsoleBufferPush( TEXT(" Usage: [#]") ); + ConsoleBufferPush( TEXT(" Traces, # times, current instruction(s)") ); + ConsoleBufferPush( TEXT(" JSR will be stepped into") ); + ConsoleBufferPush( TEXT(" Hotkey: Shift-Space" ) ); + case CMD_TRACE_FILE: + ConsoleBufferPush( TEXT(" Usage: [filename]") ); + break; + case CMD_TRACE_LINE: + ConsoleBufferPush( TEXT(" Usage: [#]") ); + ConsoleBufferPush( TEXT(" Traces into current instruction") ); + ConsoleBufferPush( TEXT(" with cycle counting." ) ); + break; + // Breakpoints + case CMD_BREAKPOINT: + wsprintf( sText, " Maximum breakpoints are: %d", MAX_BREAKPOINTS ); + ConsoleBufferPush( sText ); + break; + case CMD_BREAKPOINT_ADD_REG: + ConsoleBufferPush( TEXT(" Usage: [A|X|Y|PC|S] [<,=,>] value") ); + ConsoleBufferPush( TEXT(" Set breakpoint when reg is [op] value") ); + break; + case CMD_BREAKPOINT_ADD_SMART: + case CMD_BREAKPOINT_ADD_PC: + ConsoleBufferPush( TEXT(" Usage: [address]") ); + ConsoleBufferPush( TEXT(" Sets a breakpoint at the current PC") ); + ConsoleBufferPush( TEXT(" or at the specified address.") ); + break; + case CMD_BREAKPOINT_ENABLE: + ConsoleBufferPush( TEXT(" Usage: [# [,#] | *]") ); + ConsoleBufferPush( TEXT(" Re-enables breakpoint previously set, or all.") ); + break; + // Config - Color + case CMD_CONFIG_COLOR: + ConsoleBufferPush( TEXT(" Usage: [{#} | {# RR GG BB}]" ) ); + ConsoleBufferPush( TEXT(" 0 params: switch to 'color' scheme" ) ); + ConsoleBufferPush( TEXT(" 1 param : dumps R G B for scheme 'color'") ); + ConsoleBufferPush( TEXT(" 4 params: sets R G B for scheme 'color'" ) ); + break; + case CMD_CONFIG_MONOCHROME: + ConsoleBufferPush( TEXT(" Usage: [{#} | {# RR GG BB}]" ) ); + ConsoleBufferPush( TEXT(" 0 params: switch to 'monochrome' scheme" ) ); + ConsoleBufferPush( TEXT(" 1 param : dumps R G B for scheme 'monochrome'") ); + ConsoleBufferPush( TEXT(" 4 params: sets R G B for scheme 'monochrome'" ) ); + break; + case CMD_OUTPUT: + ConsoleBufferPush( TEXT(" Usage: {address8 | address16 | symbol} ## [##]") ); + ConsoleBufferPush( TEXT(" Ouput a byte or word to the IO address $C0xx" ) ); + break; + // Config - Font + case CMD_CONFIG_FONT: + wsprintf( sText, TEXT(" Usage: [%s | %s] \"FontName\" [Height]" ), + g_aParameters[ PARAM_FONT_MODE ].m_sName, g_aParameters[ PARAM_DISASM ].m_sName ); + ConsoleBufferPush( sText ); + ConsoleBufferPush( TEXT(" i.e. FONT \"Courier\" 12" ) ); + ConsoleBufferPush( TEXT(" i.e. FONT \"Lucida Console\" 12" ) ); + wsprintf( sText, TEXT(" %s Controls line spacing."), g_aParameters[ PARAM_FONT_MODE ].m_sName ); + ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" Valid values are: %d, %d, %d." ), + FONT_SPACING_CLASSIC, FONT_SPACING_CLEAN, FONT_SPACING_COMPRESSED ); + ConsoleBufferPush( sText ); + break; + // Memory + case CMD_MEMORY_ENTER_BYTE: + ConsoleBufferPush( TEXT(" Usage: {address | symbol} ## [## ... ##]") ); + ConsoleBufferPush( TEXT(" Sets memory to the specified 8-Bit Values (bytes)" ) ); + break; + case CMD_MEMORY_ENTER_WORD: + ConsoleBufferPush( TEXT(" Usage: {address | symbol} #### [#### ... ####]") ); + ConsoleBufferPush( TEXT(" Sets memory to the specified 16-Bit Values (words)" ) ); + break; + case CMD_MEMORY_FILL: + ConsoleBufferPush( TEXT(" Usage: {address | symbol} {address | symbol} ##" ) ); + ConsoleBufferPush( TEXT(" Fills the memory range with the specified byte" ) ); + ConsoleBufferPush( TEXT(" Can't fill IO address $C0xx" ) ); + break; +// case CMD_MEM_MINI_DUMP_ASC_1: +// case CMD_MEM_MINI_DUMP_ASC_2: + case CMD_MEM_MINI_DUMP_ASCII_1: + case CMD_MEM_MINI_DUMP_ASCII_2: + ConsoleBufferPush( TEXT(" Usage: {address | symbol}") ); + ConsoleBufferPush( TEXT(" Displays ASCII text in the Mini-Memory area") ); + ConsoleBufferPush( TEXT(" ASCII control chars are hilighted") ); + ConsoleBufferPush( TEXT(" ASCII hi-bit chars are normal") ); +// break; +// case CMD_MEM_MINI_DUMP_TXT_LO_1: +// case CMD_MEM_MINI_DUMP_TXT_LO_2: + case CMD_MEM_MINI_DUMP_APPLE_1: + case CMD_MEM_MINI_DUMP_APPLE_2: + ConsoleBufferPush( TEXT(" Usage: {address | symbol}") ); + ConsoleBufferPush( TEXT(" Displays APPLE text in the Mini-Memory area") ); + ConsoleBufferPush( TEXT(" APPLE control chars are inverse") ); + ConsoleBufferPush( TEXT(" APPLE hi-bit chars are normal") ); + break; +// case CMD_MEM_MINI_DUMP_TXT_HI_1: +// case CMD_MEM_MINI_DUMP_TXT_HI_2: +// ConsoleBufferPush( TEXT(" Usage: {address | symbol}") ); +// ConsoleBufferPush( TEXT(" Displays text in the Memory Mini-Dump area") ); +// ConsoleBufferPush( TEXT(" ASCII chars with the hi-bit set, is inverse") ); + break; + // Symbols + case CMD_SYMBOLS_MAIN: + case CMD_SYMBOLS_USER: + case CMD_SYMBOLS_SRC : +// ConsoleBufferPush( TEXT(" Usage: [ ON | OFF | symbol | address ]" ) ); +// ConsoleBufferPush( TEXT(" Usage: [ LOAD [\"filename\"] | SAVE \"filename\"]" ) ); +// ConsoleBufferPush( TEXT(" ON : Turns symbols on in the disasm window" ) ); +// ConsoleBufferPush( TEXT(" OFF : Turns symbols off in the disasm window" ) ); +// ConsoleBufferPush( TEXT(" LOAD: Loads symbols from last/default filename" ) ); +// ConsoleBufferPush( TEXT(" SAVE: Saves symbol table to file" ) ); +// ConsoleBufferPush( TEXT(" CLEAR: Clears the symbol table" ) ); + ConsoleBufferPush( TEXT(" Usage: [ ... | symbol | address ]") ); + ConsoleBufferPush( TEXT(" Where ... is one of:" ) ); + wsprintf( sText, TEXT(" %s " ": Turns symbols on in the disasm window" ), g_aParameters[ PARAM_ON ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" %s " ": Turns symbols off in the disasm window" ), g_aParameters[ PARAM_OFF ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" %s" ": Loads symbols from last/default \"filename\"" ), g_aParameters[ PARAM_SAVE ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" %s" ": Saves symbol table to \"filename\"" ), g_aParameters[ PARAM_LOAD ].m_sName ); ConsoleBufferPush( sText ); + wsprintf( sText, TEXT(" %s" ": Clears the symbol table" ), g_aParameters[ PARAM_CLEAR ].m_sName ); ConsoleBufferPush( sText ); + break; + // Watches + case CMD_WATCH_ADD: + ConsoleBufferPush( TEXT(" Usage: {address | symbol}" ) ); + ConsoleBufferPush( TEXT(" Adds the specified memory location to the watch window." ) ); + break; + // Window + case CMD_WINDOW_CODE : // summary is good enough + case CMD_WINDOW_CODE_2 : // summary is good enough + case CMD_WINDOW_SOURCE_2: // summary is good enough + break; + + // Misc + case CMD_VERSION: + ConsoleBufferPush( TEXT(" Usage: [*]") ); + ConsoleBufferPush( TEXT(" * Display extra internal stats" ) ); + break; + default: + if (bAllCommands) + break; +#if DEBUG_COMMAND_HELP + wsprintf( sText, "Command help not done yet: %s", g_aCommands[ iCommand ].aName ); + ConsoleBufferPush( sText ); +#endif + if ((! nFound) || (! pCommand)) + { + wsprintf( sText, " Invalid command." ); + ConsoleBufferPush( sText ); + } + break; + } + + } + + return ConsoleUpdate(); +} + +//=========================================================================== +Update_t CmdHelpList (int nArgs) +{ + TCHAR sText[ CONSOLE_WIDTH ] = TEXT("Commands: "); + int nLenLine = _tcslen( sText ); + int y = 0; + int nLinesScrolled = 0; + + int nMaxWidth = g_nConsoleDisplayWidth - 1; + int iCommand; + +/* + if (! g_vSortedCommands.size()) + { + for (iCommand = 0; iCommand < NUM_COMMANDS_WITH_ALIASES; iCommand++ ) + { +// TCHAR *pName = g_aCommands[ iCommand ].aName ); + g_vSortedCommands.push_back( g_aCommands[ iCommand ] ); + } + + std::sort( g_vSortedCommands.begin(), g_vSortedCommands.end(), commands_functor_compare() ); + } + int nCommands = g_vSortedCommands.size(); +*/ + for( iCommand = 0; iCommand < NUM_COMMANDS_WITH_ALIASES; iCommand++ ) // aliases are not printed + { +// Command_t *pCommand = & g_vSortedCommands.at( iCommand ); + Command_t *pCommand = & g_aCommands[ iCommand ]; + TCHAR *pName = pCommand->m_sName; + + if (! pCommand->pFunction) + continue; // not implemented function + + int nLenCmd = _tcslen( pName ); + if ((nLenLine + nLenCmd) < (nMaxWidth)) + { + _tcscat( sText, pName ); + } + else + { + ConsoleBufferPush( sText ); + nLenLine = 1; + _tcscpy( sText, TEXT(" " ) ); + _tcscat( sText, pName ); + } + + _tcscat( sText, TEXT(" ") ); + nLenLine += (nLenCmd + 1); + } + + ConsoleBufferPush( sText ); + ConsoleUpdate(); + + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdVersion (int nArgs) +{ + TCHAR sText[ CONSOLE_WIDTH ]; + + unsigned int nVersion = DEBUGGER_VERSION; + int nMajor; + int nMinor; + int nFixMajor; + int nFixMinor; + UnpackVersion( nVersion, nMajor, nMinor, nFixMajor, nFixMinor ); + +// wsprintf( sText, "Version" ); ConsoleBufferPush( sText ); + wsprintf( sText, " Emulator: %s Debugger: %d.%d.%d.%d" + , VERSIONSTRING + , nMajor, nMinor, nFixMajor, nFixMinor ); + ConsoleBufferPush( sText ); + + if (nArgs) + { + for (int iArg = 1; iArg <= nArgs; iArg++ ) + { + if (_tcscmp( g_aArgs[ iArg ].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName ) == 0) + { + wsprintf( sText, " Arg: %d bytes * %d = %d bytes", + sizeof(Arg_t), MAX_ARGS, sizeof(g_aArgs) ); + ConsoleBufferPush( sText ); + + wsprintf( sText, " Console: %d bytes * %d height = %d bytes", + sizeof( g_aConsoleDisplay[0] ), CONSOLE_HEIGHT, sizeof(g_aConsoleDisplay) ); + ConsoleBufferPush( sText ); + + wsprintf( sText, " Commands: %d (Aliased: %d) Params: %d", + NUM_COMMANDS, NUM_COMMANDS_WITH_ALIASES, NUM_PARAMS ); + ConsoleBufferPush( sText ); + + wsprintf( sText, " Cursor(%d) T: %04X C: %04X B: %04X %c D: %02X", // Top, Cur, Bot, Delta + g_nDisasmCurLine, g_nDisasmTopAddress, g_nDisasmCurAddress, g_nDisasmBotAddress, + g_bDisasmCurBad ? TEXT('*') : TEXT(' ') + , g_nDisasmBotAddress - g_nDisasmTopAddress + ); + ConsoleBufferPush( sText ); + + CmdConfigGetFont( 0 ); + + break; + } + else + return Help_Arg_1( CMD_VERSION ); + } + } + + return ConsoleUpdate(); +} + + +// Memory _________________________________________________________________________________________ + + +// TO DO: +// . Add support for dumping Disk][ device +//=========================================================================== +bool MemoryDumpCheck (int nArgs, WORD * pAddress_ ) +{ + if (! nArgs) + return false; + + Arg_t *pArg = &g_aArgs[1]; + WORD nAddress = pArg->nVal1; + bool bUpdate = false; + + pArg->eDevice = DEV_MEMORY; // Default + + if(strncmp(g_aArgs[1].sArg, "SY", 2) == 0) // SY6522 + { + nAddress = (g_aArgs[1].sArg[2] - '0') & 3; + pArg->eDevice = DEV_SY6522; + bUpdate = true; + } + else if(strncmp(g_aArgs[1].sArg, "AY", 2) == 0) // AY8910 + { + nAddress = (g_aArgs[1].sArg[2] - '0') & 3; + pArg->eDevice = DEV_AY8910; + bUpdate = true; + } +#ifdef SUPPORT_Z80_EMU + else if(strcmp(g_aArgs[1].sArg, "*AF") == 0) + { + nAddress = *(WORD*)(membank+REG_AF); + bUpdate = true; + } + else if(strcmp(g_aArgs[1].sArg, "*BC") == 0) + { + nAddress = *(WORD*)(membank+REG_BC); + bUpdate = true; + } + else if(strcmp(g_aArgs[1].sArg, "*DE") == 0) + { + nAddress = *(WORD*)(membank+REG_DE); + bUpdate = true; + } + else if(strcmp(g_aArgs[1].sArg, "*HL") == 0) + { + nAddress = *(WORD*)(membank+REG_HL); + bUpdate = true; + } + else if(strcmp(g_aArgs[1].sArg, "*IX") == 0) + { + nAddress = *(WORD*)(membank+REG_IX); + bUpdate = true; + } +#endif + + if (bUpdate) + { + pArg->nVal1 = nAddress; + sprintf( pArg->sArg, "%04X", nAddress ); + } + + if (pAddress_) + { + *pAddress_ = nAddress; + } + + return true; +} + +//=========================================================================== +Update_t CmdMemoryCompare (int nArgs ) +{ + if (nArgs < 3) + return Help_Arg_1( CMD_MEMORY_COMPARE ); + + WORD nSrcAddr = g_aArgs[1].nVal1; + WORD nLenByte = 0; + WORD nDstAddr = g_aArgs[3].nVal1; + + WORD nSrcSymAddr; + WORD nDstSymAddr; + + if (!nSrcAddr) + { + nSrcSymAddr = GetAddressFromSymbol( g_aArgs[1].sArg ); + if (nSrcAddr != nSrcSymAddr) + nSrcAddr = nSrcSymAddr; + } + + if (!nDstAddr) + { + nDstSymAddr = GetAddressFromSymbol( g_aArgs[3].sArg ); + if (nDstAddr != nDstSymAddr) + nDstAddr = nDstSymAddr; + } + +// if ((!nSrcAddr) || (!nDstAddr)) +// return Help_Arg_1( CMD_MEMORY_COMPARE ); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +static Update_t _CmdMemoryDump (int nArgs, int iWhich, int iView ) +{ + WORD nAddress = 0; + + if( ! MemoryDumpCheck(nArgs, & nAddress ) ) + { + return Help_Arg_1( g_iCommand ); + } + + g_aMemDump[iWhich].nAddress = nAddress; + g_aMemDump[iWhich].eDevice = g_aArgs[1].eDevice; + g_aMemDump[iWhich].bActive = true; + g_aMemDump[iWhich].eView = (MemoryView_e) iView; + + return UPDATE_ALL; // TODO: This really needed? Don't think we do any actual ouput +} + +//=========================================================================== +bool _MemoryCheckMiniDump ( int iWhich ) +{ + if ((iWhich < 0) || (iWhich > NUM_MEM_MINI_DUMPS)) + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, TEXT(" Only %d memory mini dumps"), NUM_MEM_MINI_DUMPS ); + ConsoleDisplayError( sText ); + return true; + } + return false; +} + +//=========================================================================== +Update_t CmdMemoryMiniDumpHex (int nArgs) +{ + int iWhich = g_iCommand - CMD_MEM_MINI_DUMP_HEX_1; + if (_MemoryCheckMiniDump( iWhich )) + return UPDATE_CONSOLE_DISPLAY; + + return _CmdMemoryDump(nArgs, iWhich, MEM_VIEW_HEX ); +} + +//=========================================================================== +Update_t CmdMemoryMiniDumpAscii (int nArgs) +{ + int iWhich = g_iCommand - CMD_MEM_MINI_DUMP_ASCII_1; + if (_MemoryCheckMiniDump( iWhich )) + return UPDATE_CONSOLE_DISPLAY; + + return _CmdMemoryDump(nArgs, iWhich, MEM_VIEW_ASCII ); +} + +//=========================================================================== +Update_t CmdMemoryMiniDumpApple (int nArgs) +{ + int iWhich = g_iCommand - CMD_MEM_MINI_DUMP_APPLE_1; + if (_MemoryCheckMiniDump( iWhich )) + return UPDATE_CONSOLE_DISPLAY; + + return _CmdMemoryDump(nArgs, iWhich, MEM_VIEW_APPLE ); // MEM_VIEW_TXT_LO ); +} + +//=========================================================================== +//Update_t CmdMemoryMiniDumpLow (int nArgs) +//{ +// int iWhich = g_iCommand - CMD_MEM_MINI_DUMP_TXT_LO_1; +// if (_MemoryCheckMiniDump( iWhich )) +// return UPDATE_CONSOLE_DISPLAY; +// +// return _CmdMemoryDump(nArgs, iWhich, MEM_VIEW_APPLE ); // MEM_VIEW_TXT_LO ); +//} + +//=========================================================================== +//Update_t CmdMemoryMiniDumpHigh (int nArgs) +//{ +// int iWhich = g_iCommand - CMD_MEM_MINI_DUMP_TXT_HI_1; +// if (_MemoryCheckMiniDump( iWhich )) +// return UPDATE_CONSOLE_DISPLAY; +// +// return _CmdMemoryDump(nArgs, iWhich, MEM_VIEW_APPLE ); // MEM_VIEW_TXT_HI ); +//} + +//=========================================================================== +Update_t CmdMemoryEdit (int nArgs) +{ + + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdMemoryEnterByte (int nArgs) +{ + if ((nArgs < 2) || + ((g_aArgs[2].sArg[0] != TEXT('0')) && (!g_aArgs[2].nVal1))) // arg2 not numeric or not specified + { + Help_Arg_1( CMD_MEMORY_ENTER_WORD ); + } + + WORD nAddress = g_aArgs[1].nVal1; + while (nArgs >= 2) + { + *(membank+nAddress+nArgs-2) = (BYTE)g_aArgs[nArgs].nVal1; + *(memdirty+(nAddress >> 8)) = 1; + nArgs--; + } + + return UPDATE_ALL; +} + + +//=========================================================================== +Update_t CmdMemoryEnterWord (int nArgs) +{ + if ((nArgs < 2) || + ((g_aArgs[2].sArg[0] != TEXT('0')) && (!g_aArgs[2].nVal1))) // arg2 not numeric or not specified + { + Help_Arg_1( CMD_MEMORY_ENTER_WORD ); + } + + WORD nAddress = g_aArgs[1].nVal1; + while (nArgs >= 2) + { + WORD nData = g_aArgs[nArgs].nVal1; + + // Little Endian + *(membank + nAddress + nArgs - 2) = (BYTE)(nData >> 0); + *(membank + nAddress + nArgs - 1) = (BYTE)(nData >> 8); + + *(memdirty+(nAddress >> 8)) |= 1; + nArgs--; + } + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdMemoryFill (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_MEMORY_FILL ); + + WORD nAddress = g_aArgs[1].nVal1; + WORD nBytes = MAX(1,g_aArgs[1].nVal2); // TODO: This actually work?? + + while (nBytes--) + { + if ((nAddress < _6502_IO_BEGIN) || (nAddress > _6502_IO_END)) + { + *(membank+nAddress) = (BYTE)(g_aArgs[2].nVal1 & 0xFF); // HACK: Undocumented fill with ZERO + } + nAddress++; + } + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdMemoryMove (int nArgs) +{ + if (nArgs < 3) + return Help_Arg_1( CMD_MEMORY_MOVE ); + + WORD nSrc = g_aArgs[1].nVal1; + WORD nLen = g_aArgs[2].nVal1 - nSrc; + WORD nDst = g_aArgs[3].nVal1; + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdMemorySearch (int nArgs) +{ + if (nArgs < 3) + Help_Arg_1( CMD_MEMORY_SEARCH ); + + if (g_aArgs[2].sArg[0] == TEXT('\"')) + CmdMemorySearchText( nArgs ); + else + CmdMemorySearchHex( nArgs ); + + return UPDATE_CONSOLE_DISPLAY; +} + +// Search for Ascii Hi-Bit set +//=========================================================================== +Update_t CmdMemorySearchHiBit (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdMemorySearchLowBit (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +bool _GetStartEnd( WORD & nAddressStart_, WORD & nAddressEnd_ ) +{ + nAddressStart_ = g_aArgs[1].nVal1 ? g_aArgs[1].nVal1 : GetAddressFromSymbol( g_aArgs[1].sArg ); + nAddressEnd_ = g_aArgs[2].nVal1 ? g_aArgs[2].nVal1 : GetAddressFromSymbol( g_aArgs[2].sArg ); + return true; +} + +//=========================================================================== +Update_t CmdMemorySearchHex (int nArgs) +{ + WORD nAddrStart; + WORD nAddrEnd; + _GetStartEnd( nAddrStart, nAddrEnd ); +// TODO: if (!_tcscmp(g_aArgs[nArgs].sArg,TEXT("*"))) { } +// TODO: if (!_tcscmp(g_aArgs[nArgs].sArg,TEXT("?"))) { } + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdMemorySearchText (int nArgs) +{ + WORD nAddrStart; + WORD nAddrEnd; + _GetStartEnd( nAddrStart, nAddrEnd ); + + return UPDATE_CONSOLE_DISPLAY; +} + + + + +// Registers ______________________________________________________________________________________ + + +//=========================================================================== +Update_t CmdRegisterSet (int nArgs) +{ + if ((nArgs == 2) && + (g_aArgs[1].sArg[0] == TEXT('P')) && (g_aArgs[2].sArg[0] == TEXT('L'))) //HACK: TODO/FIXME: undocumented hard-coded command?!?! + { + regs.pc = lastpc; + } + else + if (nArgs < 2) // || ((g_aArgs[2].sArg[0] != TEXT('0')) && !g_aArgs[2].nVal1)) + { + return Help_Arg_1( CMD_REGISTER_SET ); + } + else + { + TCHAR *pName = g_aArgs[1].sArg; + int iParam; + if (FindParam( pName, MATCH_EXACT, iParam, _PARAM_REGS_BEGIN, _PARAM_REGS_END )) + { + int iArg = 2; + if (g_aArgs[ iArg ].eToken == TOKEN_EQUAL) + iArg++; + + if (iArg > nArgs) + return Help_Arg_1( CMD_REGISTER_SET ); + + BYTE b = (BYTE)(g_aArgs[ iArg ].nVal1 & 0xFF); + WORD w = (WORD)(g_aArgs[ iArg ].nVal1 & 0xFFFF); + + switch (iParam) + { + case PARAM_REG_A : regs.a = b; break; + case PARAM_REG_PC: regs.pc = w; g_nDisasmCurAddress = regs.pc; DisasmCalcTopBotAddress(); break; + case PARAM_REG_SP: regs.sp = b | 0x100; break; + case PARAM_REG_X : regs.x = b; break; + case PARAM_REG_Y : regs.y = b; break; + default: return Help_Arg_1( CMD_REGISTER_SET ); + } + } + } + +// g_nDisasmCurAddress = regs.pc; +// DisasmCalcTopBotAddress(); + + return UPDATE_ALL; // 1 +} + + +// Source Level Debugging _________________________________________________________________________ + +//=========================================================================== +bool BufferAssemblyListing( TCHAR *pFileName ) +{ + bool bStatus = false; // true = loaded + + if (! pFileName) + return bStatus; + + FILE *hFile = fopen(pFileName,"rt"); + + if (hFile) + { + fseek( hFile, 0, SEEK_END ); + long nSize = ftell( hFile ); + fseek( hFile, 0, SEEK_SET ); + + if (nSize > 0) + g_nSourceBuffer = nSize; + + g_pSourceBuffer = new char [ nSize + 1 ]; + ZeroMemory( g_pSourceBuffer, nSize + 1 ); + + fread( (void*)g_pSourceBuffer, nSize, 1, hFile ); + fclose(hFile); + + g_vSourceLines.erase( g_vSourceLines.begin(), g_vSourceLines.end() ); + + g_nSourceAssemblyLines = 0; + + char *pBegin = g_pSourceBuffer; + char *pEnd = NULL; + char *pEnd2; + while (pBegin) + { + g_nSourceAssemblyLines++; + g_vSourceLines.push_back( pBegin ); + + pEnd = const_cast( SkipUntilEOL( pBegin )); + pEnd2 = const_cast( SkipEOL( pEnd )); + if (pEnd) + { + *pEnd = 0; + } + if (! *pEnd2) + { + break; + } + pBegin = pEnd2; +// *(pEnd-1) = 0; +// if (! pEnd) +// { +// break; +// } +// pEnd = const_cast( SkipEOL( pEnd )); +// pBegin = pEnd; + } + bStatus = true; + } + + if (g_nSourceAssemblyLines) + { + g_bSourceLevelDebugging = true; + } + + return bStatus; +} + + +//=========================================================================== +bool ParseAssemblyListing( bool bBytesToMemory, bool bAddSymbols ) +{ + bool bStatus = false; // true = loaded + + // Assembler source listing file: + // + // xxxx:_b1_[b2]_[b3]__n_[label]_[opcode]_[param] +// char sByte1[ 2 ]; +// char sByte2[ 2 ]; +// char sByte3[ 2 ]; +// char sLineN[ W ]; + char sName[ MAX_SYMBOLS_LEN ]; +// char sAsm [ W ]; +// char sParam[ W ]; + + const int MAX_LINE = 256; + char sLine[ MAX_LINE ]; + char sText[ MAX_LINE ]; +// char sLabel[ MAX_LINE ]; + + g_nSourceAssembleBytes = 0; + g_nSourceAssemblySymbols = 0; + + const DWORD INVALID_ADDRESS = _6502_END_MEM_ADDRESS + 1; + + bool bPrevSymbol = false; + bool bFourBytes = false; + BYTE nByte4 = 0; + + + int nLines = g_vSourceLines.size(); + for( int iLine = 0; iLine < nLines; iLine++ ) + { + ZeroMemory( sText, MAX_LINE ); + strncpy( sText, g_vSourceLines[ iLine ], MAX_LINE-1 ); + + DWORD nAddress = INVALID_ADDRESS; + + _tcscpy( sLine, sText ); + char *p = sLine; + p = strstr( sLine, ":" ); + if (p) + { + *p = 0; + // sscanf( sLine, "%s %s %s %s %s %s %s %s", sAddr1, sByte1, sByte2, sByte3, sLineN, sLabel, sAsm, sParam ); + sscanf( sLine, "%X", &nAddress ); + + if (nAddress >= INVALID_ADDRESS) // || (sName[0] == 0) ) + continue; + + if (bBytesToMemory) + { + char *pEnd = p + 1; + char *pStart; + for (int iByte = 0; iByte < 3; iByte++ ) + { + // xx xx xx + // ^ ^ + // | | + // | end + // start + pStart = pEnd + 1; + pEnd = const_cast( SkipUntilWhiteSpace( pStart )); + int nLen = (pEnd - pStart); + if (nLen != 2) + { + break; + } + *pEnd = 0; + BYTE nByte = Chars2ToByte( pStart ); + *(mem + ((WORD)nAddress) + iByte ) = nByte; + } + g_nSourceAssembleBytes += iByte; + } + + g_aSourceDebug[ (WORD) nAddress ] = iLine; // g_nSourceAssemblyLines; + } + + _tcscpy( sLine, sText ); + if (bAddSymbols) + { + // Add user symbol: symbolname EQU $address + // or user symbol: address: symbolname DFB #bytes + char *pEQU = strstr( sLine, "EQU" ); // EQUal / EQUate + char *pDFB = strstr( sLine, "DFB" ); // DeFine Byte + char *pLabel = NULL; + + if (pEQU) + pLabel = pEQU; + if (pDFB) + pLabel = pDFB; + + if (pLabel) + { + char *pLabelEnd = pLabel - 1; + pLabelEnd = const_cast( SkipWhiteSpaceReverse( pLabelEnd, &sLine[ 0 ] )); + char * pLabelStart = NULL; // SkipWhiteSpaceReverse( pLabelEnd, &sLine[ 0 ] ); + if (pLabelEnd) + { + pLabelStart = const_cast( SkipUntilWhiteSpaceReverse( pLabelEnd, &sLine[ 0 ] )); + pLabelEnd++; + pLabelStart++; + + int nLen = pLabelEnd - pLabelStart; + nLen = MIN( nLen, MAX_SYMBOLS_LEN ); + strncpy( sName, pLabelStart, nLen ); + sName[ nLen ] = 0; + + char *pAddressEQU = strstr( pLabel, "$" ); + char *pAddressDFB = strstr( sLine, ":" ); // Get address from start of line + char *pAddress = NULL; + + if (pAddressEQU) + pAddress = pAddressEQU + 1; + if (pAddressDFB) + { + *pAddressDFB = 0; + pAddress = sLine; + } + + if (pAddress) + { + char *pAddressEnd; + nAddress = (DWORD) strtol( pAddress, &pAddressEnd, 16 ); + g_aSymbols[SYMBOLS_SRC][ (WORD) nAddress] = sName; + g_nSourceAssemblySymbols++; + } + } + } + } + } // for + + bStatus = true; + + return bStatus; +} + + +//=========================================================================== +Update_t CmdSource (int nArgs) +{ + if (! nArgs) + { + g_bSourceLevelDebugging = false; + } + else + { + g_bSourceAddMemory = false; + g_bSourceAddSymbols = false; + + for( int iArg = 1; iArg <= nArgs; iArg++ ) + { + TCHAR *pFileName = g_aArgs[ iArg ].sArg; + + int iParam; + bool bFound = FindParam( pFileName, MATCH_EXACT, iParam, _PARAM_SOURCE_BEGIN, _PARAM_SOURCE_END ) > 0 ? true : false; + if (bFound && (iParam == PARAM_SRC_SYMBOLS)) + { + g_bSourceAddSymbols = true; + } + else + if (bFound && (iParam == PARAM_SRC_MEMORY)) + { + g_bSourceAddMemory = true; + } + else + { + TCHAR sFileName[MAX_PATH]; + _tcscpy(sFileName,progdir); + _tcscat(sFileName, pFileName); + + if (BufferAssemblyListing( sFileName )) + { + _tcscpy( g_aSourceFileName, pFileName ); + + if (! ParseAssemblyListing( g_bSourceAddMemory, g_bSourceAddSymbols )) + { + const int MAX_MINI_FILENAME = 20; + TCHAR sMiniFileName[ MAX_MINI_FILENAME + 1 ]; + _tcsncpy( sMiniFileName, pFileName, MAX_MINI_FILENAME - 1 ); + sMiniFileName[ MAX_MINI_FILENAME ] = 0; + + wsprintf( sFileName, "Couldn't load filename: %s", sMiniFileName ); + ConsoleBufferPush( sFileName ); + } + else + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sFileName, " Read: %d lines, %d symbols", g_nSourceAssemblyLines, g_nSourceAssemblySymbols ); + + if (g_nSourceAssembleBytes) + { + wsprintf( sText, ", %d bytes", g_nSourceAssembleBytes ); + _tcscat( sFileName, sText ); + } + ConsoleBufferPush( sFileName ); + } + } + } + } + return ConsoleUpdate(); + } + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdSync (int nArgs) +{ + // TODO + return UPDATE_CONSOLE_DISPLAY; +} + + +// Stack __________________________________________________________________________________________ + + +//=========================================================================== +Update_t CmdStackPush (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdStackPop (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdStackPopPseudo (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +// Symbols ________________________________________________________________________________________ + + +//=========================================================================== +Update_t CmdSymbols (int nArgs) +{ + if (! nArgs) + return CmdSymbolsInfo( 0 ); + + Update_t iUpdate = _CmdSymbolsUpdate( nArgs); + if (iUpdate != UPDATE_NOTHING) + return iUpdate; + +// return CmdSymbolsList( nArgs ); + int bSymbolTables = SYMBOL_TABLE_MAIN | SYMBOL_TABLE_USER | SYMBOL_TABLE_SRC; + return _CmdSymbolsListTables( nArgs, bSymbolTables ); +} + +//=========================================================================== +Update_t CmdSymbolsClear (int nArgs) +{ + Symbols_e eSymbolsTable = SYMBOLS_USER; + _CmdSymbolsClear( eSymbolsTable ); + return (UPDATE_DISASM | UPDATE_SYMBOLS); +} + +//=========================================================================== +Update_t CmdSymbolsInfo (int nArgs) +{ + TCHAR sText[ CONSOLE_WIDTH ]; + + bool bDisplayMain = false; + bool bDisplayUser = false; + bool bDisplaySrc = false; + + if (! nArgs) + { + bDisplayMain = true; + bDisplayUser = true; + bDisplaySrc = true; + } + else + if (CMD_SYMBOLS_MAIN == g_iCommand) + bDisplayMain = true; + else + if (CMD_SYMBOLS_USER == g_iCommand) + bDisplayUser = true; + else + if (CMD_SYMBOLS_SRC == g_iCommand) + bDisplaySrc = true; + + int nSymbolsMain = g_aSymbols[SYMBOLS_MAIN].size(); + int nSymbolsUser = g_aSymbols[SYMBOLS_USER].size(); + int nSymbolsSrc = g_aSymbols[SYMBOLS_SRC ].size(); + + if (bDisplayMain && bDisplayUser && bDisplaySrc) + { + wsprintf( sText, " Symbols Main: %d User: %d Source: %d", + nSymbolsMain, nSymbolsUser, nSymbolsSrc ); + ConsoleBufferPush( sText ); + } + else + if (bDisplayMain) + { + wsprintf( sText, " Main symbols: %d", nSymbolsMain ); ConsoleBufferPush( sText ); + } + else + if (bDisplayUser) + { + wsprintf( sText, " User symbols: %d", nSymbolsUser ); ConsoleBufferPush( sText ); + } + else + if (bDisplaySrc) + { + wsprintf( sText, " Source symbols: %d", nSymbolsSrc ); ConsoleBufferPush( sText ); + } + + if (bDisplayMain || bDisplayUser || bDisplaySrc) + return ConsoleUpdate(); + + return UPDATE_CONSOLE_DISPLAY; +} + +void _CmdPrintSymbol( LPCTSTR pSymbol, WORD nAddress, int iTable ) +{ + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, " $%04X (%s) %s", nAddress, g_aSymbolTableNames[ iTable ], pSymbol ); + ConsoleBufferPush( sText ); +} + + + +//=========================================================================== */ +bool _FindSymbolTable( int bSymbolTables, int iTable ) +{ + // iTable is enumeration + // bSymbolTables is bit-flags of enabled tables to search + + if (bSymbolTables & SYMBOL_TABLE_MAIN) + if (iTable == SYMBOLS_MAIN) + return true; + + if (bSymbolTables & SYMBOL_TABLE_USER) + if (iTable == SYMBOLS_USER) + return true; + + if (bSymbolTables & SYMBOL_TABLE_SRC ) + if (iTable == SYMBOLS_SRC) + return true; + + return false; +} + + +//=========================================================================== */ +int _GetSymbolTableFromFlag( int bSymbolTables ) +{ + int iTable = NUM_SYMBOL_TABLES; + + if (bSymbolTables & SYMBOL_TABLE_MAIN) + iTable = SYMBOLS_MAIN; + else + if (bSymbolTables & SYMBOL_TABLE_USER) + iTable = SYMBOLS_USER; + else + if (bSymbolTables & SYMBOL_TABLE_SRC ) + iTable = SYMBOLS_SRC; + + return iTable; +} + + +/** + @param bSymbolTables Bit Flags of which symbol tables to search +//=========================================================================== */ +bool _CmdSymbolList_Address2Symbol( int nAddress, int bSymbolTables ) +{ + int iTable; + LPCTSTR pSymbol = FindSymbolFromAddress( nAddress, &iTable ); + + if (pSymbol) + { + if (_FindSymbolTable( bSymbolTables, iTable )) + { + _CmdPrintSymbol( pSymbol, nAddress, iTable ); + return true; + } + } + + return false; +} + +bool _CmdSymbolList_Symbol2Address( LPCTSTR pSymbol, int bSymbolTables ) +{ + int iTable; + WORD nAddress; + bool bFoundSymbol = FindAddressFromSymbol( pSymbol, &nAddress, &iTable ); + if (bFoundSymbol) + { + if (_FindSymbolTable( bSymbolTables, iTable )) + { + _CmdPrintSymbol( pSymbol, nAddress, iTable ); + } + } + return bFoundSymbol; +} + + +//=========================================================================== +bool String2Address( LPCTSTR pText, WORD & nAddress_ ) +{ + TCHAR sHexApple[ CONSOLE_WIDTH ]; + + if (pText[0] == TEXT('$')) + { + if (!IsHexString( pText+1)) + return false; + + _tcscpy( sHexApple, TEXT("0x") ); + _tcsncpy( sHexApple+2, pText+1, MAX_SYMBOLS_LEN - 3 ); + pText = sHexApple; + } + + if (pText[0] == TEXT('0')) + { + if ((pText[1] == TEXT('X')) || pText[1] == TEXT('x')) + { + if (!IsHexString( pText+2)) + return false; + + TCHAR *pEnd; + nAddress_ = (WORD) _tcstol( pText, &pEnd, 16 ); + return true; + } + if (IsHexString( pText )) + { + TCHAR *pEnd; + nAddress_ = (WORD) _tcstol( pText, &pEnd, 16 ); + return true; + } + } + + return false; +} + + +// LIST is normally an implicit "LIST *", but due to the numbers of symbols +// only look up symbols the user specifies +//=========================================================================== +Update_t CmdSymbolsList (int nArgs ) +{ + int bSymbolTables = SYMBOL_TABLE_MAIN | SYMBOL_TABLE_USER | SYMBOL_TABLE_SRC; + return _CmdSymbolsListTables( nArgs, bSymbolTables ); +} + + +//=========================================================================== +Update_t _CmdSymbolsListTables (int nArgs, int bSymbolTables) +{ + if (! nArgs) + { + return Help_Arg_1( CMD_SYMBOLS_LIST ); + } + + /* + Test Cases + + SYM 0 RESET FA6F $FA59 + $0000 LOC0 + $FA6F RESET + $FA6F INITAN + $FA59 OLDBRK + SYM B + + SYMBOL B = $2000 + SYM B + */ + + TCHAR sText[ CONSOLE_WIDTH ]; + + for( int iArgs = 1; iArgs <= nArgs; iArgs++ ) + { + WORD nAddress = g_aArgs[iArgs].nVal1; + LPCTSTR pSymbol = g_aArgs[iArgs].sArg; + if (nAddress) + { // Have address, do symbol lookup first + if (! _CmdSymbolList_Symbol2Address( pSymbol, bSymbolTables )) + { + // nope, ok, try as address + if (! _CmdSymbolList_Address2Symbol( nAddress, bSymbolTables)) + { + wsprintf( sText, TEXT(" Address not found: %04X" ), nAddress ); + ConsoleBufferPush( sText ); + } + } + } + else + { // Have symbol, do address lookup + if (! _CmdSymbolList_Symbol2Address( pSymbol, bSymbolTables )) + { // nope, ok, try as address + if (String2Address( pSymbol, nAddress )) + { + if (! _CmdSymbolList_Address2Symbol( nAddress, bSymbolTables )) + { + wsprintf( sText, TEXT(" Symbol not found: %s"), pSymbol ); + ConsoleBufferPush( sText ); + } + } + else + { + wsprintf( sText, TEXT(" Symbol not found: %s"), pSymbol ); + ConsoleBufferPush( sText ); + } + } + } + } + return ConsoleUpdate(); +} + +//=========================================================================== +int ParseSymbolTable( TCHAR *pFileName, Symbols_e eWhichTableToLoad ) +{ + int nSymbolsLoaded = 0; + + if (! pFileName) + return nSymbolsLoaded; + +//#if _UNICODE +// TCHAR sFormat1[ MAX_SYMBOLS_LEN ]; +// TCHAR sFormat2[ MAX_SYMBOLS_LEN ]; +// wsprintf( sFormat1, "%%x %%%ds", MAX_SYMBOLS_LEN ); // i.e. "%x %13s" +// wsprintf( sFormat2, "%%%ds %%x", MAX_SYMBOLS_LEN ); // i.e. "%13s %x" +// ascii + char sFormat1[ MAX_SYMBOLS_LEN ]; + char sFormat2[ MAX_SYMBOLS_LEN ]; + sprintf( sFormat1, "%%x %%%ds", MAX_SYMBOLS_LEN ); // i.e. "%x %13s" + sprintf( sFormat2, "%%%ds %%x", MAX_SYMBOLS_LEN ); // i.e. "%13s %x" + + FILE *hFile = fopen(pFileName,"rt"); + while(hFile && !feof(hFile)) + { + // Support 2 types of symbols files: + // 1) AppleWin: + // . 0000 SYMBOL + // . FFFF SYMBOL + // 2) ACME: + // . SYMBOL =$0000; Comment + // . SYMBOL =$FFFF; Comment + // + DWORD INVALID_ADDRESS = 0xFFFF + 1; + DWORD nAddress = INVALID_ADDRESS; + char sName[ MAX_SYMBOLS_LEN+1 ] = ""; + + const int MAX_LINE = 256; + char szLine[ MAX_LINE ]; + fgets(szLine, MAX_LINE-1, hFile); // Get next line + + if(strstr(szLine, "$") == NULL) + { + sscanf(szLine, sFormat1, &nAddress, sName); + } + else + { + char* p = strstr(szLine, "="); // Optional + if(p) *p = ' '; + p = strstr(szLine, "$"); + if(p) *p = ' '; + p = strstr(szLine, ";"); // Optional + if(p) *p = 0; + p = strstr(szLine, " "); // 1st space between name & value + int nLen = p - szLine; + if (nLen > MAX_SYMBOLS_LEN) + memset(&szLine[MAX_SYMBOLS_LEN], ' ', nLen-MAX_SYMBOLS_LEN); // sscanf fails for nAddress if string too long + + sscanf(szLine, sFormat2, sName, &nAddress); + } + + if( (nAddress >= INVALID_ADDRESS) || (sName[0] == 0) ) + continue; + + g_aSymbols[ eWhichTableToLoad ] [ (WORD) nAddress ] = sName; + nSymbolsLoaded++; + } + + if(hFile) + fclose(hFile); + + return nSymbolsLoaded; +} + + +//=========================================================================== +Update_t CmdSymbolsLoad (int nArgs) +{ + TCHAR sFileName[MAX_PATH]; + _tcscpy(sFileName,progdir); + + int iWhichTable = (g_iCommand - CMD_SYMBOLS_MAIN); + if ((iWhichTable < 0) || (iWhichTable >= NUM_SYMBOL_TABLES)) + { + wsprintf( sFileName, "Only %d symbol tables supported!", NUM_SYMBOL_TABLES ); + return ConsoleDisplayError( sFileName ); + } + + if (! nArgs) + { + // Default to main table + if (g_iCommand == CMD_SYMBOLS_MAIN) + _tcscat(sFileName, g_FileNameSymbolsMain ); + else + { + if (! _tcslen( g_FileNameSymbolsUser )) + { + return ConsoleDisplayError(TEXT("No user symbol file to reload.")); + } + // load user symbols + _tcscat( sFileName, g_FileNameSymbolsUser ); + } + g_nSymbolsLoaded = ParseSymbolTable( sFileName, (Symbols_e) iWhichTable ); + + return (UPDATE_DISASM || UPDATE_SYMBOLS); + } + + int iArg = 0; + while (iArg++ <= nArgs) + { + TCHAR *pFileName = g_aArgs[ iArg ].sArg; + + _tcscpy(sFileName,progdir); + _tcscat(sFileName, pFileName); + + // Remember File ame of symbols loaded + _tcscpy( g_FileNameSymbolsUser, pFileName ); + + g_nSymbolsLoaded = ParseSymbolTable( sFileName, (Symbols_e) iWhichTable ); + } + + return (UPDATE_DISASM || UPDATE_SYMBOLS); +} + +//=========================================================================== +bool FindAddressFromSymbol ( LPCTSTR pSymbol, WORD * pAddress_, int * iTable_ ) +{ + // Bugfix/User feature: User symbols should be searched first + for (int iTable = NUM_SYMBOL_TABLES; iTable-- > 0; ) + { + if (! g_aSymbols[iTable].size()) + continue; + +// map::iterator iSymbol = g_aSymbols[iTable].begin(); + SymbolTable_t :: iterator iSymbol = g_aSymbols[iTable].begin(); + while (iSymbol != g_aSymbols[iTable].end()) + { + if (!_tcsicmp( iSymbol->second.c_str(), pSymbol)) + { + if (pAddress_) + { + *pAddress_ = iSymbol->first; + } + if (iTable_) + { + *iTable_ = iTable; + } + return true; + } + iSymbol++; + } + } + return false; +} + +//=========================================================================== +LPCTSTR FindSymbolFromAddress (WORD nAddress, int * iTable_ ) +{ + // Bugfix/User feature: User symbols should be searched first + int iTable = NUM_SYMBOL_TABLES; + while (iTable-- > 0) + { + if (g_aSymbols[iTable].size()) + { + map::iterator iSymbols = g_aSymbols[iTable].find(nAddress); + if(g_aSymbols[iTable].find(nAddress) != g_aSymbols[iTable].end()) + { + if (iTable_) + { + *iTable_ = iTable; + } + return iSymbols->second.c_str(); + } + } + } + return NULL; +} + + +//=========================================================================== +WORD GetAddressFromSymbol (LPCTSTR pSymbol) +{ + WORD nAddress; + bool bFoundSymbol = FindAddressFromSymbol( pSymbol, & nAddress ); + if (! bFoundSymbol) + { + nAddress = 0; + } + return nAddress; +} + + +//=========================================================================== +Update_t _CmdSymbolsClear( Symbols_e eSymbolTable ) +{ + g_aSymbols[ eSymbolTable ].clear(); + + return UPDATE_SYMBOLS; +} + + +//=========================================================================== +Update_t _CmdSymbolsUpdate( int nArgs ) +{ + bool bRemoveSymbol = false; + bool bUpdateSymbol = false; + + if ((nArgs == 2) && (g_aArgs[ 1 ].eToken == TOKEN_EXCLAMATION)) + bRemoveSymbol = true; + + if ((nArgs == 3) && (g_aArgs[ 2 ].eToken == TOKEN_EQUAL )) + bUpdateSymbol = true; + + if (bRemoveSymbol || bUpdateSymbol) + { + TCHAR *pSymbolName = g_aArgs[1].sArg; + WORD nAddress = g_aArgs[3].nVal1; + + if (bRemoveSymbol) + pSymbolName = g_aArgs[2].sArg; + + if (_tcslen( pSymbolName ) < MAX_SYMBOLS_LEN) + { + WORD nAddressPrev; + int iTable; + bool bExists = FindAddressFromSymbol( pSymbolName, &nAddressPrev, &iTable ); + + if (bExists) + { + if (iTable == SYMBOLS_USER) + { + if (bRemoveSymbol) + { + ConsoleBufferPush( TEXT(" Removing symbol." ) ); + } + + g_aSymbols[SYMBOLS_USER].erase( nAddressPrev ); + + if (bUpdateSymbol) + { + ConsoleBufferPush( TEXT(" Updating symbol to new address." ) ); + } + } + } + else + { + if (bRemoveSymbol) + { + ConsoleBufferPush( TEXT(" Symbol not in table." ) ); + } + } + + if (bUpdateSymbol) + { +#if _DEBUG + LPCTSTR pSymbol = FindSymbolFromAddress( nAddress, &iTable ); + { + // Found another symbol for this address. Harmless. + // TODO: Probably should check if same name? + } +#endif + g_aSymbols[SYMBOLS_USER][ nAddress ] = pSymbolName; + } + + return ConsoleUpdate(); + } + } + + return UPDATE_NOTHING; +} + + +//=========================================================================== +Update_t _CmdSymbolsCommon ( int nArgs, int bSymbolTables ) +{ + if (! nArgs) + { + return Help_Arg_1( g_iCommand ); + } + + Update_t iUpdate = _CmdSymbolsUpdate( nArgs ); + if (iUpdate != UPDATE_NOTHING) + return iUpdate; + + TCHAR sText[ CONSOLE_WIDTH ]; + + int iArg = 0; + while (iArg++ <= nArgs) + { + int iParam; + int nParams = FindParam( g_aArgs[iArg].sArg, MATCH_EXACT, iParam ); // MATCH_FUZZY + if (nParams) + { + if (iParam == PARAM_CLEAR) + { + int iTable = _GetSymbolTableFromFlag( bSymbolTables ); + if (iTable != NUM_SYMBOL_TABLES) + { + Update_t iUpdate = _CmdSymbolsClear( (Symbols_e) iTable ); + wsprintf( sText, TEXT(" Cleared symbol table: %s"), + g_aSymbolTableNames[ iTable ] + ); + ConsoleBufferPush( sText ); + iUpdate |= ConsoleUpdate(); + return iUpdate; + } + else + { + ConsoleBufferPush( TEXT(" Error: Unknown Symbol Table Type") ); + return ConsoleUpdate(); + } +// if (bSymbolTable & SYMBOL_TABLE_MAIN) +// return _CmdSymbolsClear( SYMBOLS_MAIN ); +// else +// if (bSymbolsTable & SYMBOL_TABLE_USER) +// return _CmdSymbolsClear( SYMBOLS_USER ); +// else + // Shouldn't have multiple symbol tables selected +// nArgs = _Arg_1( eSymbolsTable ); + } + else + if (iParam == PARAM_LOAD) + { + nArgs = _Arg_Shift( iArg, nArgs); + CmdSymbolsLoad( nArgs ); + + int iTable = _GetSymbolTableFromFlag( bSymbolTables ); + if (iTable != NUM_SYMBOL_TABLES) + { + wsprintf( sText, " Symbol Table: %s, loaded symbols: %d", + g_aSymbolTableNames[ iTable ], g_nSymbolsLoaded ); + ConsoleBufferPush( sText ); + } + else + { + ConsoleBufferPush( TEXT(" Error: Unknown Symbol Table Type") ); + } + return ConsoleUpdate(); + } + else + if (iParam == PARAM_SAVE) + { + nArgs = _Arg_Shift( iArg, nArgs); + return CmdSymbolsSave( nArgs ); + } + } + else + { + return _CmdSymbolsListTables( nArgs, bSymbolTables ); + } + + } + + return ConsoleUpdate(); +} + +//=========================================================================== +Update_t CmdSymbolsMain (int nArgs) +{ + if (! nArgs) + { + return CmdSymbolsInfo( nArgs ); + } + + return _CmdSymbolsCommon( nArgs, SYMBOL_TABLE_MAIN ); // SYMBOLS_MAIN ); +} + + +//=========================================================================== +Update_t CmdSymbolsUser (int nArgs) +{ + if (! nArgs) + { + return CmdSymbolsInfo( nArgs ); + } + + return _CmdSymbolsCommon( nArgs, SYMBOL_TABLE_USER ); // SYMBOLS_USER ); +} + +//=========================================================================== +Update_t CmdSymbolsSource (int nArgs) +{ + if (! nArgs) + { + return CmdSymbolsInfo( nArgs ); + } + + return _CmdSymbolsCommon( nArgs, SYMBOL_TABLE_SRC ); // SYMBOLS_SRC ); +} + +//=========================================================================== +LPCTSTR GetSymbol (WORD nAddress, int nBytes) +{ + LPCSTR pSymbol = FindSymbolFromAddress( nAddress ); + if (pSymbol) + return pSymbol; + + return FormatAddress( nAddress, nBytes ); +} + +//=========================================================================== +Update_t CmdSymbolsSave (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +// CPU Step, Trace ________________________________________________________________________________ + +//=========================================================================== +Update_t CmdGo (int nArgs) +{ + g_nDebugSteps = -1; + g_nDebugStepCycles = 0; + g_nDebugStepStart = regs.pc; + g_nDebugStepUntil = nArgs ? g_aArgs[1].nVal1 : -1; + g_nDebugSkipStart = -1; + g_nDebugSkipLen = -1; + + // Extended Go ... addr_skip, len + if (nArgs > 1) + { + int iArg = 2; + + g_nDebugSkipStart = g_aArgs[ iArg ].nVal1; + WORD nAddress = g_aArgs[ iArg ].nVal2; + +// int nSlack = (_6502_END_MEM_ADDRESS + 1) - nAddress; +// int nWantedLength = g_aArgs[iArg].nVal2; +// g_nDebugSkipLen = MIN( nSlack, nWantedLength ); + int nEnd = nAddress - g_nDebugSkipStart; + if (nEnd < 0) + g_nDebugSkipLen = g_nDebugSkipStart - nAddress; + else + g_nDebugSkipLen = nAddress - g_nDebugSkipStart; + + g_nDebugSkipLen &= _6502_END_MEM_ADDRESS; + } + +// WORD nAddressSymbol = 0; +// bool bFoundSymbol = FindAddressFromSymbol( g_aArgs[1].sArg, & nAddressSymbol ); +// if (bFoundSymbol) +// g_nDebugStepUntil = nAddressSymbol; + +// if (!g_nDebugStepUntil) +// g_nDebugStepUntil = GetAddress(g_aArgs[1].sArg); + + mode = MODE_STEPPING; + FrameRefreshStatus(DRAW_TITLE); + + return UPDATE_CONSOLE_DISPLAY; // TODO: Verify // 0; +} + +//=========================================================================== +Update_t CmdStepOver (int nArgs) +{ + // assert( g_nDisasmCurAddress == regs.pc ); + +// g_nDebugSteps = nArgs ? g_aArgs[1].nVal1 : 1; + WORD nDebugSteps = nArgs ? g_aArgs[1].nVal1 : 1; + + while (nDebugSteps -- > 0) + { + int nOpcode = *(mem + regs.pc); // g_nDisasmCurAddress + // int eMode = g_aOpcodes[ nOpcode ].addrmode; + // int nByte = g_aOpmodes[eMode]._nBytes; + // if ((eMode == ADDR_ABS) && + + CmdTrace(0); + if (nOpcode == OPCODE_JSR) + { + CmdStepOut(0); + g_nDebugSteps = 0xFFFF; + while (g_nDebugSteps != 0) + DebugContinueStepping(); + } + } + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdStepOut (int nArgs) +{ + // TODO: "RET" should probably pop the Call stack + // Also see: CmdCursorJumpRetAddr + WORD nAddress; + if (_Get6502ReturnAddress( nAddress )) + { + nArgs = _Arg_1( nAddress ); + g_aArgs[1].sArg[0] = 0; + CmdGo( 1 ); + } + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdTrace (int nArgs) +{ + g_nDebugSteps = nArgs ? g_aArgs[1].nVal1 : 1; + g_nDebugStepCycles = 0; + g_nDebugStepStart = regs.pc; + g_nDebugStepUntil = -1; + mode = MODE_STEPPING; + FrameRefreshStatus(DRAW_TITLE); + DebugContinueStepping(); + + return UPDATE_ALL; // TODO: Verify // 0 +} + +//=========================================================================== +Update_t CmdTraceFile (int nArgs) { + if (g_hTraceFile) + fclose(g_hTraceFile); + + TCHAR filename[MAX_PATH]; + _tcscpy(filename,progdir); + _tcscat(filename,(nArgs && g_aArgs[1].sArg[0]) ? g_aArgs[1].sArg : g_FileNameTrace ); + g_hTraceFile = fopen(filename,TEXT("wt")); + + return UPDATE_ALL; // TODO: Verify // 0 +} + +//=========================================================================== +Update_t CmdTraceLine (int nArgs) +{ + g_nDebugSteps = nArgs ? g_aArgs[1].nVal1 : 1; + g_nDebugStepCycles = 1; + g_nDebugStepStart = regs.pc; + g_nDebugStepUntil = -1; + + mode = MODE_STEPPING; + FrameRefreshStatus(DRAW_TITLE); + DebugContinueStepping(); + + return UPDATE_ALL; // TODO: Verify // 0 +} + + +// Variables ______________________________________________________________________________________ + + +//=========================================================================== +Update_t CmdVarsClear (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsDefine (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsDefineInt8 (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsDefineInt16 (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsList (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsLoad (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsSave (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdVarsSet (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +// Watches ________________________________________________________________________________________ + +//=========================================================================== +Update_t CmdWatchAdd (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_WATCH_ADD ); + + bool bAdded = false; + int iArg = 0; + + while (iArg++ < nArgs) + { + WORD nAddress = g_aArgs[iArg].nVal1; + { + // FIND A FREE SLOT FOR THIS NEW WATCH + int iWatch = 0; + while ((iWatch < MAX_WATCHES) && (g_aWatches[iWatch].bSet)) + iWatch++; + if ((iWatch >= MAX_WATCHES) && !bAdded) + return ConsoleDisplayError(TEXT("All watches slots are currently in use.")); + + // VERIFY THAT THE WATCH IS NOT ON AN I/O LOCATION + if ((nAddress >= _6502_IO_BEGIN) && (nAddress <= _6502_IO_END)) + return ConsoleDisplayError(TEXT("You may not watch an I/O location.")); + + // ADD THE WATCH + if (iWatch < MAX_WATCHES) { + g_aWatches[iWatch].bSet = true; + g_aWatches[iWatch].bEnabled = true; + g_aWatches[iWatch].nAddress = nAddress; + bAdded = true; + g_nWatches++; + } + } + } + + if (!bAdded) + return Help_Arg_1( CMD_WATCH_ADD ); + + return UPDATE_WATCH; // 1; +} + +//=========================================================================== +Update_t CmdWatchClear (int nArgs) +{ + if (!g_nWatches) + return ConsoleDisplayError(TEXT("There are no watches defined.")); + + if (!nArgs) + return Help_Arg_1( CMD_WATCH_CLEAR ); + + _ClearViaArgs( nArgs, g_aWatches, MAX_WATCHES, g_nWatches ); + +// if (! g_nWatches) +// { +// UpdateDisplay(UPDATE_BACKGROUND); // 1 +// return UPDATE_NOTHING; // 0 +// } + + return UPDATE_CONSOLE_DISPLAY | UPDATE_WATCH; // 1 +} + +//=========================================================================== +Update_t CmdWatchDisable (int nArgs) +{ + if (! g_nWatches) + return ConsoleDisplayError(TEXT("There are no watches defined.")); + + if (!nArgs) + return Help_Arg_1( CMD_WATCH_DISABLE ); + + _EnableDisableViaArgs( nArgs, g_aWatches, MAX_WATCHES, false ); + + return UPDATE_WATCH; +} + +//=========================================================================== +Update_t CmdWatchEnable (int nArgs) +{ + if (! g_nWatches) + return ConsoleDisplayError(TEXT("There are no watches defined.")); + + if (!nArgs) + return Help_Arg_1( CMD_WATCH_ENABLE ); + + _EnableDisableViaArgs( nArgs, g_aWatches, MAX_WATCHES, true ); + + return UPDATE_WATCH; +} + +//=========================================================================== +Update_t CmdWatchList (int nArgs) +{ + int iWatch = 0; + while (iWatch < MAX_WATCHES) + { + if (g_aWatches[ iWatch ].bSet) + { + _ListBreakWatchZero( g_aWatches, iWatch ); + } + iWatch++; + } + return ConsoleUpdate(); +} + +//=========================================================================== +Update_t CmdWatchLoad (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_WATCH_LOAD ); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWatchSave (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_WATCH_SAVE ); + + return UPDATE_CONSOLE_DISPLAY; +} + + +// Window _________________________________________________________________________________________ + +void _ColorPrint( int iColor, COLORREF nColor ) +{ + int R = (nColor >> 0) & 0xFF; + int G = (nColor >> 8) & 0xFF; + int B = (nColor >> 16) & 0xFF; + + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, " Color %01X: %02X %02X %02X", iColor, R, G, B ); // TODO: print name of colors! + ConsoleBufferPush( sText ); +} + +void _CmdColorGet( const int iScheme, const int iColor ) +{ + if (iColor < NUM_COLORS) + { +// COLORREF nColor = g_aColors[ iScheme ][ iColor ]; + DebugColors_e eColor = static_cast( iColor ); + COLORREF nColor = DebugGetColor( eColor ); + _ColorPrint( iColor, nColor ); + } + else + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, "Color: %d\nOut of range!", iColor ); + MessageBox( framewindow, sText, TEXT("ERROR"), MB_OK ); + } +} + +//=========================================================================== +inline COLORREF DebugGetColor( int iColor ) +{ + COLORREF nColor = RGB(0,255,255); // 0xFFFF00; // Hot Pink! -- so we notice errors. Not that there is anything wrong with pink... + + if ((g_iColorScheme < NUM_COLOR_SCHEMES) && (iColor < NUM_COLORS)) + { + nColor = g_aColors[ g_iColorScheme ][ iColor ]; + } + +/* + if (SCHEME_COLOR == g_iColorScheme) +// nColor = gaColorValue[ iColor ]; +// nColor = gaColorPalette[ g_aColorIndex[ iColor ] ]; + else + if (SCHEME_MONO == g_iColorScheme) + nColor = gaMonoValue[ iColor ]; +// nColor = gaMonoPalette[ g_aColorIndex[ iColor ] ]; +*/ + return nColor; +} + + +bool DebugSetColor( const int iScheme, const int iColor, const COLORREF nColor ) +{ + bool bStatus = false; + if ((g_iColorScheme < NUM_COLOR_SCHEMES) && (iColor < NUM_COLORS)) + { + g_aColors[ iScheme ][ iColor ] = nColor; + bStatus = true; + } + return bStatus; +} + +//=========================================================================== +Update_t CmdConfigColorMono (int nArgs) +{ + int iScheme; + + if (g_iCommand == CMD_CONFIG_COLOR) + iScheme = SCHEME_COLOR; + if (g_iCommand == CMD_CONFIG_MONOCHROME) + iScheme = SCHEME_MONO; + + if ((iScheme < 0) || (iScheme > NUM_COLOR_SCHEMES)) // sanity check + iScheme = SCHEME_COLOR; + + if (! nArgs) + { + g_iColorScheme = iScheme; + UpdateDisplay( UPDATE_BACKGROUND ); // 1 + return UPDATE_ALL; + } + + if ((nArgs != 1) && (nArgs != 4)) + return Help_Arg_1( g_iCommand ); + + int iColor = g_aArgs[ 1 ].nVal1; + if ((iColor < 0) || iColor >= NUM_COLORS) + return Help_Arg_1( g_iCommand ); + + if (nArgs == 1) + { // Dump Color + _CmdColorGet( iScheme, iColor ); + return ConsoleUpdate(); + } + else + { // Set Color + int R = g_aArgs[2].nVal1 & 0xFF; + int G = g_aArgs[3].nVal1 & 0xFF; + int B = g_aArgs[4].nVal1 & 0xFF; + COLORREF nColor = RGB(R,G,B); + + DebugSetColor( iScheme, iColor, nColor ); + return UPDATE_ALL; + } +} + +Update_t CmdConfigHColor (int nArgs) +{ + if ((nArgs != 1) && (nArgs != 4)) + return Help_Arg_1( g_iCommand ); + + int iColor = g_aArgs[ 1 ].nVal1; + if ((iColor < 0) || iColor >= NUM_COLORS) + return Help_Arg_1( g_iCommand ); + + if (nArgs == 1) + { // Dump Color +// _CmdColorGet( iScheme, iColor ); +// TODO/FIXME: must export AW_Video.cpp: static LPBITMAPINFO framebufferinfo; +// COLORREF nColor = g_aColors[ iScheme ][ iColor ]; +// _ColorPrint( iColor, nColor ); + return ConsoleUpdate(); + } + else + { // Set Color +// DebugSetColor( iScheme, iColor ); + return UPDATE_ALL; + } +} + +// Window _________________________________________________________________________________________ + +//=========================================================================== +void _WindowJoin () +{ + g_aWindowConfig[ g_iWindowThis ].bSplit = false; +} + +//=========================================================================== +void _WindowSplit ( Window_e eNewBottomWindow ) +{ + g_aWindowConfig[ g_iWindowThis ].bSplit = true; + g_aWindowConfig[ g_iWindowThis ].eBot = eNewBottomWindow; +} + +//=========================================================================== +void _WindowLast () +{ + int eNew = g_iWindowLast; + g_iWindowLast = g_iWindowThis; + g_iWindowThis = eNew; +} + +//=========================================================================== +void _WindowSwitch( int eNewWindow ) +{ + g_iWindowLast = g_iWindowThis; + g_iWindowThis = eNewWindow; +} + +//=========================================================================== +Update_t _CmdWindowViewCommon ( int iNewWindow ) +{ + // Switching to same window, remove split + if (g_iWindowThis == iNewWindow) + { + g_aWindowConfig[ iNewWindow ].bSplit = false; + } + else + { + _WindowSwitch( iNewWindow ); + } + +// WindowUpdateConsoleDisplayedSize(); + WindowUpdateSizes(); + return UPDATE_ALL; +} + +//=========================================================================== +Update_t _CmdWindowViewFull ( int iNewWindow ) +{ + if (g_iWindowThis != iNewWindow) + { + g_aWindowConfig[ iNewWindow ].bSplit = false; + _WindowSwitch( iNewWindow ); + WindowUpdateConsoleDisplayedSize(); + } + return UPDATE_ALL; +} + +//=========================================================================== +void WindowUpdateConsoleDisplayedSize() +{ + g_nConsoleDisplayHeight = MIN_DISPLAY_CONSOLE_LINES; + g_nConsoleDisplayWidth = (CONSOLE_WIDTH / 2) + 8; + g_bConsoleFullWidth = false; + + if (g_iWindowThis == WINDOW_CONSOLE) + { + g_nConsoleDisplayHeight = MAX_DISPLAY_CONSOLE_LINES; + g_nConsoleDisplayWidth = CONSOLE_WIDTH - 1; + g_bConsoleFullWidth = true; + } +} + +//=========================================================================== +int WindowGetHeight( int iWindow ) +{ +// if (iWindow == WINDOW_CODE) + return g_nDisasmWinHeight; +} + +//=========================================================================== +void WindowUpdateDisasmSize() +{ + if (g_aWindowConfig[ g_iWindowThis ].bSplit) + { + g_nDisasmWinHeight = (MAX_DISPLAY_DISASM_LINES) / 2; + } + else + { + g_nDisasmWinHeight = MAX_DISPLAY_DISASM_LINES; + } + g_nDisasmCurLine = MAX(0, (g_nDisasmWinHeight - 1) / 2); +#if _DEBUG +#endif +} + +//=========================================================================== +void WindowUpdateSizes() +{ + WindowUpdateDisasmSize(); + WindowUpdateConsoleDisplayedSize(); +} + + +//=========================================================================== +Update_t CmdWindowCycleNext( int nArgs ) +{ + g_iWindowThis++; + if (g_iWindowThis >= NUM_WINDOWS) + g_iWindowThis = 0; + + WindowUpdateSizes(); + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdWindowCyclePrev( int nArgs ) +{ + g_iWindowThis--; + if (g_iWindowThis < 0) + g_iWindowThis = NUM_WINDOWS-1; + + WindowUpdateSizes(); + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdWindowShowCode (int nArgs) +{ + if (g_iWindowThis == WINDOW_CODE) + { + g_aWindowConfig[ g_iWindowThis ].bSplit = false; + g_aWindowConfig[ g_iWindowThis ].eBot = WINDOW_CODE; // not really needed, but SAFE HEX ;-) + } + else + if (g_iWindowThis == WINDOW_DATA) + { + g_aWindowConfig[ g_iWindowThis ].bSplit = true; + g_aWindowConfig[ g_iWindowThis ].eBot = WINDOW_CODE; + } + + WindowUpdateSizes(); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWindowShowCode1 (int nArgs) +{ +/* + if ((g_iWindowThis == WINDOW_CODE) || (g_iWindowThis != WINDOW_CODE)) + { + g_aWindowConfig[ g_iWindowThis ].bSplit = true; + g_aWindowConfig[ g_iWindowThis ].eTop = WINDOW_CODE; + + Window_e eWindow = WINDOW_CODE; + if (g_iWindowThis == WINDOW_DATA) + eWindow = WINDOW_DATA; + + g_aWindowConfig[ g_iWindowThis ].eBot = eWindow; + return UPDATE_ALL; + } +*/ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWindowShowCode2 (int nArgs) +{ + if ((g_iWindowThis == WINDOW_CODE) || (g_iWindowThis == WINDOW_CODE)) + { + if (g_iWindowThis == WINDOW_CODE) + { + _WindowJoin(); + WindowUpdateDisasmSize(); + } + else + if (g_iWindowThis == WINDOW_DATA) + { + _WindowSplit( WINDOW_CODE ); + WindowUpdateDisasmSize(); + } + return UPDATE_DISASM; + + } + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdWindowShowData (int nArgs) +{ + if (g_iWindowThis == WINDOW_CODE) + { + g_aWindowConfig[ g_iWindowThis ].bSplit = true; + g_aWindowConfig[ g_iWindowThis ].eBot = WINDOW_DATA; + return UPDATE_ALL; + } + else + if (g_iWindowThis == WINDOW_DATA) + { + g_aWindowConfig[ g_iWindowThis ].bSplit = false; + g_aWindowConfig[ g_iWindowThis ].eBot = WINDOW_DATA; // not really needed, but SAFE HEX ;-) + return UPDATE_ALL; + } + + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdWindowShowData1 (int nArgs) +{ +/* + if (g_iWindowThis != PARAM_CODE_1) + { + g_iWindowLast = g_iWindowThis; + g_iWindowThis = PARAM_DATA_1; + return UPDATE_ALL; + } +*/ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWindowShowData2 (int nArgs) +{ + if ((g_iWindowThis == WINDOW_CODE) || (g_iWindowThis == WINDOW_CODE)) + { + if (g_iWindowThis == WINDOW_CODE) + { + _WindowJoin(); + } + else + if (g_iWindowThis == WINDOW_DATA) + { + _WindowSplit( WINDOW_DATA ); + } + return UPDATE_DISASM; + + } + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWindowShowSource (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdWindowShowSource1 (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWindowShowSource2 (int nArgs) +{ + _WindowSplit( WINDOW_SOURCE ); + WindowUpdateSizes(); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdWindowViewCode (int nArgs) +{ + return _CmdWindowViewCommon( WINDOW_CODE ); +} + +//=========================================================================== +Update_t CmdWindowViewConsole (int nArgs) +{ + return _CmdWindowViewFull( WINDOW_CONSOLE ); + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdWindowViewData (int nArgs) +{ + return _CmdWindowViewCommon( WINDOW_DATA ); +} + +//=========================================================================== +Update_t CmdWindowViewOutput (int nArgs) +{ + VideoRedrawScreen(); + g_bDebuggerViewingAppleOutput = true; + + return UPDATE_NOTHING; // intentional +} + +//=========================================================================== +Update_t CmdWindowViewSource (int nArgs) +{ + return _CmdWindowViewFull( WINDOW_CONSOLE ); + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdWindowViewSymbols (int nArgs) +{ + return _CmdWindowViewFull( WINDOW_CONSOLE ); + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdWindow (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_WINDOW ); + + int iParam; + TCHAR *pName = g_aArgs[1].sArg; + int nFound = FindParam( pName, MATCH_EXACT, iParam, _PARAM_WINDOW_BEGIN, _PARAM_WINDOW_END ); + if (nFound) + { + switch (iParam) + { + case PARAM_CODE : return CmdWindowViewCode(0) ; break; + case PARAM_CONSOLE: return CmdWindowViewConsole(0); break; + case PARAM_DATA : return CmdWindowViewData(0) ; break; +// case PARAM_INFO : CmdWindowInfo(); break; + case PARAM_SOURCE : return CmdWindowViewSource(0) ; break; + case PARAM_SYMBOLS: return CmdWindowViewSymbols(0); break; + default: + return Help_Arg_1( CMD_WINDOW ); + break; + } + } + + WindowUpdateConsoleDisplayedSize(); + + return UPDATE_ALL; +} + +//=========================================================================== +Update_t CmdWindowLast (int nArgs) +{ + _WindowLast(); + WindowUpdateConsoleDisplayedSize(); + return UPDATE_ALL; +} + +// ZeroPage _______________________________________________________________________________________ + + +//=========================================================================== +Update_t CmdZeroPage (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_ZEROPAGE_POINTER ); + + return UPDATE_CONSOLE_DISPLAY; +} + +//=========================================================================== +Update_t CmdZeroPageAdd (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_ZEROPAGE_POINTER_ADD ); + + bool bAdded = false; + int iArg = 0; + while (iArg++ < nArgs) + { + WORD nAddress = g_aArgs[iArg].nVal1; + { + int iZP = 0; + while ((iZP < MAX_ZEROPAGE_POINTERS) && (g_aZeroPagePointers[iZP].bSet)) + { + iZP++; + } + if ((iZP >= MAX_ZEROPAGE_POINTERS) && !bAdded) + return ConsoleDisplayError(TEXT("All (ZP) pointers are currently in use.")); + + if (iZP < MAX_ZEROPAGE_POINTERS) + { + g_aZeroPagePointers[iZP].bSet = true; + g_aZeroPagePointers[iZP].bEnabled = true; + g_aZeroPagePointers[iZP].nAddress = (BYTE) nAddress; + bAdded = true; + g_nZeroPagePointers++; + } + } + } + + if (!bAdded) + return Help_Arg_1( CMD_ZEROPAGE_POINTER_ADD ); + + return UPDATE_ZERO_PAGE; +} + +//=========================================================================== +Update_t CmdZeroPageClear (int nArgs) +{ + if (!g_nBreakpoints) + return ConsoleDisplayError(TEXT("There are no (ZP) pointers defined.")); + + // CHECK FOR ERRORS + if (!nArgs) + return Help_Arg_1( CMD_ZEROPAGE_POINTER_CLEAR ); + + _ClearViaArgs( nArgs, g_aZeroPagePointers, MAX_ZEROPAGE_POINTERS, g_nZeroPagePointers ); + + if (! g_nZeroPagePointers) + { + UpdateDisplay( UPDATE_BACKGROUND ); + return UPDATE_CONSOLE_DISPLAY; + } + + return UPDATE_CONSOLE_DISPLAY | UPDATE_ZERO_PAGE; +} + +//=========================================================================== +Update_t CmdZeroPageDisable (int nArgs) +{ + if (!nArgs) + return Help_Arg_1( CMD_ZEROPAGE_POINTER_DISABLE ); + if (! g_nZeroPagePointers) + return ConsoleDisplayError(TEXT("There are no (ZP) pointers defined.")); + + _EnableDisableViaArgs( nArgs, g_aZeroPagePointers, MAX_ZEROPAGE_POINTERS, false ); + + return UPDATE_ZERO_PAGE; +} + +//=========================================================================== +Update_t CmdZeroPageEnable (int nArgs) +{ + if (! g_nZeroPagePointers) + return ConsoleDisplayError(TEXT("There are no (ZP) pointers defined.")); + + if (!nArgs) + return Help_Arg_1( CMD_ZEROPAGE_POINTER_ENABLE ); + + _EnableDisableViaArgs( nArgs, g_aZeroPagePointers, MAX_ZEROPAGE_POINTERS, true ); + + return UPDATE_ZERO_PAGE; +} + +//=========================================================================== +Update_t CmdZeroPageList (int nArgs) +{ + int iZP = 0; + while (iZP < MAX_ZEROPAGE_POINTERS) + { + if (g_aZeroPagePointers[ iZP ].bEnabled) + { + _ListBreakWatchZero( g_aZeroPagePointers, iZP ); + } + iZP++; + } + return ConsoleUpdate(); +} + +//=========================================================================== +Update_t CmdZeroPageLoad (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; + +} + +//=========================================================================== +Update_t CmdZeroPageSave (int nArgs) +{ + return UPDATE_CONSOLE_DISPLAY; +} + + +//=========================================================================== +Update_t CmdZeroPagePointer (int nArgs) +{ + // p[0..4] : disable + // p[0..4] : enable + + if( (nArgs != 0) && (nArgs != 1) ) + return Help_Arg_1( g_iCommand ); +// return DisplayHelp(CmdZeroPagePointer); + +// int nPtrNum = g_aArgs[0].sArg[1] - '0'; // HACK: hard-coded to command length + int iZP = g_iCommand - CMD_ZEROPAGE_POINTER_0; + + if( (iZP < 0) || (iZP > MAX_ZEROPAGE_POINTERS) ) + return Help_Arg_1( g_iCommand ); + + if (nArgs == 0) + { + g_aZeroPagePointers[iZP].bEnabled = false; + } + else + { + g_aZeroPagePointers[iZP].bSet = true; + g_aZeroPagePointers[iZP].bEnabled = true; + + WORD nAddress = g_aArgs[1].nVal1; + g_aZeroPagePointers[iZP].nAddress = (BYTE) nAddress; + } + + return UPDATE_ZERO_PAGE; +} + + + + +// Drawing ________________________________________________________________________________________ + +//=========================================================================== +void DrawBreakpoints (HDC dc, int line) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + RECT rect; + rect.left = DISPLAY_BP_COLUMN; + rect.top = (line * g_nFontHeight); + rect.right = DISPLAY_WIDTH; + rect.bottom = rect.top + g_nFontHeight; + + const int MAX_BP_LEN = 16; + TCHAR sText[16] = TEXT("Breakpoints"); // TODO: Move to BP1 + + SetBkColor(dc, DebugGetColor( BG_INFO )); // COLOR_BG_DATA + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); //COLOR_STATIC + DebugDrawText( sText, rect ); + rect.top += g_nFontHeight; + rect.bottom += g_nFontHeight; + + int iBreakpoint; + for (iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++ ) + { + Breakpoint_t *pBP = &g_aBreakpoints[iBreakpoint]; + WORD nLength = pBP->nLength; + +#if DEBUG_FORCE_DISPLAY + nLength = 2; +#endif + if (nLength) + { + bool bSet = pBP->bSet; + bool bEnabled = pBP->bEnabled; + WORD nAddress1 = pBP->nAddress; + WORD nAddress2 = nAddress1 + nLength - 1; + + RECT rect2; + rect2 = rect; + + SetBkColor( dc, DebugGetColor( BG_INFO )); + SetTextColor( dc, DebugGetColor( FG_INFO_BULLET ) ); + wsprintf( sText, TEXT("%d"), iBreakpoint+1 ); + DebugDrawTextFixed( sText, rect2 ); + + SetTextColor( dc, DebugGetColor( FG_INFO_OPERATOR ) ); + _tcscpy( sText, TEXT(":") ); + DebugDrawTextFixed( sText, rect2 ); + +#if DEBUG_FORCE_DISPLAY + pBP->eSource = (BreakpointSource_t) iBreakpoint; +#endif + SetTextColor( dc, DebugGetColor( FG_INFO_REG ) ); + int nRegLen = DebugDrawTextFixed( g_aBreakpointSource[ pBP->eSource ], rect2 ); + + // Pad to 2 chars + if (nRegLen < 2) // (g_aBreakpointSource[ pBP->eSource ][1] == 0) // HACK: Avoid strlen() + rect2.left += g_aFontConfig[ FONT_INFO ]._nFontWidthAvg; + + SetBkColor( dc, DebugGetColor( BG_INFO )); + SetTextColor( dc, DebugGetColor( FG_INFO_BULLET ) ); +#if DEBUG_FORCE_DISPLAY + if (iBreakpoint < 3) + pBP->eOperator = (BreakpointOperator_t)(iBreakpoint * 2); + else + pBP->eOperator = (BreakpointOperator_t)(iBreakpoint-3 + BP_OP_READ); +#endif + DebugDrawTextFixed( g_aBreakpointSymbols [ pBP->eOperator ], rect2 ); + + DebugColors_e iForeground; + DebugColors_e iBackground = BG_INFO; + + if (bSet) + { + if (bEnabled) + { + iBackground = BG_DISASM_BP_S_C; +// iForeground = FG_DISASM_BP_S_X; + iForeground = FG_DISASM_BP_S_C; + } + else + { + iForeground = FG_DISASM_BP_0_X; + } + } + else + { + iForeground = FG_INFO_TITLE; + } + + SetBkColor( dc, DebugGetColor( iBackground ) ); + SetTextColor( dc, DebugGetColor( iForeground ) ); + +#if DEBUG_FORCE_DISPLAY + int iColor = R8 + (iBreakpoint*2); + COLORREF nColor = gaColorPalette[ iColor ]; + if (iBreakpoint >= 4) + { + SetBkColor ( dc, DebugGetColor( BG_DISASM_BP_S_C ) ); + nColor = DebugGetColor( FG_DISASM_BP_S_C ); + } + SetTextColor( dc, nColor ); +#endif + + wsprintf( sText, TEXT("%04X"), nAddress1 ); + DebugDrawTextFixed( sText, rect2 ); + + if (nLength > 1) + { + SetBkColor( dc, DebugGetColor( BG_INFO ) ); + SetTextColor( dc, DebugGetColor( FG_INFO_OPERATOR ) ); + +// if (g_bConfigDisasmOpcodeSpaces) +// { +// DebugDrawTextHorz( TEXT(" "), rect2 ); +// rect2.left += g_nFontWidthAvg; +// } + + DebugDrawTextFixed( TEXT("-"), rect2 ); +// rect2.left += g_nFontWidthAvg; +// if (g_bConfigDisasmOpcodeSpaces) // TODO: Might have to remove spaces, for BPIO... addr-addr xx +// { +// rect2.left += g_nFontWidthAvg; +// } + + SetBkColor( dc, DebugGetColor( iBackground ) ); + SetTextColor( dc, DebugGetColor( iForeground ) ); +#if DEBUG_FORCE_DISPLAY + iColor++; + COLORREF nColor = gaColorPalette[ iColor ]; + if (iBreakpoint >= 4) + { + nColor = DebugGetColor( BG_INFO ); + SetBkColor( dc, nColor ); + nColor = DebugGetColor( FG_DISASM_BP_S_X ); + } + SetTextColor( dc, nColor ); +#endif + wsprintf( sText, TEXT("%04X"), nAddress2 ); + DebugDrawTextFixed( sText, rect2 ); + } + + // Bugfix: Rest of line is still breakpoint background color + SetBkColor(dc, DebugGetColor( BG_INFO )); // COLOR_BG_DATA + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); //COLOR_STATIC + DebugDrawTextHorz( TEXT(" "), rect2 ); + + } + rect.top += g_nFontHeight; + rect.bottom += g_nFontHeight; + } +} + + +//=========================================================================== +void DrawConsoleInput( HDC dc ) +{ + g_hDC = dc; + + SetTextColor( g_hDC, DebugGetColor( FG_CONSOLE_INPUT )); + SetBkColor( g_hDC, DebugGetColor( BG_CONSOLE_INPUT )); + + DrawConsoleLine( g_aConsoleInput, 0 ); +} + +//=========================================================================== +void DrawConsoleLine( LPCSTR pText, int y ) +{ + if (y < 0) + return; + +// int nHeight = WindowGetHeight( g_iWindowThis ); + int nLineHeight = GetConsoleHeightPixels(); + + RECT rect; + rect.left = 0; +// rect.top = (g_nTotalLines - y) * nFontHeight; // DISPLAY_HEIGHT - (y * nFontHeight); // ((g_nTotalLines - y) * g_nFontHeight; // 368 = 23 lines * 16 pixels/line // MAX_DISPLAY_CONSOLE_LINES + + rect.top = GetConsoleTopPixels( y ); + rect.bottom = rect.top + nLineHeight; //g_nFontHeight; + + // Default: (356-14) = 342 pixels ~= 48 chars (7 pixel width) + // rect.right = SCREENSPLIT1-14; +// rect.right = (g_nConsoleDisplayWidth * g_nFontWidthAvg) + (g_nFontWidthAvg - 1); + + int nMiniConsoleRight = DISPLAY_MINI_CONSOLE; // (g_nConsoleDisplayWidth * g_nFontWidthAvg) + (g_nFontWidthAvg * 2); // +14 + int nFullConsoleRight = DISPLAY_WIDTH; + int nRight = g_bConsoleFullWidth ? nFullConsoleRight : nMiniConsoleRight; + rect.right = nRight; + + DebugDrawText( pText, rect ); +} + + +// Disassembly formatting flags returned +//=========================================================================== +int FormatDisassemblyLine( WORD nOffset, int iMode, int nOpBytes, + char *sAddress_, char *sOpCodes_, char *sTarget_, char *sTargetOffset_, int & nTargetOffset_, char * sImmediate_, char & nImmediate_, char *sBranch_ ) +{ + const int nMaxOpcodes = 3; + unsigned int nMinBytesLen = (nMaxOpcodes * (2 + g_bConfigDisasmOpcodeSpaces)); // 2 char for byte (or 3 with space) + + int bDisasmFormatFlags = 0; + + // Composite string that has the symbol or target nAddress + WORD nTarget = 0; + nTargetOffset_ = 0; + +// if (g_aOpmodes[ iMode ]._sFormat[0]) + if ((iMode != AM_IMPLIED) && + (iMode != AM_1) && + (iMode != AM_2) && + (iMode != AM_3)) + { + nTarget = *(LPWORD)(mem+nOffset+1); + if (nOpBytes == 2) + nTarget &= 0xFF; + + if (iMode == AM_R) // Relative ADDR_REL) + { + nTarget = nOffset+2+(int)(signed char)nTarget; + + // Always show branch indicators + // if ((nOffset == regs.pc) && CheckJump(nAddress)) + bDisasmFormatFlags |= DISASM_BRANCH_INDICATOR; + + if (nTarget < nOffset) + { + wsprintf( sBranch_, TEXT("%c"), g_sConfigBranchIndicatorUp[ g_bConfigDisasmFancyBranch ] ); + } + else + if (nTarget > nOffset) + { + wsprintf( sBranch_, TEXT("%c"), g_sConfigBranchIndicatorDown[ g_bConfigDisasmFancyBranch ] ); + } + else + { + wsprintf( sBranch_, TEXT("%c"), g_sConfigBranchIndicatorEqual[ g_bConfigDisasmFancyBranch ] ); + } + } + +// if (_tcsstr(g_aOpmodes[ iMode ]._sFormat,TEXT("%s"))) +// if ((iMode >= ADDR_ABS) && (iMode <= ADDR_IABS)) + if ((iMode == ADDR_ABS ) || + (iMode == ADDR_ZP ) || + (iMode == ADDR_ABSX) || + (iMode == ADDR_ABSY) || + (iMode == ADDR_ZP_X) || + (iMode == ADDR_ZP_Y) || + (iMode == ADDR_REL ) || + (iMode == ADDR_INDX) || + (iMode == ADDR_ABSIINDX) || + (iMode == ADDR_INDY) || + (iMode == ADDR_ABS ) || + (iMode == ADDR_IZPG) || + (iMode == ADDR_IABS)) + { + LPCTSTR pTarget = NULL; + LPCTSTR pSymbol = FindSymbolFromAddress( nTarget ); + if (pSymbol) + { + bDisasmFormatFlags |= DISASM_TARGET_SYMBOL; + pTarget = pSymbol; + } + + if (! (bDisasmFormatFlags & DISASM_TARGET_SYMBOL)) + { + pSymbol = FindSymbolFromAddress( nTarget - 1 ); + if (pSymbol) + { + bDisasmFormatFlags |= DISASM_TARGET_SYMBOL; + bDisasmFormatFlags |= DISASM_TARGET_OFFSET; + pTarget = pSymbol; + nTargetOffset_ = +1; // U FA82 LDA #3F1 BREAK+1 + } + } + + if (! (bDisasmFormatFlags & DISASM_TARGET_SYMBOL)) + { + pSymbol = FindSymbolFromAddress( nTarget + 1 ); + if (pSymbol) + { + bDisasmFormatFlags |= DISASM_TARGET_SYMBOL; + bDisasmFormatFlags |= DISASM_TARGET_OFFSET; + pTarget = pSymbol; + nTargetOffset_ = -1; // U FA82 LDA #3F3 BREAK-1 + } + } + + if (! (bDisasmFormatFlags & DISASM_TARGET_SYMBOL)) + { + pTarget = FormatAddress( nTarget, nOpBytes ); + } + +// wsprintf( sTarget, g_aOpmodes[ iMode ]._sFormat, pTarget ); + if (bDisasmFormatFlags & DISASM_TARGET_OFFSET) + { + int nAbsTargetOffset = (nTargetOffset_ > 0) ? nTargetOffset_ : -nTargetOffset_; + wsprintf( sTargetOffset_, "%d", nAbsTargetOffset ); + } + wsprintf( sTarget_, "%s", pTarget ); + } + else + if (iMode == AM_M) + { +// wsprintf( sTarget, g_aOpmodes[ iMode ]._sFormat, (unsigned)nTarget ); + wsprintf( sTarget_, "%02X", (unsigned)nTarget ); + + if (iMode == ADDR_IMM) + { + bDisasmFormatFlags |= DISASM_IMMEDIATE_CHAR; + nImmediate_ = (BYTE) nTarget; + wsprintf( sImmediate_, "%c", FormatCharTxtCtrl( FormatCharTxtHigh( nImmediate_, NULL ), NULL ) ); + } + } + } + + wsprintf( sAddress_, "%04X", nOffset ); + + // Opcode Bytes + TCHAR *pDst = sOpCodes_; + for( int iBytes = 0; iBytes < nOpBytes; iBytes++ ) + { + BYTE nMem = (unsigned)*(mem+nOffset+iBytes); + wsprintf( pDst, TEXT("%02X"), nMem ); // sBytes+_tcslen(sBytes) + pDst += 2; + + if (g_bConfigDisasmOpcodeSpaces) + { + _tcscat( pDst, TEXT(" " ) ); + } + pDst++; + } + while (_tcslen(sOpCodes_) < nMinBytesLen) + { + _tcscat( sOpCodes_, TEXT(" ") ); + } + + return bDisasmFormatFlags; +} + + +//=========================================================================== +WORD DrawDisassemblyLine (HDC dc, int iLine, WORD nOffset, LPTSTR text) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return 0; + + const int nMaxAddressLen = 40; + const int nMaxOpcodes = 3; + + int iOpcode; + int iOpmode; + int nOpbyte; + iOpcode = _6502GetOpmodeOpbyte( nOffset, iOpmode, nOpbyte ); + + TCHAR sAddress [ 5]; + TCHAR sOpcodes [(nMaxOpcodes*3)+1] = TEXT(""); + TCHAR sTarget [nMaxAddressLen] = TEXT(""); + TCHAR sTargetOffset[ 4 ] = TEXT(""); // +/- 255, realistically +/-1 + int nTargetOffset; + char nImmediate = 0; + TCHAR sImmediate[ 4 ]; // 'c' + TCHAR sBranch [ 2 ]; // ^ + + bool bTargetIndirect = false; + bool bTargetX = false; + bool bTargetY = false; + + if ((iOpmode >= ADDR_INDX) && (iOpmode <= ADDR_IABS)) + bTargetIndirect = true; + + if ((iOpmode == ADDR_ABSX) || (iOpmode == ADDR_ZP_X) || (iOpmode == ADDR_INDX) || (iOpmode == ADDR_ABSIINDX)) + bTargetX = true; + + if ((iOpmode == ADDR_ABSY) || (iOpmode == ADDR_ZP_Y)) + bTargetY = true; + + int bDisasmFormatFlags = FormatDisassemblyLine( nOffset, iOpmode, nOpbyte, + sAddress, sOpcodes, sTarget, sTargetOffset, nTargetOffset, sImmediate, nImmediate, sBranch ); + +// wsprintf(sLine, +// TEXT("%04X%c %s %-9s %s %s"), +// (unsigned)nOffset, +// g_aConfigDisasmAddressColon[ g_bConfigDisasmAddressColon ], +// (LPCTSTR)sBytes, +// (LPCTSTR)GetSymbol(nOffset,0), // Label +// (LPCTSTR)g_aOpcodes[nOpcode].mnemonic, // Instruct +// (LPCTSTR)sTarget); // Target + + + //> Address Seperator Opcodes Label Mnemonic Target [Immediate] [Branch] + //> xxxx: xx xx xx LABEL MNEMONIC 'E' v + //> ^ ^ ^ ^ ^ + //> 6 17 27 41 46 + const int nDefaultFontWidth = 7; // g_aFontConfig[FONT_DISASM_DEFAULT]._nFontWidth or g_nFontWidthAvg + int X_OPCODE = 6 * nDefaultFontWidth; + int X_LABEL = 17 * nDefaultFontWidth; + int X_INSTRUCTION = 27 * nDefaultFontWidth; + int X_IMMEDIATE = 41 * nDefaultFontWidth; + int X_BRANCH = 46 * nDefaultFontWidth; + + const int DISASM_SYMBOL_LEN = 9; + + if (dc) + { + int nFontHeight = g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight; // _nFontHeight; // g_nFontHeight + + RECT linerect; + linerect.left = 0; + linerect.top = iLine * nFontHeight; + linerect.right = DISPLAY_DISASM_RIGHT; // HACK: MAGIC #: 14 -> g_nFontWidthAvg + linerect.bottom = linerect.top + nFontHeight; + +// BOOL bp = g_nBreakpoints && CheckBreakpoint(nOffset,nOffset == regs.pc); + + bool bBreakpointActive; + bool bBreakpointEnable; + GetBreakpointInfo( nOffset, bBreakpointActive, bBreakpointEnable ); + bool bAddressAtPC = (nOffset == regs.pc); + + DebugColors_e iBackground = BG_DISASM_1; + DebugColors_e iForeground = FG_DISASM_MNEMONIC; // FG_DISASM_TEXT; + bool bCursorLine = false; + + if (((! g_bDisasmCurBad) && (iLine == g_nDisasmCurLine)) + || (g_bDisasmCurBad && (iLine == 0))) + { + bCursorLine = true; + + // Breakpoint, + if (bBreakpointActive) + { + if (bBreakpointEnable) + { + iBackground = BG_DISASM_BP_S_C; iForeground = FG_DISASM_BP_S_C; + } + else + { + iBackground = BG_DISASM_BP_0_C; iForeground = FG_DISASM_BP_0_C; + } + } + else + if (bAddressAtPC) + { + iBackground = BG_DISASM_PC_C; iForeground = FG_DISASM_PC_C; + } + else + { + iBackground = BG_DISASM_C; iForeground = FG_DISASM_C; + // HACK? Sync Cursor back up to Address + // The cursor line may of had to be been moved, due to Disasm Singularity. + g_nDisasmCurAddress = nOffset; + } + } + else + { + if (iLine & 1) + { + iBackground = BG_DISASM_1; + } + else + { + iBackground = BG_DISASM_2; + } + + // This address has a breakpoint, but the cursor is not on it (atm) + if (bBreakpointActive) + { + if (bBreakpointEnable) + { + iForeground = FG_DISASM_BP_S_X; // Red (old Yellow) + } + else + { + iForeground = FG_DISASM_BP_0_X; // Yellow + } + } + else + if (bAddressAtPC) + { + iBackground = BG_DISASM_PC_X; iForeground = FG_DISASM_PC_X; + } + else + { + iForeground = FG_DISASM_MNEMONIC; + } + } + SetBkColor( dc, DebugGetColor( iBackground ) ); + SetTextColor( dc, DebugGetColor( iForeground ) ); + + // Address + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_ADDRESS ) ); + DebugDrawTextHorz( (LPCTSTR) sAddress, linerect ); + + // Address Seperator + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR ) ); + if (g_bConfigDisasmAddressColon) + DebugDrawTextHorz( TEXT(":"), linerect ); + + // Opcodes + linerect.left = X_OPCODE; + + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPCODE ) ); +// DebugDrawTextHorz( TEXT(" "), linerect ); + DebugDrawTextHorz( (LPCTSTR) sOpcodes, linerect ); +// DebugDrawTextHorz( TEXT(" "), linerect ); + + // Label + linerect.left = X_LABEL; + + LPCSTR pSymbol = FindSymbolFromAddress( nOffset ); + if (pSymbol) + { + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_SYMBOL ) ); + DebugDrawTextHorz( pSymbol, linerect ); + } +// linerect.left += (g_nFontWidthAvg * DISASM_SYMBOL_LEN); +// DebugDrawTextHorz( TEXT(" "), linerect ); + + // Instruction + linerect.left = X_INSTRUCTION; + + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( iForeground ) ); + + LPCTSTR pMnemonic = g_aOpcodes[ iOpcode ].sMnemonic; + DebugDrawTextHorz( pMnemonic, linerect ); + + DebugDrawTextHorz( TEXT(" "), linerect ); + + // Target + if (iOpmode == ADDR_IMM) + { + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR )); + DebugDrawTextHorz( TEXT("#$"), linerect ); + } + + if (bTargetIndirect) + { + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR )); + DebugDrawTextHorz( TEXT("("), linerect ); + } + + char *pTarget = sTarget; + if (*pTarget == '$') + { + pTarget++; + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR )); + DebugDrawTextHorz( TEXT("$"), linerect ); + } + + if (! bCursorLine) + { + if (bDisasmFormatFlags & DISASM_TARGET_SYMBOL) + { + SetTextColor( dc, DebugGetColor( FG_DISASM_SYMBOL ) ); + } + else + { + if (bDisasmFormatFlags & DISASM_IMMEDIATE_CHAR) + { + SetTextColor( dc, DebugGetColor( FG_DISASM_OPCODE ) ); + } + else + { + SetTextColor( dc, DebugGetColor( FG_DISASM_TARGET ) ); + } + } + } + DebugDrawTextHorz( pTarget, linerect ); +// DebugDrawTextHorz( TEXT(" "), linerect ); + + // Target Offset +/- + if (bDisasmFormatFlags & DISASM_TARGET_OFFSET) + { + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR )); + + if (nTargetOffset > 0) + DebugDrawTextHorz( TEXT("+" ), linerect ); + if (nTargetOffset < 0) + DebugDrawTextHorz( TEXT("-" ), linerect ); + + if (! bCursorLine) + { + SetTextColor( dc, DebugGetColor( FG_DISASM_OPCODE )); // Technically, not a hex number, but decimal + } + DebugDrawTextHorz( sTargetOffset, linerect ); + } + // Indirect Target Regs + if (bTargetIndirect || bTargetX || bTargetY) + { + if (! bCursorLine) + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR )); + + if (bTargetX) + DebugDrawTextHorz( TEXT(",X"), linerect ); + + if (bTargetY) + DebugDrawTextHorz( TEXT(",Y"), linerect ); + + if (bTargetIndirect) + DebugDrawTextHorz( TEXT(")"), linerect ); + + if (iOpmode == ADDR_INDY) + DebugDrawTextHorz( TEXT(",Y"), linerect ); + } + + // Immediate Char + linerect.left = X_IMMEDIATE; + + if (bDisasmFormatFlags & DISASM_IMMEDIATE_CHAR) + { + if (! bCursorLine) + { + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR ) ); + } + DebugDrawTextHorz( TEXT("'"), linerect ); // TEXT(" '") + + if (! bCursorLine) + { + ColorizeSpecialChar( dc, NULL, nImmediate, MEM_VIEW_ASCII, iBackground ); +// iBackground, FG_INFO_CHAR_HI, FG_DISASM_CHAR, FG_INFO_CHAR_LO ); + } + DebugDrawTextHorz( sImmediate, linerect ); + + SetBkColor( dc, DebugGetColor( iBackground ) ); // Hack: Colorize can "color bleed to EOL" + if (! bCursorLine) + { + SetTextColor( dc, DebugGetColor( FG_DISASM_OPERATOR ) ); + } + DebugDrawTextHorz( TEXT("'"), linerect ); + } + + // Branch Indicator + linerect.left = X_BRANCH; + + if (bDisasmFormatFlags & DISASM_BRANCH_INDICATOR) + { + if (! bCursorLine) + { + SetTextColor( dc, DebugGetColor( FG_DISASM_BRANCH ) ); + } + + if (g_bConfigDisasmFancyBranch) + SelectObject( dc, g_aFontConfig[ FONT_DISASM_BRANCH ]._hFont ); // g_hFontWebDings + + DebugDrawText( sBranch, linerect ); + + if (g_bConfigDisasmFancyBranch) + SelectObject( dc, g_aFontConfig[ FONT_DISASM_DEFAULT ]._hFont ); // g_hFontDisasm + } + } + + return nOpbyte; +} + +// Optionally copy the flags to pText_ +//=========================================================================== +void DrawFlags (HDC dc, int line, WORD nRegFlags, LPTSTR pFlagNames_) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + TCHAR sFlagNames[ _6502_NUM_FLAGS+1 ] = TEXT(""); // = TEXT("NVRBDIZC"); // copy from g_aFlagNames + TCHAR sText[2] = TEXT("?"); + RECT rect; + + if (dc) + { + rect.left = DISPLAY_FLAG_COLUMN; + rect.top = line * g_nFontHeight; + rect.right = rect.left + 9; + rect.bottom = rect.top + g_nFontHeight; + SetBkColor(dc, DebugGetColor( BG_INFO )); // COLOR_BG_DATA + } + + int iFlag = 0; + int nFlag = _6502_NUM_FLAGS; + while (nFlag--) + { + iFlag = BP_SRC_FLAG_C + (_6502_NUM_FLAGS - nFlag - 1); + + bool bSet = (nRegFlags & 1); + if (dc) + { + +// sText[0] = g_aFlagNames[ MAX_FLAGS - iFlag - 1]; // mnemonic[iFlag]; // mnemonic is reversed + sText[0] = g_aBreakpointSource[ iFlag ][0]; + if (bSet) + { + SetBkColor( dc, DebugGetColor( BG_INFO_INVERSE )); + SetTextColor( dc, DebugGetColor( FG_INFO_INVERSE )); + } + else + { + SetBkColor(dc, DebugGetColor( BG_INFO )); + SetTextColor( dc, DebugGetColor( FG_INFO_TITLE )); + } + DebugDrawText( sText, rect ); + rect.left -= 9; // HACK: Font Width + rect.right -= 9; // HACK: Font Width + } + + if (pFlagNames_) + { + if (! bSet) //(nFlags & 1)) + { + sFlagNames[nFlag] = TEXT('.'); + } + else + { + sFlagNames[nFlag] = g_aBreakpointSource[ iFlag ][0]; + } + } + + nRegFlags >>= 1; + } + + if (pFlagNames_) + _tcscpy(pFlagNames_,sFlagNames); +} + +//=========================================================================== +void DrawMemory (HDC hDC, int line, int iMemDump ) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + MemoryDump_t* pMD = &g_aMemDump[ iMemDump ]; + + USHORT nAddr = pMD->nAddress; + DEVICE_e eDevice = pMD->eDevice; + MemoryView_e iView = pMD->eView; + + SS_CARD_MOCKINGBOARD SS_MB; + + if ((eDevice == DEV_SY6522) || (eDevice == DEV_AY8910)) + MB_GetSnapshot(&SS_MB, 4+(nAddr>>1)); // Slot4 or Slot5 + + int nFontWidth = g_aFontConfig[ FONT_INFO ]._nFontWidthAvg; + + RECT rect; + rect.left = DISPLAY_MINIMEM_COLUMN - nFontWidth; + rect.top = (line * g_nFontHeight); + rect.right = DISPLAY_WIDTH; + rect.bottom = rect.top + g_nFontHeight; + + + const int MAX_MEM_VIEW_TXT = 16; + TCHAR sText[ MAX_MEM_VIEW_TXT * 2 ]; + TCHAR sData[ MAX_MEM_VIEW_TXT * 2 ]; + + TCHAR sType [ 4 ] = TEXT("Mem"); + TCHAR sAddress[ 8 ] = TEXT(""); + + int iForeground = FG_INFO_OPCODE; + int iBackground = BG_INFO; + + if (eDevice == DEV_SY6522) + { +// wsprintf(sData,TEXT("Mem at SY#%d"), nAddr); + wsprintf( sAddress,TEXT("SY#%d"), nAddr ); + } + else if(eDevice == DEV_AY8910) + { +// wsprintf(sData,TEXT("Mem at AY#%d"), nAddr); + wsprintf( sAddress,TEXT("AY#%d"), nAddr ); + } + else + { + wsprintf( sAddress,TEXT("%04X"),(unsigned)nAddr); + + if (iView == MEM_VIEW_HEX) + wsprintf( sType, TEXT("HEX") ); + else + if (iView == MEM_VIEW_ASCII) + wsprintf( sType, TEXT("ASCII") ); + else + wsprintf( sType, TEXT("TEXT") ); + } + + RECT rect2; + + rect2 = rect; + SetTextColor( hDC, DebugGetColor( FG_INFO_TITLE )); + SetBkColor( hDC, DebugGetColor( BG_INFO )); + DebugDrawTextFixed( sType, rect2 ); + + SetTextColor( hDC, DebugGetColor( FG_INFO_OPERATOR )); + DebugDrawTextFixed( TEXT(" at " ), rect2 ); + + SetTextColor( hDC, DebugGetColor( FG_INFO_ADDRESS )); + DebugDrawTextLine( sAddress, rect2 ); + + rect.top = rect2.top; + rect.bottom = rect2.bottom; + + sData[0] = 0; + + WORD iAddress = nAddr; + + if( (eDevice == DEV_SY6522) || (eDevice == DEV_AY8910) ) + { + iAddress = 0; + } + + int nLines = 4; + int nCols = 4; + + if (iView != MEM_VIEW_HEX) + { + nCols = MAX_MEM_VIEW_TXT; + } + rect.right = MAX( rect.left + (nFontWidth * nCols), DISPLAY_WIDTH ); + + SetTextColor( hDC, DebugGetColor( FG_INFO_OPCODE )); + + for (int iLine = 0; iLine < nLines; iLine++ ) + { + RECT rect2; + rect2 = rect; + + if (iView == MEM_VIEW_HEX) + { + wsprintf( sText, TEXT("%04X"), iAddress ); + SetTextColor( hDC, DebugGetColor( FG_INFO_ADDRESS )); + DebugDrawTextFixed( sText, rect2 ); + + SetTextColor( hDC, DebugGetColor( FG_INFO_OPERATOR )); + DebugDrawTextFixed( TEXT(":"), rect2 ); + } + + for (int iCol = 0; iCol < nCols; iCol++) + { + bool bHiBit = false; + bool bLoBit = false; + + SetBkColor ( hDC, DebugGetColor( iBackground )); + SetTextColor( hDC, DebugGetColor( iForeground )); + +// .12 Bugfix: DrawMemory() should draw memory byte for IO address: ML1 C000 +// if ((iAddress >= _6502_IO_BEGIN) && (iAddress <= _6502_IO_END)) +// { +// wsprintf( sText, TEXT("IO ") ); +// } +// else + if (eDevice == DEV_SY6522) + { + wsprintf( sText, TEXT("%02X "), (unsigned) ((BYTE*)&SS_MB.Unit[nAddr & 1].RegsSY6522)[iAddress] ); + } + else + if (eDevice == DEV_AY8910) + { + wsprintf( sText, TEXT("%02X "), (unsigned)SS_MB.Unit[nAddr & 1].RegsAY8910[iAddress] ); + } + else + { + BYTE nData = (unsigned)*(LPBYTE)(membank+iAddress); + sText[0] = 0; + + char c = nData; + + if (iView == MEM_VIEW_HEX) + { + if ((iAddress >= _6502_IO_BEGIN) && (iAddress <= _6502_IO_END)) + { + SetTextColor( hDC, DebugGetColor( FG_INFO_IO_BYTE )); + } + wsprintf(sText, TEXT("%02X "), nData ); + } + else + { +// .12 Bugfix: DrawMemory() should draw memory byte for IO address: ML1 C000 + if ((iAddress >= _6502_IO_BEGIN) && (iAddress <= _6502_IO_END)) + iBackground = BG_INFO_IO_BYTE; + + ColorizeSpecialChar( hDC, sText, nData, iView, iBackground ); + } + } + int nChars = DebugDrawTextFixed( sText, rect2 ); // DebugDrawTextFixed() + + iAddress++; + } + rect.top += g_nFontHeight; // TODO/FIXME: g_nFontHeight; + rect.bottom += g_nFontHeight; // TODO/FIXME: g_nFontHeight; + sData[0] = 0; + } +} + +//=========================================================================== +void DrawRegister (HDC dc, int line, LPCTSTR name, const int nBytes, const WORD nValue, int iSource ) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + RECT rect; + rect.left = DISPLAY_REGS_COLUMN; + rect.top = line * g_nFontHeight; + rect.right = rect.left + 40; // TODO:FIXME: g_nFontWidthAvg * + rect.bottom = rect.top + g_nFontHeight; + + if ((PARAM_REG_A == iSource) || + (PARAM_REG_X == iSource) || + (PARAM_REG_Y == iSource) || + (PARAM_REG_PC == iSource) || + (PARAM_REG_SP == iSource)) + { + SetTextColor(dc, DebugGetColor( FG_INFO_REG )); + } + else + { + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); + } + SetBkColor(dc, DebugGetColor( BG_INFO )); + DebugDrawText( name, rect ); + + unsigned int nData = nValue; + int nOffset = 6; + + TCHAR sValue[8]; + + if (PARAM_REG_SP == iSource) + { + WORD nStackDepth = _6502_STACK_END - nValue; + wsprintf( sValue, "%02X", nStackDepth ); + int nFontWidth = g_aFontConfig[ FONT_INFO ]._nFontWidthAvg; + rect.left += (2 * nFontWidth) + (nFontWidth >> 1); // 2.5 looks a tad nicer then 2 + + // ## = Stack Depth (in bytes) + SetTextColor(dc, DebugGetColor( FG_INFO_OPERATOR )); // FG_INFO_OPCODE, FG_INFO_TITLE + DebugDrawText( sValue, rect ); + } + + if (nBytes == 2) + { + wsprintf(sValue,TEXT("%04X"), nData); + } + else + { + rect.left = DISPLAY_REGS_COLUMN + 21; // HACK: MAGIC #: 21 // +3 chars + rect.right = SCREENSPLIT2; + + SetTextColor(dc, DebugGetColor( FG_INFO_OPERATOR )); + DebugDrawTextFixed( TEXT("'"), rect ); // DebugDrawTextFixed + + ColorizeSpecialChar( dc, sValue, nData, MEM_VIEW_ASCII ); // MEM_VIEW_APPLE for inverse background little hard on the eyes + DebugDrawTextFixed( sValue, rect ); // DebugDrawTextFixed() + + SetBkColor(dc, DebugGetColor( BG_INFO )); + SetTextColor(dc, DebugGetColor( FG_INFO_OPERATOR )); + DebugDrawTextFixed( TEXT("'"), rect ); // DebugDrawTextFixed() + + wsprintf(sValue,TEXT(" %02X"), nData ); + } + + // Needs to be far enough over, since 4 chars of ZeroPage symbol also calls us + rect.left = DISPLAY_REGS_COLUMN + (nOffset * g_aFontConfig[ FONT_INFO ]._nFontWidthAvg); // HACK: MAGIC #: 40 + rect.right = SCREENSPLIT2; + + if ((PARAM_REG_PC == iSource) || (PARAM_REG_SP == iSource)) // Stack Pointer is target address, but doesn't look as good. + { + SetTextColor(dc, DebugGetColor( FG_INFO_ADDRESS )); + } + else + { + SetTextColor(dc, DebugGetColor( FG_INFO_OPCODE )); // FG_DISASM_OPCODE + } + DebugDrawText( sValue, rect ); +} + +//=========================================================================== +void DrawStack (HDC dc, int line) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + unsigned nAddress = regs.sp; +#if DEBUG_FORCE_DISPLAY + nAddress = 0x100; +#endif + + int iStack = 0; + while (iStack < MAX_DISPLAY_STACK_LINES) + { + nAddress++; + + RECT rect; + rect.left = DISPLAY_STACK_COLUMN; + rect.top = (iStack+line) * g_nFontHeight; + rect.right = DISPLAY_STACK_COLUMN + 40; // TODO/FIXME/HACK MAGIC #: g_nFontWidthAvg * + rect.bottom = rect.top + g_nFontHeight; + + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); // [COLOR_STATIC + SetBkColor(dc, DebugGetColor( BG_INFO )); // COLOR_BG_DATA + + TCHAR sText[8] = TEXT(""); + if (nAddress <= _6502_STACK_END) + { + wsprintf(sText,TEXT("%04X"),nAddress); + } + +// ExtTextOut(dc,rect.left,rect.top, +// ETO_CLIPPED | ETO_OPAQUE,&rect, +// sText,_tcslen(sText),NULL); + DebugDrawText( sText, rect ); + + rect.left = DISPLAY_STACK_COLUMN + 40; // TODO/FIXME/HACK MAGIC #: g_nFontWidthAvg * + rect.right = SCREENSPLIT2; + SetTextColor(dc, DebugGetColor( FG_INFO_OPCODE )); // COLOR_FG_DATA_TEXT + + if (nAddress <= _6502_STACK_END) + { + wsprintf(sText,TEXT("%02X"),(unsigned)*(LPBYTE)(mem+nAddress)); + } +// ExtTextOut(dc,rect.left,rect.top, +// ETO_CLIPPED | ETO_OPAQUE,&rect, +// sText,_tcslen(sText),NULL); + DebugDrawText( sText, rect ); + iStack++; + } +} + +//=========================================================================== +void DrawTargets (HDC dc, int line) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + int aTarget[2]; + Get6502Targets( &aTarget[0],&aTarget[1], NULL ); + + RECT rect; + + int iAddress = 2; + while (iAddress--) + { + // .6 Bugfix: DrawTargets() should draw target byte for IO address: R PC FB33 +// if ((aTarget[iAddress] >= _6502_IO_BEGIN) && (aTarget[iAddress] <= _6502_IO_END)) +// aTarget[iAddress] = NO_6502_TARGET; + + TCHAR sAddress[8] = TEXT(""); + TCHAR sData[8] = TEXT(""); + +#if DEBUG_FORCE_DISPLAY + if (aTarget[iAddress] == NO_6502_TARGET) + aTarget[iAddress] = 0; +#endif + if (aTarget[iAddress] != NO_6502_TARGET) + { + wsprintf(sAddress,TEXT("%04X"),aTarget[iAddress]); + if (iAddress) + wsprintf(sData,TEXT("%02X"),*(LPBYTE)(mem+aTarget[iAddress])); + else + wsprintf(sData,TEXT("%04X"),*(LPWORD)(mem+aTarget[iAddress])); + } + + rect.left = DISPLAY_TARGETS_COLUMN; + rect.top = (line+iAddress) * g_nFontHeight; + int nColumn = DISPLAY_TARGETS_COLUMN + 40; // TODO/FIXME/HACK MAGIC #: g_nFontWidthAvg * + rect.right = nColumn; + rect.bottom = rect.top + g_nFontHeight; + + if (iAddress == 0) + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); // Temp Address + else + SetTextColor(dc, DebugGetColor( FG_INFO_ADDRESS )); // Target Address + + SetBkColor(dc, DebugGetColor( BG_INFO )); + DebugDrawText( sAddress, rect ); + + rect.left = nColumn; // SCREENSPLIT1+40; // + 40 + rect.right = SCREENSPLIT2; + + if (iAddress == 0) + SetTextColor(dc, DebugGetColor( FG_INFO_ADDRESS )); // Temp Target + else + SetTextColor(dc, DebugGetColor( FG_INFO_OPCODE )); // Target Bytes + + DebugDrawText( sData, rect ); + } +} + +//=========================================================================== +void DrawWatches (HDC dc, int line) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + RECT rect; + rect.left = DISPLAY_WATCHES_COLUMN; + rect.top = (line * g_nFontHeight); + rect.right = DISPLAY_WIDTH; + rect.bottom = rect.top + g_nFontHeight; + + TCHAR sText[16] = TEXT("Watches"); + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); + SetBkColor(dc, DebugGetColor( BG_INFO )); + DebugDrawTextLine( sText, rect ); + + int iWatch; + for (iWatch = 0; iWatch < MAX_WATCHES; iWatch++ ) + { +#if DEBUG_FORCE_DISPLAY + if (true) +#else + if (g_aWatches[iWatch].bEnabled) +#endif + { + RECT rect2 = rect; + + wsprintf( sText,TEXT("%d"),iWatch+1 ); + SetTextColor( dc, DebugGetColor( FG_INFO_BULLET )); + DebugDrawTextFixed( sText, rect2 ); + + wsprintf( sText,TEXT(":") ); + SetTextColor( dc, DebugGetColor( FG_INFO_OPERATOR )); + DebugDrawTextFixed( sText, rect2 ); + + wsprintf( sText,TEXT(" %04X"), g_aWatches[iWatch].nAddress ); + SetTextColor( dc, DebugGetColor( FG_INFO_ADDRESS )); + DebugDrawTextFixed( sText, rect2 ); + + wsprintf(sText,TEXT(" %02X"),(unsigned)*(LPBYTE)(mem+g_aWatches[iWatch].nAddress)); + SetTextColor(dc, DebugGetColor( FG_INFO_OPCODE )); + DebugDrawTextFixed( sText, rect2 ); + } + + rect.top += g_nFontHeight; // HACK: + rect.bottom += g_nFontHeight; // HACK: + } +} + + +//=========================================================================== +void DrawZeroPagePointers(HDC dc, int line) +{ + if (! ((g_iWindowThis == WINDOW_CODE) || ((g_iWindowThis == WINDOW_DATA)))) + return; + + for(int iZP = 0; iZP < MAX_ZEROPAGE_POINTERS; iZP++) + { + RECT rect; + rect.left = DISPLAY_ZEROPAGE_COLUMN; + rect.top = (line+iZP) * g_nFontHeight; + rect.right = SCREENSPLIT2; // TODO/FIXME: + rect.bottom = rect.top + g_nFontHeight; + + TCHAR sText[8] = TEXT(" "); + + SetTextColor(dc, DebugGetColor( FG_INFO_TITLE )); // COLOR_STATIC + SetBkColor(dc, DebugGetColor( BG_INFO )); + DebugDrawText( sText, rect ); + + Breakpoint_t *pZP = &g_aZeroPagePointers[iZP]; + bool bEnabled = pZP->bEnabled; + +#if DEBUG_FORCE_DISPLAY + bEnabled = true; +#endif + + if (bEnabled) +// if (g_aZeroPagePointers[iZP].bSet) // TODO: Only list enanbled ones + { + const UINT nSymbolLen = 4; + char szZP[nSymbolLen+1]; + + BYTE nZPAddr1 = (g_aZeroPagePointers[iZP].nAddress ) & 0xFF; // +MJP missig: "& 0xFF", or "(BYTE) ..." + BYTE nZPAddr2 = (g_aZeroPagePointers[iZP].nAddress+1) & 0xFF; + + // Get nZPAddr1 last (for when neither symbol is not found - GetSymbol() return ptr to static buffer) + const char* pszSymbol2 = GetSymbol(nZPAddr2, 2); // 2:8-bit value (if symbol not found) + const char* pszSymbol1 = GetSymbol(nZPAddr1, 2); // 2:8-bit value (if symbol not found) + + if( (strlen(pszSymbol1)==1) && (strlen(pszSymbol2)==1) ) + { + sprintf(szZP, "%s%s", pszSymbol1, pszSymbol2); + } + else + { + memcpy(szZP, pszSymbol1, nSymbolLen); + szZP[nSymbolLen] = 0; + } + + WORD nZPPtr = (WORD)membank[nZPAddr1] | ((WORD)membank[nZPAddr2]<<8); + DrawRegister(dc, line+iZP, szZP, 2, nZPPtr); + } + } +} + + +//=========================================================================== +int _Arg_1( int nValue ) +{ + g_aArgs[1].nVal1 = nValue; + return 1; +} + +//=========================================================================== +int _Arg_1( LPTSTR pName ) +{ + int nLen = _tcslen( g_aArgs[1].sArg ); + if (nLen < MAX_ARG_LEN) + { + _tcscpy( g_aArgs[1].sArg, pName ); + } + else + { + _tcsncpy( g_aArgs[1].sArg, pName, MAX_ARG_LEN - 1 ); + } + return 1; +} + +/** + @description Copies Args[iSrc .. iEnd] to Args[0] + @param iSrc First argument to copy + @param iEnd Last argument to end + @return nArgs Number of new args + Usually called as: nArgs = _Arg_Shift( iArg, nArgs ); +//=========================================================================== */ +int _Arg_Shift( int iSrc, int iEnd, int iDst ) +{ + if (iDst < 0) + return ARG_SYNTAX_ERROR; + if (iDst > MAX_ARGS) + return ARG_SYNTAX_ERROR; + + int nArgs = (iEnd - iSrc); + int nLen = nArgs + 1; + + if ((iDst + nLen) > MAX_ARGS) + return ARG_SYNTAX_ERROR; + + while (nLen--) + { + g_aArgs[iDst] = g_aArgs[iSrc]; + iSrc++; + iDst++; + } + return nArgs; +} + + +//=========================================================================== +void ArgsClear () +{ + Arg_t *pArg = &g_aArgs[0]; + + for (int iArg = 0; iArg < MAX_ARGS; iArg++ ) + { + pArg->bSymbol = false; + pArg->eDevice = NUM_DEVICES; // none + pArg->eToken = NO_TOKEN ; // none + pArg->bType = TYPE_STRING; + pArg->nVal1 = 0; + pArg->nVal2 = 0; + pArg->sArg[0] = 0; + + pArg++; + } +} + + +// Processes the raw args, turning them into tokens and types. +//=========================================================================== +int ArgsGet ( TCHAR * pInput ) +{ + LPCTSTR pSrc = pInput; + LPCTSTR pEnd = NULL; + int nBuf; + + ArgToken_e iTokenSrc = NO_TOKEN; + ArgToken_e iTokenEnd = NO_TOKEN; + ArgType_e iType = TYPE_STRING; + int nLen; + + int iArg = 0; + int nArg = 0; + Arg_t *pArg = &g_aArgRaw[0]; // &g_aArgs[0]; + + // BP FAC8:FACA // Range=3 + // BP FAC8,2 // Length=2 + // ^ ^^ ^^ + // | || |pSrc + // | || pSrc + // | |pSrc + // | pEnd + // pSrc + while ((*pSrc) && (iArg < MAX_ARGS)) + { + // Technically, there shouldn't be any leading spaces, + // since pressing the spacebar is an alias for TRACE. + // However, there is spaces between arguments + pSrc = const_cast( SkipWhiteSpace( pSrc )); + + if (pSrc) + { + pEnd = FindTokenOrAlphaNumeric( pSrc, g_aTokens, NUM_TOKENS, &iTokenSrc ); + if ((iTokenSrc == NO_TOKEN) || (iTokenSrc == TOKEN_ALPHANUMERIC)) + { + pEnd = SkipUntilToken( pSrc+1, g_aTokens, NUM_TOKENS, &iTokenEnd ); + } + + if (iTokenSrc == NO_TOKEN) + { + iTokenSrc = TOKEN_ALPHANUMERIC; + } + + iType = g_aTokens[ iTokenSrc ].eType; + + if (iTokenSrc == TOKEN_SEMI) + { + // TODO - command seperator, must handle non-quoted though! + } + + if (iTokenSrc == TOKEN_QUOTED) + { + pSrc++; // Don't store start of quote + pEnd = SkipUntilChar( pSrc, CHAR_QUOTED ); + } + + if (pEnd) + { + nBuf = pEnd - pSrc; + } + + if (nBuf > 0) + { + nLen = MIN( nBuf, MAX_ARG_LEN-1 ); + _tcsncpy( pArg->sArg, pSrc, nLen ); + pArg->sArg[ nLen ] = 0; + pArg->nArgLen = nLen; + pArg->eToken = iTokenSrc; + pArg->bType = iType; + + if (iTokenSrc == TOKEN_QUOTED) + { + pEnd++; // Don't store end of quote + } + + pSrc = pEnd; + iArg++; + pArg++; + } + } + } + + if (iArg) + { + nArg = iArg - 1; // first arg is command + } + + g_nArgRaw = nArg; + + return nArg; +} + + +//=========================================================================== +bool ArgsGetRegisterValue( Arg_t *pArg, WORD * pAddressValue_ ) +{ + bool bStatus = false; + + if (pArg && pAddressValue_) + { + // Check if we refer to reg A X Y P S + for( int iReg = 0; iReg < (NUM_BREAKPOINT_SOURCES-1); iReg++ ) + { + // Skip Opcode/Instruction/Mnemonic + if (iReg == BP_SRC_OPCODE) + continue; + + // Skip individual flag names + if ((iReg >= BP_SRC_FLAG_C) && (iReg <= BP_SRC_FLAG_N)) + continue; + + // Handle one char names + if ((pArg->nArgLen == 1) && (pArg->sArg[0] == g_aBreakpointSource[ iReg ][0])) + { + switch( iReg ) + { + case BP_SRC_REG_A : *pAddressValue_ = regs.a & 0xFF; bStatus = true; break; + case BP_SRC_REG_P : *pAddressValue_ = regs.ps & 0xFF; bStatus = true; break; + case BP_SRC_REG_X : *pAddressValue_ = regs.x & 0xFF; bStatus = true; break; + case BP_SRC_REG_Y : *pAddressValue_ = regs.y & 0xFF; bStatus = true; break; + case BP_SRC_REG_S : *pAddressValue_ = regs.sp ; bStatus = true; break; + default: + break; + } + } + else + if (iReg == BP_SRC_REG_PC) + { + if ((pArg->nArgLen == 2) && (_tcscmp( pArg->sArg, g_aBreakpointSource[ iReg ] ) == 0)) + { + *pAddressValue_ = regs.pc ; bStatus = true; break; + } + } + } + } + return bStatus; +} + + +//=========================================================================== +bool ArgsGetValue( Arg_t *pArg, WORD * pAddressValue_ ) +{ + const int BASE = 16; // hex + TCHAR *pSrc = & (pArg->sArg[ 0 ]); + TCHAR *pEnd = NULL; + + if (pArg && pAddressValue_) + { + *pAddressValue_ = (WORD)(_tcstoul( pSrc, &pEnd, BASE) & _6502_END_MEM_ADDRESS); + return true; + } + return false; +} + + +//=========================================================================== +bool ArgsGetImmediateValue( Arg_t *pArg, WORD * pAddressValue_ ) +{ + if (pArg && pAddressValue_) + { + if (pArg->eToken == TOKEN_HASH) + { + pArg++; + return ArgsGetValue( pArg, pAddressValue_ ); + } + } + + return false; +} + + +//=========================================================================== +void ArgsRawParse( void ) +{ + const int BASE = 16; // hex + TCHAR *pSrc = NULL; + TCHAR *pEnd = NULL; + + int iArg = 1; + Arg_t *pArg = & g_aArgRaw[ iArg ]; + int nArg = g_nArgRaw; + + WORD nAddressArg; + WORD nAddressSymbol; + WORD nAddressValue; + int nParamLen = 0; + + while (iArg <= nArg) + { + pSrc = & (pArg->sArg[ 0 ]); + + nAddressArg = (WORD)(_tcstoul( pSrc, &pEnd, BASE) & _6502_END_MEM_ADDRESS); + nAddressValue = nAddressArg; + + bool bFound = false; + if (! (pArg->bType & TYPE_NO_SYM)) + { + bFound = FindAddressFromSymbol( pSrc, & nAddressSymbol ); + if (bFound) + { + nAddressValue = nAddressSymbol; + pArg->bSymbol = true; + } + } + + if (! (pArg->bType & TYPE_VALUE)) // already up to date? + pArg->nVal1 = nAddressValue; + + pArg->bType |= TYPE_ADDRESS; + + iArg++; + pArg++; + } +} + + +// Note: The number of args can be changed via: +// address1,length Length +// address1:address2 Range +// address1+delta Delta +// address1-delta Delta +//=========================================================================== +int ArgsParse( const int nArgs ) +{ + const int BASE = 16; // hex + TCHAR *pSrc = NULL; + TCHAR *pEnd2 = NULL; + + int nArg = nArgs; + int iArg = 1; + Arg_t *pArg = NULL; + Arg_t *pPrev = NULL; + Arg_t *pNext = NULL; + + WORD nAddressArg; + WORD nAddressRHS; + WORD nAddressSym; + WORD nAddressVal; + int nParamLen = 0; + int nArgsLeft = 0; + + while (iArg <= nArg) + { + pArg = & (g_aArgs[ iArg ]); + pSrc = & (pArg->sArg[ 0 ]); + + if (pArg->eToken == TOKEN_DOLLAR) // address + { +// TODO: Need to flag was a DOLLAR token for assembler + pNext = NULL; + + nArgsLeft = (nArg - iArg); + if (nArgsLeft > 0) + { + pNext = pArg + 1; + + _Arg_Shift( iArg + 1, nArgs, iArg ); + nArg--; + iArg--; // inc for start of next loop + + // Don't do register lookup + pArg->bType |= TYPE_NO_REG; + } + else + return ARG_SYNTAX_ERROR; + } + + if (pArg->bType & TYPE_OPERATOR) // prev op type == address? + { + pPrev = NULL; // pLHS + pNext = NULL; // pRHS + nParamLen = 0; + + if (pArg->eToken == TOKEN_HASH) // HASH # immediate + nParamLen = 1; + + nArgsLeft = (nArg - iArg); + if (nArgsLeft < nParamLen) + { + return ARG_SYNTAX_ERROR; + } + + pPrev = pArg - 1; + + if (nArgsLeft > 0) // These ops take at least 1 argument + { + pNext = pArg + 1; + pSrc = &pNext->sArg[0]; + + nAddressVal = 0; + if (ArgsGetValue( pNext, & nAddressRHS )) + nAddressVal = nAddressRHS; + + bool bFound = FindAddressFromSymbol( pSrc, & nAddressSym ); + if (bFound) + { + nAddressVal = nAddressSym; + pArg->bSymbol = true; + } + + if (pArg->eToken == TOKEN_COMMA) // COMMMA , length + { + pPrev->nVal2 = nAddressVal; + pPrev->eToken = TOKEN_COMMA; + pPrev->bType |= TYPE_ADDRESS; + pPrev->bType |= TYPE_LENGTH; + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_COLON) // COLON : range + { + pPrev->nVal2 = nAddressVal; + pPrev->eToken = TOKEN_COLON; + pPrev->bType |= TYPE_ADDRESS; + pPrev->bType |= TYPE_RANGE; + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_AMPERSAND) // AND & delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 &= nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_PIPE) // OR | delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 |= nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_CARET) // XOR ^ delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 ^= nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_PLUS) // PLUS + delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 += nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_MINUS) // MINUS - delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 -= nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_PERCENT) // PERCENT % delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 %= nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_FSLASH) // FORWARD SLASH / delta + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + ArgsGetRegisterValue( pNext, & nAddressRHS ); + } + pPrev->nVal1 /= nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 2; + } + + if (pArg->eToken == TOKEN_EQUAL) // EQUAL = assign + { + pPrev->nVal1 = nAddressRHS; + pPrev->bType |= TYPE_VALUE; // signal already up to date + nParamLen = 0; // need token for Smart BreakPoints + } + + if (pArg->eToken == TOKEN_HASH) // HASH # immediate + { + _Arg_Shift( iArg + nParamLen, nArgs, iArg ); + nArg--; + + pArg->nVal1 = nAddressRHS; + pArg->bSymbol = false; + pArg->bType = TYPE_VALUE | TYPE_ADDRESS | TYPE_NO_REG | TYPE_NO_SYM; + nParamLen = 0; + } + + if (pArg->eToken == TOKEN_LESS_THAN) // < + { + nParamLen = 0; + } + + if (pArg->eToken == TOKEN_GREATER_THAN) // > + { + nParamLen = 0; + } + + if (pArg->eToken == TOKEN_EXCLAMATION) // NOT_EQUAL ! + { + if (! ArgsGetImmediateValue( pNext, & nAddressRHS )) + { + if (! ArgsGetRegisterValue( pNext, & nAddressRHS )) + { + nAddressRHS = nAddressVal; + } + } + pArg->nVal1 = ~nAddressRHS; + pArg->bType |= TYPE_VALUE; // signal already up to date + // Don't remove, since "SYM ! symbol" needs token to remove symbol + } + + if (nParamLen) + { + _Arg_Shift( iArg + nParamLen, nArgs, iArg ); + nArg -= nParamLen; + iArg = 0; // reset args, to handle multiple operators + } + } + else + return ARG_SYNTAX_ERROR; + } + else // not an operator, try (1) address, (2) symbol lookup + { + nAddressArg = (WORD)(_tcstoul( pSrc, &pEnd2, BASE) & _6502_END_MEM_ADDRESS); + + if (! (pArg->bType & TYPE_NO_REG)) + { + ArgsGetRegisterValue( pArg, & nAddressArg ); + } + + nAddressVal = nAddressArg; + + bool bFound = false; + if (! (pArg->bType & TYPE_NO_SYM)) + { + bFound = FindAddressFromSymbol( pSrc, & nAddressSym ); + if (bFound) + { + nAddressVal = nAddressSym; + pArg->bSymbol = true; + } + } + + if (! (pArg->bType & TYPE_VALUE)) // already up to date? + pArg->nVal1 = nAddressVal; + + pArg->bType |= TYPE_ADDRESS; + } + + iArg++; + } + + return nArg; +} + + +// Note: Range is [iParamBegin,iParamEnd], not the usually (STL) expected [iParamBegin,iParamEnd) +//=========================================================================== +int FindParam( LPTSTR pLookupName, Match_e eMatch, int & iParam_, int iParamBegin, int iParamEnd ) +{ + int nFound = 0; + int nLen = _tcslen( pLookupName ); + int iParam = 0; + + if (! nLen) + return nFound; + + if (eMatch == MATCH_EXACT) + { +// while (iParam < NUM_PARAMS ) + for (iParam = iParamBegin; iParam <= iParamEnd; iParam++ ) + { + TCHAR *pParamName = g_aParameters[iParam].m_sName; + int eCompare = _tcscmp(pLookupName, pParamName); + if (! eCompare) // exact match? + { + nFound++; + iParam_ = g_aParameters[iParam].iCommand; + break; + } + } + } + else + if (eMatch == MATCH_FUZZY) + { +// while (iParam < NUM_PARAMS) + for (iParam = iParamBegin; iParam <= iParamEnd; iParam++ ) + { + TCHAR *pParamName = g_aParameters[ iParam ].m_sName; + if (! _tcsncmp(pLookupName, pParamName ,nLen)) + { + nFound++; + + if (!_tcscmp(pLookupName, pParamName)) // exact match? + { + nFound = 1; // Exact match takes precidence over fuzzy matches + iParam_ = iParam_ = g_aParameters[iParam].iCommand; + break; + } + } + } + } + return nFound; +} + +//=========================================================================== +int FindCommand( LPTSTR pName, CmdFuncPtr_t & pFunction_, int * iCommand_ ) +{ + g_vPotentialCommands.erase( g_vPotentialCommands.begin(), g_vPotentialCommands.end() ); + + int nFound = 0; + int nLen = _tcslen( pName ); + int iCommand = 0; + + if (! nLen) + return nFound; + + while ((iCommand < NUM_COMMANDS_WITH_ALIASES)) // && (name[0] >= g_aCommands[iCommand].aName[0])) Command no longer in Alphabetical order + { + TCHAR *pCommandName = g_aCommands[iCommand].m_sName; + if (! _tcsncmp(pName, pCommandName, nLen)) + { + pFunction_ = g_aCommands[iCommand].pFunction; + if (pFunction_) + { + nFound++; + g_iCommand = g_aCommands[iCommand].iCommand; + g_vPotentialCommands.push_back( g_iCommand ); + + if (iCommand_) + *iCommand_ = iCommand; + + if (!_tcscmp(pName, pCommandName)) // exact match? + { +// if (iCommand_) +// *iCommand_ = iCommand; + + nFound = 1; // Exact match takes precidence over fuzzy matches + g_vPotentialCommands.erase( g_vPotentialCommands.begin(), g_vPotentialCommands.end() ); + break; + } + } + } + iCommand++; + } + +// if (nFound == 1) +// { +// +// } + + return nFound; +} + +//=========================================================================== +void DisplayAmbigiousCommands( int nFound ) +{ + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, TEXT("Ambiguous %d Commands:"), g_vPotentialCommands.size() ); + ConsoleBufferPush( sText ); + + int iCommand = 0; + while (iCommand < nFound) + { + TCHAR sPotentialCommands[ CONSOLE_WIDTH ] = TEXT(" "); + int iWidth = _tcslen( sPotentialCommands ); + while ((iCommand < nFound) && (iWidth < g_nConsoleDisplayWidth)) + { + int nCommand = g_vPotentialCommands[ iCommand ]; + TCHAR *pName = g_aCommands[ nCommand ].m_sName; + int nLen = _tcslen( pName ); + + wsprintf( sText, TEXT("%s "), pName ); + _tcscat( sPotentialCommands, sText ); + iWidth += nLen + 1; + iCommand++; + } + ConsoleBufferPush( sPotentialCommands ); + } +} + +//=========================================================================== +Update_t ExecuteCommand (int nArgs) +{ + LPTSTR name = _tcstok( g_pConsoleInput,TEXT(" ,-=")); + if (!name) + name = g_pConsoleInput; + + CmdFuncPtr_t pCommand = NULL; + int nFound = FindCommand( name, pCommand ); + + if (nFound > 1) + { +// ASSERT (nFound == g_vPotentialCommands.size() ); + DisplayAmbigiousCommands( nFound ); + + return ConsoleUpdate(); +// return ConsoleDisplayError( gaPotentialCommands ); + } + else + if (pCommand) + return pCommand(nArgs); + else + return ConsoleDisplayError(TEXT("Illegal Command")); +} + + + +// ________________________________________________________________________________________________ + +//=========================================================================== +bool Get6502Targets (int *pTemp_, int *pFinal_, int * pBytes_) +{ + bool bStatus = false; + + if (! pTemp_) + return bStatus; + + if (! pFinal_) + return bStatus; + +// if (! pBytes_) +// return bStatus; + + *pTemp_ = NO_6502_TARGET; + *pFinal_ = NO_6502_TARGET; + + if (pBytes_) + *pBytes_ = 0; + + bStatus = true; + + WORD nAddress = regs.pc; + BYTE nOpcode = *(LPBYTE)(mem + nAddress ); + BYTE nTarget8 = *(LPBYTE)(mem + nAddress + 1); + WORD nTarget16 = *(LPWORD)(mem + nAddress + 1); + + int eMode = g_aOpcodes[ nOpcode ].nAddressMode; + + switch (eMode) + { + case ADDR_ABS: + *pFinal_ = nTarget16; + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_ABSIINDX: + nTarget16 += regs.x; + *pTemp_ = nTarget16; + *pFinal_ = *(LPWORD)(mem + nTarget16); + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_ABSX: + nTarget16 += regs.x; + *pFinal_ = nTarget16; + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_ABSY: + nTarget16 += regs.y; + *pFinal_ = nTarget16; + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_IABS: + *pTemp_ = nTarget16; + *pFinal_ = *(LPWORD)(mem + nTarget16); + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_INDX: + nTarget8 += regs.x; + *pTemp_ = nTarget8; + *pFinal_ = *(LPWORD)(mem + nTarget8); + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_INDY: + *pTemp_ = nTarget8; + *pFinal_ = (*(LPWORD)(mem + nTarget8)) + regs.y; + if (pBytes_) + *pBytes_ = 1; + break; + + case ADDR_IZPG: + *pTemp_ = nTarget8; + *pFinal_ = *(LPWORD)(mem + nTarget8); + if (pBytes_) + *pBytes_ = 2; + break; + + case ADDR_ZP: + *pFinal_ = nTarget8; + if (pBytes_) + *pBytes_ = 1; + break; + + case ADDR_ZP_X: + *pFinal_ = nTarget8 + regs.x; // shouldn't this wrap around? + if (pBytes_) + *pBytes_ = 1; + break; + + case ADDR_ZP_Y: + *pFinal_ = nTarget8 + regs.y; // shouldn't this wrap around? + if (pBytes_) + *pBytes_ = 1; + break; + + default: + if (pBytes_) + *pBytes_ = 0; + break; + + } + + // wtf?? +// if ((*final >= 0) && +// ((!_tcscmp(g_aOpcodes[*(mem+regs.pc)].mnemonic,TEXT("JMP"))) || +// (!_tcscmp(g_aOpcodes[*(mem+regs.pc)].mnemonic,TEXT("JSR"))))) + + // If 6502 is jumping, don't show byte [nAddressTarget] + if ((*pFinal_ >= 0) && + ((nOpcode == OPCODE_JSR ) || // 0x20 + (nOpcode == OPCODE_JMP_ABS ) || // 0x4C + (nOpcode == OPCODE_JMP_IABS ) || // 0x6C + (nOpcode == OPCODE_JMP_ABSINDX))) // 0x7C + { + *pFinal_ = NO_6502_TARGET; + if (pBytes_) + *pBytes_ = 0; + } + return bStatus; +} + +//=========================================================================== +bool InternalSingleStep () +{ + bool bResult = false; + _try + { + BYTE nOpcode = *(mem+regs.pc); + int nOpmode = g_aOpcodes[ nOpcode ].nAddressMode; + + g_aProfileOpcodes[ nOpcode ].m_nCount++; + g_aProfileOpmodes[ nOpmode ].m_nCount++; + + CpuExecute(g_nDebugStepCycles); + bResult = true; + } + _except (EXCEPTION_EXECUTE_HANDLER) + { + bResult = false; + } + + return bResult; +} + + +//=========================================================================== +void OutputTraceLine () +{ + // HACK: MAGIC #: 50 -> 64 chars for disassembly + TCHAR sDisassembly[ 64 ] ; DrawDisassemblyLine((HDC)0,0,regs.pc, sDisassembly); // Get Disasm String + TCHAR sFlags[ _6502_NUM_FLAGS+1]; DrawFlags( (HDC)0, 0, regs.ps, sFlags); // Get Flags String + + _ftprintf(g_hTraceFile, + TEXT("a=%02x x=%02x y=%02x sp=%03x ps=%s %s\n"), + (unsigned)regs.a, + (unsigned)regs.x, + (unsigned)regs.y, + (unsigned)regs.sp, + (LPCTSTR) sFlags, + (LPCTSTR) sDisassembly); +} + +//=========================================================================== +int ParseConsoleInput ( LPTSTR pConsoleInput ) +{ + int nArg = 0; + + // TODO: need to check for non-quoted command seperator ';', and buffer input + RemoveWhiteSpaceReverse( pConsoleInput ); + + ArgsClear(); + nArg = ArgsGet( pConsoleInput ); // Get the Raw Args + + int iArg; + for( iArg = 0; iArg <= nArg; iArg++ ) + { + g_aArgs[ iArg ] = g_aArgRaw[ iArg ]; + } + + nArg = ArgsParse( nArg ); // Cook them + + return nArg; +} + +//=========================================================================== +void ParseParameter( ) +{ +} + +// Return address of next line to write to. +//=========================================================================== +char * ProfileLinePeek ( int iLine ) +{ + char *pText = NULL; + + if (iLine < 0) + iLine = 0; + + if (! g_nProfileLine) + pText = & g_aProfileLine[ iLine ][ 0 ]; + + if (iLine <= g_nProfileLine) + pText = & g_aProfileLine[ iLine ][ 0 ]; + + return pText; +} + +//=========================================================================== +char * ProfileLinePush () +{ + if (g_nProfileLine < NUM_PROFILE_LINES) + { + g_nProfileLine++; + } + + return ProfileLinePeek( g_nProfileLine ); +} + +void ProfileLineReset() +{ + g_nProfileLine = 0; +} + + +#define DELIM "%s" +//=========================================================================== +void ProfileFormat( bool bExport, ProfileFormat_e eFormatMode ) +{ + char sSeperator7[ 32 ] = "\t"; + char sSeperator2[ 32 ] = "\t"; + char sSeperator1[ 32 ] = "\t"; + char sOpcode [ 8 ]; // 2 chars for opcode in hex, plus quotes on either side + char sAddress[MAX_OPMODE_NAME]; + + if (eFormatMode == PROFILE_FORMAT_COMMA) + { + sSeperator7[0] = ','; + sSeperator2[0] = ','; + sSeperator1[0] = ','; + } + else + if (eFormatMode == PROFILE_FORMAT_SPACE) + { + sprintf( sSeperator7, " " ); // 7 + sprintf( sSeperator2, " " ); // 2 + sprintf( sSeperator1, " " ); // 1 + } + + ProfileLineReset(); + char *pText = ProfileLinePeek( 0 ); + + int iOpcode; + int iOpmode; + + bool bOpcodeGood = true; + bool bOpmodeGood = true; + + vector< ProfileOpcode_t > vProfileOpcode( &g_aProfileOpcodes[0], &g_aProfileOpcodes[ NUM_OPCODES ] ); + vector< ProfileOpmode_t > vProfileOpmode( &g_aProfileOpmodes[0], &g_aProfileOpmodes[ NUM_OPMODES ] ); + + // sort > + sort( vProfileOpcode.begin(), vProfileOpcode.end(), ProfileOpcode_t() ); + sort( vProfileOpmode.begin(), vProfileOpmode.end(), ProfileOpmode_t() ); + + Profile_t nOpcodeTotal = 0; + Profile_t nOpmodeTotal = 0; + + for (iOpcode = 0; iOpcode < NUM_OPCODES; ++iOpcode ) + { + nOpcodeTotal += vProfileOpcode[ iOpcode ].m_nCount; + } + + for (iOpmode = 0; iOpmode < NUM_OPMODES; ++iOpmode ) + { + nOpmodeTotal += vProfileOpmode[ iOpmode ].m_nCount; + } + + if (nOpcodeTotal < 1.) + { + nOpcodeTotal = 1; + bOpcodeGood = false; + } + + +// Opcode + if (bExport) // Export = SeperateColumns + sprintf( pText + , "\"Percent\"" DELIM "\"Count\"" DELIM "\"Opcode\"" DELIM "\"Mnemonic\"" DELIM "\"Addressing Mode\"\n" + , sSeperator7, sSeperator2, sSeperator1, sSeperator1 ); + else + sprintf( pText + , "Percent" DELIM "Count" DELIM "Mnemonic" DELIM "Addressing Mode\n" + , sSeperator7, sSeperator2, sSeperator1 ); + + pText = ProfileLinePush(); + + for (iOpcode = 0; iOpcode < NUM_OPCODES; ++iOpcode ) + { + ProfileOpcode_t tProfileOpcode = vProfileOpcode.at( iOpcode ); + + Profile_t nCount = tProfileOpcode.m_nCount; + + // Don't spam with empty data if dumping to the console + if ((! nCount) && (! bExport)) + continue; + + int nOpcode = tProfileOpcode.m_iOpcode; + int nOpmode = g_aOpcodes[ nOpcode ].nAddressMode; + double nPercent = (100. * nCount) / nOpcodeTotal; + + char sOpmode[ MAX_OPMODE_FORMAT ]; + sprintf( sOpmode, g_aOpmodes[ nOpmode ].m_sFormat, 0 ); + + if (bExport) + { + // Excel Bug: Quoted numbers are NOT treated as strings in .csv! WTF? + // @reference: http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q214233 + // + // Workaround: Prefix with (') apostrophe -- this doesn't break HEX2DEC() + // This works properly in Openoffice. + // In Excel, this ONLY works IF you TYPE it in! + // + // Solution: Quote the numbers, but you must select the "TEXT" Column data format for the "Opcode" column. + // We don't use .csv, since you aren't given the Import Dialog in Excel! + sprintf( sOpcode, "\"%02X\"", nOpcode ); // Works with Excel, IF using Import dialog & choose Text. (also works with OpenOffice) +// sprintf( sOpcode, "'%02X", nOpcode ); // SHOULD work with Excel, but only works with OpenOffice. + sprintf( sAddress, "\"%s\"", g_aOpmodes[ nOpmode ].m_sName ); + } + else // not qouted if dumping to console + { + sprintf( sOpcode, "%02X", nOpcode ); + strcpy( sAddress, g_aOpmodes[ nOpmode ].m_sName ); + } + + // BUG: Yeah 100% is off by 1 char. Profiling only one opcode isn't worth fixing this visual alignment bug. + sprintf( pText, + "%7.4f%%" DELIM "%9u" DELIM "%s" DELIM "%s" DELIM "%s\n" + , nPercent, sSeperator2 + , static_cast(nCount), sSeperator2 + , sOpcode, sSeperator2 + , g_aOpcodes[ nOpcode ].sMnemonic, sSeperator2 + , sAddress + ); + pText = ProfileLinePush(); + } + + if (! bOpcodeGood) + nOpcodeTotal = 0; + + sprintf( pText + , "Total: " DELIM "%9u\n" + , sSeperator2 + , static_cast(nOpcodeTotal) ); + pText = ProfileLinePush(); + + sprintf( pText, "\n" ); + pText = ProfileLinePush(); + +// Opmode + // "Percent Count Adressing Mode\n" ); + if (bExport) + // Note: 2 extra dummy columns are inserted to keep Addressing Mode in same column + sprintf( pText + , "\"Percent\"" DELIM "\"Count\"" DELIM DELIM DELIM "\"Addressing Mode\"\n" + , sSeperator7, sSeperator2, sSeperator2, sSeperator2 ); + else + sprintf( pText + , "Percent" DELIM "Count" DELIM "Addressing Mode\n" + , sSeperator7, sSeperator2 ); + pText = ProfileLinePush(); + + if (nOpmodeTotal < 1) + { + nOpmodeTotal = 1.; + bOpmodeGood = false; + } + + for (iOpmode = 0; iOpmode < NUM_OPMODES; ++iOpmode ) + { + ProfileOpmode_t tProfileOpmode = vProfileOpmode.at( iOpmode ); + Profile_t nCount = tProfileOpmode.m_nCount; + + // Don't spam with empty data if dumping to the console + if ((! nCount) && (! bExport)) + continue; + + int nOpmode = tProfileOpmode.m_iOpmode; + double nPercent = (100. * nCount) / nOpmodeTotal; + + if (bExport) + { + // Note: 2 extra dummy columns are inserted to keep Addressing Mode in same column + sprintf( sAddress, "%s%s\"%s\"", sSeperator1, sSeperator1, g_aOpmodes[ nOpmode ].m_sName ); + } + else // not qouted if dumping to console + { + strcpy( sAddress, g_aOpmodes[ nOpmode ].m_sName ); + } + + // BUG: Yeah 100% is off by 1 char. Profiling only one opcode isn't worth fixing this visual alignment bug. + sprintf( pText + , "%7.4f%%" DELIM "%9u" DELIM "%s\n" + , nPercent, sSeperator2 + , static_cast(nCount), sSeperator2 + , sAddress + ); + pText = ProfileLinePush(); + } + + if (! bOpmodeGood) + nOpmodeTotal = 0; + + sprintf( pText + , "Total: " DELIM "%9u\n" + , sSeperator2 + , static_cast(nOpmodeTotal) ); + pText = ProfileLinePush(); + + sprintf( pText, "\n" ); + pText = ProfileLinePush(); +} +#undef DELIM + + +//=========================================================================== +void ProfileReset() +{ + int iOpcode; + int iOpmode; + + for (iOpcode = 0; iOpcode < NUM_OPCODES; iOpcode++ ) + { + g_aProfileOpcodes[ iOpcode ].m_iOpcode = iOpcode; + g_aProfileOpcodes[ iOpcode ].m_nCount = 0; + } + + for (iOpmode = 0; iOpmode < NUM_OPMODES; iOpmode++ ) + { + g_aProfileOpmodes[ iOpmode ].m_iOpmode = iOpmode; + g_aProfileOpmodes[ iOpmode ].m_nCount = 0; + } +} + + +//=========================================================================== +bool ProfileSave() +{ + bool bStatus = false; + + TCHAR filename[MAX_PATH]; + _tcscpy(filename,progdir); + _tcscat(filename,g_FileNameProfile ); // TEXT("Profile.txt")); // =PATCH MJP + + FILE *hFile = fopen(filename,TEXT("wt")); + + if (hFile) + { + char *pText; + int nLine = g_nProfileLine; + int iLine; + + for( iLine = 0; iLine < nLine; iLine++ ) + { + pText = ProfileLinePeek( iLine ); + if ( pText ) + { + fputs( pText, hFile ); + } + } + + fclose( hFile ); + bStatus = true; + } + return bStatus; +} + + +//=========================================================================== +int DebugDrawText ( LPCTSTR pText, RECT & rRect ) +{ + int nLen = _tcslen( pText ); + ExtTextOut( g_hDC, + rRect.left, rRect.top, + ETO_CLIPPED | ETO_OPAQUE, &rRect, + pText, nLen, + NULL ); + return nLen; +} + + +// Also moves cursor 'non proportional' font width, using FONT_INFO +//=========================================================================== +int DebugDrawTextFixed ( LPCTSTR pText, RECT & rRect ) +{ + int nFontWidth = g_aFontConfig[ FONT_INFO ]._nFontWidthAvg; + + int nChars = DebugDrawText( pText, rRect ); + rRect.left += (nFontWidth * nChars); + return nChars; +} + + +//=========================================================================== +int DebugDrawTextLine ( LPCTSTR pText, RECT & rRect ) +{ + int nChars = DebugDrawText( pText, rRect ); + rRect.top += g_nFontHeight; + rRect.bottom += g_nFontHeight; + return nChars; +} + + +// Moves cursor 'proportional' font width +//=========================================================================== +int DebugDrawTextHorz ( LPCTSTR pText, RECT & rRect ) +{ + int nFontWidth = g_aFontConfig[ FONT_DISASM_DEFAULT ]._nFontWidthAvg; + + SIZE size; + int nChars = DebugDrawText( pText, rRect ); + if (GetTextExtentPoint32( g_hDC, pText, nChars, &size )) + { + rRect.left += size.cx; + } + else + { + rRect.left += (nFontWidth * nChars); + } + return nChars; +} + + +// _____________________________________________________________________________________ +// | | +// | Public Functions | +// | | +// |_____________________________________________________________________________________| + +//=========================================================================== +void DebugBegin () +{ + // ConsoleInputReset(); already called in DebugInitialize() + TCHAR sText[ CONSOLE_WIDTH ]; + + if (_tcscmp( g_aCommands[ NUM_COMMANDS ].m_sName, TEXT(__COMMANDS_VERIFY_TXT__))) + { + wsprintf( sText, "*** ERROR *** Commands mis-matched!" ); + MessageBox( framewindow, sText, TEXT("ERROR"), MB_OK ); + } + + if (_tcscmp( g_aParameters[ NUM_PARAMS ].m_sName, TEXT(__PARAMS_VERIFY_TXT__))) + { + wsprintf( sText, "*** ERROR *** Parameters mis-matched!" ); + MessageBox( framewindow, sText, TEXT("ERROR"), MB_OK ); + } + + // Check all summary help to see if it fits within the console + for (int iCmd = 0; iCmd < NUM_COMMANDS; iCmd++ ) + { + char *pHelp = g_aCommands[ iCmd ].pHelpSummary; + if (pHelp) + { + int nLen = _tcslen( pHelp ) + 2; + if (nLen > CONSOLE_WIDTH) + { + wsprintf( sText, TEXT("Warning: %s help is %d chars"), + pHelp, nLen ); + ConsoleBufferPush( sText ); + } + } + } + + +#if _DEBUG +//g_bConsoleBufferPaused = true; +#endif + + CmdMOTD(0); + + if (cpuemtype == CPU_FASTPAGING) + { + MemSetFastPaging(0); + } + + if (!membank) + { + membank = mem; + } + + mode = MODE_DEBUG; + FrameRefreshStatus(DRAW_TITLE); + +// TODO:FIXME //e uses 65C02, ][ uses 6502 + if (apple2e) + g_aOpcodes = & g_aOpcodes65C02[ 0 ]; // Enhanced Apple //e + else + g_aOpcodes = & g_aOpcodes6502[ 0 ]; // Original Apple ][ + + g_aOpmodes[ ADDR_INVALID2 ].m_nBytes = apple2e ? 2 : 1; + g_aOpmodes[ ADDR_INVALID3 ].m_nBytes = apple2e ? 3 : 1; + + g_nDisasmCurAddress = regs.pc; + DisasmCalcTopBotAddress(); + + UpdateDisplay( UPDATE_ALL ); // 1 +} + +//=========================================================================== +void DebugContinueStepping () +{ + static unsigned nStepsTaken = 0; + + if (g_nDebugSkipLen > 0) + { + if ((regs.pc >= g_nDebugSkipStart) && (regs.pc < (g_nDebugSkipStart + g_nDebugSkipLen))) + { + // Enter go mode + g_nDebugSteps = -1; +// g_nDebugStepUntil = -1; // Could already be set via G + mode = MODE_STEPPING; + } + else + { + // Enter step mode + g_nDebugSteps = 1; +// g_nDebugStepUntil = -1; // Could already be set via G + mode = MODE_STEPPING; + } + } + + if (g_nDebugSteps) + { + if (g_hTraceFile) + OutputTraceLine(); + lastpc = regs.pc; + + bool bBreak = CheckBreakpointsIO(); + + InternalSingleStep(); + + if (CheckBreakpointsReg()) + bBreak = true; + + if ((regs.pc == g_nDebugStepUntil) || bBreak) + g_nDebugSteps = 0; + else if (g_nDebugSteps > 0) + g_nDebugSteps--; + } + + if (g_nDebugSteps) + { + if (!((++nStepsTaken) & 0xFFFF)) + { + if (nStepsTaken == 0x10000) + VideoRedrawScreen(); + else + VideoRefreshScreen(); + } + } + else + { + mode = MODE_DEBUG; + FrameRefreshStatus(DRAW_TITLE); +// BUG: PageUp, Trace - doesn't center cursor + +// if ((g_nDebugStepStart < regs.pc) && (g_nDebugStepStart+3 >= regs.pc)) + // Still within current disasm "window"? +/* + if ((regs.pc >= g_nDisasmTopAddress) && (regs.pc <= g_nDisasmBotAddress)) + { + int eMode = g_aOpcodes[*(mem+g_nDisasmCurAddress)].addrmode; + int nBytes = g_aOpmodes[ eMode ]._nBytes; + g_nDisasmCurAddress += nBytes; +// g_nDisasmTopAddress += nBytes; +// g_nDisasmBotAddress += nBytes; + } + else +*/ + { + g_nDisasmCurAddress = regs.pc; + } + + DisasmCalcTopBotAddress(); + +// g_nDisasmCurAddress += g_aOpmodes[g_aOpcodes[*(mem+g_nDisasmCurAddress)].addrmode]._nBytes; +// DisasmCalcTopBotAddress(); + + Update_t bUpdate = UPDATE_ALL; +// if (nStepsTaken >= 0x10000) // HACK_MAGIC_NUM +// bUpdate = UPDATE_ALL; + + UpdateDisplay( bUpdate ); // nStepsTaken >= 0x10000); + nStepsTaken = 0; + } +} + +//=========================================================================== +void DebugDestroy () +{ + DebugEnd(); + + for (int iFont = 0; iFont < NUM_FONTS; iFont++ ) + { + DeleteObject( g_aFontConfig[ iFont ]._hFont ); + g_aFontConfig[ iFont ]._hFont = NULL; + } +// DeleteObject(g_hFontDisasm ); +// DeleteObject(g_hFontDebugger); +// DeleteObject(g_hFontWebDings); + + for( int iTable = 0; iTable < NUM_SYMBOL_TABLES; iTable++ ) + { + _CmdSymbolsClear( (Symbols_e) iTable ); + } +} + + +// Sub Window _____________________________________________________________________________________ + +//=========================================================================== +bool CanDrawDebugger() +{ + if (g_bDebuggerViewingAppleOutput) + return false; + + if ((mode == MODE_DEBUG) || (mode == MODE_STEPPING)) + return true; + + return false; +} + + +//=========================================================================== +void DrawWindowBottom ( Update_t bUpdate, int iWindow ) +{ + if (! g_aWindowConfig[ iWindow ].bSplit) + return; + + WindowSplit_t * pWindow = &g_aWindowConfig[ iWindow ]; + +// if (pWindow->eBot == WINDOW_DATA) +// { +// DrawWindow_Data( bUpdate, false ); +// } + + if (pWindow->eBot == WINDOW_SOURCE) + DrawSubWindow_Source2( bUpdate ); +} + +//=========================================================================== +void DrawSubWindow_Code ( int iWindow ) +{ + int nLines = g_nDisasmWinHeight; + + // Check if we have a bad disasm + // BUG: This still doesn't catch all cases + // G FB53, SPACE, PgDn * + // Note: DrawDisassemblyLine() has kludge. +// DisasmCalcTopFromCurAddress( false ); + // These should be functionally equivalent. + // DisasmCalcTopFromCurAddress(); + // DisasmCalcBotFromTopAddress(); + SelectObject( g_hDC, g_aFontConfig[ FONT_DISASM_DEFAULT ]._hFont ); // g_hFontDisasm + + WORD nAddress = g_nDisasmTopAddress; // g_nDisasmCurAddress; + for (int iLine = 0; iLine < nLines; iLine++ ) + { + nAddress += DrawDisassemblyLine( g_hDC, iLine, nAddress, NULL); + } + + SelectObject( g_hDC, g_aFontConfig[ FONT_INFO ]._hFont ); // g_hFontDebugger +} + +//=========================================================================== +void DrawSubWindow_Console (Update_t bUpdate) +{ + if (! CanDrawDebugger()) + return; + + SelectObject( g_hDC, g_aFontConfig[ FONT_CONSOLE ]._hFont ); + +// static TCHAR sConsoleBlank[ CONSOLE_WIDTH ]; + + if ((bUpdate & UPDATE_CONSOLE_INPUT) || (bUpdate & UPDATE_CONSOLE_DISPLAY)) + { + SetTextColor( g_hDC, DebugGetColor( FG_CONSOLE_OUTPUT )); // COLOR_FG_CONSOLE + SetBkColor( g_hDC, DebugGetColor( BG_CONSOLE_OUTPUT )); // COLOR_BG_CONSOLE + +// int nLines = MIN(g_nConsoleDisplayTotal - g_iConsoleDisplayStart, g_nConsoleDisplayHeight); + int iLine = g_iConsoleDisplayStart + CONSOLE_FIRST_LINE; + for (int y = 0; y < g_nConsoleDisplayHeight ; y++ ) + { + if (iLine <= (g_nConsoleDisplayTotal + CONSOLE_FIRST_LINE)) + { + DrawConsoleLine( g_aConsoleDisplay[ iLine ], y+1 ); + } + iLine++; +// else +// DrawConsoleLine( sConsoleBlank, y ); + } + + DrawConsoleInput( g_hDC ); + } +} + +//=========================================================================== +void DrawSubWindow_Data (Update_t bUpdate) +{ + HDC hDC = g_hDC; + int iBackground; + + const int nMaxOpcodes = WINDOW_DATA_BYTES_PER_LINE; + TCHAR sAddress [ 5]; + TCHAR sOpcodes [(nMaxOpcodes*3)+1] = TEXT(""); + TCHAR sImmediate[ 4 ]; // 'c' + + const int nDefaultFontWidth = 7; // g_aFontConfig[FONT_DISASM_DEFAULT]._nFontWidth or g_nFontWidthAvg + int X_OPCODE = 6 * nDefaultFontWidth; + int X_CHAR = (6 + (nMaxOpcodes*3)) * nDefaultFontWidth; + + int iMemDump = 0; + + MemoryDump_t* pMD = &g_aMemDump[ iMemDump ]; + USHORT nAddress = pMD->nAddress; + DEVICE_e eDevice = pMD->eDevice; + MemoryView_e iView = pMD->eView; + + if (!pMD->bActive) + return; + + int iByte; + WORD iAddress = nAddress; + + int iLine; + int nLines = g_nDisasmWinHeight; + + for (iLine = 0; iLine < nLines; iLine++ ) + { + iAddress = nAddress; + + // Format + wsprintf( sAddress, TEXT("%04X"), iAddress ); + + sOpcodes[0] = 0; + for ( iByte = 0; iByte < nMaxOpcodes; iByte++ ) + { + BYTE nData = (unsigned)*(LPBYTE)(membank + iAddress + iByte); + wsprintf( &sOpcodes[ iByte * 3 ], TEXT("%02X "), nData ); + } + sOpcodes[ nMaxOpcodes * 3 ] = 0; + + int nFontHeight = g_aFontConfig[ FONT_DISASM_DEFAULT ]._nLineHeight; + + // Draw + RECT rect; + rect.left = 0; + rect.top = iLine * nFontHeight; + rect.right = DISPLAY_DISASM_RIGHT; + rect.bottom = rect.top + nFontHeight; + + if (iLine & 1) + { + iBackground = BG_DATA_1; + } + else + { + iBackground = BG_DATA_2; + } + SetBkColor( hDC, DebugGetColor( iBackground ) ); + + SetTextColor( hDC, DebugGetColor( FG_DISASM_ADDRESS ) ); + DebugDrawTextHorz( (LPCTSTR) sAddress, rect ); + + SetTextColor( hDC, DebugGetColor( FG_DISASM_OPERATOR ) ); + if (g_bConfigDisasmAddressColon) + DebugDrawTextHorz( TEXT(":"), rect ); + + rect.left = X_OPCODE; + + SetTextColor( hDC, DebugGetColor( FG_DATA_BYTE ) ); + DebugDrawTextHorz( (LPCTSTR) sOpcodes, rect ); + + rect.left = X_CHAR; + + // Seperator + SetTextColor( hDC, DebugGetColor( FG_DISASM_OPERATOR )); + DebugDrawTextHorz( (LPCSTR) TEXT(" | " ), rect ); + + + // Plain Text + SetTextColor( hDC, DebugGetColor( FG_DISASM_CHAR ) ); + + MemoryView_e eView = pMD->eView; + if ((eView != MEM_VIEW_ASCII) && (eView != MEM_VIEW_APPLE)) + eView = MEM_VIEW_ASCII; + + iAddress = nAddress; + for (iByte = 0; iByte < nMaxOpcodes; iByte++ ) + { + BYTE nImmediate = (unsigned)*(LPBYTE)(membank + iAddress); + int iTextBackground = iBackground; + if ((iAddress >= _6502_IO_BEGIN) && (iAddress <= _6502_IO_END)) + { + iTextBackground = BG_INFO_IO_BYTE; + } + + ColorizeSpecialChar( hDC, sImmediate, (BYTE) nImmediate, eView, iBackground ); + DebugDrawTextHorz( (LPCSTR) sImmediate, rect ); + + iAddress++; + } +/* + // Colorized Text + iAddress = nAddress; + for (iByte = 0; iByte < nMaxOpcodes; iByte++ ) + { + BYTE nImmediate = (unsigned)*(LPBYTE)(membank + iAddress); + int iTextBackground = iBackground; // BG_INFO_CHAR; +//pMD->eView == MEM_VIEW_HEX + if ((iAddress >= _6502_IO_BEGIN) && (iAddress <= _6502_IO_END)) + iTextBackground = BG_INFO_IO_BYTE; + + ColorizeSpecialChar( hDC, sImmediate, (BYTE) nImmediate, MEM_VIEW_APPLE, iBackground ); + DebugDrawTextHorz( (LPCSTR) sImmediate, rect ); + + iAddress++; + } + + SetBkColor( hDC, DebugGetColor( iBackground ) ); // Hack, colorize Char background "spills over to EOL" + DebugDrawTextHorz( (LPCSTR) TEXT(" " ), rect ); +*/ + SetBkColor( hDC, DebugGetColor( iBackground ) ); // HACK: Colorize() can "spill over" to EOL + + SetTextColor( hDC, DebugGetColor( FG_DISASM_OPERATOR )); + DebugDrawTextHorz( (LPCSTR) TEXT(" | " ), rect ); + + nAddress += nMaxOpcodes; + } +} + + +// DrawRegisters(); +//=========================================================================== +void DrawSubWindow_Info( int iWindow ) +{ + if (g_iWindowThis == WINDOW_CONSOLE) + return; + + const TCHAR **sReg = g_aBreakpointSource; + + DrawStack(g_hDC,0); + DrawTargets(g_hDC,9); + DrawRegister(g_hDC,12, sReg[ BP_SRC_REG_A ] , 1, regs.a , PARAM_REG_A ); + DrawRegister(g_hDC,13, sReg[ BP_SRC_REG_X ] , 1, regs.x , PARAM_REG_X ); + DrawRegister(g_hDC,14, sReg[ BP_SRC_REG_Y ] , 1, regs.y , PARAM_REG_Y ); + DrawRegister(g_hDC,15, sReg[ BP_SRC_REG_PC] , 2, regs.pc, PARAM_REG_PC ); + DrawRegister(g_hDC,16, sReg[ BP_SRC_REG_S ] , 2, regs.sp, PARAM_REG_SP ); + DrawFlags(g_hDC,17,regs.ps,NULL); + DrawZeroPagePointers(g_hDC,19); + +#if defined(SUPPORT_Z80_EMU) && defined(OUTPUT_Z80_REGS) + DrawRegister(g_hDC,19,TEXT("AF"),2,*(WORD*)(membank+REG_AF)); + DrawRegister(g_hDC,20,TEXT("BC"),2,*(WORD*)(membank+REG_BC)); + DrawRegister(g_hDC,21,TEXT("DE"),2,*(WORD*)(membank+REG_DE)); + DrawRegister(g_hDC,22,TEXT("HL"),2,*(WORD*)(membank+REG_HL)); + DrawRegister(g_hDC,23,TEXT("IX"),2,*(WORD*)(membank+REG_IX)); +#endif + +#if DEBUG_FORCE_DISPLAY + if (true) +#else + if (g_nBreakpoints) +#endif + DrawBreakpoints(g_hDC,0); + +#if DEBUG_FORCE_DISPLAY + if (true) +#else + if (g_nWatches) +#endif + DrawWatches(g_hDC,7); + +#if DEBUG_FORCE_DISPLAY + if (true) +#else + if (g_aMemDump[0].bActive) +#endif + DrawMemory(g_hDC, 14, 0 ); // g_aMemDump[0].nAddress, g_aMemDump[0].eDevice); + +#if DEBUG_FORCE_DISPLAY + if (true) +#else + if (g_aMemDump[1].bActive) +#endif + DrawMemory(g_hDC, 19, 1 ); // g_aMemDump[1].nAddress, g_aMemDump[1].eDevice); + +} + +//=========================================================================== +void DrawSubWindow_IO (Update_t bUpdate) +{ +} + +//=========================================================================== +void DrawSubWindow_Source (Update_t bUpdate) +{ +} + + +//=========================================================================== +int FindSourceLine( WORD nAddress ) +{ + int iAddress = 0; + int iLine = 0; + int iSourceLine = NO_SOURCE_LINE; + +// iterate of +// probably should be sorted by address +// then can do binary search +// iSourceLine = g_aSourceDebug.find( nAddress ); +#if 0 // _DEBUG + { + TCHAR sText[ CONSOLE_WIDTH ]; + for (int i = 0; i < g_vSourceLines.size(); i++ ) + { + wsprintf( sText, "%d: %s\n", i, g_vSourceLines[ i ] ); + OutputDebugString( sText ); + } + } +#endif + + SourceAssembly_t::iterator iSource = g_aSourceDebug.begin(); + while (iSource != g_aSourceDebug.end() ) + { + iAddress = iSource->first; + iLine = iSource->second; + +#if 0 // _DEBUG + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, "%04X -> %d line\n", iAddress, iLine ); + OutputDebugString( sText ); +#endif + + if (iAddress == nAddress) + { + iSourceLine = iLine; + break; + } + + iSource++; + } + // not found + + return iSourceLine; +} + +//=========================================================================== +void DrawSourceLine( int iSourceLine, RECT &rect ) +{ + TCHAR sLine[ CONSOLE_WIDTH ]; + + ZeroMemory( sLine, CONSOLE_WIDTH ); + if ((iSourceLine >=0) && (iSourceLine < g_nSourceAssemblyLines)) + { + char * pSource = g_vSourceLines[ iSourceLine ]; + +// int nLenSrc = _tcslen( pSource ); +// if (nLenSrc >= CONSOLE_WIDTH) +// bool bStop = true; + + TextConvertTabsToSpaces( sLine, pSource, CONSOLE_WIDTH-1 ); // bugfix 2,3,1,15: fence-post error, buffer over-run + +// int nLenTab = _tcslen( sLine ); + } + else + { + _tcscpy( sLine, TEXT(" ")); + } + + DebugDrawText( sLine, rect ); + rect.top += g_nFontHeight; +// iSourceLine++; +} + +//=========================================================================== +void DrawSubWindow_Source2 (Update_t bUpdate) +{ +// if (! g_bSourceLevelDebugging) +// return; + + SetTextColor( g_hDC, DebugGetColor( FG_SOURCE )); + + int iSource = g_iSourceDisplayStart; + int nLines = g_nDisasmWinHeight; + + int y = g_nDisasmWinHeight; + int nHeight = g_nDisasmWinHeight; + + if (g_aWindowConfig[ g_iWindowThis ].bSplit) // HACK: Split Window Height is odd, so bottom window gets +1 height + nHeight++; + + RECT rect; + rect.top = (y * g_nFontHeight); + rect.bottom = rect.top + (nHeight * g_nFontHeight); + rect.left = 0; + rect.right = DISPLAY_DISASM_RIGHT; // HACK: MAGIC #: 7 + +// Draw Title + TCHAR sTitle[ CONSOLE_WIDTH ]; + TCHAR sText [ CONSOLE_WIDTH ]; + _tcscpy( sTitle, TEXT(" Source: ")); + _tcsncpy( sText, g_aSourceFileName, g_nConsoleDisplayWidth - _tcslen( sTitle ) - 1 ); + _tcscat( sTitle, sText ); + + SetBkColor( g_hDC, DebugGetColor( BG_SOURCE_TITLE )); + SetTextColor( g_hDC, DebugGetColor( FG_SOURCE_TITLE )); + DebugDrawText( sTitle, rect ); + rect.top += g_nFontHeight; + +// Draw Source Lines + int iBackground; + int iForeground; + + int iSourceCursor = 2; // (g_nDisasmWinHeight / 2); + int iSourceLine = FindSourceLine( regs.pc ); + + if (iSourceLine == NO_SOURCE_LINE) + { + iSourceCursor = NO_SOURCE_LINE; + } + else + { + iSourceLine -= iSourceCursor; + if (iSourceLine < 0) + iSourceLine = 0; + } + + for( int iLine = 0; iLine < nLines; iLine++ ) + { + if (iLine != iSourceCursor) + { + iBackground = BG_SOURCE_1; + if (iLine & 1) + iBackground = BG_SOURCE_2; + iForeground = FG_SOURCE; + } + else + { + // Hilighted cursor line + iBackground = BG_DISASM_PC_X; // _C + iForeground = FG_DISASM_PC_X; // _C + } + SetBkColor( g_hDC, DebugGetColor( iBackground )); + SetTextColor( g_hDC, DebugGetColor( iForeground )); + + DrawSourceLine( iSourceLine, rect ); + iSourceLine++; + } +} + +//=========================================================================== +void DrawSubWindow_Symbols (Update_t bUpdate) +{ +} + +//=========================================================================== +void DrawSubWindow_ZeroPage (Update_t bUpdate) +{ +} + +// Main Windows ___________________________________________________________________________________ + +//=========================================================================== +void DrawWindow_Code( Update_t bUpdate ) +{ + DrawSubWindow_Code( g_iWindowThis ); + +// DrawWindowTop( g_iWindowThis ); + DrawWindowBottom( bUpdate, g_iWindowThis ); + + DrawSubWindow_Info( g_iWindowThis ); +} + +//=========================================================================== +void DrawWindow_Console( Update_t bUpdate ) +{ + // Nothing to do, except draw background, since text handled by DrawSubWindow_Console() + RECT viewportrect; + viewportrect.left = 0; + viewportrect.top = 0; + viewportrect.right = DISPLAY_WIDTH; + viewportrect.bottom = DISPLAY_HEIGHT - DEFAULT_HEIGHT; // 368 = 23 lines // TODO/FIXME + +// TODO/FIXME: COLOR_BG_CODE -> g_iWindowThis, once all tab backgrounds are listed first in g_aColors ! + SetBkColor(g_hDC, DebugGetColor( BG_DISASM_2 )); // COLOR_BG_CODE + // Can't use DebugDrawText, since we don't ned the CLIPPED flag + // TODO: add default param OPAQUE|CLIPPED + ExtTextOut( g_hDC + ,0,0 + ,ETO_OPAQUE + ,&viewportrect + ,TEXT("") + ,0 + ,NULL + ); +} + +//=========================================================================== +void DrawWindow_Data( Update_t bUpdate ) +{ + DrawSubWindow_Data( g_iWindowThis ); + DrawSubWindow_Info( g_iWindowThis ); +} + +//=========================================================================== +void DrawWindow_IO( Update_t bUpdate ) +{ + DrawSubWindow_IO( g_iWindowThis ); + DrawSubWindow_Info( g_iWindowThis ); +} + +//=========================================================================== +void DrawWindow_Source( Update_t bUpdate ) +{ + DrawSubWindow_Source( g_iWindowThis ); + DrawSubWindow_Info( g_iWindowThis ); +} + +//=========================================================================== +void DrawWindow_Symbols( Update_t bUpdate ) +{ + DrawSubWindow_Symbols( g_iWindowThis ); + DrawSubWindow_Info( g_iWindowThis ); +} + +void DrawWindow_ZeroPage( Update_t bUpdate ) +{ + DrawSubWindow_ZeroPage( g_iWindowThis ); + DrawSubWindow_Info( g_iWindowThis ); +} + +//=========================================================================== +void DrawWindowBackground_Main( int g_iWindowThis ) +{ + RECT viewportrect; + viewportrect.left = 0; + viewportrect.top = 0; + viewportrect.right = SCREENSPLIT1 - 6; // HACK: MAGIC #: 14 -> 6 -> (g_nFonWidthAvg-1) + viewportrect.bottom = DISPLAY_HEIGHT - DEFAULT_HEIGHT; // 368 = 23 lines // TODO/FIXME +// g_nFontHeight * g_nDisasmWinHeight; // 304 + +// TODO/FIXME: COLOR_BG_CODE -> g_iWindowThis, once all tab backgrounds are listed first in g_aColors ! + + SetBkColor(g_hDC, DebugGetColor( BG_DISASM_1 )); // COLOR_BG_CODE + // Can't use DebugDrawText, since we don't need CLIPPED + ExtTextOut(g_hDC,0,0,ETO_OPAQUE,&viewportrect,TEXT(""),0,NULL); +} + +//=========================================================================== +void DrawWindowBackground_Info( int g_iWindowThis ) +{ + RECT viewportrect; + viewportrect.top = 0; + viewportrect.left = SCREENSPLIT1 - 6; // 14 // HACK: MAGIC #: 14 -> (g_nFontWidthAvg-1) + viewportrect.right = 560; + viewportrect.bottom = DISPLAY_HEIGHT; //g_nFontHeight * MAX_DISPLAY_INFO_LINES; // 384 + + SetBkColor(g_hDC, DebugGetColor( BG_INFO )); // COLOR_BG_DATA + // Can't use DebugDrawText, since we don't need CLIPPED + ExtTextOut(g_hDC,0,0,ETO_OPAQUE,&viewportrect,TEXT(""),0,NULL); +} + + +//=========================================================================== +void UpdateDisplay (Update_t bUpdate) +{ + g_hDC = FrameGetDC(); + + SelectObject( g_hDC, g_aFontConfig[ FONT_INFO ]._hFont ); // g_hFontDebugger + + SetTextAlign(g_hDC,TA_TOP | TA_LEFT); + + if ((bUpdate & UPDATE_BREAKPOINTS) + || (bUpdate & UPDATE_DISASM) + || (bUpdate & UPDATE_FLAGS) + || (bUpdate & UPDATE_MEM_DUMP) + || (bUpdate & UPDATE_REGS) + || (bUpdate & UPDATE_STACK) + || (bUpdate & UPDATE_SYMBOLS) + || (bUpdate & UPDATE_TARGETS) + || (bUpdate & UPDATE_WATCH) + || (bUpdate & UPDATE_ZERO_PAGE)) + { + bUpdate |= UPDATE_BACKGROUND; + bUpdate |= UPDATE_CONSOLE_INPUT; + } + + if (bUpdate & UPDATE_BACKGROUND) + { + if (g_iWindowThis != WINDOW_CONSOLE) + { + DrawWindowBackground_Main( g_iWindowThis ); + DrawWindowBackground_Info( g_iWindowThis ); + } + } + + switch( g_iWindowThis ) + { + case WINDOW_CODE: + DrawWindow_Code( bUpdate ); + break; + + case WINDOW_CONSOLE: + DrawWindow_Console( bUpdate ); + break; + + case WINDOW_DATA: + DrawWindow_Data( bUpdate ); + break; + + case WINDOW_IO: + DrawWindow_IO( bUpdate ); + + case WINDOW_SOURCE: + DrawWindow_Source( bUpdate ); + + case WINDOW_SYMBOLS: + DrawWindow_Symbols( bUpdate ); + break; + + case WINDOW_ZEROPAGE: + DrawWindow_ZeroPage( bUpdate ); + + default: + break; + } + + if ((bUpdate & UPDATE_CONSOLE_DISPLAY) || (bUpdate & UPDATE_CONSOLE_INPUT)) + DrawSubWindow_Console( bUpdate ); + + FrameReleaseDC(); + g_hDC = 0; +} + +//=========================================================================== +void DebugEnd () +{ + // Stepping ... calls us when key hit?! FrameWndProc() ProcessButtonClick() DebugEnd() + if (g_bProfiling) + { + // See: .csv / .txt note in CmdProfile() + ProfileFormat( true, PROFILE_FORMAT_TAB ); // Export in Excel-ready text format. + ProfileSave(); + } + + if (g_hTraceFile) + { + fclose(g_hTraceFile); + g_hTraceFile = NULL; + } +} + +#if _DEBUG +#define DEBUG_COLOR_RAMP 0 +void _SetupColorRamp( const int iPrimary, int & iColor_ ) +{ + TCHAR sRamp[ CONSOLE_WIDTH*2 ] = TEXT(""); +#if DEBUG_COLOR_RAMP + TCHAR sText[ CONSOLE_WIDTH ]; +#endif + + bool bR = (iPrimary & 1) ? true : false; + bool bG = (iPrimary & 2) ? true : false; + bool bB = (iPrimary & 4) ? true : false; + int dStep = 32; + int nLevels = 256 / dStep; + for (int iLevel = nLevels; iLevel > 0; iLevel-- ) + { + int nC = ((iLevel * dStep) - 1); + int nR = bR ? nC : 0; + int nG = bG ? nC : 0; + int nB = bB ? nC : 0; + DWORD nColor = RGB(nR,nG,nB); + gaColorPalette[ iColor_ ] = nColor; +#if DEBUG_COLOR_RAMP + wsprintf( sText, TEXT("RGB(%3d,%3d,%3d), "), nR, nG, nB ); + _tcscat( sRamp, sText ); +#endif + iColor_++; + } +#if DEBUG_COLOR_RAMP + wsprintf( sText, TEXT(" // %d%d%d\n"), bB, bG, bR ); + _tcscat( sRamp, sText ); + OutputDebugString( sRamp ); + sRamp[0] = 0; +#endif +} +#endif // _DEBUG + +void _CmdColorsReset() +{ +// int iColor = 1; // black only has one level, skip it, since black levels same as white levels +// for (int iPrimary = 1; iPrimary < 8; iPrimary++ ) +// { +// _SetupColorRamp( iPrimary, iColor ); +// } + + // Setup default colors + int iColor; + for (iColor = 0; iColor < NUM_COLORS; iColor++ ) + { + COLORREF nColor = gaColorPalette[ g_aColorIndex[ iColor ] ]; + + int R = (nColor >> 0) & 0xFF; + int G = (nColor >> 8) & 0xFF; + int B = (nColor >> 16) & 0xFF; + + // There are many, many ways of shifting the color domain to the monochrome domain + // NTSC uses 3x3 matrix, could map RGB -> wavelength, etc. + int M = (R + G + B) / 3; // Monochrome component + COLORREF nMono = RGB(M,M,M); + + DebugSetColor( SCHEME_COLOR, iColor, nColor ); + DebugSetColor( SCHEME_MONO , iColor, nMono ); + } +} + + +//=========================================================================== +void DebugInitialize () +{ + ZeroMemory( g_aConsoleDisplay, sizeof( g_aConsoleDisplay ) ); // CONSOLE_WIDTH * CONSOLE_HEIGHT ); + ConsoleInputReset(); + + for( int iWindow = 0; iWindow < NUM_WINDOWS; iWindow++ ) + { + WindowSplit_t *pWindow = & g_aWindowConfig[ iWindow ]; + + pWindow->bSplit = false; + pWindow->eTop = (Window_e) iWindow; + pWindow->eBot = (Window_e) iWindow; + } + + g_iWindowThis = WINDOW_CODE; + g_iWindowLast = WINDOW_CODE; + + WindowUpdateDisasmSize(); + + _CmdColorsReset(); + + WindowUpdateConsoleDisplayedSize(); + + // CLEAR THE BREAKPOINT AND WATCH TABLES + ZeroMemory( g_aBreakpoints , MAX_BREAKPOINTS * sizeof(Breakpoint_t)); + ZeroMemory( g_aWatches , MAX_WATCHES * sizeof(Watches_t) ); + ZeroMemory( g_aZeroPagePointers, MAX_ZEROPAGE_POINTERS * sizeof(ZeroPagePointers_t)); + + g_iCommand = CMD_SYMBOLS_MAIN; + CmdSymbolsLoad(0); + + // CREATE A FONT FOR THE DEBUGGING SCREEN + int nArgs = _Arg_1( g_sFontNameDefault ); +// CmdConfigSetFont( nArgs ); + + for (int iFont = 0; iFont < NUM_FONTS; iFont++ ) + { + g_aFontConfig[ iFont ]._hFont = NULL; + } + + // TODO: g_aFontPitch + _CmdConfigFont( FONT_INFO , g_sFontNameInfo , FIXED_PITCH | FF_MODERN , g_nFontHeight ); // DEFAULT_CHARSET + _CmdConfigFont( FONT_CONSOLE , g_sFontNameConsole, FIXED_PITCH | FF_MODERN , g_nFontHeight ); // DEFAULT_CHARSET + _CmdConfigFont( FONT_DISASM_DEFAULT, g_sFontNameDisasm , FIXED_PITCH | FF_MODERN , g_nFontHeight ); // OEM_CHARSET + _CmdConfigFont( FONT_DISASM_BRANCH , g_sFontNameBranch , DEFAULT_PITCH | FF_DECORATIVE, g_nFontHeight ); // DEFAULT_CHARSET + +/* + g_hFontDebugger = CreateFont( + g_nFontHeight // Height + , 0 // Width + , 0 // Escapement + , 0 // Orientatin + , FW_MEDIUM // Weight + , 0 // Italic + , 0 // Underline + , 0 // Strike Out + , DEFAULT_CHARSET // "OEM_CHARSET" DEFAULT_CHARSET + , OUT_DEFAULT_PRECIS + , CLIP_DEFAULT_PRECIS + , ANTIALIASED_QUALITY // DEFAULT_QUALITY + , FIXED_PITCH | FF_MODERN // HACK: MAGIC #: 4 // FIXED_PITCH + , g_sFontNameDefault ); + + g_hFontWebDings = CreateFont( + g_nFontHeight // Height + , 0 // Width + , 0 // Escapement + , 0 // Orientatin + , FW_MEDIUM // Weight + , 0 // Italic + , 0 // Underline + , 0 // Strike Out + , DEFAULT_CHARSET // ANSI_CHARSET // OEM_CHARSET DEFAULT_CHARSET + , OUT_DEFAULT_PRECIS + , CLIP_DEFAULT_PRECIS + , ANTIALIASED_QUALITY // DEFAULT_QUALITY + , DEFAULT_PITCH | FF_DECORATIVE // FIXED_PITCH | 4 | FF_MODERN + , g_sFontNameBranch ); +*/ +// if (g_hFontWebDings) + if (g_aFontConfig[ FONT_DISASM_BRANCH ]._hFont) + { + g_bConfigDisasmFancyBranch = true; + } + else + { + g_bConfigDisasmFancyBranch = false; + } +} + + +// Add character to the input line +//=========================================================================== +void DebugProcessChar (TCHAR ch) +{ + if ((mode == MODE_STEPPING) && (ch == TEXT('\x1B'))) // HACK: ESCAPE + g_nDebugSteps = 0; + + if (mode != MODE_DEBUG) + return; + + if (g_bConsoleBufferPaused) + return; + + // If don't have console input, don't pass space to the input line + if ((ch == TEXT(' ')) && (!g_nConsoleInputChars)) + return; + + if (g_nConsoleInputChars > (g_nConsoleDisplayWidth-1)) + return; + + if (g_bConsoleInputSkip) + { + g_bConsoleInputSkip = false; + return; + } + + if ((ch >= ' ') && (ch <= 126)) // HACK MAGIC # 32 -> ' ', # 126 + { + if (ch == TEXT('"')) + g_bConsoleInputQuoted = ! g_bConsoleInputQuoted; + + if (!g_bConsoleInputQuoted) + { + ch = (TCHAR)CharUpper((LPTSTR)ch); + } + ConsoleInputChar( ch ); + + HDC dc = FrameGetDC(); + DrawConsoleInput( dc ); + FrameReleaseDC(); + } +} + +//=========================================================================== +void DebugProcessCommand (int keycode) +{ + if (mode != MODE_DEBUG) + return; + + if (g_bDebuggerViewingAppleOutput) + { + // Normally any key press takes us out of "Viewing Apple Output" mode + // VK_F# are already processed, so we can't use them to cycle next video mode +// if ((mode != MODE_LOGO) && (mode != MODE_DEBUG)) + g_bDebuggerViewingAppleOutput = false; + UpdateDisplay( UPDATE_ALL ); // 1 + return; + } + + Update_t bUpdateDisplay = UPDATE_NOTHING; + + // For long output, allow user to read it + if (g_nConsoleBuffer) + { + if ((VK_SPACE == keycode) || (VK_RETURN == keycode) || (VK_TAB == keycode) || (VK_ESCAPE == keycode)) + { + int nLines = MIN( g_nConsoleBuffer, g_nConsoleDisplayHeight - 1 ); // was -2 + if (VK_ESCAPE == keycode) // user doesn't want to read all this stu + { + nLines = g_nConsoleBuffer; + } + ConsoleBufferTryUnpause( nLines ); + + // don't really need since 'else if (keycode = VK_BACK)' but better safe then sorry + keycode = 0; // don't single-step + } + + bUpdateDisplay |= UPDATE_CONSOLE_DISPLAY; + ConsoleDisplayPause(); + } + else + // If have console input, don't invoke cursor movement + // TODO: Probably should disable all "movement" keys to map them to line editing mode + if ((keycode == VK_SPACE) && g_nConsoleInputChars) + return; + else if (keycode == VK_ESCAPE) + { + ConsoleInputClear(); + bUpdateDisplay |= UPDATE_CONSOLE_INPUT; + } + else if (keycode == VK_BACK) + { + if (! ConsoleInputBackSpace()) + { + // CmdBeep(); + } + bUpdateDisplay |= UPDATE_CONSOLE_INPUT; + } + else if (keycode == VK_RETURN) + { + ConsoleDisplayPush( ConsoleInputPeek() ); + + if (g_nConsoleInputChars) + { + int nArgs = ParseConsoleInput( g_pConsoleInput ); + if (nArgs == ARG_SYNTAX_ERROR) + { + TCHAR sText[ CONSOLE_WIDTH ]; + wsprintf( sText, "Syntax error: %s", g_aArgs[0].sArg ); + bUpdateDisplay |= ConsoleDisplayError( sText ); + } + else + bUpdateDisplay |= ExecuteCommand( nArgs ); // ParseConsoleInput()); + + if (!g_bConsoleBufferPaused) + { + ConsoleInputReset(); + } + } + } + else if (keycode == VK_OEM_3) // Tilde ~ + { + // Switch to Console Window + if (g_iWindowThis != WINDOW_CONSOLE) + { + CmdWindowViewConsole( 0 ); + } + else // switch back to last window + { + CmdWindowLast( 0 ); + } + bUpdateDisplay |= UPDATE_ALL; + g_bConsoleInputSkip = true; // don't pass to DebugProcessChar() + } + else + { + switch (keycode) + { + case VK_TAB: + { + if (g_nConsoleInputChars) + { + // TODO: TabCompletionCommand() + // TODO: TabCompletionSymbol() + bUpdateDisplay |= ConsoleInputTabCompletion(); + } + else + if (KeybGetCtrlStatus() && KeybGetShiftStatus()) + bUpdateDisplay |= CmdWindowCyclePrev( 0 ); + else + if (KeybGetCtrlStatus()) + bUpdateDisplay |= CmdWindowCycleNext( 0 ); + else + bUpdateDisplay |= CmdCursorJumpPC( CURSOR_ALIGN_CENTER ); + break; + } + case VK_SPACE: + if (KeybGetShiftStatus()) + bUpdateDisplay |= CmdStepOut(0); + else + if (KeybGetCtrlStatus()) + bUpdateDisplay |= CmdStepOver(0); + else + bUpdateDisplay |= CmdTrace(0); + break; + + case VK_HOME: + if (g_iWindowThis == WINDOW_CONSOLE) + { + ConsoleScrollHome(); + } + else + if (g_nConsoleInputChars > 0) + { + if (KeybGetShiftStatus()) + { + bUpdateDisplay |= ConsoleScrollHome(); + } + else + { + // Move cursor to start of console input + } + } + else + { + // If you really want $000 at the top of the screen... + // g_nDisasmTopAddress = _6502_BEG_MEM_ADDRESS; + // DisasmCalcCurFromTopAddress(); + // DisasmCalcBotFromTopAddress(); + + g_nDisasmCurAddress = _6502_BEG_MEM_ADDRESS; + DisasmCalcTopBotAddress(); + } + bUpdateDisplay |= UPDATE_DISASM; + break; + + case VK_END: + if (g_iWindowThis == WINDOW_CONSOLE) + { + ConsoleScrollEnd(); + } + else + if (g_nConsoleInputChars > 0) + { + if (KeybGetShiftStatus()) + { + bUpdateDisplay |= ConsoleScrollEnd(); + } + else + { + // Move cursor to end of console input + } + } + else + { + // If you really want $8000 at the top of the screen... + // g_nDisasmTopAddress = (_6502_END_MEM_ADDRESS / 2) + 1; + // DisasmCalcCurFromTopAddress(); + // DisasmCalcTopBotAddress(); + + g_nDisasmCurAddress = (_6502_END_MEM_ADDRESS / 2) + 1; + DisasmCalcTopBotAddress(); + } + bUpdateDisplay |= UPDATE_DISASM; + break; + + case VK_PRIOR: // VK_PAGE_UP + if (g_iWindowThis == WINDOW_CONSOLE) + { + bUpdateDisplay |= ConsoleScrollPageUp(); + } + else + if (g_nConsoleInputChars > 0) + { + if (KeybGetShiftStatus()) + { + bUpdateDisplay |= ConsoleScrollPageUp(); + } + else + { + // Scroll through console input history + } + } + else + { + if (KeybGetShiftStatus()) + bUpdateDisplay |= CmdCursorPageUp256(0); + else + if (KeybGetCtrlStatus()) + bUpdateDisplay |= CmdCursorPageUp4K(0); + else + bUpdateDisplay |= CmdCursorPageUp(0); + } + break; + + case VK_NEXT: // VK_PAGE_DN + if (g_iWindowThis == WINDOW_CONSOLE) + { + bUpdateDisplay |= ConsoleScrollPageDn(); + } + else + if (g_nConsoleInputChars > 0) + { + if (KeybGetShiftStatus()) + { + bUpdateDisplay |= ConsoleScrollPageDn(); + } + else + { + // Scroll through console input history + } + } + else + { + if (KeybGetShiftStatus()) + bUpdateDisplay |= CmdCursorPageDown256(0); + else + if (KeybGetCtrlStatus()) + bUpdateDisplay |= CmdCursorPageDown4K(0); + else + bUpdateDisplay |= CmdCursorPageDown(0); + } + break; + + // +PATCH MJP + // case VK_UP: bUpdateDisplay = CmdCursorLineUp(0); break; // -PATCH + // case VK_DOWN: bUpdateDisplay = CmdCursorLineDown(0); break; // -PATCH + case VK_UP: + if (g_iWindowThis == WINDOW_CONSOLE) + { + bUpdateDisplay |= ConsoleScrollUp( 1 ); + } + else + if (g_nConsoleInputChars > 0) + { + if (KeybGetShiftStatus()) + { + bUpdateDisplay |= ConsoleScrollUp( 1 ); + } + else + { + // Scroll through console input history + } + } + else + { + // Shift the Top offset up by 1 byte + // i.e. no smart disassembly like LineUp() + // Normally UP moves to the previous g_aOpcodes + if (KeybGetShiftStatus()) + bUpdateDisplay |= CmdCursorLineUp(1); + else + bUpdateDisplay |= CmdCursorLineUp(0); + } + break; + + case VK_DOWN: + if (g_iWindowThis == WINDOW_CONSOLE) + { + bUpdateDisplay |= ConsoleScrollDn( 1 ); + } + else + if (g_nConsoleInputChars > 0) + { + if (KeybGetShiftStatus()) + { + bUpdateDisplay |= ConsoleScrollDn( 1 ); + } + else + { + // Scroll through console input history + } + } + else + { + if (KeybGetCtrlStatus()) + bUpdateDisplay |= CmdCursorRunUntil(0); + else + if (KeybGetShiftStatus()) + // Shift the Offest down by 1 byte + // i.e. no smart disassembly like LineDown() + bUpdateDisplay |= CmdCursorLineDown(1); + else + bUpdateDisplay |= CmdCursorLineDown(0); + } + break; + + case VK_RIGHT: + if (KeybGetCtrlStatus()) + bUpdateDisplay |= CmdCursorSetPC( g_nDisasmCurAddress ); + else + if (KeybGetShiftStatus()) + bUpdateDisplay |= CmdCursorJumpPC( CURSOR_ALIGN_TOP ); + else + bUpdateDisplay |= CmdCursorJumpPC( CURSOR_ALIGN_CENTER ); + break; + + case VK_LEFT: + if (KeybGetShiftStatus()) + bUpdateDisplay |= CmdCursorJumpRetAddr( CURSOR_ALIGN_TOP ); // Jump to Caller + else + bUpdateDisplay |= CmdCursorJumpRetAddr( CURSOR_ALIGN_CENTER ); + break; + + } // switch + } + + if (bUpdateDisplay) // & UPDATE_BACKGROUND) + UpdateDisplay( bUpdateDisplay ); +} + +// Still called from external file +void DebugDisplay( BOOL bDrawBackground ) +{ + Update_t bUpdateFlags = UPDATE_ALL; + +// if (! bDrawBackground) +// bUpdateFlags &= ~UPDATE_BACKGROUND; + + UpdateDisplay( bUpdateFlags ); +} diff --git a/AppleWin/source/Debug.h b/AppleWin/source/Debug.h new file mode 100644 index 00000000..6103c4ed --- /dev/null +++ b/AppleWin/source/Debug.h @@ -0,0 +1,1259 @@ +#pragma once + +#include +#include // sort +#include +using namespace std; + +extern DWORD extbench; +extern bool g_bDebuggerViewingAppleOutput; + +void DebugBegin (); +void DebugContinueStepping (); +void DebugDestroy (); +void DebugDisplay (BOOL); +void DebugEnd (); +void DebugInitialize (); +void DebugProcessChar (TCHAR); +void DebugProcessCommand (int); + +// Addressing _____________________________________________________________________________________ + + enum + { +// MAX_ADDRESSING_MODE_LEN = 12 + + MAX_OPMODE_FORMAT = 12, + MAX_OPMODE_NAME = 32 + + , NO_6502_TARGET = -1 + , _6502_NUM_FLAGS = 8 + }; + + struct AddressingMode_t + { + TCHAR m_sFormat[ MAX_OPMODE_FORMAT ]; + int m_nBytes; + char m_sName [ MAX_OPMODE_NAME ]; + }; + + /* + +---------------------+--------------------------+ + | mode | assembler format | + +=====================+==========================+ + | Immediate | #aa | + | Absolute | aaaa | + | Zero Page | aa | Note: + | Implied | | + | Indirect Absolute | (aaaa) | aa = 2 hex digits + | Absolute Indexed,X | aaaa,X | as $FF + | Absolute Indexed,Y | aaaa,Y | + | Zero Page Indexed,X | aa,X | aaaa = 4 hex + | Zero Page Indexed,Y | aa,Y | digits as + | Indexed Indirect | (aa,X) | $FFFF + | Indirect Indexed | (aa),Y | + | Relative | aaaa | Can also be + | Accumulator | A | assembler labels + +---------------------+--------------------------+ + (Table 2-3. _6502 Software Design_, Scanlon, 1980) + + Opcode: opc aaa od + opc...od = Mnemonic / Opcode + ...aaa.. = Addressing mode + od = 00 + 000 #Immediate + 001 Zero page + 011 Absolute + 101 Zero page,X + 111 Absolute,X + od = 01 + 000 (Zero page,X) + 001 Zero page + 010 #Immediate + 011 Absolute + 100 (Zero page),Y + 101 Zero page,X + 110 Absolute,Y + 111 Absolute,X + od = 10 + 000 #Immediate + 001 Zero page + 010 Accumulator + 011 Absolute + 101 Zero page,X + 111 Absolute,X + */ + /* + Legend: + A = Absolute (fortunately Accumulator is implicit, leaving us to use 'A') + I = Indexed ( would of been X, but need reg X) + M = iMmediate + N = iNdirect + R = Relative + X = Offset X Register + Y = Offset Y Register + Z = Zeropage + */ + enum AddressingMode_e // ADDRESSING_MODES_e + { + AM_IMPLIED + , AM_1 // Invalid 1 Byte + , AM_2 // Invalid 2 Bytes + , AM_3 // Invalid 3 Bytes + , AM_M // 4 #Immediate + , AM_A // 5 $Absolute + , AM_Z // 6 Zeropage + , AM_AX // 7 Absolute, X + , AM_AY // 8 Absolute, Y + , AM_ZX // 9 Zeropage, X + , AM_ZY // 10 Zeropage, Y + , AM_R // 11 Relative + , AM_IZX // 12 Indexed (Zeropage Indirect, X) + , AM_IAX // 13 Indexed (Absolute Indirect, X) + , AM_NZY // 14 Indirect (Zeropage) Indexed, Y + , AM_NZ // 15 Indirect (Zeropage) + , AM_NA // 16 Indirect (Absolute) i.e. JMP + + , NUM_ADDRESSING_MODES + , NUM_OPMODES = NUM_ADDRESSING_MODES, + + // Deprecated + ADDR_INVALID1 = 1, + ADDR_INVALID2 = 2, + ADDR_INVALID3 = 3, + ADDR_IMM = 4, // Immediate + ADDR_ABS = 5, // Absolute + ADDR_ZP = 6, // Zeropage // ADDR_ZPG + ADDR_ABSX = 7, // Absolute + X + ADDR_ABSY = 8, // Absolute + Y + ADDR_ZP_X = 9, // Zeropage + X // ADDR_ZPGX + ADDR_ZP_Y = 10, // Zeropage + Y // ADDR_ZPGY + ADDR_REL = 11, // Relative + ADDR_INDX = 12, // Indexed (Zeropage) Indirect + ADDR_ABSIINDX = 13, // Indexed (Absolute) Indirect + ADDR_INDY = 14, // Indirect (Zeropage) Indexed + ADDR_IZPG = 15, // Indirect (Zeropage) + ADDR_IABS = 16, // Indirect Absolute (i.e. JMP) + }; + + + + +// Breakpoints ____________________________________________________________________________________ + + /* + Breakpoints are now in a tri-state. + This allows one to set a bunch of breakpoints, and re-enable the ones you want + without having to remember which addresses you previously added. :-) + + The difference between Set and Enabled breakpoints: + + Set Enabled Break? + x x yes, listed as full brightness + x - no, listed as dimmed + - ? no, not listed + */ + // NOTE: Order must match _PARAM_REGS_* + // NOTE: Order must match Breakpoint_Source_t + // NOTE: Order must match g_aBreakpointSource + enum BreakpointSource_t + { + BP_SRC_REG_A , + BP_SRC_REG_X , + BP_SRC_REG_Y , + + BP_SRC_REG_PC, // Program Counter + BP_SRC_REG_S , // Stack Counter + + BP_SRC_REG_P , // Processor Status + BP_SRC_FLAG_C, // Carry + BP_SRC_FLAG_Z, // Zero + BP_SRC_FLAG_I, // Interrupt + BP_SRC_FLAG_D, // Decimal + BP_SRC_FLAG_B, // Break + BP_SRC_FLAG_R, // Reserved + BP_SRC_FLAG_V, // Overflow + BP_SRC_FLAG_N, // Sign + + BP_SRC_OPCODE, + BP_SRC_MEM_1 , + + NUM_BREAKPOINT_SOURCES + }; + + // Note: Order must match Breakpoint_Operator_t + // Note: Order must much _PARAM_BREAKPOINT_* + // Note: Order must match g_aBreakpointSymbols + enum BreakpointOperator_t + { + BP_OP_LESS_EQUAL , // <= REG + BP_OP_LESS_THAN , // < REG + BP_OP_EQUAL , // = REG + BP_OP_NOT_EQUAL , // ! REG + BP_OP_GREATER_THAN , // > REG + BP_OP_GREATER_EQUAL, // >= REG + BP_OP_READ , // ? MEM + BP_OP_WRITE , // @ MEM + BP_OP_READ_WRITE , // * MEM + NUM_BREAKPOINT_OPERATORS + }; + + struct Breakpoint_t + { + WORD nAddress; // for registers, functions as nValue + WORD nLength ; + BreakpointSource_t eSource; + BreakpointOperator_t eOperator; + bool bSet ; // used to be called enabled pre 2.0 + bool bEnabled; + }; + + typedef Breakpoint_t Watches_t; + typedef Breakpoint_t ZeroPagePointers_t; + + +// Colors ___________________________________________________________________ + + enum Color_Schemes_e + { + SCHEME_COLOR, // NOTE: MUST match order in CMD_WINDOW_COLOR + SCHEME_MONO , // NOTE: MUST match order in CMD_WINDOW_MONOCHROME +// SCHEME_CUSTOM + NUM_COLOR_SCHEMES + }; + + // Named, since they are easier to remember. + // Ok, maybe RGB + CYMK is a little "too" cute. But what the hell, it works out nicely. + enum DebugPalette_e + { + // mipmap level: 8 7 6 5 4 3 2 1 0 + // color depth: 256 224 192 160 128 96 64 32 0 + // +32 +32 +32 +32 +32 +32 +32 +32 + // NOTE: Levels of black are redundant. + // // BGR + K0, // --- K + R8, R7, R6, R5, R4, R3, R2, R1, // --1 R Red + G8, G7, G6, G5, G4, G3, G2, G1, // -1- G Green + Y8, Y7, Y6, Y5, Y4, Y3, Y2, Y1, // -11 Y Yellow + B8, B7, B6, B5, B4, B3, B2, B1, // 1-- B Blue + M8, M7, M6, M5, M4, M3, M2, M1, // 1-1 M Magenta + C8, C7, C6, C5, C4, C3, C2, C1, // 11- C Cyan + W8, W7, W6, W5, W4, W3, W2, W1, // 111 W White / Gray / Black + + COLOR_CUSTOM_01, COLOR_CUSTOM_02, COLOR_CUSTOM_03, COLOR_CUSTOM_04, + COLOR_CUSTOM_05, COLOR_CUSTOM_06, COLOR_CUSTOM_07, COLOR_CUSTOM_08, + COLOR_CUSTOM_09, COLOR_CUSTOM_11, CUSTOM_COLOR_11, COLOR_CUSTOM_12, + COLOR_CUSTOM_13, COLOR_CUSTOM_14, COLOR_CUSTOM_15, COLOR_CUSTOM_16, + + NUM_PALETTE, + + // Gray Aliases + G000 = K0, + G032 = W1, + G064 = W2, + G096 = W3, + G128 = W4, + G160 = W5, + G192 = W6, + G224 = W7, + G256 = W8 + }; + + // Yeah, this was a PITA to organize. + enum DebugColors_e + { + BG_CONSOLE_OUTPUT // Black Window + , FG_CONSOLE_OUTPUT // White + , BG_CONSOLE_INPUT // Black Window + , FG_CONSOLE_INPUT // Light Blue + + , BG_DISASM_1 // Blue* Odd address + , BG_DISASM_2 // Blue* Even address + + , BG_DISASM_BP_S_C // Red Breakpoint Set (cursor) + , FG_DISASM_BP_S_C // White Breakpoint Set&Ena (cursor) + + // Note: redundant BG_DISASM_BP_0_C = BG_DISASM_BP_S_C + , BG_DISASM_BP_0_C // DimRed Breakpoint Disabled (cursor) + , FG_DISASM_BP_0_C // Gray192 Breakpoint Disabled (cursor) + + , FG_DISASM_BP_S_X // Red Set (not cursor) + , FG_DISASM_BP_0_X // White Disabled (not cursor) + + , BG_DISASM_C // White (Cursor) + , FG_DISASM_C // Blue (Cursor) + + , BG_DISASM_PC_C // Yellow (not cursor) + , FG_DISASM_PC_C // White (not cursor) + + , BG_DISASM_PC_X // Dim Yellow (not cursor) + , FG_DISASM_PC_X // White (not cursor) + + , FG_DISASM_ADDRESS // White addr + , FG_DISASM_OPERATOR // Gray192 : $ (also around instruction addressing mode) + , FG_DISASM_OPCODE // Yellow xx xx xx + , FG_DISASM_MNEMONIC // White LDA + , FG_DISASM_TARGET // Orange FAC8 + , FG_DISASM_SYMBOL // Purple HOME + , FG_DISASM_CHAR // Cyan 'c' + , FG_DISASM_BRANCH // Green ^ = v + + , BG_INFO // Cyan Regs/Stack/BP/Watch/ZP + , FG_INFO_TITLE // White Regs/Stack/BP/Watch/ZP + , FG_INFO_BULLET // 1 + , FG_INFO_OPERATOR // Gray192 : - + , FG_INFO_ADDRESS // Orange FA62 FA63 (Yellow -> Orange) + , FG_INFO_OPCODE // Yellow xx + , FG_INFO_REG // Orange (Breakpoints) + , BG_INFO_INVERSE // White + , FG_INFO_INVERSE // Cyan + , BG_INFO_CHAR // mid Cyan + , FG_INFO_CHAR_HI // White + , FG_INFO_CHAR_LO // Yellow + + , BG_INFO_IO_BYTE // Orange (high bit) + , FG_INFO_IO_BYTE // Orange (non-high bit) + + , BG_DATA_1 // Cyan* Window + , BG_DATA_2 // Cyan* + , FG_DATA_BYTE // default same as FG_DISASM_OPCODE + , FG_DATA_TEXT // default same as FG_DISASM_NMEMONIC + + , BG_SYMBOLS_1 // window + , BG_SYMBOLS_2 + , FG_SYMBOLS_ADDRESS // default same as FG_DISASM_ADDRESS + , FG_SYMBOLS_NAME // default same as FG_DISASM_SYMBOL + + , BG_SOURCE_TITLE + , FG_SOURCE_TITLE + , BG_SOURCE_1 // odd + , BG_SOURCE_2 // even + , FG_SOURCE + + , NUM_COLORS + }; + + +// Commands _______________________________________________________________________________________ + + enum Update_e + { + UPDATE_NOTHING, + UPDATE_BACKGROUND = (1 << 0), + UPDATE_BREAKPOINTS = (1 << 1), + UPDATE_CONSOLE_DISPLAY = (1 << 2), + UPDATE_CONSOLE_INPUT = (1 << 3), + UPDATE_DISASM = (1 << 4), + UPDATE_FLAGS = (1 << 5), + UPDATE_MEM_DUMP = (1 << 6), + UPDATE_REGS = (1 << 7), + UPDATE_STACK = (1 << 8), + UPDATE_SYMBOLS = (1 << 9), + UPDATE_TARGETS = (1 << 10), + UPDATE_WATCH = (1 << 11), + UPDATE_ZERO_PAGE = (1 << 12), + + UPDATE_ALL = -1 + }; + + typedef int Update_t; + + enum + { + MAX_COMMAND_LEN = 12, + + MAX_ARGS = 32, // was 40 + ARG_SYNTAX_ERROR= -1, + MAX_ARG_LEN = 56, // was 12, extended to allow font names + }; + + // NOTE: All Commands return flags of what needs to be redrawn + typedef Update_t (*CmdFuncPtr_t)(int); + + struct Command_t + { + TCHAR m_sName[ MAX_COMMAND_LEN ]; + CmdFuncPtr_t pFunction; + int iCommand; // offset (enum) for direct command name lookup + char *pHelpSummary; // 1 line help summary +// int nHash; // TODO + }; + + // Commands sorted by Category + // NOTE: Commands_e and g_aCommands[] order _MUST_ match !!! Aliases are listed at the end + enum Commands_e + { +// Main / CPU + CMD_ASSEMBLE + , CMD_UNASSEMBLE + , CMD_CALC + , CMD_GO + , CMD_INPUT + , CMD_INPUT_KEY + , CMD_JSR + , CMD_OUTPUT + , CMD_NOP + , CMD_STEP_OVER + , CMD_STEP_OUT + , CMD_TRACE + , CMD_TRACE_FILE + , CMD_TRACE_LINE +// Breakpoints + , CMD_BREAKPOINT + , CMD_BREAKPOINT_ADD_SMART // smart breakpoint + , CMD_BREAKPOINT_ADD_REG // break on: PC == Address (fetch/execute) + , CMD_BREAKPOINT_ADD_PC // alias BPX = BA +// , CMD_BREAKPOINT_SET = CMD_BREAKPOINT_ADD_ADDR // alias +// , CMD_BREAKPOINT_EXEC = CMD_BREAKPOINT_ADD_ADDR // alias + , CMD_BREAKPOINT_ADD_IO // break on: [$C000-$C7FF] Load/Store + , CMD_BREAKPOINT_ADD_MEM // break on: [$0000-$FFFF], excluding IO + , CMD_BREAKPOINT_CLEAR +// , CMD_BREAKPOINT_REMOVE = CMD_BREAKPOINT_CLEAR // alias + , CMD_BREAKPOINT_DISABLE + , CMD_BREAKPOINT_EDIT + , CMD_BREAKPOINT_ENABLE + , CMD_BREAKPOINT_LIST + , CMD_BREAKPOINT_LOAD + , CMD_BREAKPOINT_SAVE +// Benchmark / Timing + , CMD_BENCHMARK +// , CMD_BENCHMARK_START +// , CMD_BENCHMARK_STOP + , CMD_PROFILE +// , CMD_PROFILE_START +// , CMD_PROFILE_STOP +// Config (debugger settings) + , CMD_CONFIG_COLOR // COLOR # rr gg bb + , CMD_CONFIG + , CMD_CONFIG_FONT +// , CMD_CONFIG_FONT2 // PARAM_FONT_DISASM PARAM_FONT_INFO PARAM_FONT_SOURCE + , CMD_CONFIG_HCOLOR // TODO Video :: SETFRAMECOLOR(#,R,G,B) + , CMD_CONFIG_LOAD + , CMD_CONFIG_MONOCHROME // MONO # rr gg bb + , CMD_CONFIG_RUN + , CMD_CONFIG_SAVE +// Cursor + , CMD_CURSOR_JUMP_PC // Shift + , CMD_CURSOR_SET_PC // Ctrl + , CMD_CURSOR_JUMP_RET_ADDR + , CMD_CURSOR_LINE_UP // Smart Line Up + , CMD_CURSOR_LINE_UP_1 // Shift + , CMD_CURSOR_LINE_DOWN // Smart Line Down + , CMD_CURSOR_LINE_DOWN_1 // Shift +// , CMD_CURSOR_PAGE_UP +// , CMD_CURSOR_PAGE_DOWN + , CMD_CURSOR_PAGE_UP + , CMD_CURSOR_PAGE_UP_256 // up to nearest page boundary + , CMD_CURSOR_PAGE_UP_4K // Up to nearest 4K boundary + + , CMD_CURSOR_PAGE_DOWN + , CMD_CURSOR_PAGE_DOWN_256 // Down to nearest page boundary + , CMD_CURSOR_PAGE_DOWN_4K // Down to nearest 4K boundary +// Flags - CPU + , CMD_FLAG_CLEAR // Flag order must match g_aFlagNames CZIDBRVN + , CMD_FLAG_CLR_C // 8 + , CMD_FLAG_CLR_Z // 7 + , CMD_FLAG_CLR_I // 6 + , CMD_FLAG_CLR_D // 5 + , CMD_FLAG_CLR_B // 4 + , CMD_FLAG_CLR_R // 3 + , CMD_FLAG_CLR_V // 2 + , CMD_FLAG_CLR_N // 1 + + , CMD_FLAG_SET // Flag order must match g_aFlagNames CZIDBRVN + , CMD_FLAG_SET_C // 8 + , CMD_FLAG_SET_Z // 7 + , CMD_FLAG_SET_I // 6 + , CMD_FLAG_SET_D // 5 + , CMD_FLAG_SET_B // 4 + , CMD_FLAG_SET_R // 3 + , CMD_FLAG_SET_V // 2 + , CMD_FLAG_SET_N // 1 +// Help + , CMD_HELP_LIST + , CMD_HELP_SPECIFIC + , CMD_VERSION + , CMD_MOTD // Message of the Day +// Memory + , CMD_MEMORY_COMPARE + + , _CMD_MEM_MINI_DUMP_HEX_1_1 // alias MD + , _CMD_MEM_MINI_DUMP_HEX_1_2 // alias MD = D + , CMD_MEM_MINI_DUMP_HEX_1 + , CMD_MEM_MINI_DUMP_HEX_2 + , _CMD_MEM_MINI_DUMP_HEX_1_3 // alias M1 + , _CMD_MEM_MINI_DUMP_HEX_2_1 // alias M2 + + , CMD_MEM_MINI_DUMP_ASCII_1 // ASCII + , CMD_MEM_MINI_DUMP_ASCII_2 + , CMD_MEM_MINI_DUMP_APPLE_1 // Low-Bit inverse, High-Bit normal + , CMD_MEM_MINI_DUMP_APPLE_2 +// , CMD_MEM_MINI_DUMP_TXT_LO_1 // ASCII (Controls Chars) +// , CMD_MEM_MINI_DUMP_TXT_LO_2 +// , CMD_MEM_MINI_DUMP_TXT_HI_1 // ASCII (High Bit) +// , CMD_MEM_MINI_DUMP_TXT_HI_2 + +// , CMD_MEMORY_DUMP = CMD_MEM_MINI_DUMP_HEX_1 + , CMD_MEMORY_EDIT + , CMD_MEMORY_ENTER_BYTE + , CMD_MEMORY_ENTER_WORD + , CMD_MEMORY_MOVE + , CMD_MEMORY_SEARCH + , CMD_MEMORY_SEARCH_ASCII // Ascii Text + , CMD_MEMORY_SEARCH_TXT_LO // Control Chars + , CMD_MEMORY_SEARCH_TXT_HI // Flashing Chars, Hi-Bit Set + , CMD_MEMORY_SEARCH_HEX + , CMD_MEMORY_FILL +// Registers - CPU + , CMD_REGISTER_SET +// Source Level Debugging + , CMD_SOURCE + , CMD_SYNC +// Stack - CPU +// , CMD_STACK_LIST + , CMD_STACK_POP + , CMD_STACK_POP_PSEUDO + , CMD_STACK_PUSH +// , CMD_STACK_RETURN +// Symbols + , CMD_SYMBOLS_LOOKUP +// , CMD_SYMBOLS + , CMD_SYMBOLS_MAIN + , CMD_SYMBOLS_USER + , CMD_SYMBOLS_SRC +// , CMD_SYMBOLS_FIND +// , CMD_SYMBOLS_CLEAR + , CMD_SYMBOLS_INFO + , CMD_SYMBOLS_LIST +// , CMD_SYMBOLS_LOAD_1 +// , CMD_SYMBOLS_LOAD_2 +// , CMD_SYMBOLS_SAVE +// Variables +// , CMD_VARIABLES_CLEAR +// , CMD_VARIABLES_DEFINE +// , CMD_VARIABLES_DEFINE_INT8 +// , CMD_VARIABLES_DEFINE_INT16 +// , CMD_VARIABLES_LIST +// , CMD_VARIABLES_LOAD +// , CMD_VARIABLES_SAVE +// , CMD_VARIABLES_SET +// Watch + , CMD_WATCH_ADD + , CMD_WATCH_CLEAR + , CMD_WATCH_DISABLE + , CMD_WATCH_ENABLE + , CMD_WATCH_LIST + , CMD_WATCH_LOAD + , CMD_WATCH_SAVE +// Window +// , CMD_WINDOW_COLOR_CUSTOM + , CMD_WINDOW + + , CMD_WINDOW_CODE + , CMD_WINDOW_CODE_1 + , CMD_WINDOW_CODE_2 + + , CMD_WINDOW_CONSOLE + + , CMD_WINDOW_DATA + , CMD_WINDOW_DATA_1 + , CMD_WINDOW_DATA_2 + + // SOURCE is reserved for source level debugging + , CMD_WINDOW_SOURCE_1 + , CMD_WINDOW_SOURCE_2 + +// , CMD_WINDOW_STACK_1 +// , CMD_WINDOW_STACK_2 + + // SYMBOLS is reserved for symbols lookup/commands +// , CMD_WINDOW_SYMBOLS_1 +// , CMD_WINDOW_SYMBOLS_2 + +// , CMD_WINDOW_ZEROPAGE_1 +// , CMD_WINDOW_ZEROPAGE_2 + + , CMD_WINDOW_OUTPUT +// , CMD_WINDOW_SOURCE +// ZeroPage + , CMD_ZEROPAGE_POINTER + , CMD_ZEROPAGE_POINTER_0 + , CMD_ZEROPAGE_POINTER_1 + , CMD_ZEROPAGE_POINTER_2 + , CMD_ZEROPAGE_POINTER_3 + , CMD_ZEROPAGE_POINTER_4 + , CMD_ZEROPAGE_POINTER_ADD + , CMD_ZEROPAGE_POINTER_CLEAR + , CMD_ZEROPAGE_POINTER_DISABLE + , CMD_ZEROPAGE_POINTER_ENABLE + , CMD_ZEROPAGE_POINTER_LIST + , CMD_ZEROPAGE_POINTER_LOAD + , CMD_ZEROPAGE_POINTER_SAVE + + , NUM_COMMANDS + }; + + +// CPU + Update_t CmdAssemble (int nArgs); + Update_t CmdUnassemble (int nArgs); // code dump, aka, Unassemble + Update_t CmdCalculator (int nArgs); + Update_t CmdGo (int nArgs); + Update_t CmdInput (int nArgs); + Update_t CmdJSR (int nArgs); + Update_t CmdNOP (int nArgs); + Update_t CmdOutput (int nArgs); + Update_t CmdFeedKey (int nArgs); + Update_t CmdStepOut (int nArgs); + Update_t CmdStepOver (int nArgs); + Update_t CmdTrace (int nArgs); // alias for CmdStepIn + Update_t CmdTraceFile (int nArgs); + Update_t CmdTraceLine (int nArgs); + +// Breakpoints + Update_t CmdBreakpoint (int nArgs); + Update_t CmdBreakpointAddSmart(int nArgs); + Update_t CmdBreakpointAddReg (int nArgs); + Update_t CmdBreakpointAddPC (int nArgs); + Update_t CmdBreakpointAddIO (int nArgs); + Update_t CmdBreakpointAddMem (int nArgs); + Update_t CmdBreakpointClear (int nArgs); + Update_t CmdBreakpointDisable (int nArgs); + Update_t CmdBreakpointEdit (int nArgs); + Update_t CmdBreakpointEnable (int nArgs); + Update_t CmdBreakpointList (int nArgs); + Update_t CmdBreakpointLoad (int nArgs); + Update_t CmdBreakpointSave (int nArgs); +// Benchmark + Update_t CmdBenchmark (int nArgs); + Update_t CmdBenchmarkStart (int nArgs); //Update_t CmdSetupBenchmark (int nArgs); + Update_t CmdBenchmarkStop (int nArgs); //Update_t CmdExtBenchmark (int nArgs); + Update_t CmdProfile (int nArgs); + Update_t CmdProfileStart (int nArgs); + Update_t CmdProfileStop (int nArgs); +// Config + Update_t CmdConfig (int nArgs); + Update_t CmdConfigBase (int nArgs); + Update_t CmdConfigBaseHex (int nArgs); + Update_t CmdConfigBaseDec (int nArgs); + Update_t CmdConfigColorMono (int nArgs); + Update_t CmdConfigFont (int nArgs); + Update_t CmdConfigHColor (int nArgs); + Update_t CmdConfigLoad (int nArgs); + Update_t CmdConfigRun (int nArgs); + Update_t CmdConfigSave (int nArgs); + Update_t CmdConfigSetFont (int nArgs); + Update_t CmdConfigGetFont (int nArgs); +// Cursor + Update_t CmdCursorLineDown (int nArgs); + Update_t CmdCursorLineUp (int nArgs); + Update_t CmdCursorJumpPC (int nArgs); + Update_t CmdCursorJumpRetAddr (int nArgs); + Update_t CmdCursorRunUntil (int nArgs); + Update_t CmdCursorSetPC (int nArgs); + Update_t CmdCursorPageDown (int nArgs); + Update_t CmdCursorPageDown256 (int nArgs); + Update_t CmdCursorPageDown4K (int nArgs); + Update_t CmdCursorPageUp (int nArgs); + Update_t CmdCursorPageUp256 (int nArgs); + Update_t CmdCursorPageUp4K (int nArgs); +// Help + Update_t CmdHelpList (int nArgs); + Update_t CmdHelpSpecific (int Argss); + Update_t CmdVersion (int nArgs); + Update_t CmdMOTD (int nArgs); + +// Flags + Update_t CmdFlag (int nArgs); + Update_t CmdFlagClear (int nArgs); + Update_t CmdFlagSet (int nArgs); +// Memory (Data) + Update_t CmdMemoryCompare (int nArgs); + Update_t CmdMemoryMiniDumpHex (int nArgs); + Update_t CmdMemoryMiniDumpAscii(int nArgs); + Update_t CmdMemoryMiniDumpApple(int nArgs); +// Update_t CmdMemoryMiniDumpLow (int nArgs); +// Update_t CmdMemoryMiniDumpHigh (int nArgs); + + Update_t CmdMemoryEdit (int nArgs); + Update_t CmdMemoryEnterByte (int nArgs); + Update_t CmdMemoryEnterWord (int nArgs); + Update_t CmdMemoryFill (int nArgs); + Update_t CmdMemoryMove (int nArgs); + Update_t CmdMemorySearch (int nArgs); + Update_t CmdMemorySearchLowBit (int nArgs); + Update_t CmdMemorySearchHiBit (int nArgs); + Update_t CmdMemorySearchHex (int nArgs); + Update_t CmdMemorySearchText (int nArgs); +// Registers + Update_t CmdRegisterSet (int nArgs); +// Source Level Debugging + Update_t CmdSource (int nArgs); + Update_t CmdSync (int nArgs); +// Stack + Update_t CmdStackPush (int nArgs); + Update_t CmdStackPop (int nArgs); + Update_t CmdStackPopPseudo (int nArgs); + Update_t CmdStackReturn (int nArgs); +// Symbols + Update_t CmdSymbols (int nArgs); + Update_t CmdSymbolsClear (int nArgs); + Update_t CmdSymbolsList (int nArgs); + Update_t CmdSymbolsLoad (int nArgs); + Update_t CmdSymbolsInfo (int nArgs); + Update_t CmdSymbolsMain (int nArgs); + Update_t CmdSymbolsUser (int nArgs); + Update_t CmdSymbolsSave (int nArgs); + Update_t CmdSymbolsSource (int nArgs); +// Vars +// Update_t CmdVarsAdd (int nArgs); + Update_t CmdVarsClear (int nArgs); + Update_t CmdVarsDefine (int nArgs); + Update_t CmdVarsDefineInt8 (int nArgs); + Update_t CmdVarsDefineInt16 (int nArgs); + Update_t CmdVarsList (int nArgs); + Update_t CmdVarsLoad (int nArgs); + Update_t CmdVarsSave (int nArgs); + Update_t CmdVarsSet (int nArgs); +// Watch + Update_t CmdWatchAdd (int nArgs); + Update_t CmdWatchClear (int nArgs); + Update_t CmdWatchDisable (int nArgs); + Update_t CmdWatchEnable (int nArgs); + Update_t CmdWatchList (int nArgs); + Update_t CmdWatchLoad (int nArgs); + Update_t CmdWatchSave (int nArgs); +// Window + Update_t CmdWindow (int nArgs); + Update_t CmdWindowCycleNext (int nArgs); + Update_t CmdWindowCyclePrev (int nArgs); + Update_t CmdWindowLast (int nArgs); + + Update_t CmdWindowShowCode (int nArgs); + Update_t CmdWindowShowCode1 (int nArgs); + Update_t CmdWindowShowCode2 (int nArgs); + Update_t CmdWindowShowData (int nArgs); + Update_t CmdWindowShowData1 (int nArgs); + Update_t CmdWindowShowData2 (int nArgs); + Update_t CmdWindowShowSymbols1(int nArgs); + Update_t CmdWindowShowSymbols2(int nArgs); + Update_t CmdWindowShowSource (int nArgs); + Update_t CmdWindowShowSource1 (int nArgs); + Update_t CmdWindowShowSource2 (int nArgs); + + Update_t CmdWindowViewCode (int nArgs); + Update_t CmdWindowViewConsole (int nArgs); + Update_t CmdWindowViewData (int nArgs); + Update_t CmdWindowViewOutput (int nArgs); + Update_t CmdWindowViewSource (int nArgs); + Update_t CmdWindowViewSymbols (int nArgs); + + Update_t CmdWindowWidthToggle (int nArgs); + +// Update_t CmdZeroPageShow (int nArgs); +// Update_t CmdZeroPageHide (int nArgs); +// Update_t CmdZeroPageToggle (int nArgs); + +// ZeroPage + Update_t CmdZeroPage (int nArgs); + Update_t CmdZeroPageAdd (int nArgs); + Update_t CmdZeroPageClear (int nArgs); + Update_t CmdZeroPageDisable (int nArgs); + Update_t CmdZeroPageEnable (int nArgs); + Update_t CmdZeroPageList (int nArgs); + Update_t CmdZeroPageLoad (int nArgs); + Update_t CmdZeroPageSave (int nArgs); + Update_t CmdZeroPagePointer (int nArgs); + + +// Cursor _________________________________________________________________________________________ + enum Cursor_Align_e + { + CURSOR_ALIGN_TOP, + CURSOR_ALIGN_CENTER + }; + + enum CursorHiLightState_e + { + CURSOR_NORMAL , // White + CURSOR_CPU_PC , // Yellow + CURSOR_BREAKPOINT, // Red + }; + + +// Disassembly ____________________________________________________________________________________ + enum FormatDisasm_e + { + DISASM_IMMEDIATE_CHAR = (1 << 0), + DISASM_TARGET_SYMBOL = (1 << 1), + DISASM_TARGET_OFFSET = (1 << 2), + DISASM_BRANCH_INDICATOR = (1 << 3), + }; + +// Font ___________________________________________________________________________________________ + enum FontType_e + { +// FONT_DEFAULT + FONT_INFO + , FONT_CONSOLE + , FONT_DISASM_DEFAULT + , FONT_DISASM_BRANCH + // , FONT_SOURCE + , NUM_FONTS + }; + + enum + { + MAX_FONT_NAME = MAX_ARG_LEN // was 64 + }; + + enum FontSpacing_e + { + FONT_SPACING_CLASSIC , // least lines (most spacing) + FONT_SPACING_CLEAN , // more lines (minimal spacing) + FONT_SPACING_COMPRESSED, // max lines (least spacing) + NUM_FONT_SPACING + }; + + struct FontConfig_t + { + TCHAR _sFontName[ MAX_FONT_NAME ]; + HFONT _hFont; +// int _iFontType; + int _nFontWidthAvg; + int _nFontWidthMax; + int _nFontHeight; + int _nLineHeight; // may or may not include spacer + }; + + +// Instructions / Opcodes _________________________________________________________________________ + + //#define SUPPORT_Z80_EMU + #ifdef SUPPORT_Z80_EMU + #define OUTPUT_Z80_REGS + #define REG_AF 0xF0 + #define REG_BC 0xF2 + #define REG_DE 0xF4 + #define REG_HL 0xF6 + #define REG_IX 0xF8 + #endif + + enum MemoryAccess_e + { + MEM_R = (1 << 0), // Read + MEM_W = (1 << 1), // Write + MEM_RI = (1 << 2), // Read Implicit (Implied) + MEM_WI = (1 << 3), // Write Implicit (Implied) + MEM_S = (1 << 4), // Stack (Read/Write) + MEM_IM = (1 << 5), // Immediate - Technically reads target byte + + NUM_MEM_ACCESS, + + // Alias + MEM_READ = (1 << 0), + MEM_WRITE = (1 << 1), + }; + + enum + { + NUM_OPCODES = 256, +// MAX_OPCODES = 256, +// MAX_INSTRUCTIONS = 256, + MAX_MNEMONIC_LEN = 3, + }; + + struct Opcodes_t + { + char sMnemonic[ MAX_MNEMONIC_LEN+1 ]; + // int16 for structure 8-byte alignment + short nAddressMode; // TODO/FIX: nOpmode + short nMemoryAccess; + }; + + struct Instruction2_t + { + TCHAR sMnemonic[MAX_MNEMONIC_LEN+1]; + int nAddressMode; + int iMemoryAccess; + }; + + enum Opcode_e + { + OPCODE_BRA = 0x80, + + OPCODE_JSR = 0x20, + OPCODE_JMP_ABS = 0x4C, + OPCODE_JMP_IABS = 0x6C, + OPCODE_JMP_ABSINDX = 0x7C, + }; + + // Hashing for Assembler + typedef unsigned int Hash_t; + + struct HashOpcode_t + { + int m_iOpcode; + Hash_t m_nValue; + + // functor + bool operator () (const HashOpcode_t & rLHS, const HashOpcode_t & rRHS) const + { + bool bLessThan = (rLHS.m_nValue < rRHS.m_nValue); + return bLessThan; + } + }; + + + // Note: int causes overflow when profiling for any amount of time. + // typedef unsigned int Profile_t; + // i.e. + // double nPercent = static_cast(100 * tProfileOpcode.uProfile) / nOpcodeTotal; // overflow + typedef double Profile_t; + + struct ProfileOpcode_t + { + int m_iOpcode; + Profile_t m_nCount; // Histogram + + // functor + bool operator () (const ProfileOpcode_t & rLHS, const ProfileOpcode_t & rRHS) const + { + bool bGreater = (rLHS.m_nCount > rRHS.m_nCount); + return bGreater; + } + }; + + struct ProfileOpmode_t + { + int m_iOpmode; + Profile_t m_nCount; // Histogram + + // functor + bool operator () (const ProfileOpmode_t & rLHS, const ProfileOpmode_t & rRHS) const + { + bool bGreater = (rLHS.m_nCount > rRHS.m_nCount); + return bGreater; + } + }; + + enum ProfileFormat_e + { + PROFILE_FORMAT_SPACE, + PROFILE_FORMAT_TAB, + PROFILE_FORMAT_COMMA, + }; + +// Memory _________________________________________________________________________________________ + + enum DEVICE_e + { + DEV_MEMORY, + DEV_DISK2 , + DEV_SY6522, + DEV_AY8910, + NUM_DEVICES + }; + + enum MemoryView_e + { + MEM_VIEW_HEX , + + // 0x00 .. 0x1F Ctrl (Inverse) + // 0x20 .. 0x7F Flash / MouseText (Cyan) + // 0x80 .. 0x9F Hi-Bit Ctrl (Yellow) + // 0xA0 .. 0xFF Hi-Bit Normal (White) + MEM_VIEW_ASCII , + MEM_VIEW_APPLE , // Low-Bit ASCII (Colorized Background) +// MEM_VIEW_TXT_LO, // Ctrl Chars mapped to visible range, and inverse +// MEM_VIEW_TXT_HI, // High Bit Ascii + NUM_MEM_VIEWS + }; + + struct MemoryDump_t + { + bool bActive; + WORD nAddress; // nAddressMemDump; // was USHORT + DEVICE_e eDevice; + MemoryView_e eView; + }; + + enum MemoryDump_e + { + MEM_DUMP_1, + MEM_DUMP_2, + NUM_MEM_DUMPS + }; + + enum MemoryMiniDump_e + { + NUM_MEM_MINI_DUMPS = 2 + }; + +// Parameters _____________________________________________________________________________________ + + /* i.e. + SYM LOAD = $C600 (1) type: string, nVal1 = symlookup; (2) type: operator, token: EQUAL; (3) type: address, token:DOLLAR + BP LOAD type: + BP $LOAD type: (1) = symbol, val=1adress + */ + enum ArgToken_e // Arg Token Type + { + TOKEN_ALPHANUMERIC // + , TOKEN_AMPERSAND // & +// , TOKEN_AT // @ TODO: pointer reference. i.e. U @3F0 + , TOKEN_BSLASH // \xx Hex Literal + , TOKEN_CARET // ^ +// , TOKEN_CHAR + , TOKEN_COLON // : Range Argument1.n2 = Argument2 + , TOKEN_COMMA // , Length Argument1.n2 = Argument2 +// , TOKEN_DIGIT + , TOKEN_DOLLAR // $ Address (symbol lookup forced) + , TOKEN_EQUAL // = Assign Argment.n2 = Argument2 + , TOKEN_EXCLAMATION // ! + , TOKEN_FSLASH // / + , TOKEN_GREATER_THAN // > + , TOKEN_HASH // # Value no symbol lookup + , TOKEN_LEFT_PAREN // ( + , TOKEN_LESS_THAN // < + , TOKEN_MINUS // - Delta Argument1 -= Argument2 + , TOKEN_PERCENT // % + , TOKEN_PIPE // | + , TOKEN_PLUS // + Delta Argument1 += Argument2 + , TOKEN_QUOTED // " + , TOKEN_RIGHT_PAREN // ) + , TOKEN_SEMI // ; Command Seperator + , TOKEN_SPACE // Token Delimiter +// , TOKEN_TAB // '\t' + + , NUM_TOKENS // signal none, or bad + , NO_TOKEN = NUM_TOKENS + + // Merged tokens + , TOKEN_LESS_EQUAL // + , TOKEN_GREATER_EQUAL // + }; + + enum ArgType_e + { + TYPE_ADDRESS = (1 << 0) // $#### or $symbolname + , TYPE_OPERATOR = (1 << 1) + , TYPE_QUOTED = (1 << 2) // "..." + , TYPE_STRING = (1 << 3) // LOAD + , TYPE_RANGE = (1 << 4) + , TYPE_LENGTH = (1 << 5) + , TYPE_VALUE = (1 << 6) + , TYPE_NO_REG = (1 << 7) // Don't do register value -> Argument.nValue + , TYPE_NO_SYM = (1 << 8) // Don't do symbol lookup -> Argument.nValue + }; + + struct TokenTable_t + { + ArgToken_e eToken; + ArgType_e eType ; + TCHAR sToken; // char intentional + }; + + struct Arg_t + { // Array Chars comes first, for alignment + TCHAR sArg[ MAX_ARG_LEN ]; + int nArgLen; // Needed for TextSearch "ABC\x00" + WORD nVal1 ; // 2 + WORD nVal2 ; // 2 If we have a Len (,) or Range (-) + // Enums and Bools should come last for alignment + ArgToken_e eToken ; // 1/2/4 + int bType ; // 1/2/4 // Flags of ArgType_e + DEVICE_e eDevice; // 1/2/4 + bool bSymbol; // 1 + }; + + // NOTE: Order MUST match g_aParameters[] !!! + enum Parameters_e + { + // Note: Order must match Breakpoint_Operator_t + // Note: Order must much _PARAM_BREAKPOINT_* + // Note: Order must match g_aBreakpointSymbols + _PARAM_BREAKPOINT_BEGIN + , PARAM_BP_LESS_EQUAL = _PARAM_BREAKPOINT_BEGIN // <= + , PARAM_BP_LESS_THAN // < + , PARAM_BP_EQUAL // = + , PARAM_BP_NOT_EQUAL // ! + , PARAM_BP_GREATER_THAN // > + , PARAM_BP_GREATER_EQUAL // >= + , PARAM_BP_READ // R + ,_PARAM_BP_READ // ? alias READ + , PARAM_BP_WRITE // W + ,_PARAM_BP_WRITE // @ alias write + , PARAM_BP_READ_WRITE // * alias READ WRITE + , _PARAM_BREAKPOINT_END + , PARAM_BREAKPOINT_NUM = _PARAM_BREAKPOINT_END - _PARAM_BREAKPOINT_BEGIN + +// , PARAM_SIZE // TODO: used by FONT SIZE + + // Note: Order must match Breakpoint_Source_t + , _PARAM_REGS_BEGIN = _PARAM_BREAKPOINT_END // Daisy Chain + , PARAM_REG_A = _PARAM_REGS_BEGIN + , PARAM_REG_X + , PARAM_REG_Y + + , PARAM_REG_PC // Program Counter + , PARAM_REG_SP // Stack Pointer + + , PARAM_FLAGS // Processor Status + , PARAM_FLAG_C // Carry + , PARAM_FLAG_Z // Zero + , PARAM_FLAG_I // Interrupt + , PARAM_FLAG_D // Decimal + , PARAM_FLAG_B // Break + , PARAM_FLAG_R // Reserved + , PARAM_FLAG_V // Overflow + , PARAM_FLAG_N // Sign + , _PARAM_REGS_END + , PARAM_REGS_NUM = _PARAM_REGS_END - _PARAM_REGS_BEGIN + + , _PARAM_FONT_BEGIN = _PARAM_REGS_END // Daisy Chain + , PARAM_FONT_MODE = _PARAM_FONT_BEGIN + , _PARAM_FONT_END + , PARAM_FONT_NUM = _PARAM_FONT_END - _PARAM_FONT_BEGIN + + , _PARAM_GENERAL_BEGIN = _PARAM_FONT_END // Daisy Chain + , PARAM_FIND = _PARAM_GENERAL_BEGIN + , PARAM_CLEAR + , PARAM_LOAD + , PARAM_LIST + , PARAM_OFF + , PARAM_ON + , PARAM_RESET + , PARAM_SAVE + , PARAM_START + , PARAM_STOP + , _PARAM_GENERAL_END + , PARAM_GENERAL_NUM = _PARAM_GENERAL_END - _PARAM_GENERAL_BEGIN + + , _PARAM_HELPCATEGORIES_BEGIN = _PARAM_GENERAL_END // Daisy Chain + , PARAM_WILDSTAR = _PARAM_HELPCATEGORIES_BEGIN + , PARAM_CAT_BREAKPOINTS + , PARAM_CAT_CONFIG + , PARAM_CAT_CPU + , PARAM_CAT_FLAGS + , PARAM_CAT_MEMORY + ,_PARAM_CAT_MEM // alias MEM = MEMORY + , PARAM_CAT_SYMBOLS + , PARAM_CAT_WATCHES + , PARAM_CAT_WINDOW + , PARAM_CAT_ZEROPAGE + , _PARAM_HELPCATEGORIES_END + , PARAM_HELPCATEGORIES_NUM = _PARAM_HELPCATEGORIES_END - _PARAM_HELPCATEGORIES_BEGIN + + , _PARAM_SOURCE_BEGIN = _PARAM_HELPCATEGORIES_END // Daisy Chain + , PARAM_SRC_MEMORY = _PARAM_SOURCE_BEGIN + ,_PARAM_SRC_MEMORY // alias MEM = MEMORY + , PARAM_SRC_SYMBOLS + ,_PARAM_SRC_SYMBOLS // alias SYM = SYMBOLS + , PARAM_SRC_MERLIN + , PARAM_SRC_ORCA + , _PARAM_SOURCE_END + , PARAM_SOURCE_NUM = _PARAM_SOURCE_END - _PARAM_SOURCE_BEGIN + + , _PARAM_WINDOW_BEGIN = _PARAM_SOURCE_END // Daisy Chain + // These are the "full screen" "windows" / Panels / Tab sheets + , PARAM_CODE = _PARAM_WINDOW_BEGIN // disasm +// , PARAM_CODE_1 // disasm top // removed, since can't set top window for code/data + , PARAM_CODE_2 // disasm bot + , PARAM_CONSOLE + , PARAM_DATA // data all +// , PARAM_DATA_1 // data top // removed, since can't set top window for code/data + , PARAM_DATA_2 // data bot + , PARAM_DISASM + , PARAM_INFO // Togle INFO on/off + , PARAM_SOURCE + , _PARAM_SRC // alias SRC = SOURCE +// , PARAM_SOURCE_1 // source top // removed, since can't set top window for code/data + , PARAM_SOURCE_2 // source bot + , PARAM_SYMBOLS + , _PARAM_SYM // alias SYM = SYMBOLS +// , PARAM_SYMBOL_1 // symbols top // removed, since can't set top window for code/data + , PARAM_SYMBOL_2 // symbols bot + , _PARAM_WINDOW_END + , PARAM_WINDOW_NUM = _PARAM_WINDOW_END - _PARAM_WINDOW_BEGIN + + , NUM_PARAMS = _PARAM_WINDOW_END // Daisy Chain + +// Aliases (actuall names) +// ,PARAM_DISASM = PARAM_CODE_1 +// , PARAM_BREAKPOINT_READ = PARAM_READ +// , PARAM_BREAKPOINT_WRITE = PARAM_WRITE + }; + + +// Source Level Debugging _________________________________________________________________________ + +// struct SourceAssembly_t +// { +// int nLine; +// char sFileName[MAX_PATH]; +// } + enum + { + NO_SOURCE_LINE = -1 + }; + + typedef map SourceAssembly_t; // Address -> Line # & FileName + + +// Symbols ________________________________________________________________________________________ + + enum + { + MAX_SYMBOLS_LEN = 13 + }; + + // **************************************** + // WARNING: This is the simple enumeration. + // See: g_aSymbols[] + // **************************************** + enum Symbols_e + { + SYMBOLS_MAIN, + SYMBOLS_USER, + SYMBOLS_SRC , + NUM_SYMBOL_TABLES = 3 + }; + + // **************************************** + // WARNING: This is the bit-flags to select which table. + // See: CmdSymbolsListTable() + // **************************************** + enum SymbolTable_e + { + SYMBOL_TABLE_MAIN = (1 << 0), + SYMBOL_TABLE_USER = (1 << 1), + SYMBOL_TABLE_SRC = (1 << 2), + }; + + typedef map SymbolTable_t; + +// Window _________________________________________________________________________________________ + + enum Window_e + { + WINDOW_CODE , + WINDOW_DATA , + WINDOW_CONSOLE , + NUM_WINDOWS , +// Not implemented yet + WINDOW_IO , // soft switches $addr name state + WINDOW_SYMBOLS , + WINDOW_ZEROPAGE, + WINDOW_SOURCE , + }; + + struct WindowSplit_t + { + bool bSplit; + Window_e eTop; + Window_e eBot; + // TODO: nTopHeight + // TODO: nBotHeight + }; + diff --git a/AppleWin/source/Disk.cpp b/AppleWin/source/Disk.cpp new file mode 100644 index 00000000..d42fb008 --- /dev/null +++ b/AppleWin/source/Disk.cpp @@ -0,0 +1,583 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Disk + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop + +typedef struct _floppyrec { + TCHAR imagename[16]; + TCHAR fullname[128]; + HIMAGE imagehandle; + int track; + LPBYTE trackimage; + int phase; + int byte; + BOOL writeprotected; + BOOL trackimagedata; + BOOL trackimagedirty; + DWORD spinning; + DWORD writelight; + int nibbles; +} floppyrec, *floppyptr; + +static int currdrive = 0; +static BOOL diskaccessed = 0; +BOOL enhancedisk = 1; +static floppyrec floppy[DRIVES]; +static BYTE floppylatch = 0; +static BOOL floppymotoron = 0; +static BOOL floppywritemode = 0; + +static void ReadTrack (int drive); +static void RemoveDisk (int drive); +static void WriteTrack (int drive); + +//=========================================================================== +void CheckSpinning () { + DWORD modechange = (floppymotoron && !floppy[currdrive].spinning); + if (floppymotoron) + floppy[currdrive].spinning = 20000; + if (modechange) + FrameRefreshStatus(DRAW_LEDS); +} + +//=========================================================================== +void GetImageTitle (LPCTSTR imagefilename, floppyptr fptr) { + TCHAR imagetitle[128]; + LPCTSTR startpos = imagefilename; + + // imagetitle = + if (_tcsrchr(startpos,TEXT('\\'))) + startpos = _tcsrchr(startpos,TEXT('\\'))+1; + _tcsncpy(imagetitle,startpos,127); + imagetitle[127] = 0; + + // if imagetitle contains a lowercase char, then found=1 (why?) + BOOL found = 0; + int loop = 0; + while (imagetitle[loop] && !found) + { + if (IsCharLower(imagetitle[loop])) + found = 1; + else + loop++; + } + + if ((!found) && (loop > 2)) + CharLowerBuff(imagetitle+1,_tcslen(imagetitle+1)); + + // fptr->fullname = + _tcsncpy(fptr->fullname,imagetitle,127); + fptr->fullname[127] = 0; + + if (imagetitle[0]) + { + LPTSTR dot = imagetitle; + if (_tcsrchr(dot,TEXT('.'))) + dot = _tcsrchr(dot,TEXT('.')); + if (dot > imagetitle) + *dot = 0; + } + + // fptr->imagename = (ie. no extension) + _tcsncpy(fptr->imagename,imagetitle,15); + fptr->imagename[15] = 0; +} + +//=========================================================================== + +static void AllocTrack(int drive) +{ + floppyptr fptr = &floppy[drive]; + fptr->trackimage = (LPBYTE)VirtualAlloc(NULL,NIBBLES_PER_TRACK,MEM_COMMIT,PAGE_READWRITE); +} + +//=========================================================================== +static void ReadTrack (int drive) { + floppyptr fptr = &floppy[drive]; + if (fptr->track >= TRACKS) { + fptr->trackimagedata = 0; + return; + } + if (!fptr->trackimage) + AllocTrack(drive); + if (fptr->trackimage && fptr->imagehandle) { + ImageReadTrack(fptr->imagehandle, + fptr->track, + fptr->phase, + fptr->trackimage, + &fptr->nibbles); + fptr->byte = 0; + fptr->trackimagedata = (fptr->nibbles != 0); + } +} + +//=========================================================================== +static void RemoveDisk (int drive) { + floppyptr fptr = &floppy[drive]; + if (fptr->imagehandle) { + if (fptr->trackimage && fptr->trackimagedirty) + WriteTrack(drive); + ImageClose(fptr->imagehandle); + fptr->imagehandle = (HIMAGE)0; + } + if (fptr->trackimage) { + VirtualFree(fptr->trackimage,0,MEM_RELEASE); + fptr->trackimage = NULL; + fptr->trackimagedata = 0; + } +} + +//=========================================================================== +static void WriteTrack (int drive) { + floppyptr fptr = &floppy[drive]; + if (fptr->track >= TRACKS) + return; + if (fptr->trackimage && fptr->imagehandle) + ImageWriteTrack(fptr->imagehandle, + fptr->track, + fptr->phase, + fptr->trackimage, + fptr->nibbles); + fptr->trackimagedirty = 0; +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +void DiskBoot () { + + // THIS FUNCTION RELOADS A PROGRAM IMAGE IF ONE IS LOADED IN DRIVE ONE. + // IF A DISK IMAGE OR NO IMAGE IS LOADED IN DRIVE ONE, IT DOES NOTHING. + if (floppy[0].imagehandle && ImageBoot(floppy[0].imagehandle)) + floppymotoron = 0; + +} + +//=========================================================================== +BYTE __stdcall DiskControlMotor (WORD, BYTE address, BYTE, BYTE, ULONG) { + floppymotoron = address & 1; + CheckSpinning(); + return MemReturnRandomData(1); +} + +//=========================================================================== +BYTE __stdcall DiskControlStepper (WORD, BYTE address, BYTE, BYTE, ULONG) { + floppyptr fptr = &floppy[currdrive]; + if (address & 1) { + int phase = (address >> 1) & 3; + int direction = 0; + if (phase == ((fptr->phase+1) & 3)) + direction = 1; + if (phase == ((fptr->phase+3) & 3)) + direction = -1; + if (direction) { + fptr->phase = MAX(0,MIN(79,fptr->phase+direction)); + if (!(fptr->phase & 1)) { + int newtrack = MIN(TRACKS-1,fptr->phase >> 1); + if (newtrack != fptr->track) { + if (fptr->trackimage && fptr->trackimagedirty) + WriteTrack(currdrive); + fptr->track = newtrack; + fptr->trackimagedata = 0; + } + } + } + } + return (address == 0xE0) ? 0xFF : MemReturnRandomData(1); +} + +//=========================================================================== +void DiskDestroy () { + RemoveDisk(0); + RemoveDisk(1); +} + +//=========================================================================== +BYTE __stdcall DiskEnable (WORD, BYTE address, BYTE, BYTE, ULONG) { + currdrive = address & 1; + floppy[!currdrive].spinning = 0; + floppy[!currdrive].writelight = 0; + CheckSpinning(); + return 0; +} + +//=========================================================================== +LPCTSTR DiskGetFullName (int drive) { + return floppy[drive].fullname; +} + +//=========================================================================== +void DiskGetLightStatus (int *drive1, int *drive2) { + *drive1 = floppy[0].spinning ? floppy[0].writelight ? 2 + : 1 + : 0; + *drive2 = floppy[1].spinning ? floppy[1].writelight ? 2 + : 1 + : 0; +} + +//=========================================================================== +LPCTSTR DiskGetName (int drive) { + return floppy[drive].imagename; +} + +//=========================================================================== +void DiskInitialize () { + int loop = DRIVES; + while (loop--) + ZeroMemory(&floppy[loop],sizeof(floppyrec)); + TCHAR imagefilename[MAX_PATH]; + _tcscpy(imagefilename,progdir); + _tcscat(imagefilename,TEXT("MASTER.DSK")); + DiskInsert(0,imagefilename,0,0); +} + +//=========================================================================== +int DiskInsert (int drive, LPCTSTR imagefilename, BOOL writeprotected, BOOL createifnecessary) { + floppyptr fptr = &floppy[drive]; + if (fptr->imagehandle) + RemoveDisk(drive); + ZeroMemory(fptr,sizeof(floppyrec)); + fptr->writeprotected = writeprotected; + int error = ImageOpen(imagefilename, + &fptr->imagehandle, + &fptr->writeprotected, + createifnecessary); + if (!error) + GetImageTitle(imagefilename,fptr); + return error; +} + +//=========================================================================== +BOOL DiskIsSpinning () { + return floppymotoron; +} + +//=========================================================================== +void DiskNotifyInvalidImage (LPCTSTR imagefilename,int error) { + TCHAR buffer[MAX_PATH+128]; + switch (error) { + + case 1: + wsprintf(buffer, + TEXT("Unable to open the file %s."), + (LPCTSTR)imagefilename); + break; + + case 2: + wsprintf(buffer, + TEXT("Unable to use the file %s\nbecause the ") + TEXT("disk image format is not recognized."), + (LPCTSTR)imagefilename); + break; + + default: + + // IGNORE OTHER ERRORS SILENTLY + return; + } + MessageBox(framewindow, + buffer, + TITLE, + MB_ICONEXCLAMATION | MB_SETFOREGROUND); +} + +//=========================================================================== +BYTE __stdcall DiskReadWrite (WORD programcounter, BYTE, BYTE, BYTE, ULONG) { + floppyptr fptr = &floppy[currdrive]; + diskaccessed = 1; + if ((!fptr->trackimagedata) && fptr->imagehandle) + ReadTrack(currdrive); + if (!fptr->trackimagedata) + return 0xFF; + BYTE result = 0; + if ((!floppywritemode) || (!fptr->writeprotected)) + if (floppywritemode) + if (floppylatch & 0x80) { + *(fptr->trackimage+fptr->byte) = floppylatch; + fptr->trackimagedirty = 1; + } + else + return 0; + else + result = *(fptr->trackimage+fptr->byte); + if (++fptr->byte >= fptr->nibbles) + fptr->byte = 0; + return result; +} + +//=========================================================================== +void DiskReset () { + floppymotoron = 0; +} + +//=========================================================================== +void DiskSelectImage (int drive, LPSTR pszFilename) +{ + TCHAR directory[MAX_PATH] = TEXT(""); + TCHAR filename[MAX_PATH]; + TCHAR title[40]; + + strcpy(filename, pszFilename); + + RegLoadString(TEXT("Preferences"),TEXT("Starting Directory"),1,directory,MAX_PATH); + _tcscpy(title,TEXT("Select Disk Image For Drive ")); + _tcscat(title,drive ? TEXT("2") : TEXT("1")); + + OPENFILENAME ofn; + ZeroMemory(&ofn,sizeof(OPENFILENAME)); + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = framewindow; + ofn.hInstance = instance; + ofn.lpstrFilter = TEXT("All Images\0*.apl;*.bin;*.do;*.dsk;*.iie;*.nib;*.po\0") + TEXT("Disk Images (*.bin,*.do,*.dsk,*.iie,*.nib,*.po)\0*.bin;*.do;*.dsk;*.iie;*.nib;*.po\0") + TEXT("All Files\0*.*\0"); + ofn.lpstrFile = filename; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrInitialDir = directory; + ofn.Flags = OFN_PATHMUSTEXIST; + ofn.lpstrTitle = title; + + if (GetOpenFileName(&ofn)) + { + if ((!ofn.nFileExtension) || !filename[ofn.nFileExtension]) + _tcscat(filename,TEXT(".DSK")); + + int error = DiskInsert(drive,filename,ofn.Flags & OFN_READONLY,1); + if (!error) + { + filename[ofn.nFileOffset] = 0; + if (_tcsicmp(directory,filename)) + RegSaveString(TEXT("Preferences"),TEXT("Starting Directory"),1,filename); + } + else + { + DiskNotifyInvalidImage(filename,error); + } + } +} + +//=========================================================================== +void DiskSelect (int drive) +{ + DiskSelectImage(drive, TEXT("")); +} + +//=========================================================================== +BYTE __stdcall DiskSetLatchValue (WORD, BYTE, BYTE write, BYTE value, ULONG) { + if (write) + floppylatch = value; + return floppylatch; +} + +//=========================================================================== +BYTE __stdcall DiskSetReadMode (WORD, BYTE, BYTE, BYTE, ULONG) { + floppywritemode = 0; + return MemReturnRandomData(floppy[currdrive].writeprotected); +} + +//=========================================================================== +BYTE __stdcall DiskSetWriteMode (WORD, BYTE, BYTE, BYTE, ULONG) { + floppywritemode = 1; + BOOL modechange = !floppy[currdrive].writelight; + floppy[currdrive].writelight = 20000; + if (modechange) + FrameRefreshStatus(DRAW_LEDS); + return MemReturnRandomData(1); +} + +//=========================================================================== +void DiskUpdatePosition (DWORD cycles) { + int loop = 2; + while (loop--) { + floppyptr fptr = &floppy[loop]; + if (fptr->spinning && !floppymotoron) { + if (!(fptr->spinning -= MIN(fptr->spinning,(cycles >> 6)))) + FrameRefreshStatus(DRAW_LEDS); + } + if (floppywritemode && (currdrive == loop) && fptr->spinning) + fptr->writelight = 20000; + else if (fptr->writelight) { + if (!(fptr->writelight -= MIN(fptr->writelight,(cycles >> 6)))) + FrameRefreshStatus(DRAW_LEDS); + } + if ((!enhancedisk) && (!diskaccessed) && fptr->spinning) { + needsprecision = cumulativecycles; + fptr->byte += (cycles >> 5); + if (fptr->byte >= fptr->nibbles) + fptr->byte -= fptr->nibbles; + } + } + diskaccessed = 0; +} + +//=========================================================================== + +bool DiskDriveSwap() +{ + // Refuse to swap if either Disk][ is active + if(floppy[0].spinning || floppy[1].spinning) + return false; + + // Swap disks between drives + floppyrec fr; + + // Swap trackimage ptrs (so don't need to swap the buffers' data) + memcpy(&fr, &floppy[0], sizeof(floppyrec)); + memcpy(&floppy[0], &floppy[1], sizeof(floppyrec)); + memcpy(&floppy[1], &fr, sizeof(floppyrec)); + + FrameRefreshStatus(DRAW_LEDS | DRAW_BUTTON_DRIVES); + + return true; +} + +//=========================================================================== + +DWORD DiskGetSnapshot(SS_CARD_DISK2* pSS, DWORD dwSlot) +{ + pSS->Hdr.UnitHdr.dwLength = sizeof(SS_CARD_DISK2); + pSS->Hdr.UnitHdr.dwVersion = MAKE_VERSION(1,0,0,1); + + pSS->Hdr.dwSlot = dwSlot; + pSS->Hdr.dwType = CT_Disk2; + + pSS->currdrive = currdrive; + pSS->diskaccessed = diskaccessed; + pSS->enhancedisk = enhancedisk; + pSS->floppylatch = floppylatch; + pSS->floppymotoron = floppymotoron; + pSS->floppywritemode = floppywritemode; + + for(UINT i=0; i<2; i++) + { + strcpy(pSS->Unit[i].szFileName, floppy[i].fullname); + pSS->Unit[i].track = floppy[i].track; + pSS->Unit[i].phase = floppy[i].phase; + pSS->Unit[i].byte = floppy[i].byte; + pSS->Unit[i].writeprotected = floppy[i].writeprotected; + pSS->Unit[i].trackimagedata = floppy[i].trackimagedata; + pSS->Unit[i].trackimagedirty = floppy[i].trackimagedirty; + pSS->Unit[i].spinning = floppy[i].spinning; + pSS->Unit[i].writelight = floppy[i].writelight; + pSS->Unit[i].nibbles = floppy[i].nibbles; + + if(floppy[i].trackimage) + memcpy(pSS->Unit[i].nTrack, floppy[i].trackimage, NIBBLES_PER_TRACK); + else + memset(pSS->Unit[i].nTrack, 0, NIBBLES_PER_TRACK); + } + + return 0; +} + +DWORD DiskSetSnapshot(SS_CARD_DISK2* pSS, DWORD /*dwSlot*/) +{ + if(pSS->Hdr.UnitHdr.dwVersion != MAKE_VERSION(1,0,0,1)) + return -1; + + currdrive = pSS->currdrive; + diskaccessed = pSS->diskaccessed; + enhancedisk = pSS->enhancedisk; + floppylatch = pSS->floppylatch; + floppymotoron = pSS->floppymotoron; + floppywritemode = pSS->floppywritemode; + + for(UINT i=0; i<2; i++) + { + bool bImageError = false; + + ZeroMemory(&floppy[i], sizeof(floppyrec)); + if(pSS->Unit[i].szFileName[0] == 0x00) + continue; + + // + + DWORD dwAttributes = GetFileAttributes(pSS->Unit[i].szFileName); + if(dwAttributes == INVALID_FILE_ATTRIBUTES) + { + // Get user to browse for file + DiskSelectImage(i, pSS->Unit[i].szFileName); + + dwAttributes = GetFileAttributes(pSS->Unit[i].szFileName); + } + + if(dwAttributes != INVALID_FILE_ATTRIBUTES) + { + BOOL bWriteProtected = (dwAttributes & FILE_ATTRIBUTE_READONLY) ? TRUE : FALSE; + + if(DiskInsert(i, pSS->Unit[i].szFileName, bWriteProtected, 0)) + bImageError = true; + + // DiskInsert() sets up: + // . fullname + // . imagename + // . writeprotected + } + + // + +// strcpy(floppy[i].fullname, pSS->Unit[i].szFileName); + floppy[i].track = pSS->Unit[i].track; + floppy[i].phase = pSS->Unit[i].phase; + floppy[i].byte = pSS->Unit[i].byte; +// floppy[i].writeprotected = pSS->Unit[i].writeprotected; + floppy[i].trackimagedata = pSS->Unit[i].trackimagedata; + floppy[i].trackimagedirty = pSS->Unit[i].trackimagedirty; + floppy[i].spinning = pSS->Unit[i].spinning; + floppy[i].writelight = pSS->Unit[i].writelight; + floppy[i].nibbles = pSS->Unit[i].nibbles; + + // + + if(!bImageError) + { + if((floppy[i].trackimage == NULL) && floppy[i].nibbles) + AllocTrack(i); + + if(floppy[i].trackimage == NULL) + bImageError = true; + else + memcpy(floppy[i].trackimage, pSS->Unit[i].nTrack, NIBBLES_PER_TRACK); + } + + if(bImageError) + { + floppy[i].trackimagedata = 0; + floppy[i].trackimagedirty = 0; + floppy[i].nibbles = 0; + } + } + + FrameRefreshStatus(DRAW_LEDS | DRAW_BUTTON_DRIVES); + + return 0; +} diff --git a/AppleWin/source/Disk.h b/AppleWin/source/Disk.h new file mode 100644 index 00000000..44edf151 --- /dev/null +++ b/AppleWin/source/Disk.h @@ -0,0 +1,33 @@ +#pragma once + +#define DRIVE_1 0 +#define DRIVE_2 1 + +#define DRIVES 2 +#define TRACKS 35 + +extern BOOL enhancedisk; + +void DiskBoot (); +void DiskDestroy (); +LPCTSTR DiskGetFullName (int); +void DiskGetLightStatus (int *,int *); +LPCTSTR DiskGetName (int); +void DiskInitialize (); +int DiskInsert (int,LPCTSTR,BOOL,BOOL); +BOOL DiskIsSpinning (); +void DiskNotifyInvalidImage (LPCTSTR,int); +void DiskReset (); +void DiskSelect (int); +void DiskUpdatePosition (DWORD); +bool DiskDriveSwap(); +DWORD DiskGetSnapshot(SS_CARD_DISK2* pSS, DWORD dwSlot); +DWORD DiskSetSnapshot(SS_CARD_DISK2* pSS, DWORD dwSlot); + +BYTE __stdcall DiskControlMotor (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall DiskControlStepper (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall DiskEnable (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall DiskReadWrite (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall DiskSetLatchValue (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall DiskSetReadMode (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall DiskSetWriteMode (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/DiskImage.cpp b/AppleWin/source/DiskImage.cpp new file mode 100644 index 00000000..82e6c911 --- /dev/null +++ b/AppleWin/source/DiskImage.cpp @@ -0,0 +1,900 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Disk Image + * + * Author: Various + */ + + +#include "StdAfx.h" +#pragma hdrstop + +/* DO logical order 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +/* physical order 0 D B 9 7 5 3 1 E C A 8 6 4 2 F */ + +/* PO logical order 0 E D C B A 9 8 7 6 5 4 3 2 1 F */ +/* physical order 0 2 4 6 8 A C E 1 3 5 7 9 B D F */ + +typedef struct _imageinforec { + TCHAR filename[MAX_PATH]; + DWORD format; + HANDLE file; + DWORD offset; + BOOL writeprotected; + DWORD headersize; + LPBYTE header; + BOOL validtrack[TRACKS]; +} imageinforec, *imageinfoptr; + +typedef BOOL (*boottype )(imageinfoptr); +typedef DWORD (*detecttype)(LPBYTE,DWORD); +typedef void (*readtype )(imageinfoptr,int,int,LPBYTE,int *); +typedef void (*writetype )(imageinfoptr,int,int,LPBYTE,int); + +BOOL AplBoot (imageinfoptr ptr); +DWORD AplDetect (LPBYTE imageptr, DWORD imagesize); +DWORD DoDetect (LPBYTE imageptr, DWORD imagesize); +void DoRead (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles); +void DoWrite (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles); +DWORD IieDetect (LPBYTE imageptr, DWORD imagesize); +void IieRead (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles); +void IieWrite (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles); +DWORD Nib1Detect (LPBYTE imageptr, DWORD imagesize); +void Nib1Read (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles); +void Nib1Write (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles); +DWORD Nib2Detect (LPBYTE imageptr, DWORD imagesize); +void Nib2Read (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles); +void Nib2Write (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles); +DWORD PoDetect (LPBYTE imageptr, DWORD imagesize); +void PoRead (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles); +void PoWrite (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles); +BOOL PrgBoot (imageinfoptr ptr); +DWORD PrgDetect (LPBYTE imageptr, DWORD imagesize); + +typedef struct _imagetyperec { + LPCTSTR createexts; + LPCTSTR rejectexts; + detecttype detect; + boottype boot; + readtype read; + writetype write; +} imagetyperec, *imagetypeptr; + +static imagetyperec imagetype[IMAGETYPES] = {{TEXT(".prg"), + TEXT(".do;.dsk;.iie;.nib;.po"), + PrgDetect, + PrgBoot, + NULL, + NULL}, + {TEXT(".do;.dsk"), + TEXT(".nib;.iie;.po;.prg"), + DoDetect, + NULL, + DoRead, + DoWrite}, + {TEXT(".po"), + TEXT(".do;.iie;.nib;.prg"), + PoDetect, + NULL, + PoRead, + PoWrite}, + {TEXT(".apl"), + TEXT(".do;.dsk;.iie;.nib;.po"), + AplDetect, + AplBoot, + NULL, + NULL}, + {TEXT(".nib"), + TEXT(".do;.iie;.po;.prg"), + Nib1Detect, + NULL, + Nib1Read, + Nib1Write}, + {TEXT(".nb2"), + TEXT(".do;.iie;.po;.prg"), + Nib2Detect, + NULL, + Nib2Read, + Nib2Write}, + {TEXT(".iie"), + TEXT(".do.;.nib;.po;.prg"), + IieDetect, + NULL, + IieRead, + IieWrite}}; + +static BYTE diskbyte[0x40] = {0x96,0x97,0x9A,0x9B,0x9D,0x9E,0x9F,0xA6, + 0xA7,0xAB,0xAC,0xAD,0xAE,0xAF,0xB2,0xB3, + 0xB4,0xB5,0xB6,0xB7,0xB9,0xBA,0xBB,0xBC, + 0xBD,0xBE,0xBF,0xCB,0xCD,0xCE,0xCF,0xD3, + 0xD6,0xD7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE, + 0xDF,0xE5,0xE6,0xE7,0xE9,0xEA,0xEB,0xEC, + 0xED,0xEE,0xEF,0xF2,0xF3,0xF4,0xF5,0xF6, + 0xF7,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}; + +static BYTE sectornumber[3][0x10] = {{0x00,0x08,0x01,0x09,0x02,0x0A,0x03,0x0B, + 0x04,0x0C,0x05,0x0D,0x06,0x0E,0x07,0x0F}, + {0x00,0x07,0x0E,0x06,0x0D,0x05,0x0C,0x04, + 0x0B,0x03,0x0A,0x02,0x09,0x01,0x08,0x0F}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; + +static LPBYTE workbuffer = NULL; + +/**************************************************************************** +* +* NIBBLIZATION FUNCTIONS +* +***/ + +//=========================================================================== +LPBYTE Code62 (int sector) { + + // CONVERT THE 256 8-BIT BYTES INTO 342 6-BIT BYTES, WHICH WE STORE + // STARTING AT 4K INTO THE WORK BUFFER. + { + LPBYTE sectorbase = workbuffer+(sector << 8); + LPBYTE resultptr = workbuffer+0x1000; + BYTE offset = 0xAC; + while (offset != 0x02) { + BYTE value = 0; +#define ADDVALUE(a) value = (value << 2) | \ + (((a) & 0x01) << 1) | \ + (((a) & 0x02) >> 1) + ADDVALUE(*(sectorbase+offset)); offset -= 0x56; + ADDVALUE(*(sectorbase+offset)); offset -= 0x56; + ADDVALUE(*(sectorbase+offset)); offset -= 0x53; +#undef ADDVALUE + *(resultptr++) = value << 2; + } + *(resultptr-2) &= 0x3F; + *(resultptr-1) &= 0x3F; + int loop = 0; + while (loop < 0x100) + *(resultptr++) = *(sectorbase+(loop++)); + } + + // EXCLUSIVE-OR THE ENTIRE DATA BLOCK WITH ITSELF OFFSET BY ONE BYTE, + // CREATING A 343RD BYTE WHICH IS USED AS A CHECKSUM. STORE THE NEW + // BLOCK OF 343 BYTES STARTING AT 5K INTO THE WORK BUFFER. + { + BYTE savedval = 0; + LPBYTE sourceptr = workbuffer+0x1000; + LPBYTE resultptr = workbuffer+0x1400; + int loop = 342; + while (loop--) { + *(resultptr++) = savedval ^ *sourceptr; + savedval = *(sourceptr++); + } + *resultptr = savedval; + } + + // USING A LOOKUP TABLE, CONVERT THE 6-BIT BYTES INTO DISK BYTES. A VALID + // DISK BYTE IS A BYTE THAT HAS THE HIGH BIT SET, AT LEAST TWO ADJACENT + // BITS SET (EXCLUDING THE HIGH BIT), AND AT MOST ONE PAIR OF CONSECUTIVE + // ZERO BITS. THE CONVERTED BLOCK OF 343 BYTES IS STORED STARTING AT 4K + // INTO THE WORK BUFFER. + { + LPBYTE sourceptr = workbuffer+0x1400; + LPBYTE resultptr = workbuffer+0x1000; + int loop = 343; + while (loop--) + *(resultptr++) = diskbyte[(*(sourceptr++)) >> 2]; + } + + return workbuffer+0x1000; +} + +//=========================================================================== +void Decode62 (LPBYTE imageptr) { + + // IF WE HAVEN'T ALREADY DONE SO, GENERATE A TABLE FOR CONVERTING + // DISK BYTES BACK INTO 6-BIT BYTES + static BOOL tablegenerated = 0; + static BYTE sixbitbyte[0x80]; + if (!tablegenerated) { + ZeroMemory(sixbitbyte,0x80); + int loop = 0; + while (loop < 0x40) { + sixbitbyte[diskbyte[loop]-0x80] = loop << 2; + loop++; + } + tablegenerated = 1; + } + + // USING OUR TABLE, CONVERT THE DISK BYTES BACK INTO 6-BIT BYTES + { + LPBYTE sourceptr = workbuffer+0x1000; + LPBYTE resultptr = workbuffer+0x1400; + int loop = 343; + while (loop--) + *(resultptr++) = sixbitbyte[*(sourceptr++) & 0x7F]; + } + + // EXCLUSIVE-OR THE ENTIRE DATA BLOCK WITH ITSELF OFFSET BY ONE BYTE + // TO UNDO THE EFFECTS OF THE CHECKSUMMING PROCESS + { + BYTE savedval = 0; + LPBYTE sourceptr = workbuffer+0x1400; + LPBYTE resultptr = workbuffer+0x1000; + int loop = 342; + while (loop--) { + *resultptr = savedval ^ *(sourceptr++); + savedval = *(resultptr++); + } + } + + // CONVERT THE 342 6-BIT BYTES INTO 256 8-BIT BYTES + { + LPBYTE lowbitsptr = workbuffer+0x1000; + LPBYTE sectorbase = workbuffer+0x1056; + BYTE offset = 0xAC; + while (offset != 0x02) { + if (offset >= 0xAC) + *(imageptr+offset) = (*(sectorbase+offset) & 0xFC) + | (((*lowbitsptr) & 0x80) >> 7) + | (((*lowbitsptr) & 0x40) >> 5); + offset -= 0x56; + *(imageptr+offset) = (*(sectorbase+offset) & 0xFC) + | (((*lowbitsptr) & 0x20) >> 5) + | (((*lowbitsptr) & 0x10) >> 3); + offset -= 0x56; + *(imageptr+offset) = (*(sectorbase+offset) & 0xFC) + | (((*lowbitsptr) & 0x08) >> 3) + | (((*lowbitsptr) & 0x04) >> 1); + offset -= 0x53; + lowbitsptr++; + } + } + +} + +//=========================================================================== +void DenibblizeTrack (LPBYTE trackimage, BOOL dosorder, int nibbles) { + ZeroMemory(workbuffer,0x1000); + + // SEARCH THROUGH THE TRACK IMAGE FOR EACH SECTOR. FOR EVERY SECTOR + // WE FIND, COPY THE NIBBLIZED DATA FOR THAT SECTOR INTO THE WORK + // BUFFER AT OFFSET 4K. THEN CALL DECODE62() TO DENIBBLIZE THE DATA + // IN THE BUFFER AND WRITE IT INTO THE FIRST PART OF THE WORK BUFFER + // OFFSET BY THE SECTOR NUMBER. + { + int offset = 0; + int partsleft = 33; + int sector = 0; + while (partsleft--) { + BYTE byteval[3] = {0,0,0}; + int bytenum = 0; + int loop = nibbles; + while ((loop--) && (bytenum < 3)) { + if (bytenum) + byteval[bytenum++] = *(trackimage+offset++); + else if (*(trackimage+offset++) == 0xD5) + bytenum = 1; + if (offset >= nibbles) + offset = 0; + } + if ((bytenum == 3) && (byteval[1] = 0xAA)) { + int loop = 0; + int tempoffset = offset; + while (loop < 384) { + *(workbuffer+0x1000+loop++) = *(trackimage+tempoffset++); + if (tempoffset >= nibbles) + tempoffset = 0; + } + if (byteval[2] == 0x96) + sector = ((*(workbuffer+0x1004) & 0x55) << 1) + | (*(workbuffer+0x1005) & 0x55); + else if (byteval[2] == 0xAD) { + Decode62(workbuffer+(sectornumber[dosorder][sector] << 8)); + sector = 0; + } + } + } + } +} + +//=========================================================================== +DWORD NibblizeTrack (LPBYTE trackimagebuffer, BOOL dosorder, int track) { + ZeroMemory(workbuffer+4096,4096); + LPBYTE imageptr = trackimagebuffer; + BYTE sector = 0; + + // WRITE GAP ONE, WHICH CONTAINS 48 SELF-SYNC BYTES + int loop; + for (loop = 0; loop < 48; loop++) + *(imageptr++) = 0xFF; + + while (sector < 16) { + + // WRITE THE ADDRESS FIELD, WHICH CONTAINS: + // - PROLOGUE (D5AA96) + // - VOLUME NUMBER ("4 AND 4" ENCODED) + // - TRACK NUMBER ("4 AND 4" ENCODED) + // - SECTOR NUMBER ("4 AND 4" ENCODED) + // - CHECKSUM ("4 AND 4" ENCODED) + // - EPILOGUE (DEAAEB) + *(imageptr++) = 0xD5; + *(imageptr++) = 0xAA; + *(imageptr++) = 0x96; + *(imageptr++) = 0xFF; + *(imageptr++) = 0xFE; +#define CODE44A(a) ((((a) >> 1) & 0x55) | 0xAA) +#define CODE44B(a) (((a) & 0x55) | 0xAA) + *(imageptr++) = CODE44A((BYTE)track); + *(imageptr++) = CODE44B((BYTE)track); + *(imageptr++) = CODE44A(sector); + *(imageptr++) = CODE44B(sector); + *(imageptr++) = CODE44A(0xFE ^ ((BYTE)track) ^ sector); + *(imageptr++) = CODE44B(0xFE ^ ((BYTE)track) ^ sector); +#undef CODE44A +#undef CODE44B + *(imageptr++) = 0xDE; + *(imageptr++) = 0xAA; + *(imageptr++) = 0xEB; + + // WRITE GAP TWO, WHICH CONTAINS SIX SELF-SYNC BYTES + for (loop = 0; loop < 6; loop++) + *(imageptr++) = 0xFF; + + // WRITE THE DATA FIELD, WHICH CONTAINS: + // - PROLOGUE (D5AAAD) + // - 343 6-BIT BYTES OF NIBBLIZED DATA, INCLUDING A 6-BIT CHECKSUM + // - EPILOGUE (DEAAEB) + *(imageptr++) = 0xD5; + *(imageptr++) = 0xAA; + *(imageptr++) = 0xAD; + CopyMemory(imageptr,Code62(sectornumber[dosorder][sector]),343); + imageptr += 343; + *(imageptr++) = 0xDE; + *(imageptr++) = 0xAA; + *(imageptr++) = 0xEB; + + // WRITE GAP THREE, WHICH CONTAINS 27 SELF-SYNC BYTES + for (loop = 0; loop < 27; loop++) + *(imageptr++) = 0xFF; + + sector++; + } + return imageptr-trackimagebuffer; +} + +//=========================================================================== +void SkewTrack (int track, int nibbles, LPBYTE trackimagebuffer) { + int skewbytes = (track*768) % nibbles; + CopyMemory(workbuffer,trackimagebuffer,nibbles); + CopyMemory(trackimagebuffer,workbuffer+skewbytes,nibbles-skewbytes); + CopyMemory(trackimagebuffer+nibbles-skewbytes,workbuffer,skewbytes); +} + +/**************************************************************************** +* +* RAW PROGRAM IMAGE (APL) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +BOOL AplBoot (imageinfoptr ptr) { + SetFilePointer(ptr->file,0,NULL,FILE_BEGIN); + WORD address = 0; + WORD length = 0; + DWORD bytesread; + ReadFile(ptr->file,&address,sizeof(WORD),&bytesread,NULL); + ReadFile(ptr->file,&length ,sizeof(WORD),&bytesread,NULL); + if ((((WORD)(address+length)) <= address) || + (address >= 0xC000) || + (address+length-1 >= 0xC000)) + return 0; + ReadFile(ptr->file,mem+address,length,&bytesread,NULL); + int loop = 192; + while (loop--) + *(memdirty+loop) = 0xFF; + regs.pc = address; + return 1; +} + +//=========================================================================== +DWORD AplDetect (LPBYTE imageptr, DWORD imagesize) { + DWORD length = *(LPWORD)(imageptr+2); + return (((length+4) == imagesize) || + ((length+4+((256-((length+4) & 255)) & 255)) == imagesize)); +} + +/**************************************************************************** +* +* DOS ORDER (DO) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +DWORD DoDetect (LPBYTE imageptr, DWORD imagesize) { + if (((imagesize < 143105) || (imagesize > 143364)) && + (imagesize != 143403) && (imagesize != 143488)) + return 0; + + // CHECK FOR A DOS ORDER IMAGE OF A DOS DISKETTE + { + int loop = 0; + BOOL mismatch = 0; + while ((loop++ < 15) && !mismatch) + if (*(imageptr+0x11002+(loop << 8)) != loop-1) + mismatch = 1; + if (!mismatch) + return 2; + } + + // CHECK FOR A DOS ORDER IMAGE OF A PRODOS DISKETTE + { + int loop = 1; + BOOL mismatch = 0; + while ((loop++ < 5) && !mismatch) + if ((*(LPWORD)(imageptr+(loop << 9)+0x100) != ((loop == 5) ? 0 : 6-loop)) || + (*(LPWORD)(imageptr+(loop << 9)+0x102) != ((loop == 2) ? 0 : 8-loop))) + mismatch = 1; + if (!mismatch) + return 2; + } + + return 1; +} + +//=========================================================================== +void DoRead (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles) { + SetFilePointer(ptr->file,ptr->offset+(track << 12),NULL,FILE_BEGIN); + ZeroMemory(workbuffer,4096); + DWORD bytesread; + ReadFile(ptr->file,workbuffer,4096,&bytesread,NULL); + *nibbles = NibblizeTrack(trackimagebuffer,1,track); + if (!enhancedisk) + SkewTrack(track,*nibbles,trackimagebuffer); +} + +//=========================================================================== +void DoWrite (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles) { + ZeroMemory(workbuffer,4096); + DenibblizeTrack(trackimage,1,nibbles); + SetFilePointer(ptr->file,ptr->offset+(track << 12),NULL,FILE_BEGIN); + DWORD byteswritten; + WriteFile(ptr->file,workbuffer,4096,&byteswritten,NULL); +} + +/**************************************************************************** +* +* SIMSYSTEM IIE (IIE) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +void IieConvertSectorOrder (LPBYTE sourceorder) { + int loop = 16; + while (loop--) { + BYTE found = 0xFF; + int loop2 = 16; + while (loop2-- && (found == 0xFF)) + if (*(sourceorder+loop2) == loop) + found = loop2; + if (found == 0xFF) + found = 0; + sectornumber[2][loop] = found; + } +} + +//=========================================================================== +DWORD IieDetect (LPBYTE imageptr, DWORD imagesize) { + if (strncmp((const char *)imageptr,"SIMSYSTEM_IIE",13) || + (*(imageptr+13) > 3)) + return 0; + return 2; +} + +//=========================================================================== +void IieRead (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles) { + + // IF WE HAVEN'T ALREADY DONE SO, READ THE IMAGE FILE HEADER + if (!ptr->header) { + ptr->header = (LPBYTE)VirtualAlloc(NULL,88,MEM_COMMIT,PAGE_READWRITE); + if (!ptr->header) { + *nibbles = 0; + return; + } + ZeroMemory(ptr->header,88); + DWORD bytesread; + SetFilePointer(ptr->file,0,NULL,FILE_BEGIN); + ReadFile(ptr->file,ptr->header,88,&bytesread,NULL); + } + + // IF THIS IMAGE CONTAINS USER DATA, READ THE TRACK AND NIBBLIZE IT + if (*(ptr->header+13) <= 2) { + IieConvertSectorOrder(ptr->header+14); + SetFilePointer(ptr->file,(track << 12)+30,NULL,FILE_BEGIN); + ZeroMemory(workbuffer,4096); + DWORD bytesread; + ReadFile(ptr->file,workbuffer,4096,&bytesread,NULL); + *nibbles = NibblizeTrack(trackimagebuffer,2,track); + } + + // OTHERWISE, IF THIS IMAGE CONTAINS NIBBLE INFORMATION, READ IT + // DIRECTLY INTO THE TRACK BUFFER + else { + *nibbles = *(LPWORD)(ptr->header+(track << 1)+14); + DWORD offset = 88; + while (track--) + offset += *(LPWORD)(ptr->header+(track << 1)+14); + SetFilePointer(ptr->file,offset,NULL,FILE_BEGIN); + ZeroMemory(trackimagebuffer,*nibbles); + DWORD bytesread; + ReadFile(ptr->file,trackimagebuffer,*nibbles,&bytesread,NULL); + } + +} + +//=========================================================================== +void IieWrite (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles) { + // note: unimplemented +} + +/**************************************************************************** +* +* NIBBLIZED 6656-NIBBLE (NIB) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +DWORD Nib1Detect (LPBYTE imageptr, DWORD imagesize) { + return (imagesize == 232960) ? 2 : 0; +} + +//=========================================================================== +void Nib1Read (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles) { + SetFilePointer(ptr->file,ptr->offset+track*NIBBLES,NULL,FILE_BEGIN); + ReadFile(ptr->file,trackimagebuffer,NIBBLES,(DWORD *)nibbles,NULL); +} + +//=========================================================================== +void Nib1Write (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles) { + SetFilePointer(ptr->file,ptr->offset+track*NIBBLES,NULL,FILE_BEGIN); + DWORD byteswritten; + WriteFile(ptr->file,trackimage,nibbles,&byteswritten,NULL); +} + +/**************************************************************************** +* +* NIBBLIZED 6384-NIBBLE (NB2) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +DWORD Nib2Detect (LPBYTE imageptr, DWORD imagesize) { + return (imagesize == 223440) ? 2 : 0; +} + +//=========================================================================== +void Nib2Read (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles) { + SetFilePointer(ptr->file,ptr->offset+track*6384,NULL,FILE_BEGIN); + ReadFile(ptr->file,trackimagebuffer,6384,(DWORD *)nibbles,NULL); +} + +//=========================================================================== +void Nib2Write (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles) { + SetFilePointer(ptr->file,ptr->offset+track*6384,NULL,FILE_BEGIN); + DWORD byteswritten; + WriteFile(ptr->file,trackimage,nibbles,&byteswritten,NULL); +} + +/**************************************************************************** +* +* PRODOS ORDER (PO) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +DWORD PoDetect (LPBYTE imageptr, DWORD imagesize) { + if (((imagesize < 143105) || (imagesize > 143364)) && + (imagesize != 143488)) + return 0; + + // CHECK FOR A PRODOS ORDER IMAGE OF A DOS DISKETTE + { + int loop = 4; + BOOL mismatch = 0; + while ((loop++ < 13) && !mismatch) + if (*(imageptr+0x11002+(loop << 8)) != 14-loop) + mismatch = 1; + if (!mismatch) + return 2; + } + + // CHECK FOR A PRODOS ORDER IMAGE OF A PRODOS DISKETTE + { + int loop = 1; + BOOL mismatch = 0; + while ((loop++ < 5) && !mismatch) + if ((*(LPWORD)(imageptr+(loop << 9) ) != ((loop == 2) ? 0 : loop-1)) || + (*(LPWORD)(imageptr+(loop << 9)+2) != ((loop == 5) ? 0 : loop+1))) + mismatch = 1; + if (!mismatch) + return 2; + } + + return 1; +} + +//=========================================================================== +void PoRead (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimagebuffer, int *nibbles) { + SetFilePointer(ptr->file,ptr->offset+(track << 12),NULL,FILE_BEGIN); + ZeroMemory(workbuffer,4096); + DWORD bytesread; + ReadFile(ptr->file,workbuffer,4096,&bytesread,NULL); + *nibbles = NibblizeTrack(trackimagebuffer,0,track); + if (!enhancedisk) + SkewTrack(track,*nibbles,trackimagebuffer); +} + +//=========================================================================== +void PoWrite (imageinfoptr ptr, int track, int quartertrack, LPBYTE trackimage, int nibbles) { + ZeroMemory(workbuffer,4096); + DenibblizeTrack(trackimage,0,nibbles); + SetFilePointer(ptr->file,ptr->offset+(track << 12),NULL,FILE_BEGIN); + DWORD byteswritten; + WriteFile(ptr->file,workbuffer,4096,&byteswritten,NULL); +} + +/**************************************************************************** +* +* PRODOS PROGRAM IMAGE (PRG) FORMAT IMPLEMENTATION +* +***/ + +//=========================================================================== +BOOL PrgBoot (imageinfoptr ptr) { + SetFilePointer(ptr->file,5,NULL,FILE_BEGIN); + WORD address = 0; + WORD length = 0; + DWORD bytesread; + ReadFile(ptr->file,&address,sizeof(WORD),&bytesread,NULL); + ReadFile(ptr->file,&length ,sizeof(WORD),&bytesread,NULL); + length <<= 1; + if ((((WORD)(address+length)) <= address) || + (address >= 0xC000) || + (address+length-1 >= 0xC000)) + return 0; + SetFilePointer(ptr->file,128,NULL,FILE_BEGIN); + ReadFile(ptr->file,mem+address,length,&bytesread,NULL); + int loop = 192; + while (loop--) + *(memdirty+loop) = 0xFF; + regs.pc = address; + return 1; +} + +//=========================================================================== +DWORD PrgDetect (LPBYTE imageptr, DWORD imagesize) { + return (*(LPDWORD)imageptr == 0x214C470A) ? 2 : 0; +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +BOOL ImageBoot (HIMAGE imagehandle) { + imageinfoptr ptr = (imageinfoptr)imagehandle; + BOOL result = 0; + if (imagetype[ptr->format].boot) + result = imagetype[ptr->format].boot(ptr); + if (result) + ptr->writeprotected = 1; + return result; +} + +//=========================================================================== +void ImageClose (HIMAGE imagehandle) { + imageinfoptr ptr = (imageinfoptr)imagehandle; + if (ptr->file != INVALID_HANDLE_VALUE) + CloseHandle(ptr->file); + for (int track = 0; track < TRACKS; track++) + if (!ptr->validtrack[track]) { + DeleteFile(ptr->filename); + break; + } + if (ptr->header) + VirtualFree(ptr->header,0,MEM_RELEASE); + VirtualFree(ptr,0,MEM_RELEASE); +} + +//=========================================================================== +void ImageDestroy () { + VirtualFree(workbuffer,0,MEM_RELEASE); + workbuffer = NULL; +} + +//=========================================================================== +void ImageInitialize () { + workbuffer = (LPBYTE)VirtualAlloc(NULL,0x2000,MEM_COMMIT,PAGE_READWRITE); +} + +//=========================================================================== +int ImageOpen (LPCTSTR imagefilename, + HIMAGE *imagehandle, + BOOL *writeprotected, + BOOL createifnecessary) { + if (!(imagefilename && imagehandle && writeprotected && workbuffer)) + return -1; + + // TRY TO OPEN THE IMAGE FILE + HANDLE file = INVALID_HANDLE_VALUE; + if (!*writeprotected) + file = CreateFile(imagefilename, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (file == INVALID_HANDLE_VALUE) { + file = CreateFile(imagefilename, + GENERIC_READ, + FILE_SHARE_READ, + (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + if (file != INVALID_HANDLE_VALUE) + *writeprotected = 1; + } + if ((file == INVALID_HANDLE_VALUE) && createifnecessary) + file = CreateFile(imagefilename, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + (LPSECURITY_ATTRIBUTES)NULL, + CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, + NULL); + + // IF WE AREN'T ABLE TO OPEN THE FILE, RETURN + if (file == INVALID_HANDLE_VALUE) + return 1; + + // DETERMINE THE FILE'S EXTENSION AND CONVERT IT TO LOWERCASE + LPCTSTR imagefileext = imagefilename; + if (_tcsrchr(imagefileext,TEXT('\\'))) + imagefileext = _tcsrchr(imagefileext,TEXT('\\'))+1; + if (_tcsrchr(imagefileext,TEXT('.'))) + imagefileext = _tcsrchr(imagefileext,TEXT('.')); + TCHAR ext[_MAX_EXT]; + _tcsncpy(ext,imagefileext,_MAX_EXT); + CharLowerBuff(ext,_tcslen(ext)); + + DWORD size = GetFileSize(file,NULL); + LPBYTE view = NULL; + LPBYTE imageptr = NULL; + DWORD format = 0xFFFFFFFF; + if (size > 0) { + + // MAP THE FILE INTO MEMORY FOR USE BY THE DETECTION FUNCTIONS + HANDLE mapping = CreateFileMapping(file, + (LPSECURITY_ATTRIBUTES)NULL, + PAGE_READONLY, + 0,0,NULL); + view = (LPBYTE)MapViewOfFile(mapping,FILE_MAP_READ,0,0,0); + imageptr = view; + if (imageptr) { + + // DETERMINE WHETHER THE FILE HAS A 128-BYTE MACBINARY HEADER + if ((size > 128) && + (!*imageptr) && + (*(imageptr+1) < 120) && + (!*(imageptr+*(imageptr+1)+2)) && + (*(imageptr+0x7A) == 0x81) && + (*(imageptr+0x7B) == 0x81)) { + imageptr += 128; + size -= 128; + } + + // CALL THE DETECTION FUNCTIONS IN ORDER, LOOKING FOR A MATCH + DWORD possibleformat = 0xFFFFFFFF; + int loop = 0; + while ((loop < IMAGETYPES) && (format == 0xFFFFFFFF)) { + if (*ext && _tcsstr(imagetype[loop].rejectexts,ext)) + ++loop; + else { + DWORD result = imagetype[loop].detect(imageptr,size); + if (result == 2) + format = loop; + else if ((result == 1) && (possibleformat == 0xFFFFFFFF)) + possibleformat = loop++; + else + ++loop; + } + } + if (format == 0xFFFFFFFF) + format = possibleformat; + + // CLOSE THE MEMORY MAPPING + UnmapViewOfFile(view); + } + CloseHandle(mapping); + } + else + { + + // WE CREATE ONLY DOS ORDER (DO) OR 6656-NIBBLE (NIB) FORMAT FILES + for (int loop = 1; loop <= 4; loop += 3) + if (*ext && _tcsstr(imagetype[loop].createexts,ext)) { + format = loop; + break; + } + } + + // IF THE FILE DOES MATCH A KNOWN FORMAT... + if (format != 0xFFFFFFFF) { + + // CREATE A RECORD FOR THE FILE, AND RETURN AN IMAGE HANDLE + *imagehandle = (HIMAGE)VirtualAlloc(NULL,sizeof(imageinforec),MEM_COMMIT,PAGE_READWRITE); + if (*imagehandle) { + ZeroMemory(*imagehandle,sizeof(imageinforec)); + _tcsncpy(((imageinfoptr)*imagehandle)->filename,imagefilename,MAX_PATH); + ((imageinfoptr)*imagehandle)->format = format; + ((imageinfoptr)*imagehandle)->file = file; + ((imageinfoptr)*imagehandle)->offset = imageptr-view; + ((imageinfoptr)*imagehandle)->writeprotected = *writeprotected; + for (int track = 0; track < TRACKS; track++) + ((imageinfoptr)*imagehandle)->validtrack[track] = (size > 0); + return 0; + } + } + + CloseHandle(file); + if (!(size > 0)) + DeleteFile(imagefilename); + return 2; +} + +//=========================================================================== +void ImageReadTrack (HIMAGE imagehandle, + int track, + int quartertrack, + LPBYTE trackimagebuffer, + int *nibbles) { + imageinfoptr ptr = (imageinfoptr)imagehandle; + if (imagetype[ptr->format].read && ptr->validtrack[track]) + imagetype[ptr->format].read(ptr,track,quartertrack,trackimagebuffer,nibbles); + else + for (*nibbles = 0; *nibbles < NIBBLES; (*nibbles)++) + trackimagebuffer[*nibbles] = (BYTE)(rand() & 0xFF); +} + +//=========================================================================== +void ImageWriteTrack (HIMAGE imagehandle, + int track, + int quartertrack, + LPBYTE trackimage, + int nibbles) { + imageinfoptr ptr = (imageinfoptr)imagehandle; + if (imagetype[ptr->format].write && !ptr->writeprotected) { + imagetype[ptr->format].write(ptr,track,quartertrack,trackimage,nibbles); + ptr->validtrack[track] = 1; + } +} + \ No newline at end of file diff --git a/AppleWin/source/DiskImage.h b/AppleWin/source/DiskImage.h new file mode 100644 index 00000000..467bfd43 --- /dev/null +++ b/AppleWin/source/DiskImage.h @@ -0,0 +1,13 @@ +#pragma once + +#define TRACKS 35 +#define IMAGETYPES 7 +#define NIBBLES 6656 + +BOOL ImageBoot (HIMAGE); +void ImageClose (HIMAGE); +void ImageDestroy (); +void ImageInitialize (); +int ImageOpen (LPCTSTR,HIMAGE *,BOOL *,BOOL); +void ImageReadTrack (HIMAGE,int,int,LPBYTE,int *); +void ImageWriteTrack (HIMAGE,int,int,LPBYTE,int); diff --git a/AppleWin/source/Frame.cpp b/AppleWin/source/Frame.cpp new file mode 100644 index 00000000..d2050610 --- /dev/null +++ b/AppleWin/source/Frame.cpp @@ -0,0 +1,1111 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Frame + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop +#include "..\resource\resource.h" + +#define ENABLE_MENU 0 + +#define VIEWPORTX 5 +#define VIEWPORTY 5 +#define VIEWPORTCX 560 +#if ENABLE_MENU +#define VIEWPORTCY 400 +#else +#define VIEWPORTCY 384 +#endif +#define BUTTONX (VIEWPORTCX+(VIEWPORTX<<1)) +#define BUTTONY 0 +#define BUTTONCX 45 +#define BUTTONCY 45 +#define FSVIEWPORTX (640-BUTTONCX-5-VIEWPORTCX) +#define FSVIEWPORTY ((480-VIEWPORTCY)>>1) +#define FSBUTTONX (640-BUTTONCX) +#define FSBUTTONY (((480-VIEWPORTCY)>>1)-1) +#define BUTTONS 8 + + +static HBITMAP capsbitmap[2]; +static HBITMAP diskbitmap[3]; +static HBITMAP buttonbitmap[BUTTONS]; + +static BOOL active = 0; +static HBRUSH btnfacebrush = (HBRUSH)0; +static HPEN btnfacepen = (HPEN)0; +static HPEN btnhighlightpen = (HPEN)0; +static HPEN btnshadowpen = (HPEN)0; +static int buttonactive = -1; +static int buttondown = -1; +static int buttonover = -1; +static int buttonx = BUTTONX; +static int buttony = BUTTONY; +static HRGN clipregion = (HRGN)0; +static HDC framedc = (HDC)0; +static RECT framerect = {0,0,0,0}; +HWND framewindow = (HWND)0; +BOOL fullscreen = 0; +static BOOL helpquit = 0; +static BOOL painting = 0; +static HFONT smallfont = (HFONT)0; +static HWND tooltipwindow = (HWND)0; +static BOOL usingcursor = 0; +static int viewportx = VIEWPORTX; +static int viewporty = VIEWPORTY; + +static LPDIRECTDRAW directdraw = (LPDIRECTDRAW)0; +static LPDIRECTDRAWSURFACE surface = (LPDIRECTDRAWSURFACE)0; + +void DrawStatusArea (HDC passdc, BOOL drawflags); +void ProcessButtonClick (int button); +void RelayEvent (UINT message, WPARAM wparam, LPARAM lparam); +void ResetMachineState (); +void SetFullScreenMode (); +void SetNormalMode (); +void SetUsingCursor (BOOL); + + +//=========================================================================== +void CreateGdiObjects () { + ZeroMemory(buttonbitmap,BUTTONS*sizeof(HBITMAP)); +#define LOADBUTTONBITMAP(bitmapname) LoadImage(instance,bitmapname, \ + IMAGE_BITMAP,0,0, \ + LR_CREATEDIBSECTION | \ + LR_LOADMAP3DCOLORS | \ + LR_LOADTRANSPARENT); + buttonbitmap[BTN_HELP ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("HELP_BUTTON")); + buttonbitmap[BTN_RUN ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("RUN_BUTTON")); + buttonbitmap[BTN_DRIVE1 ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DRIVE1_BUTTON")); + buttonbitmap[BTN_DRIVE2 ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DRIVE2_BUTTON")); + buttonbitmap[BTN_DRIVESWAP] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DRIVESWAP_BUTTON")); + buttonbitmap[BTN_FULLSCR] = (HBITMAP)LOADBUTTONBITMAP(TEXT("FULLSCR_BUTTON")); + buttonbitmap[BTN_DEBUG ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DEBUG_BUTTON")); + buttonbitmap[BTN_SETUP ] = (HBITMAP)LOADBUTTONBITMAP(TEXT("SETUP_BUTTON")); + capsbitmap[0] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CAPSOFF_BITMAP")); + capsbitmap[1] = (HBITMAP)LOADBUTTONBITMAP(TEXT("CAPSON_BITMAP")); + diskbitmap[0] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DISKOFF_BITMAP")); + diskbitmap[1] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DISKREAD_BITMAP")); + diskbitmap[2] = (HBITMAP)LOADBUTTONBITMAP(TEXT("DISKWRITE_BITMAP")); + btnfacebrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); + btnfacepen = CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNFACE)); + btnhighlightpen = CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT)); + btnshadowpen = CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW)); + smallfont = CreateFont(11,6,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET, + OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY,VARIABLE_PITCH | FF_SWISS, + TEXT("Small Fonts")); +} + +//=========================================================================== +void DeleteGdiObjects () { + int loop; + for (loop = 0; loop < BUTTONS; loop++) + DeleteObject(buttonbitmap[loop]); + for (loop = 0; loop < 2; loop++) + DeleteObject(capsbitmap[loop]); + for (loop = 0; loop < 3; loop++) + DeleteObject(diskbitmap[loop]); + DeleteObject(btnfacebrush); + DeleteObject(btnfacepen); + DeleteObject(btnhighlightpen); + DeleteObject(btnshadowpen); + DeleteObject(smallfont); +} + +//=========================================================================== +void Draw3dRect (HDC dc, int x1, int y1, int x2, int y2, BOOL out) { + SelectObject(dc,GetStockObject(NULL_BRUSH)); + SelectObject(dc,out ? btnshadowpen : btnhighlightpen); + POINT pt[3]; + pt[0].x = x1; pt[0].y = y2-1; + pt[1].x = x2-1; pt[1].y = y2-1; + pt[2].x = x2-1; pt[2].y = y1; + Polyline(dc,(LPPOINT)&pt,3); + SelectObject(dc,(out == 1) ? btnhighlightpen : btnshadowpen); + pt[1].x = x1; pt[1].y = y1; + pt[2].x = x2; pt[2].y = y1; + Polyline(dc,(LPPOINT)&pt,3); +} + +//=========================================================================== +void DrawBitmapRect (HDC dc, int x, int y, LPRECT rect, HBITMAP bitmap) { + HDC memdc = CreateCompatibleDC(dc); + SelectObject(memdc,bitmap); + BitBlt(dc,x,y, + rect->right + 1 - rect->left, + rect->bottom + 1 - rect->top, + memdc, + rect->left, + rect->top, + SRCCOPY); + DeleteDC(memdc); +} + +//=========================================================================== +void DrawButton (HDC passdc, int number) { + FrameReleaseDC(); + HDC dc = (passdc ? passdc : GetDC(framewindow)); + int x = buttonx; + int y = buttony+number*BUTTONCY; + if (number == buttondown) { + int loop = 0; + while (loop++ < 3) + Draw3dRect(dc,x+loop,y+loop,x+BUTTONCX,y+BUTTONCY,0); + RECT rect = {0,0,39,39}; + DrawBitmapRect(dc,x+4,y+4,&rect,buttonbitmap[number]); + } + else { + Draw3dRect(dc,x+1,y+1,x+BUTTONCX,y+BUTTONCY,1); + Draw3dRect(dc,x+2,y+2,x+BUTTONCX-1,y+BUTTONCY-1,1); + RECT rect = {1,1,40,40}; + DrawBitmapRect(dc,x+3,y+3,&rect,buttonbitmap[number]); + } + if ((number == BTN_DRIVE1) || (number == BTN_DRIVE2)) { + int offset = (number == buttondown) << 1; + RECT rect = {x+offset+3, + y+offset+31, + x+offset+42, + y+offset+42}; + SelectObject(dc,smallfont); + SetTextColor(dc,RGB(0,0,0)); + SetTextAlign(dc,TA_CENTER | TA_TOP); + SetBkMode(dc,TRANSPARENT); + ExtTextOut(dc,x+offset+22,rect.top,ETO_CLIPPED,&rect, + DiskGetName(number-BTN_DRIVE1), + MIN(8,_tcslen(DiskGetName(number-BTN_DRIVE1))), + NULL); + } + if (!passdc) + ReleaseDC(framewindow,dc); +} + +//=========================================================================== +void DrawCrosshairs (int x, int y) { + static int lastx = 0; + static int lasty = 0; + FrameReleaseDC(); + HDC dc = GetDC(framewindow); +#define LINE(x1,y1,x2,y2) MoveToEx(dc,x1,y1,NULL); LineTo(dc,x2,y2); + + // ERASE THE OLD CROSSHAIRS + if (lastx && lasty) + if (fullscreen) { + int loop = 4; + while (loop--) { + RECT rect = {0,0,5,5}; + switch (loop) { + case 0: OffsetRect(&rect,lastx-2,FSVIEWPORTY-5); break; + case 1: OffsetRect(&rect,lastx-2,FSVIEWPORTY+VIEWPORTCY); break; + case 2: OffsetRect(&rect,FSVIEWPORTX-5, lasty-2); break; + case 3: OffsetRect(&rect,FSVIEWPORTX+VIEWPORTCX,lasty-2); break; + } + FillRect(dc,&rect,(HBRUSH)GetStockObject(BLACK_BRUSH)); + } + } + else { + int loop = 5; + while (loop--) { + switch (loop) { + case 0: SelectObject(dc,GetStockObject(BLACK_PEN)); break; + case 1: // fall through + case 2: SelectObject(dc,btnshadowpen); break; + case 3: // fall through + case 4: SelectObject(dc,btnfacepen); break; + } + LINE(lastx-2,VIEWPORTY-loop-1, + lastx+3,VIEWPORTY-loop-1); + LINE(VIEWPORTX-loop-1,lasty-2, + VIEWPORTX-loop-1,lasty+3); + if ((loop == 1) || (loop == 2)) + SelectObject(dc,btnhighlightpen); + LINE(lastx-2,VIEWPORTY+VIEWPORTCY+loop, + lastx+3,VIEWPORTY+VIEWPORTCY+loop); + LINE(VIEWPORTX+VIEWPORTCX+loop,lasty-2, + VIEWPORTX+VIEWPORTCX+loop,lasty+3); + } + } + + // DRAW THE NEW CROSSHAIRS + if (x && y) { + int loop = 4; + while (loop--) { + if ((loop == 1) || (loop == 2)) + SelectObject(dc,GetStockObject(WHITE_PEN)); + else + SelectObject(dc,GetStockObject(BLACK_PEN)); + LINE(x+loop-2,viewporty-5, + x+loop-2,viewporty); + LINE(x+loop-2,viewporty+VIEWPORTCY+4, + x+loop-2,viewporty+VIEWPORTCY-1); + LINE(viewportx-5, y+loop-2, + viewportx, y+loop-2); + LINE(viewportx+VIEWPORTCX+4,y+loop-2, + viewportx+VIEWPORTCX-1,y+loop-2); + } + } +#undef LINE + lastx = x; + lasty = y; + ReleaseDC(framewindow,dc); +} + +//=========================================================================== +void DrawFrameWindow () { + FrameReleaseDC(); + PAINTSTRUCT ps; + HDC dc = (painting ? BeginPaint(framewindow,&ps) + : GetDC(framewindow)); + VideoRealizePalette(dc); + + if (!fullscreen) { + + // DRAW THE 3D BORDER AROUND THE EMULATED SCREEN + Draw3dRect(dc, + VIEWPORTX-2,VIEWPORTY-2, + VIEWPORTX+VIEWPORTCX+2,VIEWPORTY+VIEWPORTCY+2, + 0); + Draw3dRect(dc, + VIEWPORTX-3,VIEWPORTY-3, + VIEWPORTX+VIEWPORTCX+3,VIEWPORTY+VIEWPORTCY+3, + 0); + SelectObject(dc,btnfacepen); + Rectangle(dc, + VIEWPORTX-4,VIEWPORTY-4, + VIEWPORTX+VIEWPORTCX+4,VIEWPORTY+VIEWPORTCY+4); + Rectangle(dc, + VIEWPORTX-5,VIEWPORTY-5, + VIEWPORTX+VIEWPORTCX+5,VIEWPORTY+VIEWPORTCY+5); + + // DRAW THE TOOLBAR BUTTONS + int loop = BUTTONS; + while (loop--) + DrawButton(dc,loop); + } + + // DRAW THE STATUS AREA + DrawStatusArea(dc,DRAW_BACKGROUND | DRAW_LEDS); + if (painting) + EndPaint(framewindow,&ps); + else + ReleaseDC(framewindow,dc); + + // DRAW THE CONTENTS OF THE EMULATED SCREEN + if (mode == MODE_LOGO) + VideoDisplayLogo(); + else if (mode == MODE_DEBUG) + DebugDisplay(1); + else + VideoRedrawScreen(); +} + +//=========================================================================== +void DrawStatusArea (HDC passdc, int drawflags) { + FrameReleaseDC(); + HDC dc = (passdc ? passdc : GetDC(framewindow)); + int x = buttonx; + int y = buttony+BUTTONS*BUTTONCY+1; + int drive1 = 0; + int drive2 = 0; + BOOL caps = 0; + DiskGetLightStatus(&drive1,&drive2); + KeybGetCapsStatus(&caps); + if (fullscreen) { + SelectObject(dc,smallfont); + SetBkMode(dc,OPAQUE); + SetBkColor(dc,RGB(0,0,0)); + SetTextAlign(dc,TA_LEFT | TA_TOP); + SetTextColor(dc,RGB((drive1==2 ? 255 : 0),(drive1==1 ? 255 : 0),0)); + TextOut(dc,x+ 3,y+2,TEXT("1"),1); + SetTextColor(dc,RGB((drive2==2 ? 255 : 0),(drive2==1 ? 255 : 0),0)); + TextOut(dc,x+13,y+2,TEXT("2"),1); + if (apple2e) { + SetTextAlign(dc,TA_RIGHT | TA_TOP); + SetTextColor(dc,(caps ? RGB(128,128,128) : + RGB( 0, 0, 0))); + TextOut(dc,x+BUTTONCX,y+2,TEXT("Caps"),4); + } + SetTextAlign(dc,TA_CENTER | TA_TOP); + SetTextColor(dc,(mode == MODE_PAUSED || + mode == MODE_STEPPING ? RGB(255,255,255) : + RGB( 0, 0, 0))); + TextOut(dc,x+BUTTONCX/2,y+13,(mode == MODE_PAUSED ? TEXT(" Paused ") : + TEXT("Stepping")),8); + } + else { + if (drawflags & DRAW_BACKGROUND) { + SelectObject(dc,GetStockObject(NULL_PEN)); + SelectObject(dc,btnfacebrush); + Rectangle(dc,x,y,x+BUTTONCX+2,y+35); + Draw3dRect(dc,x+1,y+3,x+BUTTONCX,y+31,0); + SelectObject(dc,smallfont); + SetTextAlign(dc,TA_CENTER | TA_TOP); + SetTextColor(dc,RGB(0,0,0)); + SetBkMode(dc,TRANSPARENT); + TextOut(dc,x+ 7,y+7,TEXT("1"),1); + TextOut(dc,x+25,y+7,TEXT("2"),1); + } + if (drawflags & DRAW_LEDS) { + RECT rect = {0,0,8,8}; + DrawBitmapRect(dc,x+12,y+8,&rect,diskbitmap[drive1]); + DrawBitmapRect(dc,x+30,y+8,&rect,diskbitmap[drive2]); + if (apple2e) { + RECT rect = {0,0,30,8}; + DrawBitmapRect(dc,x+7,y+19,&rect,capsbitmap[caps != 0]); + } + } + if (drawflags & DRAW_TITLE) { + TCHAR title[40]; + _tcscpy(title,apple2e ? TITLE : TEXT("Apple ][+ Emulator")); + switch (mode) { + case MODE_PAUSED: _tcscat(title,TEXT(" [Paused]")); break; + case MODE_STEPPING: _tcscat(title,TEXT(" [Stepping]")); break; + } + SendMessage(framewindow,WM_SETTEXT,0,(LPARAM)title); + } + if (drawflags & DRAW_BUTTON_DRIVES) + { + DrawButton(dc, BTN_DRIVE1); + DrawButton(dc, BTN_DRIVE2); + } + } + if (!passdc) + ReleaseDC(framewindow,dc); +} + +//=========================================================================== +void EraseButton (int number) { + RECT rect; + rect.left = buttonx; + rect.right = rect.left+BUTTONCX; + rect.top = buttony+number*BUTTONCY; + rect.bottom = rect.top+BUTTONCY; + InvalidateRect(framewindow,&rect,1); +} + +//=========================================================================== +LRESULT CALLBACK FrameWndProc (HWND window, + UINT message, + WPARAM wparam, + LPARAM lparam) { + + switch (message) { + + case WM_ACTIVATE: + JoyReset(); + SetUsingCursor(0); + break; + + case WM_ACTIVATEAPP: + active = wparam; + break; + + case WM_CLOSE: + if (fullscreen) + SetNormalMode(); + if (!IsIconic(window)) + GetWindowRect(window,&framerect); + RegSaveValue(TEXT("Preferences"),TEXT("Window X-Position"),1,framerect.left); + RegSaveValue(TEXT("Preferences"),TEXT("Window Y-Position"),1,framerect.top); + FrameReleaseDC(); + SetUsingCursor(0); + if (helpquit) { + helpquit = 0; + HtmlHelp(NULL,NULL,HH_CLOSE_ALL,0); + } + break; + + case WM_CHAR: + if ((mode == MODE_RUNNING) || (mode == MODE_LOGO) || + ((mode == MODE_STEPPING) && (wparam != TEXT('\x1B')))) + KeybQueueKeypress((int)wparam,ASCII); + else if ((mode == MODE_DEBUG) || (mode == MODE_STEPPING)) + DebugProcessChar((TCHAR)wparam); + break; + + case WM_CREATE: + framewindow = window; + CreateGdiObjects(); + DSInit(); + MB_Initialize(); + SpkrInitialize(); + DragAcceptFiles(window,1); + break; + + case WM_DDE_INITIATE: { + ATOM application = GlobalAddAtom(TEXT("applewin")); + ATOM topic = GlobalAddAtom(TEXT("system")); + if(LOWORD(lparam) == application && HIWORD(lparam) == topic) + SendMessage((HWND)wparam,WM_DDE_ACK,(WPARAM)window,MAKELPARAM(application,topic)); + GlobalDeleteAtom(application); + GlobalDeleteAtom(topic); + break; + } + + case WM_DDE_EXECUTE: { + LPTSTR filename = (LPTSTR)GlobalLock((HGLOBAL)lparam); + int error = DiskInsert(0,filename,0,0); + if (!error) { + if (!fullscreen) + DrawButton((HDC)0,BTN_DRIVE1); + SetForegroundWindow(window); + ProcessButtonClick(BTN_RUN); + } + else + DiskNotifyInvalidImage(filename,error); + GlobalUnlock((HGLOBAL)lparam); + break; + } + + case WM_DESTROY: + DragAcceptFiles(window,0); + Snapshot_Shutdown(); + DebugDestroy(); + if (!restart) { + DiskDestroy(); + ImageDestroy(); + HD_Cleanup(); + } + CommDestroy(); + CpuDestroy(); + MemDestroy(); + SpkrDestroy(); + VideoDestroy(); + MB_Destroy(); + DeleteGdiObjects(); + PostQuitMessage(0); + break; + + case WM_DISPLAYCHANGE: + VideoReinitialize(); + break; + + case WM_DROPFILES: { + TCHAR filename[MAX_PATH]; + DragQueryFile((HDROP)wparam,0,filename,sizeof(filename)); + POINT point; + DragQueryPoint((HDROP)wparam,&point); + RECT rect; + rect.left = buttonx; + rect.right = rect.left+BUTTONCX+1; + rect.top = buttony+BTN_DRIVE2*BUTTONCY+1; + rect.bottom = rect.top+BUTTONCY; + int error = DiskInsert(PtInRect(&rect,point) ? 1 : 0,filename,0,0); + if (!error) { + if (!fullscreen) + DrawButton((HDC)0,PtInRect(&rect,point) ? BTN_DRIVE2 : BTN_DRIVE1); + rect.top = buttony+BTN_DRIVE1*BUTTONCY+1; + if (!PtInRect(&rect,point)) { + SetForegroundWindow(window); + ProcessButtonClick(BTN_RUN); + } + } + else + DiskNotifyInvalidImage(filename,error); + DragFinish((HDROP)wparam); + break; + } + + case WM_KEYDOWN: + KeybUpdateCtrlShiftStatus(); + if ((wparam >= VK_F1) && (wparam <= VK_F8) && (buttondown == -1)) { + SetUsingCursor(0); + buttondown = wparam-VK_F1; + if (fullscreen && (buttonover != -1)) { + if (buttonover != buttondown) + EraseButton(buttonover); + buttonover = -1; + } + DrawButton((HDC)0,buttondown); + } + else if (wparam == VK_F9) { + videotype++; // Cycle through available video modes + if (videotype >= VT_NUM_MODES) + videotype = 0; + VideoReinitialize(); + if ((mode != MODE_LOGO) || ((mode == MODE_DEBUG) && (g_bDebuggerViewingAppleOutput))) // +PATCH + { + VideoRedrawScreen(); + g_bDebuggerViewingAppleOutput = true; // +PATCH + } + RegSaveValue(TEXT("Configuration"),TEXT("Video Emulation"),1,videotype); + } + else if ((wparam == VK_F11) && (GetKeyState(VK_CONTROL) >= 0)) // Save state (F11) + { + SoundCore_SetFade(FADE_OUT); + if(PSP_SaveStateSelectImage(window, true)) + { + Snapshot_SaveState(); + } + SoundCore_SetFade(FADE_IN); + } + else if (wparam == VK_F12) // Load state (F12 or Ctrl+F12) + { + SoundCore_SetFade(FADE_OUT); + if(PSP_SaveStateSelectImage(window, false)) + { + Snapshot_LoadState(); + } + SoundCore_SetFade(FADE_IN); + } + else if (wparam == VK_CAPITAL) + KeybToggleCapsLock(); + else if (wparam == VK_PAUSE) { + SetUsingCursor(0); + switch (mode) + { + case MODE_RUNNING: + mode = MODE_PAUSED; + SoundCore_SetFade(FADE_OUT); + break; + case MODE_PAUSED: + mode = MODE_RUNNING; + SoundCore_SetFade(FADE_IN); + break; + case MODE_STEPPING: + DebugProcessChar(TEXT('\x1B')); + break; + } + DrawStatusArea((HDC)0,DRAW_TITLE); + if ((mode != MODE_LOGO) && (mode != MODE_DEBUG)) + VideoRedrawScreen(); + resettiming = 1; + } + else if ((mode == MODE_RUNNING) || (mode == MODE_LOGO) || (mode == MODE_STEPPING)) + { + // Note about Alt Gr (Right-Alt): + // . WM_KEYDOWN[Left-Control], then: + // . WM_KEYDOWN[Right-Alt] + BOOL autorep = ((lparam & 0x40000000) != 0); + BOOL extended = ((lparam & 0x01000000) != 0); + if ((!JoyProcessKey((int)wparam,extended,1,autorep)) && (mode != MODE_LOGO)) + KeybQueueKeypress((int)wparam,NOT_ASCII); + } + else if (mode == MODE_DEBUG) + DebugProcessCommand(wparam); + if (wparam == VK_F10) { + SetUsingCursor(0); + return 0; + } + break; + + case WM_KEYUP: + if ((wparam >= VK_F1) && (wparam <= VK_F8) && (buttondown == (int)wparam-VK_F1)) { + buttondown = -1; + if (fullscreen) + EraseButton(wparam-VK_F1); + else + DrawButton((HDC)0,wparam-VK_F1); + ProcessButtonClick(wparam-VK_F1); + } + else + JoyProcessKey((int)wparam,((lparam & 0x01000000) != 0),0,0); + break; + + case WM_LBUTTONDOWN: + if (buttondown == -1) { + int x = LOWORD(lparam); + int y = HIWORD(lparam); + if ((x >= buttonx) && + (y >= buttony) && + (y <= buttony+BUTTONS*BUTTONCY)) { + buttonactive = buttondown = (y-buttony-1)/BUTTONCY; + DrawButton((HDC)0,buttonactive); + SetCapture(window); + } + else if (usingcursor) + if (wparam & (MK_CONTROL | MK_SHIFT)) + SetUsingCursor(0); + else + JoySetButton(0,1); + else if ((x < buttonx) && JoyUsingMouse() && + ((mode == MODE_RUNNING) || (mode == MODE_STEPPING))) + SetUsingCursor(1); + } + RelayEvent(WM_LBUTTONDOWN,wparam,lparam); + break; + + case WM_LBUTTONUP: + if (buttonactive != -1) { + ReleaseCapture(); + if (buttondown == buttonactive) { + buttondown = -1; + if (fullscreen) + EraseButton(buttonactive); + else + DrawButton((HDC)0,buttonactive); + ProcessButtonClick(buttonactive); + } + buttonactive = -1; + } + else if (usingcursor) + JoySetButton(0,0); + RelayEvent(WM_LBUTTONUP,wparam,lparam); + break; + + case WM_MOUSEMOVE: { + int x = LOWORD(lparam); + int y = HIWORD(lparam); + int newover = (((x >= buttonx) && + (x <= buttonx+BUTTONCX) && + (y >= buttony) && + (y <= buttony+BUTTONS*BUTTONCY)) + ? (y-buttony-1)/BUTTONCY : -1); + if (buttonactive != -1) { + int newdown = (newover == buttonactive) ? buttonactive : -1; + if (newdown != buttondown) { + buttondown = newdown; + DrawButton((HDC)0,buttonactive); + } + } + else if (fullscreen && (newover != buttonover) && (buttondown == -1)) { + if (buttonover != -1) + EraseButton(buttonover); + buttonover = newover; + if (buttonover != -1) + DrawButton((HDC)0,buttonover); + } + else if (usingcursor) { + DrawCrosshairs(x,y); + JoySetPosition(x-viewportx-2,VIEWPORTCX-4, + y-viewporty-2,VIEWPORTCY-4); + } + RelayEvent(WM_MOUSEMOVE,wparam,lparam); + break; + } + + case WM_NOTIFY: + if(((LPNMTTDISPINFO)lparam)->hdr.hwndFrom == tooltipwindow && + ((LPNMTTDISPINFO)lparam)->hdr.code == TTN_GETDISPINFO) + ((LPNMTTDISPINFO)lparam)->lpszText = + (LPTSTR)DiskGetFullName(((LPNMTTDISPINFO)lparam)->hdr.idFrom); + break; + + case WM_PAINT: + if (GetUpdateRect(window,NULL,0)) { + painting = 1; + DrawFrameWindow(); + painting = 0; + } + break; + + case WM_PALETTECHANGED: + if ((HWND)wparam == window) + break; + // fall through + + case WM_QUERYNEWPALETTE: + DrawFrameWindow(); + break; + + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + if (usingcursor) + JoySetButton(1,(message == WM_RBUTTONDOWN)); + RelayEvent(message,wparam,lparam); + break; + + case WM_SYSCOLORCHANGE: + DeleteGdiObjects(); + CreateGdiObjects(); + break; + + case WM_SYSCOMMAND: + switch (wparam & 0xFFF0) { + case SC_KEYMENU: + if (fullscreen && active) + return 0; + break; + case SC_MINIMIZE: + GetWindowRect(window,&framerect); + break; + } + break; + + case WM_SYSKEYDOWN: + PostMessage(window,WM_KEYDOWN,wparam,lparam); + if ((wparam == VK_F10) || (wparam == VK_MENU)) // VK_MENU == ALT Key + return 0; + break; + + case WM_SYSKEYUP: + PostMessage(window,WM_KEYUP,wparam,lparam); + break; + + case WM_USER_BENCHMARK: { + if (mode != MODE_LOGO) + if (MessageBox(framewindow, + TEXT("Running the benchmarks will reset the state of ") + TEXT("the emulated machine, causing you to lose any ") + TEXT("unsaved work.\n\n") + TEXT("Are you sure you want to do this?"), + TEXT("Benchmarks"), + MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDNO) + break; + UpdateWindow(window); + ResetMachineState(); + mode = MODE_LOGO; + DrawStatusArea((HDC)0,DRAW_TITLE); + HCURSOR oldcursor = SetCursor(LoadCursor(0,IDC_WAIT)); + VideoBenchmark(); + ResetMachineState(); + SetCursor(oldcursor); + break; + } + + case WM_USER_RESTART: + // . Changed Apple computer type (][+ or //e) + // . Changed disk speed (normal or enhanced) + if (mode != MODE_LOGO) + if (MessageBox(framewindow, + TEXT("Restarting the emulator will reset the state ") + TEXT("of the emulated machine, causing you to lose any ") + TEXT("unsaved work.\n\n") + TEXT("Are you sure you want to do this?"), + TEXT("Configuration"), + MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDNO) + break; + restart = 1; + PostMessage(window,WM_CLOSE,0,0); + break; + + case WM_USER_SAVESTATE: // Save state + Snapshot_SaveState(); + break; + + case WM_USER_LOADSTATE: // Load state + Snapshot_LoadState(); + break; + } + return DefWindowProc(window,message,wparam,lparam); +} + +//=========================================================================== +void ProcessButtonClick (int button) { + + SoundCore_SetFade(FADE_OUT); + + switch (button) { + + case BTN_HELP: + { + TCHAR filename[MAX_PATH]; + _tcscpy(filename,progdir); + _tcscat(filename,TEXT("APPLEWIN.CHM")); + HtmlHelp(framewindow,filename,HH_DISPLAY_TOC,0); + helpquit = 1; + } + break; + + case BTN_RUN: + if (mode == MODE_LOGO) + DiskBoot(); + else if (mode == MODE_RUNNING) + ResetMachineState(); + if ((mode == MODE_DEBUG) || (mode == MODE_STEPPING)) + DebugEnd(); + mode = MODE_RUNNING; + DrawStatusArea((HDC)0,DRAW_TITLE); + VideoRedrawScreen(); + resettiming = 1; + break; + + case BTN_DRIVE1: + case BTN_DRIVE2: + DiskSelect(button-BTN_DRIVE1); + if (!fullscreen) + DrawButton((HDC)0,button); + break; + + case BTN_DRIVESWAP: + DiskDriveSwap(); + break; + + case BTN_FULLSCR: + if (fullscreen) + SetNormalMode(); + else + SetFullScreenMode(); + break; + + case BTN_DEBUG: + if (mode == MODE_LOGO) + ResetMachineState(); + if (mode == MODE_STEPPING) + DebugProcessChar(TEXT('\x1B')); + else if (mode == MODE_DEBUG) + ProcessButtonClick(BTN_RUN); + else { + DebugBegin(); + } + break; + + case BTN_SETUP: + { + PSP_Init(); + } + break; + + } + + if((mode != MODE_DEBUG) && (mode != MODE_PAUSED)) + { + SoundCore_SetFade(FADE_IN); + } +} + +//=========================================================================== +void RelayEvent (UINT message, WPARAM wparam, LPARAM lparam) { + if (fullscreen) + return; + MSG msg; + msg.hwnd = framewindow; + msg.message = message; + msg.wParam = wparam; + msg.lParam = lparam; + SendMessage(tooltipwindow,TTM_RELAYEVENT,0,(LPARAM)&msg); +} + +//=========================================================================== +void ResetMachineState () { + DiskReset(); // Set floppymotoron=0 + g_bFullSpeed = 0; // Might've hit reset in middle of InternalCpuExecute() - so beep may get (partially) muted + + MemReset(); + DiskBoot(); + VideoResetState(); + CommReset(); + JoyReset(); + MB_Reset(); + SpkrReset(); + + SoundCore_SetFade(FADE_NONE); +} + +//=========================================================================== +void SetFullScreenMode () { + fullscreen = 1; + buttonover = -1; + buttonx = FSBUTTONX; + buttony = FSBUTTONY; + viewportx = FSVIEWPORTX; + viewporty = FSVIEWPORTY; + GetWindowRect(framewindow,&framerect); + SetWindowLong(framewindow,GWL_STYLE,WS_POPUP | WS_SYSMENU | WS_VISIBLE); + DDSURFACEDESC ddsd; + ddsd.dwSize = sizeof(ddsd); + ddsd.dwFlags = DDSD_CAPS; + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + if (DirectDrawCreate(NULL,&directdraw,NULL) != DD_OK || + directdraw->SetCooperativeLevel(framewindow,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN) != DD_OK || + directdraw->SetDisplayMode(640,480,8) != DD_OK || + directdraw->CreateSurface(&ddsd,&surface,NULL) != DD_OK) { + SetNormalMode(); + return; + } + InvalidateRect(framewindow,NULL,1); +} + +//=========================================================================== +void SetNormalMode () { + fullscreen = 0; + buttonx = BUTTONX; + buttony = BUTTONY; + viewportx = VIEWPORTX; + viewporty = VIEWPORTY; + directdraw->RestoreDisplayMode(); + directdraw->SetCooperativeLevel(NULL,DDSCL_NORMAL); + SetWindowLong(framewindow,GWL_STYLE, + WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | + WS_VISIBLE); + SetWindowPos(framewindow,0,framerect.left, + framerect.top, + framerect.right - framerect.left, + framerect.bottom - framerect.top, + SWP_NOZORDER | SWP_FRAMECHANGED); + if (surface) { + surface->Release(); + surface = (LPDIRECTDRAWSURFACE)0; + } + directdraw->Release(); + directdraw = (LPDIRECTDRAW)0; +} + +//=========================================================================== +void SetUsingCursor (BOOL newvalue) { + if (newvalue == usingcursor) + return; + usingcursor = newvalue; + if (usingcursor) { + SetCapture(framewindow); + RECT rect = {viewportx+2, + viewporty+2, + viewportx+VIEWPORTCX-1, + viewporty+VIEWPORTCY-1}; + ClientToScreen(framewindow,(LPPOINT)&rect.left); + ClientToScreen(framewindow,(LPPOINT)&rect.right); + ClipCursor(&rect); + ShowCursor(0); + POINT pt; + GetCursorPos(&pt); + ScreenToClient(framewindow,&pt); + DrawCrosshairs(pt.x,pt.y); + } + else { + DrawCrosshairs(0,0); + ShowCursor(1); + ClipCursor(NULL); + ReleaseCapture(); + } +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +void FrameCreateWindow () { + int width = VIEWPORTCX + (VIEWPORTX<<1) + + BUTTONCX + + (GetSystemMetrics(SM_CXBORDER)<<1) + + 5; + int height = VIEWPORTCY + (VIEWPORTY<<1) + + GetSystemMetrics(SM_CYBORDER) + + GetSystemMetrics(SM_CYCAPTION) + + 5; + int xpos; + if (!RegLoadValue(TEXT("Preferences"),TEXT("Window X-Position"),1,(DWORD *)&xpos)) + xpos = (GetSystemMetrics(SM_CXSCREEN)-width) >> 1; + int ypos; + if (!RegLoadValue(TEXT("Preferences"),TEXT("Window Y-Position"),1,(DWORD *)&ypos)) + ypos = (GetSystemMetrics(SM_CYSCREEN)-height) >> 1; + framewindow = CreateWindow(TEXT("APPLE2FRAME"),apple2e ? TITLE + : TEXT("Apple ][+ Emulator"), + WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | + WS_VISIBLE, + xpos,ypos,width,height, + HWND_DESKTOP,(HMENU)0,instance,NULL); + InitCommonControls(); + tooltipwindow = CreateWindow(TOOLTIPS_CLASS,NULL,TTS_ALWAYSTIP, + CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, + framewindow,(HMENU)0,instance,NULL); + TOOLINFO toolinfo; + toolinfo.cbSize = sizeof(toolinfo); + toolinfo.uFlags = TTF_CENTERTIP; + toolinfo.hwnd = framewindow; + toolinfo.hinst = instance; + toolinfo.lpszText = LPSTR_TEXTCALLBACK; + toolinfo.rect.left = BUTTONX; + toolinfo.rect.right = toolinfo.rect.left+BUTTONCX+1; + toolinfo.uId = 0; + toolinfo.rect.top = BUTTONY+BTN_DRIVE1*BUTTONCY+1; + toolinfo.rect.bottom = toolinfo.rect.top+BUTTONCY; + SendMessage(tooltipwindow,TTM_ADDTOOL,0,(LPARAM)&toolinfo); + toolinfo.uId = 1; + toolinfo.rect.top = BUTTONY+BTN_DRIVE2*BUTTONCY+1; + toolinfo.rect.bottom = toolinfo.rect.top+BUTTONCY; + SendMessage(tooltipwindow,TTM_ADDTOOL,0,(LPARAM)&toolinfo); +} + +//=========================================================================== +HDC FrameGetDC () { + if (!framedc) { + framedc = GetDC(framewindow); + SetViewportOrgEx(framedc,viewportx,viewporty,NULL); + } + return framedc; +} + +//=========================================================================== +HDC FrameGetVideoDC (LPBYTE *addr, LONG *pitch) { + if (fullscreen && active && !painting) { + RECT rect = {FSVIEWPORTX, + FSVIEWPORTY, + FSVIEWPORTX+VIEWPORTCX, + FSVIEWPORTY+VIEWPORTCY}; + DDSURFACEDESC surfacedesc; + surfacedesc.dwSize = sizeof(surfacedesc); + if (surface->Lock(&rect,&surfacedesc,0,NULL) == DDERR_SURFACELOST) { + surface->Restore(); + surface->Lock(&rect,&surfacedesc,0,NULL); + } + *addr = (LPBYTE)surfacedesc.lpSurface+(VIEWPORTCY-1)*surfacedesc.lPitch; + *pitch = -surfacedesc.lPitch; + return (HDC)0; + } + else return FrameGetDC(); +} + +//=========================================================================== +void FrameRefreshStatus (int drawflags) { + DrawStatusArea((HDC)0,drawflags); +} + +//=========================================================================== +void FrameRegisterClass () { + WNDCLASSEX wndclass; + ZeroMemory(&wndclass,sizeof(WNDCLASSEX)); + wndclass.cbSize = sizeof(WNDCLASSEX); + wndclass.style = CS_OWNDC | CS_BYTEALIGNCLIENT; + wndclass.lpfnWndProc = FrameWndProc; + wndclass.hInstance = instance; + wndclass.hIcon = LoadIcon(instance,TEXT("APPLEWIN_ICON")); + wndclass.hCursor = LoadCursor(0,IDC_ARROW); + wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); +#if ENABLE_MENU + wndclass.lpszMenuName = (LPCSTR)IDR_MENU1; +#endif + wndclass.lpszClassName = TEXT("APPLE2FRAME"); + wndclass.hIconSm = (HICON)LoadImage(instance,TEXT("APPLEWIN_ICON"), + IMAGE_ICON,16,16,LR_DEFAULTCOLOR); + RegisterClassEx(&wndclass); +} + +//=========================================================================== +void FrameReleaseDC () { + if (framedc) { + SetViewportOrgEx(framedc,0,0,NULL); + ReleaseDC(framewindow,framedc); + framedc = (HDC)0; + } +} + +//=========================================================================== +void FrameReleaseVideoDC () { + if (fullscreen && active && !painting) { + + // THIS IS CORRECT ACCORDING TO THE DIRECTDRAW DOCS + RECT rect = {FSVIEWPORTX, + FSVIEWPORTY, + FSVIEWPORTX+VIEWPORTCX, + FSVIEWPORTY+VIEWPORTCY}; + surface->Unlock(&rect); + + // BUT THIS SEEMS TO BE WORKING + surface->Unlock(NULL); + } +} diff --git a/AppleWin/source/Frame.h b/AppleWin/source/Frame.h new file mode 100644 index 00000000..3b5aca1b --- /dev/null +++ b/AppleWin/source/Frame.h @@ -0,0 +1,14 @@ +#pragma once + +enum {NOT_ASCII=0, ASCII}; + +extern HWND framewindow; +extern BOOL fullscreen; + +void FrameCreateWindow (); +HDC FrameGetDC (); +HDC FrameGetVideoDC (LPBYTE *,LONG *); +void FrameRefreshStatus (int); +void FrameRegisterClass (); +void FrameReleaseDC (); +void FrameReleaseVideoDC (); diff --git a/AppleWin/source/Harddisk.cpp b/AppleWin/source/Harddisk.cpp new file mode 100644 index 00000000..2b96347c --- /dev/null +++ b/AppleWin/source/Harddisk.cpp @@ -0,0 +1,567 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Hard drive emulation + * + * Author: Copyright (c) 2005, Robert Hoem + */ + +#include "StdAfx.h" +#pragma hdrstop +#include "..\resource\resource.h" + +/* +Memory map: + + C0F0 (r) EXECUTE AND RETURN STATUS + C0F1 (r) STATUS (or ERROR) + C0F2 (r/w) COMMAND + C0F3 (r/w) UNIT NUMBER + C0F4 (r/w) LOW BYTE OF MEMORY BUFFER + C0F5 (r/w) HIGH BYTE OF MEMORY BUFFER + C0F6 (r/w) LOW BYTE OF BLOCK NUMBER + C0F7 (r/w) HIGH BYTE OF BLOCK NUMBER + C0F8 (r) NEXT BYTE +*/ + +/* +Hard drive emulation in Applewin. + +Concept + To emulate a 32mb hard drive connected to an Apple IIe via Applewin. + Designed to work with Autoboot Rom and Prodos. + +Overview + 1. Hard drive image file + The hard drive image file (.HDV) will be formatted into blocks of 512 + bytes, in a linear fashion. The internal formatting and meaning of each + block to be decided by the Apple's operating system (ProDos). To create + an empty .HDV file, just create a 0 byte file (I prefer the debug method). + + 2. Emulation code + There are 4 commands Prodos will send to a block device. + Listed below are each command and how it's handled: + + 1. STATUS + In the emulation's case, returns only a DEVICE OK (0) or DEVICE I/O ERROR (8). + DEVICE I/O ERROR only returned if no HDV file is selected. + + 2. READ + Loads requested block into a 512 byte buffer by attempting to seek to + location in HDV file. + If seek fails, returns a DEVICE I/O ERROR. Resets hd_buf_ptr used by HD_NEXTBYTE + Returns a DEVICE OK if read was successful, or a DEVICE I/O ERROR otherwise. + + 3. WRITE + Copies requested block from the Apple's memory to a 512 byte buffer + then attempts to seek to requested block. + If the seek fails (usually because the seek is beyond the EOF for the + HDV file), the Emulation will attempt to "grow" the HDV file to accomodate. + Once the file can accomodate, or if the seek did not fail, the buffer is + written to the HDV file. NOTE: A2PC will grow *AND* shrink the HDV file. + I didn't see the point in shrinking the file as this behaviour would require + patching prodos (to detect DELETE FILE calls). + + 4. FORMAT + Ignored. This would be used for low level formatting of the device + (as in the case of a tape or SCSI drive, perhaps). + + 3. Bugs + The only thing I've noticed is that Copy II+ 7.1 seems to crash or stall + occasionally when trying to calculate how many free block are available + when running a catalog. This might be due to the great number of blocks + available. Also, DDD pro will not optimise the disk correctally (it's + doing a disk defragment of some sort, and when it requests a block outside + the range of the image file, it starts getting I/O errors), so don't + bother. Any program that preforms a read before write to an "unwritten" + block (a block that should be located beyond the EOF of the .HDV, which is + valid for writing but not for reading until written to) will fail with I/O + errors (although these are few and far between). + + I'm sure there are programs out there that may try to use the I/O ports in + ways they weren't designed (like telling Ultima 5 that you have a Phazor + sound card in slot 7 is a generally bad idea) will cause problems. +*/ + +typedef struct +{ + TCHAR hd_imagename[16]; + TCHAR hd_fullname[128]; + BYTE hd_error; + WORD hd_memblock; + WORD hd_diskblock; + WORD hd_buf_ptr; + BOOL hd_imageloaded; + HANDLE hd_file; + BYTE hd_buf[513]; +} HDD, *PHDD; + +static bool g_bHD_RomLoaded = false; +static bool g_bHD_Enabled = false; + +static BYTE g_nHD_UnitNum = DRIVE_1; + +// The HDD interface has a single Command register for both drives: +// . ProDOS will write to Command before switching drives +static BYTE g_nHD_Command; + +static HDD g_HardDrive[2] = {0}; + +//=========================================================================== + +static void GetImageTitle (LPCTSTR imagefilename, PHDD pHardDrive) +{ + TCHAR imagetitle[128]; + LPCTSTR startpos = imagefilename; + + // imagetitle = + if (_tcsrchr(startpos,TEXT('\\'))) + startpos = _tcsrchr(startpos,TEXT('\\'))+1; + _tcsncpy(imagetitle,startpos,127); + imagetitle[127] = 0; + + // if imagetitle contains a lowercase char, then found=1 (why?) + BOOL found = 0; + int loop = 0; + while (imagetitle[loop] && !found) + { + if (IsCharLower(imagetitle[loop])) + found = 1; + else + loop++; + } + + if ((!found) && (loop > 2)) + CharLowerBuff(imagetitle+1,_tcslen(imagetitle+1)); + + // fptr->fullname = + _tcsncpy(pHardDrive->hd_fullname,imagetitle,127); + pHardDrive->hd_fullname[127] = 0; + + if (imagetitle[0]) + { + LPTSTR dot = imagetitle; + if (_tcsrchr(dot,TEXT('.'))) + dot = _tcsrchr(dot,TEXT('.')); + if (dot > imagetitle) + *dot = 0; + } + + // fptr->imagename = (ie. no extension) + _tcsncpy(pHardDrive->hd_imagename,imagetitle,15); + pHardDrive->hd_imagename[15] = 0; +} + +static void NotifyInvalidImage (TCHAR* filename) +{ + // TC: TO DO +} + +static void HD_CleanupDrive(int nDrive) +{ + CloseHandle(g_HardDrive[nDrive].hd_file); + g_HardDrive[nDrive].hd_imageloaded = false; + g_HardDrive[nDrive].hd_imagename[0] = 0; + g_HardDrive[nDrive].hd_fullname[0] = 0; +} + +static BOOL HD_Load_Image(int nDrive, LPCSTR filename) +{ + g_HardDrive[nDrive].hd_file = CreateFile(filename, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ, + (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, + NULL); + + if (g_HardDrive[nDrive].hd_file == INVALID_HANDLE_VALUE) + g_HardDrive[nDrive].hd_imageloaded = false; + else + g_HardDrive[nDrive].hd_imageloaded = true; + + return g_HardDrive[nDrive].hd_imageloaded; +} + +static LPCTSTR HD_DiskGetName (int nDrive) +{ + return g_HardDrive[nDrive].hd_imagename; +} + +//=========================================================================== + +// everything below is global + +static const DWORD HDDRVR_SIZE = 0x100; +static LPBYTE lpMemC000 = NULL; + +bool HD_CardIsEnabled() +{ + return g_bHD_RomLoaded && g_bHD_Enabled; +} + +void HD_SetEnabled(bool bEnabled) +{ + if(g_bHD_Enabled == bEnabled) + return; + + g_bHD_Enabled = bEnabled; + + if(lpMemC000 == NULL) // This will be NULL when called after loading value from Registry + return; + + if(g_bHD_Enabled) + HD_Load_Rom(lpMemC000); + else + memset(lpMemC000+0x700, 0, HDDRVR_SIZE); +} + +LPCTSTR HD_GetFullName (int nDrive) +{ + return g_HardDrive[nDrive].hd_fullname; +} + +VOID HD_Load_Rom(LPBYTE lpMemRom) +{ + lpMemC000 = lpMemRom; // Keep a copy for HD_SetEnabled() + + if(!g_bHD_Enabled) + return; + + HRSRC hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_HDDRVR), RT_RCDATA); + if(hResInfo == NULL) + return; + + DWORD dwResSize = SizeofResource(NULL, hResInfo); + if(dwResSize != HDDRVR_SIZE) + return; + + HGLOBAL hResData = LoadResource(NULL, hResInfo); + if(hResData == NULL) + return; + + BYTE* pData = (BYTE*) LockResource(hResData); // NB. Don't need to unlock resource + if(pData == NULL) + return; + + memcpy(lpMemRom+0x700, pData, HDDRVR_SIZE); + g_bHD_RomLoaded = true; +} + +VOID HD_Cleanup() +{ + for(int i=DRIVE_1; i> 7]; // bit7 = drive select + + if (bWrite == 0) // read + { + switch (addr) + { + case 0xF0: + { + if (pHDD->hd_imageloaded) + { + // based on loaded data block request, load block into memory + // returns status + switch (g_nHD_Command) + { + default: + case 0x00: //status + if (GetFileSize(pHDD->hd_file,NULL) == 0) + { + pHDD->hd_error = 1; + r = DEVICE_IO_ERROR; + } + break; + case 0x01: //read + { + DWORD br = GetFileSize(pHDD->hd_file,NULL); + if ((DWORD)(pHDD->hd_diskblock * 512) <= br) // seek to block + { + SetFilePointer(pHDD->hd_file,pHDD->hd_diskblock * 512,NULL,FILE_BEGIN); // seek to block + if (ReadFile(pHDD->hd_file,pHDD->hd_buf,512,&br,NULL)) // read block into buffer + { + pHDD->hd_error = 0; + r = 0; + pHDD->hd_buf_ptr = 0; + } + else + { + pHDD->hd_error = 1; + r = DEVICE_IO_ERROR; + } + } + else + { + pHDD->hd_error = 1; + r = DEVICE_IO_ERROR; + } + } + break; + case 0x02: //write + { + DWORD bw = GetFileSize(pHDD->hd_file,NULL); + if ((DWORD)(pHDD->hd_diskblock * 512) <= bw) + { + MoveMemory(pHDD->hd_buf,mem+pHDD->hd_memblock,512); + SetFilePointer(pHDD->hd_file,pHDD->hd_diskblock * 512,NULL,FILE_BEGIN); // seek to block + if (WriteFile(pHDD->hd_file,pHDD->hd_buf,512,&bw,NULL)) // write buffer to file + { + pHDD->hd_error = 0; + r = 0; + } + else + { + pHDD->hd_error = 1; + r = DEVICE_IO_ERROR; + } + } + else + { + DWORD fsize = SetFilePointer(pHDD->hd_file,0,NULL,FILE_END); + DWORD addblocks = pHDD->hd_diskblock - (fsize / 512); + FillMemory(pHDD->hd_buf,512,0); + while (addblocks--) + { + DWORD bw; + WriteFile(pHDD->hd_file,pHDD->hd_buf,512,&bw,NULL); + } + if (SetFilePointer(pHDD->hd_file,pHDD->hd_diskblock * 512,NULL,FILE_BEGIN) != 0xFFFFFFFF) { // seek to block + MoveMemory(pHDD->hd_buf,mem+pHDD->hd_memblock,512); + if (WriteFile(pHDD->hd_file,pHDD->hd_buf,512,&bw,NULL)) // write buffer to file + { + pHDD->hd_error = 0; + r = 0; + } + else + { + pHDD->hd_error = 1; + r = DEVICE_IO_ERROR; + } + } + } + } + break; + case 0x03: //format + break; + } + } + else + { + pHDD->hd_error = 1; + r = DEVICE_UNKNOWN_ERROR; + } + } + break; + case 0xF1: // hd_error + { + r = pHDD->hd_error; + } + break; + case 0xF2: + { + r = g_nHD_Command; + } + break; + case 0xF3: + { + r = g_nHD_UnitNum; + } + break; + case 0xF4: + { + r = (BYTE)(pHDD->hd_memblock & 0x00FF); + } + break; + case 0xF5: + { + r = (BYTE)(pHDD->hd_memblock & 0xFF00 >> 8); + } + break; + case 0xF6: + { + r = (BYTE)(pHDD->hd_diskblock & 0x00FF); + } + break; + case 0xF7: + { + r = (BYTE)(pHDD->hd_diskblock & 0xFF00 >> 8); + } + break; + case 0xF8: + { + r = pHDD->hd_buf[pHDD->hd_buf_ptr]; + pHDD->hd_buf_ptr++; + } + break; + default: + { + } + } + } + else // write + { + switch (addr) + { + case 0xF2: + { + g_nHD_Command = d; + } + break; + case 0xF3: + { + // b7 = drive# + // b6..4 = slot# + // b3..0 = ? + g_nHD_UnitNum = d; + } + break; + case 0xF4: + { + pHDD->hd_memblock = pHDD->hd_memblock & 0xFF00 | d; + } + break; + case 0xF5: + { + pHDD->hd_memblock = pHDD->hd_memblock & 0x00FF | (d << 8); + } + break; + case 0xF6: + { + pHDD->hd_diskblock = pHDD->hd_diskblock & 0xFF00 | d; + } + break; + case 0xF7: + { + pHDD->hd_diskblock = pHDD->hd_diskblock & 0x00FF | (d << 8); + } + break; + default: + break; + } + } + + return r; +} + + + + + + + + + + + + diff --git a/AppleWin/source/Harddisk.h b/AppleWin/source/Harddisk.h new file mode 100644 index 00000000..98ac0885 --- /dev/null +++ b/AppleWin/source/Harddisk.h @@ -0,0 +1,12 @@ +#pragma once + +bool HD_CardIsEnabled(); +void HD_SetEnabled(bool bEnabled); +LPCTSTR HD_GetFullName (int drive); +VOID HD_Load_Rom(LPBYTE lpMemRom); +VOID HD_Cleanup(); +BOOL HD_InsertDisk2(int nDrive, LPCTSTR pszFilename); +BOOL HD_InsertDisk(int nDrive, LPCTSTR imagefilename); +void HD_Select(int nDrive); + +BYTE __stdcall HD_IO_EMUL (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/Joystick.cpp b/AppleWin/source/Joystick.cpp new file mode 100644 index 00000000..24e51486 --- /dev/null +++ b/AppleWin/source/Joystick.cpp @@ -0,0 +1,591 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Joystick emulation via keyboard, PC joystick or mouse + * + * Author: Various + */ + +// TC: Extended for 2nd joystick: +// Apple joystick #0 can be emulated with: NONE, JOYSTICKID1, KEYBOARD, MOUSE +// Apple joystick #1 can be emulated with: NONE, JOYSTICKID2, KEYBOARD, MOUSE +// If Apple joystick #0 is using {KEYBOARD | MOUSE} then joystick #1 can't use it. +// If Apple joystick #1 is using KEYBOARD, then disable the standard keys that control Apple switches #0/#1. +// - So that in a 2 player game, player 2 can't cheat by controlling player 1's buttons. +// If Apple joystick #1 is not NONE, then Apple joystick #0 only gets the use of Apple switch #0. +// - When using 2 joysticks, button #1 is used by joystick #1 (Archon). +// Apple joystick #1's button now controls Apple switches #1 and #2. +// - This is because the 2-joystick version of Mario Bros expects the 2nd joystick to control Apple switch #2. + +#include "StdAfx.h" +#pragma hdrstop + +#define BUTTONTIME 5000 + +#define DEVICE_NONE 0 +#define DEVICE_JOYSTICK 1 +#define DEVICE_KEYBOARD 2 +#define DEVICE_MOUSE 3 + +#define MODE_NONE 0 +#define MODE_STANDARD 1 +#define MODE_CENTERING 2 +#define MODE_SMOOTH 3 + +typedef struct _joyinforec { + int device; + int mode; +} joyinforec, *joyinfoptr; + +static const joyinforec joyinfo[5] = {{DEVICE_NONE,MODE_NONE}, + {DEVICE_JOYSTICK,MODE_STANDARD}, + {DEVICE_KEYBOARD,MODE_STANDARD}, + {DEVICE_KEYBOARD,MODE_CENTERING}, + {DEVICE_MOUSE,MODE_STANDARD}}; + +// Key pad [1..9]; Key pad 0,Key pad '.'; Left ALT,Right ALT +enum JOYKEY { JK_DOWNLEFT=0, + JK_DOWN, + JK_DOWNRIGHT, + JK_LEFT, + JK_CENTRE, + JK_RIGHT, + JK_UPLEFT, + JK_UP, + JK_UPRIGHT, + JK_BUTTON0, + JK_BUTTON1, + JK_OPENAPPLE, + JK_CLOSEDAPPLE, + JK_MAX + }; + +const UINT PDL_MIN = 0; +const UINT PDL_CENTRAL = 127; +const UINT PDL_MAX = 255; + +static BOOL keydown[JK_MAX] = {FALSE}; +static POINT keyvalue[9] = {{PDL_MIN,PDL_MAX}, {PDL_CENTRAL,PDL_MAX}, {PDL_MAX,PDL_MAX}, + {PDL_MIN,PDL_CENTRAL},{PDL_CENTRAL,PDL_CENTRAL},{PDL_MAX,PDL_CENTRAL}, + {PDL_MIN,PDL_MIN}, {PDL_CENTRAL,PDL_MIN}, {PDL_MAX,PDL_MIN}}; + +static DWORD buttonlatch[3] = {0,0,0}; +static BOOL joybutton[3] = {0,0,0}; + +static int joyshrx[2] = {8,8}; +static int joyshry[2] = {8,8}; +static int joysubx[2] = {0,0}; +static int joysuby[2] = {0,0}; + +DWORD joytype[2] = {DEVICE_JOYSTICK,DEVICE_NONE}; // Emulation Type for joysticks #0 & #1 + +static BOOL setbutton[3] = {0,0,0}; // Used when a mouse button is pressed/released + +static int xpos[2] = {PDL_CENTRAL,PDL_CENTRAL}; +static int ypos[2] = {PDL_CENTRAL,PDL_CENTRAL}; + +static unsigned __int64 g_nJoyCntrResetCycle = 0; // Abs cycle that joystick counters were reset + +static short g_nPdlTrimX = 0; +static short g_nPdlTrimY = 0; + +//=========================================================================== +void CheckJoystick0 () +{ + static DWORD lastcheck = 0; + DWORD currtime = GetTickCount(); + if ((currtime-lastcheck >= 10) || joybutton[0] || joybutton[1]) + { + lastcheck = currtime; + JOYINFO info; + if (joyGetPos(JOYSTICKID1,&info) == JOYERR_NOERROR) + { + if ((info.wButtons & JOY_BUTTON1) && !joybutton[0]) + buttonlatch[0] = BUTTONTIME; + if ((info.wButtons & JOY_BUTTON2) && !joybutton[1] && + (joyinfo[joytype[1]].device == DEVICE_NONE) // Only consider 2nd button if NOT emulating a 2nd Apple joystick + ) + buttonlatch[1] = BUTTONTIME; + joybutton[0] = ((info.wButtons & JOY_BUTTON1) != 0); + if (joyinfo[joytype[1]].device == DEVICE_NONE) // Only consider 2nd button if NOT emulating a 2nd Apple joystick + joybutton[1] = ((info.wButtons & JOY_BUTTON2) != 0); + + xpos[0] = (info.wXpos-joysubx[0]) >> joyshrx[0]; + ypos[0] = (info.wYpos-joysuby[0]) >> joyshry[0]; + + // NB. This does not work for analogue joysticks (not self-centreing) - except if Trim=0 + if(xpos[0] == 127 || xpos[0] == 128) xpos[0] += g_nPdlTrimX; + if(ypos[0] == 127 || ypos[0] == 128) ypos[0] += g_nPdlTrimY; + } + } +} + +void CheckJoystick1 () +{ + static DWORD lastcheck = 0; + DWORD currtime = GetTickCount(); + if ((currtime-lastcheck >= 10) || joybutton[2]) + { + lastcheck = currtime; + JOYINFO info; + if (joyGetPos(JOYSTICKID2,&info) == JOYERR_NOERROR) + { + if ((info.wButtons & JOY_BUTTON1) && !joybutton[2]) + { + buttonlatch[2] = BUTTONTIME; + if(joyinfo[joytype[1]].device != DEVICE_NONE) + buttonlatch[1] = BUTTONTIME; // Re-map this button when emulating a 2nd Apple joystick + } + + joybutton[2] = ((info.wButtons & JOY_BUTTON1) != 0); + if(joyinfo[joytype[1]].device != DEVICE_NONE) + joybutton[1] = ((info.wButtons & JOY_BUTTON1) != 0); // Re-map this button when emulating a 2nd Apple joystick + + xpos[1] = (info.wXpos-joysubx[1]) >> joyshrx[1]; + ypos[1] = (info.wYpos-joysuby[1]) >> joyshry[1]; + + // NB. This does not work for analogue joysticks (not self-centreing) - except if Trim=0 + if(xpos[1] == 127 || xpos[1] == 128) xpos[1] += g_nPdlTrimX; + if(ypos[1] == 127 || ypos[1] == 128) ypos[1] += g_nPdlTrimY; + } + } +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +void JoyInitialize () +{ + // Emulated joystick #0 can only use JOYSTICKID1 (if no joystick, then use mouse) + // Emulated joystick #1 can only use JOYSTICKID2 (if no joystick, then disable) + + // + // Init for emulated joystick #0: + // + + if (joyinfo[joytype[0]].device == DEVICE_JOYSTICK) + { + JOYCAPS caps; + if (joyGetDevCaps(JOYSTICKID1,&caps,sizeof(JOYCAPS)) == JOYERR_NOERROR) + { + joyshrx[0] = 0; + joyshry[0] = 0; + joysubx[0] = (int)caps.wXmin; + joysuby[0] = (int)caps.wYmin; + UINT xrange = caps.wXmax-caps.wXmin; + UINT yrange = caps.wYmax-caps.wYmin; + while (xrange > 256) + { + xrange >>= 1; + ++joyshrx[0]; + } + while (yrange > 256) + { + yrange >>= 1; + ++joyshry[0]; + } + } + else + { + joytype[0] = DEVICE_MOUSE; + } + } + + // + // Init for emulated joystick #1: + // + + if (joyinfo[joytype[1]].device == DEVICE_JOYSTICK) + { + JOYCAPS caps; + if (joyGetDevCaps(JOYSTICKID2,&caps,sizeof(JOYCAPS)) == JOYERR_NOERROR) + { + joyshrx[1] = 0; + joyshry[1] = 0; + joysubx[1] = (int)caps.wXmin; + joysuby[1] = (int)caps.wYmin; + UINT xrange = caps.wXmax-caps.wXmin; + UINT yrange = caps.wYmax-caps.wYmin; + while (xrange > 256) + { + xrange >>= 1; + ++joyshrx[1]; + } + while (yrange > 256) + { + yrange >>= 1; + ++joyshry[1]; + } + } + else + { + joytype[1] = DEVICE_NONE; + } + } +} + +//=========================================================================== + +BOOL JoyProcessKey (int virtkey, BOOL extended, BOOL down, BOOL autorep) +{ + if( (joyinfo[joytype[0]].device != DEVICE_KEYBOARD) && + (joyinfo[joytype[1]].device != DEVICE_KEYBOARD) && + (virtkey != VK_MENU) // VK_MENU == ALT Key + ) + return 0; + + // Joystick # which is being emulated by keyboard + int nJoyNum = (joyinfo[joytype[0]].device == DEVICE_KEYBOARD) ? 0 : 1; + int nCenteringType = joyinfo[joytype[nJoyNum]].mode; // MODE_STANDARD or MODE_CENTERING + + // + + BOOL keychange = !extended; + + if (virtkey == VK_MENU) // VK_MENU == ALT Key (Button #0 or #1) + { + keychange = 1; + keydown[JK_OPENAPPLE+(extended != 0)] = down; + } + else if (!extended) + { + if ((virtkey >= VK_NUMPAD1) && (virtkey <= VK_NUMPAD9)) + { + keydown[virtkey-VK_NUMPAD1] = down; + } + else + { + switch (virtkey) + { + case VK_END: keydown[ 0] = down; break; + case VK_DOWN: keydown[ 1] = down; break; + case VK_NEXT: keydown[ 2] = down; break; + case VK_LEFT: keydown[ 3] = down; break; + case VK_CLEAR: keydown[ 4] = down; break; + case VK_RIGHT: keydown[ 5] = down; break; + case VK_HOME: keydown[ 6] = down; break; + case VK_UP: keydown[ 7] = down; break; + case VK_PRIOR: keydown[ 8] = down; break; + case VK_NUMPAD0: keydown[ 9] = down; break; // Button #0 + case VK_INSERT: keydown[ 9] = down; break; // Button #0 + case VK_DECIMAL: keydown[10] = down; break; // Button #1 + case VK_DELETE: keydown[10] = down; break; // Button #1 + default: keychange = 0; break; + } + } + } + + // + + if (keychange) + { + if ((virtkey == VK_NUMPAD0) || (virtkey == VK_INSERT)) + { + if(down) + { + if(joyinfo[joytype[1]].device != DEVICE_KEYBOARD) + { + buttonlatch[0] = BUTTONTIME; + } + else if(joyinfo[joytype[1]].device != DEVICE_NONE) + { + buttonlatch[2] = BUTTONTIME; + buttonlatch[1] = BUTTONTIME; // Re-map this button when emulating a 2nd Apple joystick + } + } + } + else if ((virtkey == VK_DECIMAL) || (virtkey == VK_DELETE)) + { + if(down) + { + if(joyinfo[joytype[1]].device != DEVICE_KEYBOARD) + buttonlatch[1] = BUTTONTIME; + } + } + else if ((down && !autorep) || (nCenteringType == MODE_CENTERING)) + { + int xkeys = 0; + int ykeys = 0; + int xtotal = 0; + int ytotal = 0; + int keynum = 0; + while (keynum < 9) + { + if (keydown[keynum]) + { + if ((keynum % 3) != 1) + { + xkeys++; + xtotal += keyvalue[keynum].x; + } + if ((keynum / 3) != 1) + { + ykeys++; + ytotal += keyvalue[keynum].y; + } + } + keynum++; + } + + if (xkeys) + xpos[nJoyNum] = xtotal / xkeys; + else + xpos[nJoyNum] = PDL_CENTRAL+g_nPdlTrimX; + if (ykeys) + ypos[nJoyNum] = ytotal / ykeys; + else + ypos[nJoyNum] = PDL_CENTRAL+g_nPdlTrimY; + } + } + + return keychange; +} + +//=========================================================================== + +BYTE __stdcall JoyReadButton (WORD, BYTE address, BYTE, BYTE, ULONG) +{ + if(joyinfo[joytype[0]].device == DEVICE_JOYSTICK) + CheckJoystick0(); + if(joyinfo[joytype[1]].device == DEVICE_JOYSTICK) + CheckJoystick1(); + + BOOL pressed = 0; + switch (address) { + + case 0x61: + pressed = (buttonlatch[0] || joybutton[0] || setbutton[0] || keydown[JK_OPENAPPLE]); + if(joyinfo[joytype[1]].device != DEVICE_KEYBOARD) + pressed = (pressed || keydown[JK_BUTTON0]); + buttonlatch[0] = 0; + break; + + case 0x62: + pressed = (buttonlatch[1] || joybutton[1] || setbutton[1] || keydown[JK_CLOSEDAPPLE]); + if(joyinfo[joytype[1]].device != DEVICE_KEYBOARD) + pressed = (pressed || keydown[JK_BUTTON1]); + buttonlatch[1] = 0; + break; + + case 0x63: + pressed = (buttonlatch[2] || joybutton[2] || setbutton[2] || (GetKeyState(VK_SHIFT) < 0)); + buttonlatch[2] = 0; + break; + + } + return MemReturnRandomData(pressed); +} + +//=========================================================================== + +// PREAD: ; $FB1E +// AD 70 C0 : (4) LDA $C070 +// A0 00 : (2) LDA #$00 +// EA : (2) NOP +// EA : (2) NOP +// Lbl1: ; 11 cycles is the normal duration of the loop +// BD 64 C0 : (4) LDA $C064,X +// 10 04 : (2) BPL Lbl2 ; NB. 3 cycles if branch taken (not likely) +// C8 : (2) INY +// D0 F8 : (3) BNE Lbl1 ; NB. 2 cycles if branck not taken (not likely) +// 88 : (2) DEY +// Lbl2: +// 60 : (6) RTS +// + +static const double PDL_CNTR_INTERVAL = 2816.0 / 255.0; // 11.04 (From KEGS) + +BYTE __stdcall JoyReadPosition (WORD programcounter, BYTE address, BYTE, BYTE, ULONG nCyclesLeft) +{ + int nJoyNum = (address & 2) ? 1 : 0; // $C064..$C067 + + CpuCalcCycles(nCyclesLeft); + + ULONG nPdlPos = (address & 1) ? ypos[nJoyNum] : xpos[nJoyNum]; + + // This is from KEGS. It helps games like Championship Lode Runner & Boulderdash + if(nPdlPos >= 255) + nPdlPos = 280; + + BOOL nPdlCntrActive = g_nCumulativeCycles <= (g_nJoyCntrResetCycle + (unsigned __int64) ((double)nPdlPos * PDL_CNTR_INTERVAL)); + + return MemReturnRandomData(nPdlCntrActive); +} + +//=========================================================================== +void JoyReset () +{ + int loop = 0; + while (loop < JK_MAX) + keydown[loop++] = FALSE; +} + +//=========================================================================== +BYTE __stdcall JoyResetPosition (WORD, BYTE, BYTE, BYTE, ULONG nCyclesLeft) +{ + CpuCalcCycles(nCyclesLeft); + g_nJoyCntrResetCycle = g_nCumulativeCycles; + + if(joyinfo[joytype[0]].device == DEVICE_JOYSTICK) + CheckJoystick0(); + if(joyinfo[joytype[1]].device == DEVICE_JOYSTICK) + CheckJoystick1(); + + return MemReturnRandomData(1); +} + +//=========================================================================== + +// Called when mouse is being used as a joystick && mouse button changes +void JoySetButton (int number, BOOL down) +{ + if (number > 1) // Sanity check on mouse button # + return; + + // If 2nd joystick is enabled, then both joysticks only have 1 button + if((joyinfo[joytype[1]].device != DEVICE_NONE) && (number != 0)) + return; + + // If it is 2nd joystick that is being emulated with mouse, then re-map button # + if(joyinfo[joytype[1]].device == DEVICE_MOUSE) + { + number = 1; // 2nd joystick controls Apple button #1 + } + + setbutton[number] = down; + + if (down) + buttonlatch[number] = BUTTONTIME; +} + +//=========================================================================== +BOOL JoySetEmulationType (HWND window, DWORD newtype, int nJoystickNumber) +{ + if(joytype[nJoystickNumber] == newtype) + return 1; // Already set to this type. Return OK. + + if (joyinfo[newtype].device == DEVICE_JOYSTICK) + { + JOYCAPS caps; + unsigned int nJoyID = nJoystickNumber == JN_JOYSTICK0 ? JOYSTICKID1 : JOYSTICKID2; + if (joyGetDevCaps(nJoyID, &caps, sizeof(JOYCAPS)) != JOYERR_NOERROR) + { + MessageBox(window, + TEXT("The emulator is unable to read your PC joystick. ") + TEXT("Ensure that your game port is configured properly, ") + TEXT("that the joystick is firmly plugged in, and that ") + TEXT("you have a joystick driver installed."), + TEXT("Configuration"), + MB_ICONEXCLAMATION | MB_SETFOREGROUND); + return 0; + } + } + else if ((joyinfo[newtype].device == DEVICE_MOUSE) && + (joyinfo[joytype[nJoystickNumber]].device != DEVICE_MOUSE)) + { + MessageBox(window, + TEXT("To begin emulating a joystick with your mouse, move ") + TEXT("the mouse cursor over the emulated screen of a running ") + TEXT("program and click the left mouse button. During the ") + TEXT("time the mouse is emulating a joystick, you will not ") + TEXT("be able to use it to perform mouse functions, and the ") + TEXT("mouse cursor will not be visible. To end joystick ") + TEXT("emulation and regain the mouse cursor, click the left ") + TEXT("mouse button while pressing Ctrl."), + TEXT("Configuration"), + MB_ICONINFORMATION | MB_SETFOREGROUND); + } + joytype[nJoystickNumber] = newtype; + JoyInitialize(); + JoyReset(); + return 1; +} + + +//=========================================================================== + +// Called when mouse is being used as a joystick && mouse position changes +void JoySetPosition (int xvalue, int xrange, int yvalue, int yrange) +{ + int nJoyNum = (joyinfo[joytype[0]].device == DEVICE_MOUSE) ? 0 : 1; + xpos[nJoyNum] = (xvalue*255)/xrange; + ypos[nJoyNum] = (yvalue*255)/yrange; +} + +//=========================================================================== +void JoyUpdatePosition () +{ + if (buttonlatch[0]) --buttonlatch[0]; + if (buttonlatch[1]) --buttonlatch[1]; + if (buttonlatch[2]) --buttonlatch[2]; +} + +//=========================================================================== +BOOL JoyUsingMouse () +{ + return (joyinfo[joytype[0]].device == DEVICE_MOUSE) || (joyinfo[joytype[1]].device == DEVICE_MOUSE); +} + +//=========================================================================== + +void JoySetTrim(short nValue, bool bAxisX) +{ + if(bAxisX) + g_nPdlTrimX = nValue; + else + g_nPdlTrimY = nValue; + + int nJoyNum = -1; + + if(joyinfo[joytype[0]].device == DEVICE_KEYBOARD) + nJoyNum = 0; + else if(joyinfo[joytype[1]].device == DEVICE_KEYBOARD) + nJoyNum = 1; + + if(nJoyNum >= 0) + { + xpos[nJoyNum] = PDL_CENTRAL+g_nPdlTrimX; + ypos[nJoyNum] = PDL_CENTRAL+g_nPdlTrimY; + } +} + +short JoyGetTrim(bool bAxisX) +{ + return bAxisX ? g_nPdlTrimX : g_nPdlTrimY; +} + +//=========================================================================== + +DWORD JoyGetSnapshot(SS_IO_Joystick* pSS) +{ + pSS->g_nJoyCntrResetCycle = g_nJoyCntrResetCycle; + return 0; +} + +DWORD JoySetSnapshot(SS_IO_Joystick* pSS) +{ + g_nJoyCntrResetCycle = pSS->g_nJoyCntrResetCycle; + return 0; +} diff --git a/AppleWin/source/Joystick.h b/AppleWin/source/Joystick.h new file mode 100644 index 00000000..f9fcce2b --- /dev/null +++ b/AppleWin/source/Joystick.h @@ -0,0 +1,22 @@ +#pragma once + +enum JOYNUM {JN_JOYSTICK0=0, JN_JOYSTICK1}; + +extern DWORD joytype[2]; + +void JoyInitialize (); +BOOL JoyProcessKey (int,BOOL,BOOL,BOOL); +void JoyReset (); +void JoySetButton (int,BOOL); +BOOL JoySetEmulationType (HWND,DWORD,int); +void JoySetPosition (int,int,int,int); +void JoyUpdatePosition (); +BOOL JoyUsingMouse (); +void JoySetTrim(short nValue, bool bAxisX); +short JoyGetTrim(bool bAxisX); +DWORD JoyGetSnapshot(SS_IO_Joystick* pSS); +DWORD JoySetSnapshot(SS_IO_Joystick* pSS); + +BYTE __stdcall JoyReadButton (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall JoyReadPosition (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall JoyResetPosition (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/Keyboard.cpp b/AppleWin/source/Keyboard.cpp new file mode 100644 index 00000000..6d33d72c --- /dev/null +++ b/AppleWin/source/Keyboard.cpp @@ -0,0 +1,396 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Keyboard emulation + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop + +static bool g_bKeybBufferEnable = false; + +#define KEY_OLD +#define OLIVER_SCHMIDT_FIX2 // PC's delete key maps to Apple's DEL key + +#ifdef OLIVER_SCHMIDT_FIX2 +static BYTE asciicode[10] = {0x08,0x0B,0x15,0x0A,0x00,0x00,0x00,0x00,0x00,0x7F}; // Convert PC arrow keys to Apple keycodes +#else +static BYTE asciicode[4] = {0x08,0x0B,0x15,0x0A}; // Convert PC arrow keys to Apple keycodes +#endif + +static bool gbShiftKey = false; // +PATCH MJP +static bool gbCtrlKey = false; // +PATCH MJP +static BOOL capslock = 1; +static int lastvirtkey = 0; // Current PC keycode +static BYTE keycode = 0; // Current Apple keycode +static DWORD keyboardqueries = 0; + +#ifdef KEY_OLD +// Original +static BOOL keywaiting = 0; +#else +// Buffered key input: +// - Needed on faster PCs where aliasing occurs during short/fast bursts of 6502 code. +// - Keyboard only sampled during 6502 execution, so if it's run too fast then key presses will be missed. +const int KEY_BUFFER_MIN_SIZE = 1; +const int KEY_BUFFER_MAX_SIZE = 2; +static int g_nKeyBufferSize = KEY_BUFFER_MAX_SIZE; // Circ key buffer size +static int g_nNextInIdx = 0; +static int g_nNextOutIdx = 0; +static int g_nKeyBufferCnt = 0; + +static struct +{ + int nVirtKey; + BYTE nAppleKey; +} g_nKeyBuffer[KEY_BUFFER_MAX_SIZE]; +#endif + +static BYTE g_nLastKey = 0x00; + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== + +void KeybReset() +{ +#ifdef KEY_OLD + keywaiting = 0; +#else + g_nNextInIdx = 0; + g_nNextOutIdx = 0; + g_nKeyBufferCnt = 0; + g_nLastKey = 0x00; + + g_nKeyBufferSize = g_bKeybBufferEnable ? KEY_BUFFER_MAX_SIZE : KEY_BUFFER_MIN_SIZE; +#endif +} + +//=========================================================================== + +//void KeybSetBufferMode(bool bNewKeybBufferEnable) +//{ +// if(g_bKeybBufferEnable == bNewKeybBufferEnable) +// return; +// +// g_bKeybBufferEnable = bNewKeybBufferEnable; +// KeybReset(); +//} +// +//bool KeybGetBufferMode() +//{ +// return g_bKeybBufferEnable; +//} + +//=========================================================================== +void KeybGetCapsStatus (BOOL *status) +{ + *status = capslock; +} + +//=========================================================================== +bool KeybGetShiftStatus () +{ + return gbShiftKey; +} + +//=========================================================================== +bool KeybGetCtrlStatus () +{ + return gbCtrlKey; +} + +//=========================================================================== +void KeybUpdateCtrlShiftStatus() +{ + gbShiftKey = (GetKeyState( VK_SHIFT ) & 0x8000) ? true : false; + gbCtrlKey = (GetKeyState( VK_CONTROL) & 0x8000) ? true : false; +} + +//=========================================================================== +BYTE KeybGetKeycode () // Used by MemCheckPaging() & VideoCheckMode() +{ + return keycode; +} + +//=========================================================================== +DWORD KeybGetNumQueries () // Used in determining 'idleness' of Apple system +{ + DWORD result = keyboardqueries; + keyboardqueries = 0; + return result; +} + +//=========================================================================== +void KeybQueueKeypress (int key, BOOL bASCII) +{ + if (bASCII == ASCII) + { + if (key > 0x7F) + return; + + if ((key >= 'a') && (key <= 'z') && (capslock || !apple2e)) + keycode = key - ('a'-'A'); + else + keycode = key; + + lastvirtkey = LOBYTE(VkKeyScan(key)); + } + else + { + if ((key == VK_CANCEL) && ((!apple2e) || (GetKeyState(VK_CONTROL) < 0)) ) + { + // Ctrl+Reset + if (apple2e) + MemResetPaging(); + + DiskReset(); + KeybReset(); + VideoResetState(); // Switch Alternate char set off + MB_Reset(); + +#ifndef KEY_OLD + g_nNextInIdx = g_nNextOutIdx = g_nKeyBufferCnt = 0; +#endif + + CpuInitialize(); + return; + } + + if ((key == VK_INSERT) && (GetKeyState(VK_SHIFT) < 0)) + { + // Shift+Insert + ClipboardInitiatePaste(); + return; + } + +#ifdef OLIVER_SCHMIDT_FIX2 + if (!((key >= VK_LEFT) && (key <= VK_DELETE) && asciicode[key - VK_LEFT])) + return; + + keycode = asciicode[key - VK_LEFT]; // Convert to Apple arrow keycode + lastvirtkey = key; +#else + if (!((key >= VK_LEFT) && (key <= VK_DOWN))) + return; + + keycode = asciicode[key - VK_LEFT]; // Convert to Apple arrow keycode + lastvirtkey = key; +#endif + } +#ifdef KEY_OLD + keywaiting = 1; +#else + bool bOverflow = false; + + if(g_nKeyBufferCnt < g_nKeyBufferSize) + g_nKeyBufferCnt++; + else + bOverflow = true; + + g_nKeyBuffer[g_nNextInIdx].nVirtKey = lastvirtkey; + g_nKeyBuffer[g_nNextInIdx].nAppleKey = keycode; + g_nNextInIdx = (g_nNextInIdx + 1) % g_nKeyBufferSize; + + if(bOverflow) + g_nNextOutIdx = (g_nNextOutIdx + 1) % g_nKeyBufferSize; +#endif +} + +//=========================================================================== + +static HGLOBAL hglb = NULL; +static LPTSTR lptstr = NULL; +static bool g_bPasteFromClipboard = false; +static bool g_bClipboardActive = false; + +void ClipboardInitiatePaste() +{ + if (g_bClipboardActive) + return; + + g_bPasteFromClipboard = true; +} + +static void ClipboardDone() +{ + if (g_bClipboardActive) + { + g_bClipboardActive = false; + GlobalUnlock(hglb); + CloseClipboard(); + } +} + +static void ClipboardInit() +{ + ClipboardDone(); + + if (!IsClipboardFormatAvailable(CF_TEXT)) + return; + + if (!OpenClipboard(framewindow)) + return; + + hglb = GetClipboardData(CF_TEXT); + if (hglb == NULL) + { + CloseClipboard(); + return; + } + + lptstr = (char*) GlobalLock(hglb); + if (lptstr == NULL) + { + CloseClipboard(); + return; + } + + g_bPasteFromClipboard = false; + g_bClipboardActive = true; +} + +static char ClipboardCurrChar(bool bIncPtr) +{ + char nKey; + int nInc = 1; + + if((lptstr[0] == 0x0D) && (lptstr[1] == 0x0A)) + { + nKey = 0x0D; + nInc = 2; + } + else + { + nKey = lptstr[0]; + } + + if(bIncPtr) + lptstr += nInc; + + return nKey; +} + +//=========================================================================== + +BYTE __stdcall KeybReadData (WORD, BYTE, BYTE, BYTE, ULONG) +{ + keyboardqueries++; + + // + + if(g_bPasteFromClipboard) + ClipboardInit(); + + if(g_bClipboardActive) + { + if(*lptstr == 0) + ClipboardDone(); + else + return 0x80 | ClipboardCurrChar(false); + } + + // + +#ifdef KEY_OLD + return keycode | (keywaiting ? 0x80 : 0); +#else + BYTE nKey = g_nKeyBufferCnt ? 0x80 : 0; + if(g_nKeyBufferCnt) + { + nKey |= g_nKeyBuffer[g_nNextOutIdx].nAppleKey; + g_nLastKey = g_nKeyBuffer[g_nNextOutIdx].nAppleKey; + } + else + { + nKey |= g_nLastKey; + } + return nKey; +#endif +} + +//=========================================================================== + +BYTE __stdcall KeybReadFlag (WORD, BYTE, BYTE, BYTE, ULONG) +{ + keyboardqueries++; + + // + + if(g_bPasteFromClipboard) + ClipboardInit(); + + if(g_bClipboardActive) + { + if(*lptstr == 0) + ClipboardDone(); + else + return 0x80 | ClipboardCurrChar(true); + } + + // + +#ifdef KEY_OLD + keywaiting = 0; + return keycode | ((GetKeyState(lastvirtkey) < 0) ? 0x80 : 0); +#else + BYTE nKey = (GetKeyState(g_nKeyBuffer[g_nNextOutIdx].nVirtKey) < 0) ? 0x80 : 0; + nKey |= g_nKeyBuffer[g_nNextOutIdx].nAppleKey; + if(g_nKeyBufferCnt) + { + g_nKeyBufferCnt--; + g_nNextOutIdx = (g_nNextOutIdx + 1) % g_nKeyBufferSize; + } + return nKey; +#endif +} + +//=========================================================================== +void KeybToggleCapsLock () +{ + if (apple2e) + { + capslock = (GetKeyState(VK_CAPITAL) & 1); + FrameRefreshStatus(DRAW_LEDS); + } +} + +//=========================================================================== + +DWORD KeybGetSnapshot(SS_IO_Keyboard* pSS) +{ + pSS->keyboardqueries = keyboardqueries; + pSS->nLastKey = g_nLastKey; + return 0; +} + +DWORD KeybSetSnapshot(SS_IO_Keyboard* pSS) +{ + keyboardqueries = pSS->keyboardqueries; + g_nLastKey = pSS->nLastKey; + return 0; +} diff --git a/AppleWin/source/Keyboard.h b/AppleWin/source/Keyboard.h new file mode 100644 index 00000000..a1ec75dd --- /dev/null +++ b/AppleWin/source/Keyboard.h @@ -0,0 +1,18 @@ +#pragma once + +void ClipboardInitiatePaste(); + +void KeybReset(); +void KeybGetCapsStatus (BOOL *); +bool KeybGetShiftStatus(); +bool KeybGetCtrlStatus(); +void KeybUpdateCtrlShiftStatus(); +BYTE KeybGetKeycode (); +DWORD KeybGetNumQueries (); +void KeybQueueKeypress (int,BOOL); +void KeybToggleCapsLock (); +DWORD KeybGetSnapshot(SS_IO_Keyboard* pSS); +DWORD KeybSetSnapshot(SS_IO_Keyboard* pSS); + +BYTE __stdcall KeybReadData (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall KeybReadFlag (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/Memory.cpp b/AppleWin/source/Memory.cpp new file mode 100644 index 00000000..0bc85e5c --- /dev/null +++ b/AppleWin/source/Memory.cpp @@ -0,0 +1,1242 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Memory emulation + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop + +#define MF_80STORE 0x00000001 +#define MF_ALTZP 0x00000002 +#define MF_AUXREAD 0x00000004 +#define MF_AUXWRITE 0x00000008 +#define MF_BANK2 0x00000010 +#define MF_HIGHRAM 0x00000020 +#define MF_HIRES 0x00000040 +#define MF_PAGE2 0x00000080 +#define MF_SLOTC3ROM 0x00000100 +#define MF_SLOTCXROM 0x00000200 +#define MF_WRITERAM 0x00000400 +#define MF_IMAGEMASK 0x000003F7 + +#define SW_80STORE (memmode & MF_80STORE) +#define SW_ALTZP (memmode & MF_ALTZP) +#define SW_AUXREAD (memmode & MF_AUXREAD) +#define SW_AUXWRITE (memmode & MF_AUXWRITE) +#define SW_BANK2 (memmode & MF_BANK2) +#define SW_HIGHRAM (memmode & MF_HIGHRAM) +#define SW_HIRES (memmode & MF_HIRES) +#define SW_PAGE2 (memmode & MF_PAGE2) +#define SW_SLOTC3ROM (memmode & MF_SLOTC3ROM) +#define SW_SLOTCXROM (memmode & MF_SLOTCXROM) +#define SW_WRITERAM (memmode & MF_WRITERAM) + +BYTE __stdcall NullIo (WORD programcounter, BYTE address, BYTE write, BYTE value, ULONG nCycles); + +iofunction ioread[0x100] = {KeybReadData, // $C000 + KeybReadData, // $C001 + KeybReadData, // $C002 + KeybReadData, // $C003 + KeybReadData, // $C004 + KeybReadData, // $C005 + KeybReadData, // $C006 + KeybReadData, // $C007 + KeybReadData, // $C008 + KeybReadData, // $C009 + KeybReadData, // $C00A + KeybReadData, // $C00B + KeybReadData, // $C00C + KeybReadData, // $C00D + KeybReadData, // $C00E + KeybReadData, // $C00F + KeybReadFlag, // $C010 + MemCheckPaging, // $C011 + MemCheckPaging, // $C012 + MemCheckPaging, // $C013 + MemCheckPaging, // $C014 + MemCheckPaging, // $C015 + MemCheckPaging, // $C016 + MemCheckPaging, // $C017 + MemCheckPaging, // $C018 + VideoCheckVbl, // $C019 + VideoCheckMode, // $C01A + VideoCheckMode, // $C01B + MemCheckPaging, // $C01C + MemCheckPaging, // $C01D + VideoCheckMode, // $C01E + VideoCheckMode, // $C01F + NullIo, // $C020 + NullIo, // $C021 + NullIo, // $C022 + NullIo, // $C023 + NullIo, // $C024 + NullIo, // $C025 + NullIo, // $C026 + NullIo, // $C027 + NullIo, // $C028 + NullIo, // $C029 + NullIo, // $C02A + NullIo, // $C02B + NullIo, // $C02C + NullIo, // $C02D + NullIo, // $C02E + NullIo, // $C02F + SpkrToggle, // $C030 + SpkrToggle, // $C031 + SpkrToggle, // $C032 + SpkrToggle, // $C033 + SpkrToggle, // $C034 + SpkrToggle, // $C035 + SpkrToggle, // $C036 + SpkrToggle, // $C037 + SpkrToggle, // $C038 + SpkrToggle, // $C039 + SpkrToggle, // $C03A + SpkrToggle, // $C03B + SpkrToggle, // $C03C + SpkrToggle, // $C03D + SpkrToggle, // $C03E + SpkrToggle, // $C03F + NullIo, // $C040 + NullIo, // $C041 + NullIo, // $C042 + NullIo, // $C043 + NullIo, // $C044 + NullIo, // $C045 + NullIo, // $C046 + NullIo, // $C047 + NullIo, // $C048 + NullIo, // $C049 + NullIo, // $C04A + NullIo, // $C04B + NullIo, // $C04C + NullIo, // $C04D + NullIo, // $C04E + NullIo, // $C04F + VideoSetMode, // $C050 + VideoSetMode, // $C051 + VideoSetMode, // $C052 + VideoSetMode, // $C053 + MemSetPaging, // $C054 + MemSetPaging, // $C055 + MemSetPaging, // $C056 + MemSetPaging, // $C057 + NullIo, // $C058 + NullIo, // $C059 + NullIo, // $C05A + NullIo, // $C05B + NullIo, // $C05C + NullIo, // $C05D + VideoSetMode, // $C05E + VideoSetMode, // $C05F + NullIo, // $C060 + JoyReadButton, // $C061 + JoyReadButton, // $C062 + JoyReadButton, // $C063 + JoyReadPosition, // $C064 + JoyReadPosition, // $C065 + JoyReadPosition, // $C066 + JoyReadPosition, // $C067 + NullIo, // $C068 + NullIo, // $C069 + NullIo, // $C06A + NullIo, // $C06B + NullIo, // $C06C + NullIo, // $C06D + NullIo, // $C06E + NullIo, // $C06F + JoyResetPosition, // $C070 + NullIo, // $C071 + NullIo, // $C072 + NullIo, // $C073 + NullIo, // $C074 + NullIo, // $C075 + NullIo, // $C076 + NullIo, // $C077 + NullIo, // $C078 + NullIo, // $C079 + NullIo, // $C07A + NullIo, // $C07B + NullIo, // $C07C + NullIo, // $C07D + NullIo, // $C07E + VideoCheckMode, // $C07F + MemSetPaging, // $C080 + MemSetPaging, // $C081 + MemSetPaging, // $C082 + MemSetPaging, // $C083 + MemSetPaging, // $C084 + MemSetPaging, // $C085 + MemSetPaging, // $C086 + MemSetPaging, // $C087 + MemSetPaging, // $C088 + MemSetPaging, // $C089 + MemSetPaging, // $C08A + MemSetPaging, // $C08B + MemSetPaging, // $C08C + MemSetPaging, // $C08D + MemSetPaging, // $C08E + MemSetPaging, // $C08F + NullIo, // $C090 + NullIo, // $C091 + NullIo, // $C092 + NullIo, // $C093 + NullIo, // $C094 + NullIo, // $C095 + NullIo, // $C096 + NullIo, // $C097 + NullIo, // $C098 + NullIo, // $C099 + NullIo, // $C09A + NullIo, // $C09B + NullIo, // $C09C + NullIo, // $C09D + NullIo, // $C09E + NullIo, // $C09F + NullIo, // $C0A0 + CommDipSw, // $C0A1 + CommDipSw, // $C0A2 + NullIo, // $C0A3 + NullIo, // $C0A4 + NullIo, // $C0A5 + NullIo, // $C0A6 + NullIo, // $C0A7 + CommReceive, // $C0A8 + CommStatus, // $C0A9 + CommCommand, // $C0AA + CommControl, // $C0AB + NullIo, // $C0AC + NullIo, // $C0AD + NullIo, // $C0AE + NullIo, // $C0AF + NullIo, // $C0B0 + NullIo, // $C0B1 + NullIo, // $C0B2 + NullIo, // $C0B3 + NullIo, // $C0B4 + NullIo, // $C0B5 + NullIo, // $C0B6 + NullIo, // $C0B7 + NullIo, // $C0B8 + NullIo, // $C0B9 + NullIo, // $C0BA + NullIo, // $C0BB + NullIo, // $C0BC + NullIo, // $C0BD + NullIo, // $C0BE + NullIo, // $C0BF + PhasorIO, // $C0C0 + PhasorIO, // $C0C1 + PhasorIO, // $C0C2 + PhasorIO, // $C0C3 + PhasorIO, // $C0C4 + PhasorIO, // $C0C5 + PhasorIO, // $C0C6 + PhasorIO, // $C0C7 + PhasorIO, // $C0C8 + PhasorIO, // $C0C9 + PhasorIO, // $C0CA + PhasorIO, // $C0CB + PhasorIO, // $C0CC + PhasorIO, // $C0CD + PhasorIO, // $C0CE + PhasorIO, // $C0CF + PhasorIO, // $C0D0 + PhasorIO, // $C0D1 + PhasorIO, // $C0D2 + PhasorIO, // $C0D3 + PhasorIO, // $C0D4 + PhasorIO, // $C0D5 + PhasorIO, // $C0D6 + PhasorIO, // $C0D7 + PhasorIO, // $C0D8 + PhasorIO, // $C0D9 + PhasorIO, // $C0DA + PhasorIO, // $C0DB + PhasorIO, // $C0DC + PhasorIO, // $C0DD + PhasorIO, // $C0DE + PhasorIO, // $C0DF + DiskControlStepper, // $C0E0 + DiskControlStepper, // $C0E1 + DiskControlStepper, // $C0E2 + DiskControlStepper, // $C0E3 + DiskControlStepper, // $C0E4 + DiskControlStepper, // $C0E5 + DiskControlStepper, // $C0E6 + DiskControlStepper, // $C0E7 + DiskControlMotor, // $C0E8 + DiskControlMotor, // $C0E9 + DiskEnable, // $C0EA + DiskEnable, // $C0EB + DiskReadWrite, // $C0EC + DiskSetLatchValue, // $C0ED + DiskSetReadMode, // $C0EE + DiskSetWriteMode, // $C0EF + HD_IO_EMUL, // $C0F0 + HD_IO_EMUL, // $C0F1 + HD_IO_EMUL, // $C0F2 + HD_IO_EMUL, // $C0F3 + HD_IO_EMUL, // $C0F4 + HD_IO_EMUL, // $C0F5 + HD_IO_EMUL, // $C0F6 + HD_IO_EMUL, // $C0F7 + HD_IO_EMUL, // $C0F8 + NullIo, // $C0F9 + NullIo, // $C0FA + NullIo, // $C0FB + NullIo, // $C0FC + NullIo, // $C0FD + NullIo, // $C0FE + NullIo}; // $C0FF + +iofunction iowrite[0x100] = {MemSetPaging, // $C000 + MemSetPaging, // $C001 + MemSetPaging, // $C002 + MemSetPaging, // $C003 + MemSetPaging, // $C004 + MemSetPaging, // $C005 + MemSetPaging, // $C006 + MemSetPaging, // $C007 + MemSetPaging, // $C008 + MemSetPaging, // $C009 + MemSetPaging, // $C00A + MemSetPaging, // $C00B + VideoSetMode, // $C00C + VideoSetMode, // $C00D + VideoSetMode, // $C00E + VideoSetMode, // $C00F + KeybReadFlag, // $C010 + KeybReadFlag, // $C011 + KeybReadFlag, // $C012 + KeybReadFlag, // $C013 + KeybReadFlag, // $C014 + KeybReadFlag, // $C015 + KeybReadFlag, // $C016 + KeybReadFlag, // $C017 + KeybReadFlag, // $C018 + KeybReadFlag, // $C019 + KeybReadFlag, // $C01A + KeybReadFlag, // $C01B + KeybReadFlag, // $C01C + KeybReadFlag, // $C01D + KeybReadFlag, // $C01E + KeybReadFlag, // $C01F + NullIo, // $C020 + NullIo, // $C021 + NullIo, // $C022 + NullIo, // $C023 + NullIo, // $C024 + NullIo, // $C025 + NullIo, // $C026 + NullIo, // $C027 + NullIo, // $C028 + NullIo, // $C029 + NullIo, // $C02A + NullIo, // $C02B + NullIo, // $C02C + NullIo, // $C02D + NullIo, // $C02E + NullIo, // $C02F + SpkrToggle, // $C030 + SpkrToggle, // $C031 + SpkrToggle, // $C032 + SpkrToggle, // $C033 + SpkrToggle, // $C034 + SpkrToggle, // $C035 + SpkrToggle, // $C036 + SpkrToggle, // $C037 + SpkrToggle, // $C038 + SpkrToggle, // $C039 + SpkrToggle, // $C03A + SpkrToggle, // $C03B + SpkrToggle, // $C03C + SpkrToggle, // $C03D + SpkrToggle, // $C03E + SpkrToggle, // $C03F + NullIo, // $C040 + NullIo, // $C041 + NullIo, // $C042 + NullIo, // $C043 + NullIo, // $C044 + NullIo, // $C045 + NullIo, // $C046 + NullIo, // $C047 + NullIo, // $C048 + NullIo, // $C049 + NullIo, // $C04A + NullIo, // $C04B + NullIo, // $C04C + NullIo, // $C04D + NullIo, // $C04E + NullIo, // $C04F + VideoSetMode, // $C050 + VideoSetMode, // $C051 + VideoSetMode, // $C052 + VideoSetMode, // $C053 + MemSetPaging, // $C054 + MemSetPaging, // $C055 + MemSetPaging, // $C056 + MemSetPaging, // $C057 + NullIo, // $C058 + NullIo, // $C059 + NullIo, // $C05A + NullIo, // $C05B + NullIo, // $C05C + NullIo, // $C05D + VideoSetMode, // $C05E + VideoSetMode, // $C05F + NullIo, // $C060 + NullIo, // $C061 + NullIo, // $C062 + NullIo, // $C063 + NullIo, // $C064 + NullIo, // $C065 + NullIo, // $C066 + NullIo, // $C067 + NullIo, // $C068 + NullIo, // $C069 + NullIo, // $C06A + NullIo, // $C06B + NullIo, // $C06C + NullIo, // $C06D + NullIo, // $C06E + NullIo, // $C06F + JoyResetPosition, // $C070 +#ifdef RAMWORKS + MemSetPaging, // $C071 - extended memory card set page + NullIo, // $C072 + MemSetPaging, // $C073 - Ramworks III set page +#else + NullIo, // $C071 + NullIo, // $C072 + NullIo, // $C073 +#endif + NullIo, // $C074 + NullIo, // $C075 + NullIo, // $C076 + NullIo, // $C077 + NullIo, // $C078 + NullIo, // $C079 + NullIo, // $C07A + NullIo, // $C07B + NullIo, // $C07C + NullIo, // $C07D + NullIo, // $C07E + NullIo, // $C07F + MemSetPaging, // $C080 + MemSetPaging, // $C081 + MemSetPaging, // $C082 + MemSetPaging, // $C083 + MemSetPaging, // $C084 + MemSetPaging, // $C085 + MemSetPaging, // $C086 + MemSetPaging, // $C087 + MemSetPaging, // $C088 + MemSetPaging, // $C089 + MemSetPaging, // $C08A + MemSetPaging, // $C08B + MemSetPaging, // $C08C + MemSetPaging, // $C08D + MemSetPaging, // $C08E + MemSetPaging, // $C08F + NullIo, // $C090 + NullIo, // $C091 + NullIo, // $C092 + NullIo, // $C093 + NullIo, // $C094 + NullIo, // $C095 + NullIo, // $C096 + NullIo, // $C097 + NullIo, // $C098 + NullIo, // $C099 + NullIo, // $C09A + NullIo, // $C09B + NullIo, // $C09C + NullIo, // $C09D + NullIo, // $C09E + NullIo, // $C09F + NullIo, // $C0A0 + NullIo, // $C0A1 + NullIo, // $C0A2 + NullIo, // $C0A3 + NullIo, // $C0A4 + NullIo, // $C0A5 + NullIo, // $C0A6 + NullIo, // $C0A7 + CommTransmit, // $C0A8 + CommStatus, // $C0A9 + CommCommand, // $C0AA + CommControl, // $C0AB + NullIo, // $C0AC + NullIo, // $C0AD + NullIo, // $C0AE + NullIo, // $C0AF + NullIo, // $C0B0 + NullIo, // $C0B1 + NullIo, // $C0B2 + NullIo, // $C0B3 + NullIo, // $C0B4 + NullIo, // $C0B5 + NullIo, // $C0B6 + NullIo, // $C0B7 + NullIo, // $C0B8 + NullIo, // $C0B9 + NullIo, // $C0BA + NullIo, // $C0BB + NullIo, // $C0BC + NullIo, // $C0BD + NullIo, // $C0BE + NullIo, // $C0BF + PhasorIO, // $C0C0 + PhasorIO, // $C0C1 + PhasorIO, // $C0C2 + PhasorIO, // $C0C3 + PhasorIO, // $C0C4 + PhasorIO, // $C0C5 + PhasorIO, // $C0C6 + PhasorIO, // $C0C7 + PhasorIO, // $C0C8 + PhasorIO, // $C0C9 + PhasorIO, // $C0CA + PhasorIO, // $C0CB + PhasorIO, // $C0CC + PhasorIO, // $C0CD + PhasorIO, // $C0CE + PhasorIO, // $C0CF + PhasorIO, // $C0D0 + PhasorIO, // $C0D1 + PhasorIO, // $C0D2 + PhasorIO, // $C0D3 + PhasorIO, // $C0D4 + PhasorIO, // $C0D5 + PhasorIO, // $C0D6 + PhasorIO, // $C0D7 + PhasorIO, // $C0D8 + PhasorIO, // $C0D9 + PhasorIO, // $C0DA + PhasorIO, // $C0DB + PhasorIO, // $C0DC + PhasorIO, // $C0DD + PhasorIO, // $C0DE + PhasorIO, // $C0DF + DiskControlStepper, // $C0E0 + DiskControlStepper, // $C0E1 + DiskControlStepper, // $C0E2 + DiskControlStepper, // $C0E3 + DiskControlStepper, // $C0E4 + DiskControlStepper, // $C0E5 + DiskControlStepper, // $C0E6 + DiskControlStepper, // $C0E7 + DiskControlMotor, // $C0E8 + DiskControlMotor, // $C0E9 + DiskEnable, // $C0EA + DiskEnable, // $C0EB + DiskReadWrite, // $C0EC + DiskSetLatchValue, // $C0ED + DiskSetReadMode, // $C0EE + DiskSetWriteMode, // $C0EF + HD_IO_EMUL, // $C0F0 + HD_IO_EMUL, // $C0F1 + HD_IO_EMUL, // $C0F2 + HD_IO_EMUL, // $C0F3 + HD_IO_EMUL, // $C0F4 + HD_IO_EMUL, // $C0F5 + HD_IO_EMUL, // $C0F6 + HD_IO_EMUL, // $C0F7 + HD_IO_EMUL, // $C0F8 + NullIo, // $C0F9 + NullIo, // $C0FA + NullIo, // $C0FB + NullIo, // $C0FC + NullIo, // $C0FD + NullIo, // $C0FE + NullIo}; // $C0FF + +static DWORD imagemode[MAXIMAGES]; +LPBYTE memshadow[MAXIMAGES][0x100]; +LPBYTE memwrite[MAXIMAGES][0x100]; + +static BOOL fastpaging = 0; +DWORD image = 0; +DWORD lastimage = 0; +static BOOL lastwriteram = 0; +LPBYTE mem = NULL; +static LPBYTE memaux = NULL; +LPBYTE memdirty = NULL; +static LPBYTE memimage = NULL; +static LPBYTE memmain = NULL; +static DWORD memmode = MF_BANK2 | MF_SLOTCXROM | MF_WRITERAM; +static LPBYTE memrom = NULL; +static BOOL modechanging = 0; +DWORD pages = 0; + +#ifdef RAMWORKS +UINT g_uMaxExPages = 1; // user requested ram pages +static LPBYTE RWpages[128]; // pointers to RW memory banks +#endif + +void UpdatePaging (BOOL initialize, BOOL updatewriteonly); + +//=========================================================================== +void BackMainImage () { + int loop = 0; + for (loop = 0; loop < 256; loop++) { + if (memshadow[0][loop] && + ((*(memdirty+loop) & 1) || (loop <= 1))) + CopyMemory(memshadow[0][loop],memimage+(loop << 8),256); + *(memdirty+loop) &= ~1; + } +} + +//=========================================================================== +BYTE __stdcall NullIo (WORD programcounter, BYTE address, BYTE write, BYTE value, ULONG nCycles) { + if ((address & 0xF0) == 0xA0) { + static const BYTE retval[16] = {0x58,0xFC,0x5B,0xFF,0x58,0xFC,0x5B,0xFF, + 0x0B,0x10,0x00,0x00,0xFF,0xFF,0xFF,0xFF}; + return retval[address & 15]; + } + else if ((address >= 0xB0) && (address <= 0xCF)) { + BYTE r = (BYTE)(rand() & 0xFF); + if (r >= 0x10) + return 0xA0; + else if (r >= 8) + return (r > 0xC) ? 0xFF : 0x00; + else + return (address & 0xF7); + } + else if ((address & 0xF0) == 0xD0) { + BYTE r = (BYTE)(rand() & 0xFF); + if (r >= 0xC0) + return 0xC0; + else if (r >= 0x80) + return 0x80; + else if ((address == 0xD0) || (address == 0xDF)) + return 0; + else if (r >= 0x40) + return 0x40; + else if (r >= 0x30) + return 0x90; + else + return 0; + } + else + return MemReturnRandomData(1); +} + +//=========================================================================== +void ResetPaging (BOOL initialize) { + if (!initialize) + MemSetFastPaging(0); + lastwriteram = 0; + memmode = MF_BANK2 | MF_SLOTCXROM | MF_WRITERAM; + UpdatePaging(initialize,0); +} + +//=========================================================================== +void UpdateFastPaging () { + BOOL found = 0; + DWORD imagenum = 0; + do + if ((imagemode[imagenum] == memmode) || + ((lastimage >= 3) && + ((imagemode[imagenum] & MF_IMAGEMASK) == (memmode & MF_IMAGEMASK)))) + found = 1; + else + ++imagenum; + while ((imagenum <= lastimage) && !found); + if (found) { + image = imagenum; + mem = memimage+(image << 16); + if (imagemode[image] != memmode) { + imagemode[image] = memmode; + UpdatePaging(0,1); + } + } + else { + if (lastimage < MAXIMAGES-1) { + imagenum = ++lastimage; + if (lastimage >= 3) + VirtualAlloc(memimage+lastimage*0x10000,0x10000,MEM_COMMIT,PAGE_READWRITE); + } + else { + static DWORD nextimage = 0; + if (nextimage > lastimage) + nextimage = 0; + imagenum = nextimage++; + } + imagemode[image = imagenum] = memmode; + mem = memimage+(image << 16); + UpdatePaging(1,0); + } + CpuReinitialize(); +} + +//=========================================================================== +void UpdatePaging (BOOL initialize, BOOL updatewriteonly) { + + // SAVE THE CURRENT PAGING SHADOW TABLE + LPBYTE oldshadow[256]; + if (!(initialize || fastpaging || updatewriteonly)) + CopyMemory(oldshadow,memshadow[image],256*sizeof(LPBYTE)); + + // UPDATE THE PAGING TABLES BASED ON THE NEW PAGING SWITCH VALUES + int loop; + if (initialize) { + for (loop = 0; loop < 192; loop++) + memwrite[image][loop] = mem+(loop << 8); + for (loop = 192; loop < 208; loop++) // TC: [0xC000..0xCF00] + memwrite[image][loop] = NULL; + } + if (!updatewriteonly) + for (loop = 0; loop < 2; loop++) + memshadow[image][loop] = SW_ALTZP ? memaux+(loop << 8) : memmain+(loop << 8); + for (loop = 2; loop < 192; loop++) { + memshadow[image][loop] = SW_AUXREAD ? memaux+(loop << 8) + : memmain+(loop << 8); + memwrite[image][loop] = ((SW_AUXREAD != 0) == (SW_AUXWRITE != 0)) + ? mem+(loop << 8) + : SW_AUXWRITE ? memaux+(loop << 8) + : memmain+(loop << 8); + } + if (!updatewriteonly) { + for (loop = 192; loop < 200; loop++) + if (loop == 195) + memshadow[image][loop] = (SW_SLOTC3ROM && SW_SLOTCXROM) ? memrom+0x0300 + : memrom+0x1300; + else + memshadow[image][loop] = SW_SLOTCXROM ? memrom+(loop << 8)-0xC000 + : memrom+(loop << 8)-0xB000; + for (loop = 200; loop < 208; loop++) + memshadow[image][loop] = memrom+(loop << 8)-0xB000; + } + for (loop = 208; loop < 224; loop++) { + int bankoffset = (SW_BANK2 ? 0 : 0x1000); + memshadow[image][loop] = SW_HIGHRAM ? SW_ALTZP ? memaux+(loop << 8)-bankoffset + : memmain+(loop << 8)-bankoffset + : memrom+(loop << 8)-0xB000; + memwrite[image][loop] = SW_WRITERAM ? SW_HIGHRAM ? mem+(loop << 8) + : SW_ALTZP ? memaux+(loop << 8)-bankoffset + : memmain+(loop << 8)-bankoffset + : NULL; + } + for (loop = 224; loop < 256; loop++) { + memshadow[image][loop] = SW_HIGHRAM ? SW_ALTZP ? memaux+(loop << 8) + : memmain+(loop << 8) + : memrom+(loop << 8)-0xB000; + memwrite[image][loop] = SW_WRITERAM ? SW_HIGHRAM ? mem+(loop << 8) + : SW_ALTZP ? memaux+(loop << 8) + : memmain+(loop << 8) + : NULL; + } + if (SW_80STORE) { + for (loop = 4; loop < 8; loop++) { + memshadow[image][loop] = SW_PAGE2 ? memaux+(loop << 8) + : memmain+(loop << 8); + memwrite[image][loop] = mem+(loop << 8); + } + if (SW_HIRES) + for (loop = 32; loop < 64; loop++) { + memshadow[image][loop] = SW_PAGE2 ? memaux+(loop << 8) + : memmain+(loop << 8); + memwrite[image][loop] = mem+(loop << 8); + } + } + + // MOVE MEMORY BACK AND FORTH AS NECESSARY BETWEEN THE SHADOW AREAS AND + // THE MAIN RAM IMAGE TO KEEP BOTH SETS OF MEMORY CONSISTENT WITH THE NEW + // PAGING SHADOW TABLE + if (!updatewriteonly) + for (loop = 0; loop < 256; loop++) + if (initialize || (oldshadow[loop] != memshadow[image][loop])) { + if ((!(initialize || fastpaging)) && + ((*(memdirty+loop) & 1) || (loop <= 1))) { + *(memdirty+loop) &= ~1; + CopyMemory(oldshadow[loop],mem+(loop << 8),256); + } + CopyMemory(mem+(loop << 8),memshadow[image][loop],256); + } + +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +BYTE __stdcall MemCheckPaging (WORD, BYTE address, BYTE, BYTE, ULONG) { + BOOL result = 0; + switch (address) { + case 0x11: result = SW_BANK2; break; + case 0x12: result = SW_HIGHRAM; break; + case 0x13: result = SW_AUXREAD; break; + case 0x14: result = SW_AUXWRITE; break; + case 0x15: result = !SW_SLOTCXROM; break; + case 0x16: result = SW_ALTZP; break; + case 0x17: result = SW_SLOTC3ROM; break; + case 0x18: result = SW_80STORE; break; + case 0x1C: result = SW_PAGE2; break; + case 0x1D: result = SW_HIRES; break; + } + return KeybGetKeycode() | (result ? 0x80 : 0); +} + +//=========================================================================== +void MemDestroy () { + if (fastpaging) + MemSetFastPaging(0); + VirtualFree(memimage,MAX(0x30000,0x10000*(lastimage+1)),MEM_DECOMMIT); + VirtualFree(memaux ,0,MEM_RELEASE); + VirtualFree(memdirty,0,MEM_RELEASE); + VirtualFree(memimage,0,MEM_RELEASE); + VirtualFree(memmain ,0,MEM_RELEASE); + VirtualFree(memrom ,0,MEM_RELEASE); +#ifdef RAMWORKS + for (UINT i=1; i> 8)] == (memaux+(offset & 0xFF00))) + ? mem+offset + : memaux+offset; + +#ifdef RAMWORKS + if ( ((SW_PAGE2 && SW_80STORE) || VideoGetSW80COL()) && + ( ( ((offset & 0xFF00)>=0x0400) && + ((offset & 0xFF00)<=0700) ) || + ( SW_HIRES && ((offset & 0xFF00)>=0x2000) && + ((offset & 0xFF00)<=0x3F00) ) ) ) { + lpMem = (memshadow[image][(offset >> 8)] == (RWpages[0]+(offset & 0xFF00))) + ? mem+offset + : RWpages[0]+offset; + } +#endif + + return lpMem; +} + +//=========================================================================== +LPBYTE MemGetMainPtr (WORD offset) { + return (memshadow[image][(offset >> 8)] == (memmain+(offset & 0xFF00))) + ? mem+offset + : memmain+offset; +} + +//=========================================================================== +void MemInitialize () { + + // ALLOCATE MEMORY FOR THE APPLE MEMORY IMAGE AND ASSOCIATED DATA + // STRUCTURES + // + // THE MEMIMAGE BUFFER CAN CONTAIN EITHER MULTIPLE MEMORY IMAGES OR + // ONE MEMORY IMAGE WITH COMPILER DATA + memaux = (LPBYTE)VirtualAlloc(NULL,0x10000,MEM_COMMIT,PAGE_READWRITE); + memdirty = (LPBYTE)VirtualAlloc(NULL,0x100 ,MEM_COMMIT,PAGE_READWRITE); + memmain = (LPBYTE)VirtualAlloc(NULL,0x10000,MEM_COMMIT,PAGE_READWRITE); + memrom = (LPBYTE)VirtualAlloc(NULL,0x5000 ,MEM_COMMIT,PAGE_READWRITE); + memimage = (LPBYTE)VirtualAlloc(NULL, + MAX(0x30000,MAXIMAGES*0x10000), + MEM_RESERVE,PAGE_NOACCESS); + if ((!memaux) || (!memdirty) || (!memimage) || (!memmain) || (!memrom)) { + MessageBox(GetDesktopWindow(), + TEXT("The emulator was unable to allocate the memory it ") + TEXT("requires. Further execution is not possible."), + TITLE, + MB_ICONSTOP | MB_SETFOREGROUND); + ExitProcess(1); + } + { + LPVOID newloc = VirtualAlloc(memimage,0x30000,MEM_COMMIT,PAGE_READWRITE); + if (newloc != memimage) + MessageBox(GetDesktopWindow(), + TEXT("The emulator has detected a bug in your operating ") + TEXT("system. While changing the attributes of a memory ") + TEXT("object, the operating system also changed its ") + TEXT("location."), + TITLE, + MB_ICONEXCLAMATION | MB_SETFOREGROUND); + } + +#ifdef RAMWORKS + // allocate memory for RAMWorks III - up to 8MB + RWpages[0] = memaux; + UINT i = 1; + while ((i < g_uMaxExPages) && (RWpages[i] = (LPBYTE) VirtualAlloc(NULL,0x10000,MEM_COMMIT,PAGE_READWRITE))) + i++; +#endif + + // READ THE APPLE FIRMWARE ROMS INTO THE ROM IMAGE + TCHAR filename[MAX_PATH]; + _tcscpy(filename,progdir); + _tcscat(filename,apple2e ? TEXT("APPLE2E.ROM") : TEXT("APPLE2.ROM")); + HANDLE file = CreateFile(filename, + GENERIC_READ, + FILE_SHARE_READ, + (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, + NULL); + if (file == INVALID_HANDLE_VALUE) { + MessageBox(GetDesktopWindow(), + TEXT("Unable to open the required firmware ROM data file."), + TITLE, + MB_ICONSTOP | MB_SETFOREGROUND); + ExitProcess(1); + } + DWORD bytesread; + ReadFile(file,memrom,0x5000,&bytesread,NULL); + CloseHandle(file); + + // REMOVE A WAIT ROUTINE FROM THE DISK CONTROLLER'S FIRMWARE + { + *(memrom+0x064C) = 0xA9; + *(memrom+0x064D) = 0x00; + *(memrom+0x064E) = 0xEA; + } + + HD_Load_Rom(memrom); // HDD f/w gets loaded to $C700 + + MemReset(); +} + +//=========================================================================== + +// Call by: +// . ResetMachineState() eg. Power-cycle ('Apple-Go' button) +// . Snapshot_LoadState() +void MemReset () +{ + // TURN OFF FAST PAGING IF IT IS CURRENTLY ACTIVE + MemSetFastPaging(0); + + // INITIALIZE THE PAGING TABLES + ZeroMemory(memshadow,MAXIMAGES*256*sizeof(LPBYTE)); + ZeroMemory(memwrite ,MAXIMAGES*256*sizeof(LPBYTE)); + + // INITIALIZE THE RAM IMAGES + ZeroMemory(memaux ,0x10000); + ZeroMemory(memmain,0x10000); + + // SET UP THE MEMORY IMAGE + mem = memimage; + image = 0; + + // INITIALIZE THE CPU + CpuInitialize(); + + // INITIALIZE PAGING, FILLING IN THE 64K MEMORY IMAGE + ResetPaging(1); + regs.pc = *(LPWORD)(mem+0xFFFC); + regs.bIRQ = 0; +} + +//=========================================================================== + +// Call by: +// . Soft-reset (Ctrl+Reset) +// . Snapshot_LoadState() +void MemResetPaging () +{ + ResetPaging(0); +} + +//=========================================================================== +BYTE MemReturnRandomData (BYTE highbit) { + static const BYTE retval[16] = {0x00,0x2D,0x2D,0x30,0x30,0x32,0x32,0x34, + 0x35,0x39,0x43,0x43,0x43,0x60,0x7F,0x7F}; + BYTE r = (BYTE)(rand() & 0xFF); + if (r <= 170) + return 0x20 | (highbit ? 0x80 : 0); + else + return retval[r & 15] | (highbit ? 0x80 : 0); +} + +//=========================================================================== +void MemSetFastPaging (BOOL on) { + if (fastpaging && modechanging) { + modechanging = 0; + UpdateFastPaging(); + } + else if (!fastpaging) { + BackMainImage(); + if (lastimage >= 3) + VirtualFree(memimage+0x30000,(lastimage-2) << 16,MEM_DECOMMIT); + } + fastpaging = on; + image = 0; + mem = memimage; + lastimage = 0; + imagemode[0] = memmode; + if (!fastpaging) + UpdatePaging(1,0); + cpuemtype = fastpaging ? CPU_FASTPAGING : CPU_COMPILING; + CpuReinitialize(); + if (cpuemtype == CPU_COMPILING) + CpuResetCompilerData(); +} + +//=========================================================================== +BYTE __stdcall MemSetPaging (WORD programcounter, BYTE address, BYTE write, BYTE value, ULONG) { + DWORD lastmemmode = memmode; + + // DETERMINE THE NEW MEMORY PAGING MODE. + if ((address >= 0x80) && (address <= 0x8F)) + { + BOOL writeram = (address & 1); + memmode &= ~(MF_BANK2 | MF_HIGHRAM | MF_WRITERAM); + lastwriteram = 1; // note: because diags.do doesn't set switches twice! + if (lastwriteram && writeram) + memmode |= MF_WRITERAM; + if (!(address & 8)) + memmode |= MF_BANK2; + if (((address & 2) >> 1) == (address & 1)) + memmode |= MF_HIGHRAM; + lastwriteram = writeram; + } + else if (apple2e) + { + switch (address) + { + case 0x00: memmode &= ~MF_80STORE; break; + case 0x01: memmode |= MF_80STORE; break; + case 0x02: memmode &= ~MF_AUXREAD; break; + case 0x03: memmode |= MF_AUXREAD; break; + case 0x04: memmode &= ~MF_AUXWRITE; break; + case 0x05: memmode |= MF_AUXWRITE; break; + case 0x06: memmode |= MF_SLOTCXROM; break; + case 0x07: memmode &= ~MF_SLOTCXROM; break; + case 0x08: memmode &= ~MF_ALTZP; break; + case 0x09: memmode |= MF_ALTZP; break; + case 0x0A: memmode &= ~MF_SLOTC3ROM; break; + case 0x0B: memmode |= MF_SLOTC3ROM; break; + case 0x54: memmode &= ~MF_PAGE2; break; + case 0x55: memmode |= MF_PAGE2; break; + case 0x56: memmode &= ~MF_HIRES; break; + case 0x57: memmode |= MF_HIRES; break; +#ifdef RAMWORKS + case 0x71: // extended memory aux page number + case 0x73: // Ramworks III set aux page number + if ((value < g_uMaxExPages) && RWpages[value]) + { + memaux = RWpages[value]; + //memmode &= ~MF_RWPMASK; + //memmode |= value; + if (fastpaging) + { + UpdateFastPaging(); + } + else + { + UpdatePaging(0,0); + if (cpuemtype == CPU_COMPILING) + CpuResetCompilerData(); + } + } + break; +#endif + } + } + + // IF THE EMULATED PROGRAM HAS JUST UPDATE THE MEMORY WRITE MODE AND IS + // ABOUT TO UPDATE THE MEMORY READ MODE, HOLD OFF ON ANY PROCESSING UNTIL + // IT DOES SO. + if ((address >= 4) && (address <= 5) && + ((*(LPDWORD)(mem+programcounter) & 0x00FFFEFF) == 0x00C0028D)) { + modechanging = 1; + return write ? 0 : MemReturnRandomData(1); + } + if ((address >= 0x80) && (address <= 0x8F) && (programcounter < 0xC000) && + (((*(LPDWORD)(mem+programcounter) & 0x00FFFEFF) == 0x00C0048D) || + ((*(LPDWORD)(mem+programcounter) & 0x00FFFEFF) == 0x00C0028D))) { + modechanging = 1; + return write ? 0 : MemReturnRandomData(1); + } + + // IF THE MEMORY PAGING MODE HAS CHANGED, UPDATE OUR MEMORY IMAGES AND + // WRITE TABLES. + if ((lastmemmode != memmode) || modechanging) { + modechanging = 0; + ++pages; + + // IF FAST PAGING IS ACTIVE, WE KEEP MULTIPLE COMPLETE MEMORY IMAGES + // AND WRITE TABLES, AND SWITCH BETWEEN THEM. THE FAST PAGING VERSION + // OF THE CPU EMULATOR KEEPS ALL OF THE IMAGES COHERENT. + if (fastpaging) + UpdateFastPaging(); + + // IF FAST PAGING IS NOT ACTIVE THEN WE KEEP ONLY ONE MEMORY IMAGE AND + // WRITE TABLE, AND UPDATE THEM EVERY TIME PAGING IS CHANGED. + else { + UpdatePaging(0,0); + if (cpuemtype == CPU_COMPILING) + CpuResetCompilerData(); + } + + } + + if ((address <= 1) || ((address >= 0x54) && (address <= 0x57))) + VideoSetMode(programcounter,address,write,value,0); + return write ? 0 + : MemReturnRandomData(((address == 0x54) || (address == 0x55)) + ? (SW_PAGE2 != 0) : 1); +} + +//=========================================================================== +void MemTrimImages () { + if (fastpaging && (lastimage > 2)) { + if (modechanging) { + modechanging = 0; + UpdateFastPaging(); + } + static DWORD trimnumber = 0; + if ((image != trimnumber) && + (image != lastimage) && + (trimnumber < lastimage)) { + imagemode[trimnumber] = imagemode[lastimage]; + VirtualFree(memimage+(lastimage-- << 16),0x10000,MEM_DECOMMIT); + DWORD realimage = image; + image = trimnumber; + mem = memimage+(image << 16); + memmode = imagemode[image]; + UpdatePaging(1,0); + image = realimage; + mem = memimage+(image << 16); + memmode = imagemode[image]; + CpuReinitialize(); + } + if (++trimnumber >= lastimage) + trimnumber = 0; + } +} + +//=========================================================================== + +BYTE __stdcall CxReadFunc(WORD, WORD nAddr, BYTE, BYTE, ULONG nCyclesLeft) +{ + USHORT nPage = nAddr>>8; // Don't use BYTE - Bug in VC++ 6.0 (SP5)! + + CpuCalcCycles(nCyclesLeft); + + if(!apple2e || SW_SLOTCXROM) + { + if((nPage == 0xC4) || (nPage == 0xC5)) + { + // Slot 4 or 5: Mockingboard + return MB_Read(nAddr); + } + else + { + return mem[nAddr]; + } + } + else + { +#if _DEBUG + // Gets triggered by opcode $29 (IMM AND) by internal emulation code +// if((nPage == 0xC4) || (nPage == 0xC5)) +// _ASSERT(0); +#endif + return mem[nAddr]; + } +} + +BYTE __stdcall CxWriteFunc(WORD, WORD nAddr, BYTE, BYTE nValue, ULONG nCyclesLeft) +{ + BYTE nPage = nAddr>>8; + + CpuCalcCycles(nCyclesLeft); + + if(!apple2e || SW_SLOTCXROM) + { + if((nPage == 0xC4) || (nPage == 0xC5)) + { + // Slot 4 or 5: Mockingboard + MB_Write(nAddr, nValue); + } + } +#if _DEBUG + else + { + if((nPage == 0xC4) || (nPage == 0xC5)) + _ASSERT(0); + } +#endif + + return 0; +} + +//=========================================================================== + +DWORD MemGetSnapshot(SS_BaseMemory* pSS) +{ + pSS->dwMemMode = memmode; + pSS->bLastWriteRam = lastwriteram; + + for(DWORD dwOffset = 0x0000; dwOffset < 0x10000; dwOffset+=0x100) + { + memcpy(pSS->nMemMain+dwOffset, MemGetMainPtr((WORD)dwOffset), 0x100); + memcpy(pSS->nMemAux+dwOffset, MemGetAuxPtr((WORD)dwOffset), 0x100); + } + + return 0; +} + +DWORD MemSetSnapshot(SS_BaseMemory* pSS) +{ + memmode = pSS->dwMemMode; + lastwriteram = pSS->bLastWriteRam; + + memcpy(memmain, pSS->nMemMain, nMemMainSize); + memcpy(memaux, pSS->nMemAux, nMemAuxSize); + + // + + pages = 0; + modechanging = 0; + + UpdatePaging(1,0); // Initialize=1, UpdateWriteOnly=0 + + return 0; +} diff --git a/AppleWin/source/Memory.h b/AppleWin/source/Memory.h new file mode 100644 index 00000000..382ab0da --- /dev/null +++ b/AppleWin/source/Memory.h @@ -0,0 +1,33 @@ +#pragma once + +extern iofunction ioread[0x100]; +extern iofunction iowrite[0x100]; +extern LPBYTE memshadow[MAXIMAGES][0x100]; +extern LPBYTE memwrite[MAXIMAGES][0x100]; +extern DWORD image; +extern DWORD lastimage; +extern LPBYTE mem; +extern LPBYTE memdirty; +extern DWORD pages; + +#ifdef RAMWORKS +extern UINT g_uMaxExPages; // user requested ram pages (from cmd line) +#endif + +void MemDestroy (); +LPBYTE MemGetAuxPtr (WORD); +LPBYTE MemGetMainPtr (WORD); +void MemInitialize (); +void MemReset (); +void MemResetPaging (); +BYTE MemReturnRandomData (BYTE highbit); +void MemSetFastPaging (BOOL); +void MemTrimImages (); +DWORD MemGetSnapshot(SS_BaseMemory* pSS); +DWORD MemSetSnapshot(SS_BaseMemory* pSS); + +BYTE __stdcall CxReadFunc(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall CxWriteFunc(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); + +BYTE __stdcall MemCheckPaging (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall MemSetPaging (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/Mockingboard.cpp b/AppleWin/source/Mockingboard.cpp new file mode 100644 index 00000000..aa47da51 --- /dev/null +++ b/AppleWin/source/Mockingboard.cpp @@ -0,0 +1,1625 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Mockingboard/Phasor emulation + * + * Author: Copyright (c) 2002-2006, Tom Charlesworth + */ + +// History: +// +// v1.12.07.1 (30 Dec 2005) +// - Update 6522 TIMERs after every 6502 opcode, giving more precise IRQs +// - Minimum TIMER freq is now 0x100 cycles +// - Added Phasor support +// +// v1.12.06.1 (16 July 2005) +// - Reworked 6522's ORB -> AY8910 decoder +// - Changed MB output so L=All voices from AY0 & AY2 & R=All voices from AY1 & AY3 +// - Added crude support for Votrax speech chip (by using SSI263 phonemes) +// +// v1.12.04.1 (14 Sep 2004) +// - Switch MB output from dual-mono to stereo. +// - Relaxed TIMER1 freq from ~62Hz (period=0x4000) to ~83Hz (period=0x3000). +// +// 25 Apr 2004: +// - Added basic support for the SSI263 speech chip +// +// 15 Mar 2004: +// - Switched to MAME's AY8910 emulation (includes envelope support) +// +// v1.12.03 (11 Jan 2004) +// - For free-running 6522 timer1 IRQ, reload with current ACCESS_TIMER1 value. +// (Fixes Ultima 4/5 playback speed problem.) +// +// v1.12.01 (24 Nov 2002) +// - Shaped the tone waveform more logarithmically +// - Added support for MB ena/dis switch on Config dialog +// - Added log file support +// +// v1.12.00 (17 Nov 2002) +// - Initial version (no AY8910 envelope support) +// + +// Notes on Votrax chip (on original Mockingboards): +// From Crimewave (Penguin Software): +// . Init: +// . DDRB = 0xFF +// . PCR = 0xB0 +// . IER = 0x90 +// . ORB = 0x03 (PAUSE0) or 0x3F (STOP) +// . IRQ: +// . ORB = Phoneme value +// . IRQ last phoneme complete: +// . IER = 0x10 +// . ORB = 0x3F (STOP) +// + +#define LOG_SSI263 0 + +#include "StdAfx.h" +#pragma hdrstop +#include + +#include "ay8910.h" +#include "SSI263Phonemes.h" + + +#define SY6522_DEVICE_A 0 +#define SY6522_DEVICE_B 1 + +#define SLOT4 4 +#define SLOT5 5 + +#define NUM_MB 2 +#define NUM_DEVS_PER_MB 2 +#define NUM_AY8910 (NUM_MB*NUM_DEVS_PER_MB) +#define NUM_SY6522 NUM_AY8910 +#define NUM_VOICES_PER_AY8910 3 +#define NUM_VOICES (NUM_AY8910*NUM_VOICES_PER_AY8910) + + +// Chip offsets from card base. +#define SY6522A_Offset 0x00 +#define SY6522B_Offset 0x80 +#define SSI263_Offset 0x40 + +#define Phasor_SY6522A_CS 4 +#define Phasor_SY6522B_CS 7 +#define Phasor_SY6522A_Offset (1<nAY8910Number & 1) != SY6522_DEVICE_A) + return; + + if((pMB->sy6522.IER & TIMER1) == 0x00) + return; + + USHORT nPeriod = pMB->sy6522.TIMER1_LATCH.w; + + if(nPeriod <= 0xff) // Timer1L value has been written (but TIMER1H hasn't) + return; + +#if 0 + if(nPeriod < 0x3000) // Bit of IRQ protection (probably not needed) - Phasor has ~0x800 cycle period + { + _ASSERT(0); + return; + } +#endif + + pMB->nTimerStatus = 1; + + // 6522 CLK runs at same speed as 6502 CLK + g_n6522TimerPeriod = nPeriod; + + g_bMBTimerIrqActive = true; + g_nMBTimerDevice = pMB->nAY8910Number; +} + +//----------------------------------------------------------------------------- + +static void StopTimer(SY6522_AY8910* pMB) +{ + pMB->nTimerStatus = 0; + g_bMBTimerIrqActive = false; + g_nMBTimerDevice = 0; +} + +//----------------------------------------------------------------------------- + +static void ResetSY6522(SY6522_AY8910* pMB) +{ + memset(&pMB->sy6522,0,sizeof(SY6522)); + + if(pMB->nTimerStatus) + StopTimer(pMB); + + pMB->nAYCurrentRegister = 0; +} + +//----------------------------------------------------------------------------- + +static void AY8910_Write(BYTE nDevice, BYTE nReg, BYTE nValue, BYTE nAYDevice) +{ + SY6522_AY8910* pMB = &g_MB[nDevice]; + + if((nValue & 4) == 0) + { + // RESET: Reset AY8910 only + AY8910_reset(nDevice+2*nAYDevice); + } + else + { + // Determine the AY8910 inputs + int nBDIR = (nValue & 2) ? 1 : 0; + const int nBC2 = 1; // Hardwired to +5V + int nBC1 = nValue & 1; + + int nAYFunc = (nBDIR<<2) | (nBC2<<1) | nBC1; + enum {AY_NOP0, AY_NOP1, AY_INACTIVE, AY_READ, AY_NOP4, AY_NOP5, AY_WRITE, AY_LATCH}; + + switch(nAYFunc) + { + case AY_INACTIVE: // 4: INACTIVE + break; + + case AY_READ: // 5: READ FROM PSG (need to set DDRA to input) + break; + + case AY_WRITE: // 6: WRITE TO PSG + _AYWriteReg(nDevice+2*nAYDevice, pMB->nAYCurrentRegister, pMB->sy6522.ORA); +// AY8910_write_ym(nDevice+2*nAYDevice, pMB->nAYCurrentRegister, pMB->sy6522.ORA); + break; + + case AY_LATCH: // 7: LATCH ADDRESS + if(pMB->sy6522.ORA <= 0x0F) + pMB->nAYCurrentRegister = pMB->sy6522.ORA & 0x0F; + // else Pro-Mockingboard (clone from HK) + break; + } + } +} + +static void UpdateIFR(SY6522_AY8910* pMB) +{ + pMB->sy6522.IFR &= 0x7F; + + if(pMB->sy6522.IFR & pMB->sy6522.IER & 0x7F) + pMB->sy6522.IFR |= 0x80; +} + +static void SY6522_Write(BYTE nDevice, BYTE nReg, BYTE nValue) +{ + g_bMB_RegAccessedFlag = true; + g_bMB_Active = true; + + SY6522_AY8910* pMB = &g_MB[nDevice]; + + switch (nReg) + { + case 0x00: // ORB + { + nValue &= pMB->sy6522.DDRB; + pMB->sy6522.ORB = nValue; + + if( (pMB->sy6522.DDRB == 0xFF) && (pMB->sy6522.PCR == 0xB0) ) + { + // Votrax speech data + Votrax_Write(nDevice, nValue); + break; + } + + if(g_bPhasorEnable) + { + int nAY_CS = (g_nPhasorMode & 1) ? (~(nValue >> 3) & 3) : 1; + + if(nAY_CS & 1) + AY8910_Write(nDevice, nReg, nValue, 0); + + if(nAY_CS & 2) + AY8910_Write(nDevice, nReg, nValue, 1); + } + else + { + AY8910_Write(nDevice, nReg, nValue, 0); + } + + break; + } + case 0x01: // ORA + pMB->sy6522.ORA = nValue & pMB->sy6522.DDRA; + break; + case 0x02: // DDRB + pMB->sy6522.DDRB = nValue; + break; + case 0x03: // DDRA + pMB->sy6522.DDRA = nValue; + break; + case 0x04: // TIMER1L_COUNTER + case 0x06: // TIMER1L_LATCH + pMB->sy6522.TIMER1_LATCH.l = nValue; + break; + case 0x05: // TIMER1H_COUNTER + /* Initiates timer1 & clears time-out of timer1 */ + + // Clear Timer Interrupt Flag. + pMB->sy6522.IFR &= ~TIMER1; + UpdateIFR(pMB); + + pMB->sy6522.TIMER1_LATCH.h = nValue; + pMB->sy6522.TIMER1_COUNTER.w = pMB->sy6522.TIMER1_LATCH.w; + + StartTimer(pMB); + break; + case 0x07: // TIMER1H_LATCH + // Clear Timer1 Interrupt Flag. + pMB->sy6522.TIMER1_LATCH.h = nValue; + pMB->sy6522.IFR &= ~TIMER1; + UpdateIFR(pMB); + break; + case 0x08: // TIMER2L + pMB->sy6522.TIMER2_LATCH.l = nValue; + break; + case 0x09: // TIMER2H + // Clear Timer2 Interrupt Flag. + pMB->sy6522.IFR &= ~TIMER2; + UpdateIFR(pMB); + + pMB->sy6522.TIMER2_LATCH.h = nValue; + pMB->sy6522.TIMER2_COUNTER.w = pMB->sy6522.TIMER2_LATCH.w; + break; + case 0x0a: // SERIAL_SHIFT + break; + case 0x0b: // ACR + pMB->sy6522.ACR = nValue; + break; + case 0x0c: // PCR - Used for Speech chip only + pMB->sy6522.PCR = nValue; + break; + case 0x0d: // IFR + // - Clear those bits which are set in the lower 7 bits. + // - Can't clear bit 7 directly. + nValue |= 0x80; // Set high bit + nValue ^= 0x7F; // Make mask + pMB->sy6522.IFR &= nValue; + UpdateIFR(pMB); + break; + case 0x0e: // IER + if(!(nValue & 0x80)) + { + // Clear those bits which are set in the lower 7 bits. + nValue ^= 0x7F; + pMB->sy6522.IER &= nValue; + UpdateIFR(pMB); + + // Check if timer has been disabled. + if(pMB->sy6522.IER & TIMER1) + break; + + if(pMB->nTimerStatus == 0) + break; + + pMB->nTimerStatus = 0; + + // Stop timer + StopTimer(pMB); + } + else + { + // Set those bits which are set in the lower 7 bits. + nValue &= 0x7F; + pMB->sy6522.IER |= nValue; + UpdateIFR(pMB); + StartTimer(pMB); + } + break; + case 0x0f: // ORA_NO_HS + break; + } +} + +//----------------------------------------------------------------------------- + +static BYTE SY6522_Read(BYTE nDevice, BYTE nReg) +{ + g_bMB_RegAccessedFlag = true; + g_bMB_Active = true; + + SY6522_AY8910* pMB = &g_MB[nDevice]; + BYTE nValue = 0x00; + + switch (nReg) + { + case 0x00: // ORB + nValue = pMB->sy6522.ORB; + break; + case 0x01: // ORA + nValue = pMB->sy6522.ORA; + break; + case 0x02: // DDRB + nValue = pMB->sy6522.DDRB; + break; + case 0x03: // DDRA + nValue = pMB->sy6522.DDRA; + break; + case 0x04: // TIMER1L_COUNTER + nValue = pMB->sy6522.TIMER1_COUNTER.l; + pMB->sy6522.IFR &= ~TIMER1; // Also clears Timer1 Interrupt Flag + UpdateIFR(pMB); + break; + case 0x05: // TIMER1H_COUNTER + nValue = pMB->sy6522.TIMER1_COUNTER.h; + break; + case 0x06: // TIMER1L_LATCH + nValue = pMB->sy6522.TIMER1_LATCH.l; + break; + case 0x07: // TIMER1H_LATCH + nValue = pMB->sy6522.TIMER1_LATCH.h; + break; + case 0x08: // TIMER2L + nValue = pMB->sy6522.TIMER2_COUNTER.l; + pMB->sy6522.IFR &= ~TIMER2; // Also clears Timer2 Interrupt Flag + UpdateIFR(pMB); + break; + case 0x09: // TIMER2H + nValue = pMB->sy6522.TIMER2_COUNTER.h; + break; + case 0x0a: // SERIAL_SHIFT + break; + case 0x0b: // ACR + nValue = pMB->sy6522.ACR; + break; + case 0x0c: // PCR + nValue = pMB->sy6522.PCR; + break; + case 0x0d: // IFR + nValue = pMB->sy6522.IFR; + break; + case 0x0e: // IER + nValue = 0x80; + break; + case 0x0f: // ORA_NO_HS + nValue = pMB->sy6522.ORA; + break; + } + + return nValue; +} + +//--------------------------------------------------------------------------- + +void SSI263_Play(unsigned int nPhoneme); + +#if 0 +typedef struct +{ + BYTE DurationPhonome; + BYTE Inflection; // I10..I3 + BYTE RateInflection; + BYTE CtrlArtAmp; + BYTE FilterFreq; + // + BYTE CurrentMode; +} SSI263A; +#endif + +//static SSI263A nSpeechChip; + +// Duration/Phonome +const BYTE DURATION_MODE_MASK = 0xC0; +const BYTE PHONEME_MASK = 0x3F; + +const BYTE MODE_PHONEME_TRANSITIONED_INFLECTION = 0xC0; // IRQ active +const BYTE MODE_PHONEME_IMMEDIATE_INFLECTION = 0x80; // IRQ active +const BYTE MODE_FRAME_IMMEDIATE_INFLECTION = 0x40; // IRQ active +const BYTE MODE_IRQ_DISABLED = 0x00; + +// Rate/Inflection +const BYTE RATE_MASK = 0xF0; +const BYTE INFLECTION_MASK_H = 0x08; // I11 +const BYTE INFLECTION_MASK_L = 0x07; // I2..I0 + +// Ctrl/Art/Amp +const BYTE CONTROL_MASK = 0x80; +const BYTE ARTICULATION_MASK = 0x70; +const BYTE AMPLITUDE_MASK = 0x0F; + +static BYTE SSI263_Read(BYTE nDevice, BYTE nReg) +{ + BYTE nValue; + + SY6522_AY8910* pMB = &g_MB[nDevice]; + + switch(nReg) + { + case SSI_DURPHON: + nValue = pMB->SpeechChip.DurationPhonome; + break; + case SSI_INFLECT: + nValue = pMB->SpeechChip.Inflection; + break; + case SSI_RATEINF: + nValue = pMB->SpeechChip.RateInflection; + break; + case SSI_CTTRAMP: + nValue = pMB->SpeechChip.CtrlArtAmp; + break; + case SSI_FILFREQ: + nValue = pMB->SpeechChip.FilterFreq; + break; + default: + break; + } + + return nValue; +} + +static void SSI263_Write(BYTE nDevice, BYTE nReg, BYTE nValue) +{ + SY6522_AY8910* pMB = &g_MB[nDevice]; + + switch(nReg) + { + case SSI_DURPHON: +#if LOG_SSI263 + if(g_fh) fprintf(g_fh, "DUR = 0x%02X, PHON = 0x%02X\n\n", nValue>>6, nValue&PHONEME_MASK); +#endif + pMB->SpeechChip.DurationPhonome = nValue; + + // Phoneme output not dependent on CONTROL bit + if(g_bPhasorEnable) + { + if(nValue || (g_nCurrentActivePhoneme<0)) + SSI263_Play(nValue & PHONEME_MASK); + } + else + { + SSI263_Play(nValue & PHONEME_MASK); + } + g_nSSI263Device = nDevice; + break; + case SSI_INFLECT: +#if LOG_SSI263 + if(g_fh) fprintf(g_fh, "INF = 0x%02X\n", nValue); +#endif + pMB->SpeechChip.Inflection = nValue; + break; + case SSI_RATEINF: +#if LOG_SSI263 + if(g_fh) fprintf(g_fh, "RATE = 0x%02X, INF = 0x%02X\n", nValue>>4, nValue&0x0F); +#endif + pMB->SpeechChip.RateInflection = nValue; + break; + case SSI_CTTRAMP: +#if LOG_SSI263 + if(g_fh) fprintf(g_fh, "CTRL = %d, ART = 0x%02X, AMP=0x%02X\n", nValue>>7, (nValue&ARTICULATION_MASK)>>4, nValue&LITUDE_MASK); +#endif + if((pMB->SpeechChip.CtrlArtAmp & CONTROL_MASK) && !(nValue & CONTROL_MASK)) // H->L + pMB->SpeechChip.CurrentMode = pMB->SpeechChip.DurationPhonome & DURATION_MODE_MASK; + pMB->SpeechChip.CtrlArtAmp = nValue; + break; + case SSI_FILFREQ: +#if LOG_SSI263 + if(g_fh) fprintf(g_fh, "FFREQ = 0x%02X\n", nValue); +#endif + pMB->SpeechChip.FilterFreq = nValue; + break; + default: + break; + } +} + +//------------------------------------- + +static BYTE Votrax2SSI263[64] = +{ + 0x02, // 00: EH3 jackEt -> E1 bEnt + 0x0A, // 01: EH2 Enlist -> EH nEst + 0x0B, // 02: EH1 hEAvy -> EH1 bElt + 0x00, // 03: PA0 no sound -> PA + 0x28, // 04: DT buTTer -> T Tart + 0x08, // 05: A2 mAde -> A mAde + 0x08, // 06: A1 mAde -> A mAde + 0x2F, // 07: ZH aZure -> Z Zero + 0x0E, // 08: AH2 hOnest -> AH gOt + 0x07, // 09: I3 inhibIt -> I sIx + 0x07, // 0A: I2 Inhibit -> I sIx + 0x07, // 0B: I1 inhIbit -> I sIx + 0x37, // 0C: M Mat -> More + 0x38, // 0D: N suN -> N NiNe + 0x24, // 0E: B Bag -> B Bag + 0x33, // 0F: V Van -> V Very + // + 0x32, // 10: CH* CHip -> SCH SHip (!) + 0x32, // 11: SH SHop -> SCH SHip + 0x2F, // 12: Z Zoo -> Z Zero + 0x10, // 13: AW1 lAWful -> AW Office + 0x39, // 14: NG thiNG -> NG raNG + 0x0F, // 15: AH1 fAther -> AH1 fAther + 0x13, // 16: OO1 lOOking -> OO lOOk + 0x13, // 17: OO bOOK -> OO lOOk + 0x20, // 18: L Land -> L Lift + 0x29, // 19: K triCK -> Kit + 0x25, // 1A: J* juDGe -> D paiD (!) + 0x2C, // 1B: H Hello -> HF Heart + 0x26, // 1C: G Get -> KV taG + 0x34, // 1D: F Fast -> F Four + 0x25, // 1E: D paiD -> D paiD + 0x30, // 1F: S paSS -> S Same + // + 0x08, // 20: A dAY -> A mAde + 0x09, // 21: AY dAY -> AI cAre + 0x03, // 22: Y1 Yard -> YI Year + 0x1B, // 23: UH3 missIOn -> UH3 nUt + 0x0E, // 24: AH mOp -> AH gOt + 0x27, // 25: P Past -> P Pen + 0x11, // 26: O cOld -> O stOre + 0x07, // 27: I pIn -> I sIx + 0x16, // 28: U mOve -> U tUne + 0x05, // 29: Y anY -> AY plEAse + 0x28, // 2A: T Tap -> T Tart + 0x1D, // 2B: R Red -> R Roof + 0x01, // 2C: E mEEt -> E mEEt + 0x23, // 2D: W Win -> W Water + 0x0C, // 2E: AE dAd -> AE dAd + 0x0D, // 2F: AE1 After -> AE1 After + // + 0x10, // 30: AW2 sAlty -> AW Office + 0x1A, // 31: UH2 About -> UH2 whAt + 0x19, // 32: UH1 Uncle -> UH1 lOve + 0x18, // 33: UH cUp -> UH wOnder + 0x11, // 34: O2 fOr -> O stOre + 0x11, // 35: O1 abOArd -> O stOre + 0x14, // 36: IU yOU -> IU yOU + 0x14, // 37: U1 yOU -> IU yOU + 0x35, // 38: THV THe -> THV THere + 0x36, // 39: TH THin -> TH wiTH + 0x1C, // 3A: ER bIrd -> ER bIrd + 0x0A, // 3B: EH gEt -> EH nEst + 0x01, // 3C: E1 bE -> E mEEt + 0x10, // 3D: AW cAll -> AW Office + 0x00, // 3E: PA1 no sound -> PA + 0x00, // 3F: STOP no sound -> PA +}; + +static void Votrax_Write(BYTE nDevice, BYTE nValue) +{ + g_bVotraxPhoneme = true; + + SSI263_Play(Votrax2SSI263[nValue & PHONEME_MASK]); +} + +//=========================================================================== + +static void MB_Update() +{ + if(!MockingboardVoice.bActive) + return; + + // + + if(!g_bMB_RegAccessedFlag) + { + if(!g_nMB_InActiveCycleCount) + { + g_nMB_InActiveCycleCount = g_nCumulativeCycles; + } + else if(g_nCumulativeCycles - g_nMB_InActiveCycleCount > (unsigned __int64)g_fCurrentCLK6502/10) + { + // After 0.1 sec of Apple time, assume MB is not active + g_bMB_Active = false; + } + } + else + { + g_nMB_InActiveCycleCount = 0; + g_bMB_RegAccessedFlag = false; + g_bMB_Active = true; + } + + // + + static DWORD dwByteOffset = (DWORD)-1; + static int nNumSamplesError = 0; + + + int nNumSamples; + double n6522TimerPeriod = MB_GetFramePeriod(); + + double nIrqFreq = g_fCurrentCLK6502 / n6522TimerPeriod + 0.5; // Round-up + int nNumSamplesPerPeriod = (int) ((double)SAMPLE_RATE / nIrqFreq); // Eg. For 60Hz this is 735 + nNumSamples = nNumSamplesPerPeriod + nNumSamplesError; // Apply correction + if(nNumSamples <= 0) + nNumSamples = 0; + if(nNumSamples > 2*nNumSamplesPerPeriod) + nNumSamples = 2*nNumSamplesPerPeriod; + + if(nNumSamples) + for(int nChip=0; nChipGetCurrentPosition(&dwCurrentPlayCursor, &dwCurrentWriteCursor); + if(FAILED(hr)) + return; + + if(dwByteOffset == (DWORD)-1) + { + // First time in this func + + dwByteOffset = dwCurrentWriteCursor; + } + else + { + // Check that our offset isn't between Play & Write positions + + if(dwCurrentWriteCursor > dwCurrentPlayCursor) + { + // |-----PxxxxxW-----| + if((dwByteOffset > dwCurrentPlayCursor) && (dwByteOffset < dwCurrentWriteCursor)) + dwByteOffset = dwCurrentWriteCursor; + } + else + { + // |xxW----------Pxxx| + if((dwByteOffset > dwCurrentPlayCursor) || (dwByteOffset < dwCurrentWriteCursor)) + dwByteOffset = dwCurrentWriteCursor; + } + } + + int nBytesRemaining = dwByteOffset - dwCurrentPlayCursor; + if(nBytesRemaining < 0) + nBytesRemaining += g_dwDSBufferSize; + + // Calc correction factor so that play-buffer doesn't under/overflow + if(nBytesRemaining < g_dwDSBufferSize / 4) + nNumSamplesError++; // < 0.25 of buffer remaining + else if(nBytesRemaining > g_dwDSBufferSize / 2) + nNumSamplesError--; // > 0.50 of buffer remaining + else + nNumSamplesError = 0; // Acceptable amount of data in buffer + + if(nNumSamples == 0) + return; + + // + + double fAttenuation = g_bPhasorEnable ? 2.0/3.0 : 1.0; + + for(int i=0; i nWaveDataMax) + nDataL = nWaveDataMax; + + if(nDataR < nWaveDataMin) + nDataR = nWaveDataMin; + else if(nDataR > nWaveDataMax) + nDataR = nWaveDataMax; + + g_nMixBuffer[i*g_nMB_NumChannels+0] = (short)nDataL; // L + g_nMixBuffer[i*g_nMB_NumChannels+1] = (short)nDataR; // R + } + + // + + if(!DSGetLock(MockingboardVoice.lpDSBvoice, + dwByteOffset, (DWORD)nNumSamples*sizeof(short)*g_nMB_NumChannels, + &pDSLockedBuffer0, &dwDSLockedBufferSize0, + &pDSLockedBuffer1, &dwDSLockedBufferSize1)) + return; + + memcpy(pDSLockedBuffer0, &g_nMixBuffer[0], dwDSLockedBufferSize0); + if(pDSLockedBuffer1) + memcpy(pDSLockedBuffer1, &g_nMixBuffer[dwDSLockedBufferSize0/sizeof(short)], dwDSLockedBufferSize1); + + // Commit sound buffer + hr = MockingboardVoice.lpDSBvoice->Unlock((void*)pDSLockedBuffer0, dwDSLockedBufferSize0, + (void*)pDSLockedBuffer1, dwDSLockedBufferSize1); + + dwByteOffset = (dwByteOffset + (DWORD)nNumSamples*sizeof(short)*g_nMB_NumChannels) % g_dwDSBufferSize; + +#ifdef RIFF_MB + RiffPutSamples(&g_nMixBuffer[0], nNumSamples); +#endif +} + +//----------------------------------------------------------------------------- + +static DWORD WINAPI SSI263Thread(LPVOID lpParameter) +{ + while(1) + { + DWORD dwWaitResult = WaitForMultipleObjects( + g_nNumEvents, // number of handles in array + g_hSSI263Event, // array of event handles + FALSE, // wait until any one is signaled + INFINITE); + + if((dwWaitResult < WAIT_OBJECT_0) || (dwWaitResult > WAIT_OBJECT_0+g_nNumEvents-1)) + continue; + + dwWaitResult -= WAIT_OBJECT_0; // Determine event # that signaled + + if(dwWaitResult == (g_nNumEvents-1)) // Termination event + break; + + // Phoneme completed playing + + SSI263Voice[g_nCurrentActivePhoneme].bActive = false; + g_nCurrentActivePhoneme = -1; + + // Phoneme complete, so generate IRQ if necessary + SY6522_AY8910* pMB = &g_MB[g_nSSI263Device]; + + if(g_bPhasorEnable) + { + if((pMB->SpeechChip.CurrentMode != MODE_IRQ_DISABLED)) + { + CpuIRQ(); + } + } + else + { + if((pMB->SpeechChip.CurrentMode != MODE_IRQ_DISABLED) && (pMB->sy6522.PCR == 0x0C)) + { + pMB->sy6522.IFR |= PERIPHERAL; + UpdateIFR(pMB); + + if(pMB->sy6522.IER & PERIPHERAL) + CpuIRQ(); + } + } + + // + + if(g_bVotraxPhoneme && (pMB->sy6522.PCR == 0xB0)) + { + pMB->sy6522.IFR |= 0x10; + UpdateIFR(pMB); + + if(pMB->sy6522.IER & 0x10) + CpuIRQ(); + + g_bVotraxPhoneme = false; + } + } + + return 0; +} + +//----------------------------------------------------------------------------- + +static void SSI263_Play(unsigned int nPhoneme) +{ +#if 1 + HRESULT hr; + + if(g_nCurrentActivePhoneme >= 0) + hr = SSI263Voice[g_nCurrentActivePhoneme].lpDSBvoice->Stop(); + + g_nCurrentActivePhoneme = nPhoneme; + + hr = SSI263Voice[g_nCurrentActivePhoneme].lpDSBvoice->Play(0,0,0); // Not looping + if(FAILED(hr)) + return; + + SSI263Voice[g_nCurrentActivePhoneme].bActive = true; +#else + HRESULT hr; + bool bPause; + + if(nPhoneme == 1) + nPhoneme = 2; // Missing this sample, so map to phoneme-2 + + if(nPhoneme == 0) + { + bPause = true; + } + else + { +// nPhoneme--; + nPhoneme-=2; // Missing phoneme-1 + bPause = false; + } + + DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer + SHORT* pDSLockedBuffer; + + hr = SSI263Voice.lpDSBvoice->Stop(); + + if(!DSGetLock(SSI263Voice.lpDSBvoice, 0, 0, &pDSLockedBuffer, &dwDSLockedBufferSize, NULL, 0)) + return; + + unsigned int nPhonemeShortLength = g_nPhonemeInfo[nPhoneme].nLength; + unsigned int nPhonemeByteLength = g_nPhonemeInfo[nPhoneme].nLength * sizeof(SHORT); + + if(bPause) + { + // 'pause' length is length of 1st phoneme (arbitrary choice, since don't know real length) + memset(pDSLockedBuffer, 0, g_dwMaxPhonemeLen); + } + else + { + memcpy(pDSLockedBuffer, &g_nPhonemeData[g_nPhonemeInfo[nPhoneme].nOffset], nPhonemeByteLength); + memset(&pDSLockedBuffer[nPhonemeShortLength], 0, g_dwMaxPhonemeLen-nPhonemeByteLength); + } + +#if 0 + DSBPOSITIONNOTIFY PositionNotify; + + PositionNotify.dwOffset = nPhonemeByteLength - 1; // End of phoneme + PositionNotify.hEventNotify = g_hSSI263Event[0]; + + hr = SSI263Voice.lpDSNotify->SetNotificationPositions(1, &PositionNotify); + if(FAILED(hr)) + { + DirectSound_ErrorText(hr); + return; + } +#endif + + hr = SSI263Voice.lpDSBvoice->Unlock((void*)pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0); + if(FAILED(hr)) + return; + + hr = SSI263Voice.lpDSBvoice->Play(0,0,0); // Not looping + if(FAILED(hr)) + return; + + SSI263Voice.bActive = true; +#endif +} + +//----------------------------------------------------------------------------- + +static bool MB_DSInit() +{ + // + // Create single Mockingboard voice + // + + DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer + SHORT* pDSLockedBuffer; + + if(!g_bDSAvailable) + return false; + + HRESULT hr = DSGetSoundBuffer(&MockingboardVoice, DSBCAPS_CTRLVOLUME, g_dwDSBufferSize, SAMPLE_RATE, 2); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "MB: DSGetSoundBuffer failed (%08X)\n",hr); + return false; + } + + if(!DSZeroVoiceBuffer(&MockingboardVoice, "MB", g_dwDSBufferSize)) + return false; + + MockingboardVoice.bActive = true; + + // Volume might've been setup from value in Registry + if(!MockingboardVoice.nVolume) + MockingboardVoice.nVolume = DSBVOLUME_MAX; + + MockingboardVoice.lpDSBvoice->SetVolume(MockingboardVoice.nVolume); + + //--------------------------------- + + // + // Create SSI263 voice + // + +#if 0 + g_dwMaxPhonemeLen = 0; + for(int i=0; iQueryInterface(IID_IDirectSoundNotify, (LPVOID *)&SSI263Voice[i].lpDSNotify); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "SSI263: QueryInterface failed (%08X)\n",hr); + return false; + } + + DSBPOSITIONNOTIFY PositionNotify; + +// PositionNotify.dwOffset = nPhonemeByteLength - 1; // End of buffer + PositionNotify.dwOffset = DSBPN_OFFSETSTOP; // End of buffer + PositionNotify.hEventNotify = g_hSSI263Event[0]; + + hr = SSI263Voice[i].lpDSNotify->SetNotificationPositions(1, &PositionNotify); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "SSI263: SetNotifyPos failed (%08X)\n",hr); + return false; + } + + hr = SSI263Voice[i].lpDSBvoice->Unlock((void*)pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "SSI263: DSUnlock failed (%08X)\n",hr); + return false; + } + + SSI263Voice[i].bActive = false; + SSI263Voice[i].nVolume = MockingboardVoice.nVolume; // Use same volume as MB + SSI263Voice[i].lpDSBvoice->SetVolume(SSI263Voice[i].nVolume); + } + + // + + DWORD dwThreadId; + + g_hThread = CreateThread(NULL, // lpThreadAttributes + 0, // dwStackSize + SSI263Thread, + NULL, // lpParameter + 0, // dwCreationFlags : 0 = Run immediately + &dwThreadId); // lpThreadId + + SetThreadPriority(g_hThread, THREAD_PRIORITY_TIME_CRITICAL); + + return true; +} + +static void MB_DSUninit() +{ + if(g_hThread) + { + DWORD dwExitCode; + SetEvent(g_hSSI263Event[g_nNumEvents-1]); // Signal to thread that it should exit + + do + { + if(GetExitCodeThread(g_hThread, &dwExitCode)) + { + if(dwExitCode == STILL_ACTIVE) + Sleep(10); + else + break; + } + } + while(1); + + CloseHandle(g_hThread); + g_hThread = NULL; + } + + // + + if(MockingboardVoice.lpDSBvoice && MockingboardVoice.bActive) + { + MockingboardVoice.lpDSBvoice->Stop(); + MockingboardVoice.bActive = false; + } + + DSReleaseSoundBuffer(&MockingboardVoice); + + // + + for(int i=0; i<64; i++) + { + if(SSI263Voice[i].lpDSBvoice && SSI263Voice[i].bActive) + { + SSI263Voice[i].lpDSBvoice->Stop(); + SSI263Voice[i].bActive = false; + } + + DSReleaseSoundBuffer(&SSI263Voice[i]); + } + + // + + if(g_hSSI263Event[0]) + { + CloseHandle(g_hSSI263Event[0]); + g_hSSI263Event[0] = NULL; + } + + if(g_hSSI263Event[1]) + { + CloseHandle(g_hSSI263Event[1]); + g_hSSI263Event[1] = NULL; + } +} + +//============================================================================= + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//============================================================================= + +void MB_Initialize() +{ + if(g_bDisableDirectSound) + { + MockingboardVoice.bMute = true; + g_SoundcardType = SC_NONE; + } + else + { + memset(&g_MB,0,sizeof(g_MB)); + + for(int i=0; i>8)&0xf - SLOT4; + BYTE nOffset = nAddr&0xff; + + if(g_bPhasorEnable) + { + if(nMB != 0) // Slot4 only + return 0; + + BYTE nRes = 0; + int CS; + + if(g_nPhasorMode & 1) + CS = ( ( nAddr & 0x80 ) >> 6 ) | ( ( nAddr & 0x10 ) >> 4 ); // 0, 1, 2 or 3 + else // Mockingboard Mode + CS = ( ( nAddr & 0x80 ) >> 7 ) + 1; // 1 or 2 + + if(CS & 1) + nRes |= SY6522_Read(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_A, nAddr&0xf); + + if(CS & 2) + nRes |= SY6522_Read(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_B, nAddr&0xf); + + if((nOffset >= SSI263_Offset) && (nOffset <= (SSI263_Offset+0x05))) + nRes |= SSI263_Read(nMB, nAddr&0xf); + + return nRes; + } + + if(nOffset <= (SY6522A_Offset+0x0F)) + return SY6522_Read(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_A, nAddr&0xf); + else if((nOffset >= SY6522B_Offset) && (nOffset <= (SY6522B_Offset+0x0F))) + return SY6522_Read(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_B, nAddr&0xf); + else if((nOffset >= SSI263_Offset) && (nOffset <= (SSI263_Offset+0x05))) + return SSI263_Read(nMB, nAddr&0xf); + else + return 0; +} + +//----------------------------------------------------------------------------- + +void MB_Write(WORD nAddr, BYTE nValue) +{ + if(g_SoundcardType == SC_NONE) + return; + + BYTE nMB = (nAddr>>8)&0xf - SLOT4; + BYTE nOffset = nAddr&0xff; + + if(g_bPhasorEnable) + { + if(nMB != 0) // Slot4 only + return; + + int CS; + + if(g_nPhasorMode & 1) + CS = ( ( nAddr & 0x80 ) >> 6 ) | ( ( nAddr & 0x10 ) >> 4 ); // 0, 1, 2 or 3 + else // Mockingboard Mode + CS = ( ( nAddr & 0x80 ) >> 7 ) + 1; // 1 or 2 + + if(CS & 1) + SY6522_Write(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_A, nAddr&0xf, nValue); + + if(CS & 2) + SY6522_Write(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_B, nAddr&0xf, nValue); + + if((nOffset >= SSI263_Offset) && (nOffset <= (SSI263_Offset+0x05))) + SSI263_Write(nMB*2+1, nAddr&0xf, nValue); // Second 6522 is used for speech chip + + return; + } + + if(nOffset <= (SY6522A_Offset+0x0F)) + SY6522_Write(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_A, nAddr&0xf, nValue); + else if((nOffset >= SY6522B_Offset) && (nOffset <= (SY6522B_Offset+0x0F))) + SY6522_Write(nMB*NUM_DEVS_PER_MB + SY6522_DEVICE_B, nAddr&0xf, nValue); + else if((nOffset >= SSI263_Offset) && (nOffset <= (SSI263_Offset+0x05))) + SSI263_Write(nMB*2+1, nAddr&0xf, nValue); // Second 6522 is used for speech chip +} + +//----------------------------------------------------------------------------- + +BYTE __stdcall PhasorIO (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft) +{ + if(!g_bPhasorEnable) + return 0; + + if(g_nPhasorMode < 2) + g_nPhasorMode = addr & 1; + + double fCLK = (addr & 4) ? CLK_6502*2 : CLK_6502; + + AY8910_InitClock((int)fCLK); + + return 0; +} + +//----------------------------------------------------------------------------- + +void MB_Mute() +{ + if(g_SoundcardType == SC_NONE) + return; + + if(MockingboardVoice.bActive && !MockingboardVoice.bMute) + { + MockingboardVoice.lpDSBvoice->SetVolume(DSBVOLUME_MIN); + MockingboardVoice.bMute = true; + } + + if(g_nCurrentActivePhoneme >= 0) + SSI263Voice[g_nCurrentActivePhoneme].lpDSBvoice->SetVolume(DSBVOLUME_MIN); +} + +//----------------------------------------------------------------------------- + +void MB_Demute() +{ + if(g_SoundcardType == SC_NONE) + return; + + if(MockingboardVoice.bActive && MockingboardVoice.bMute) + { + MockingboardVoice.lpDSBvoice->SetVolume(MockingboardVoice.nVolume); + MockingboardVoice.bMute = false; + } + + if(g_nCurrentActivePhoneme >= 0) + SSI263Voice[g_nCurrentActivePhoneme].lpDSBvoice->SetVolume(SSI263Voice[g_nCurrentActivePhoneme].nVolume); +} + +//----------------------------------------------------------------------------- + +// Called by ContinueExecution() at the end of every video frame +void MB_EndOfFrame() +{ + if(g_SoundcardType == SC_NONE) + return; + + if(!g_bFullSpeed && !g_bMBTimerIrqActive && !(g_MB[0].sy6522.IFR & TIMER1)) + MB_Update(); +} + +//----------------------------------------------------------------------------- + +// Called by InternalCpuExecute() after every opcode +// OLD: Called by CpuExecute() & CpuCalcCycles() +void MB_UpdateCycles(USHORT nClocks) +{ + if(g_SoundcardType == SC_NONE) + return; + + for(int i=0; isy6522.TIMER1_COUNTER.w; + USHORT OldTimer2 = pMB->sy6522.TIMER2_COUNTER.w; + + pMB->sy6522.TIMER1_COUNTER.w -= nClocks; + pMB->sy6522.TIMER2_COUNTER.w -= nClocks; + + // Check for counter underflow + bool bTimer1Underflow = (!(OldTimer1 & 0x8000) && (pMB->sy6522.TIMER1_COUNTER.w & 0x8000)); + bool bTimer2Underflow = (!(OldTimer2 & 0x8000) && (pMB->sy6522.TIMER2_COUNTER.w & 0x8000)); + + if( bTimer1Underflow && (g_nMBTimerDevice == i) && g_bMBTimerIrqActive ) + { + pMB->sy6522.IFR |= TIMER1; + UpdateIFR(pMB); + CpuIRQ(); + if((pMB->sy6522.ACR & RUNMODE) == RM_ONESHOT) + { + // One-shot mode + StopTimer(pMB); // Phasor's playback code uses one-shot mode + } + else + { + // Free-running mode + // - Ultima4/5 change ACCESS_TIMER1 after a couple of IRQs into tune + pMB->sy6522.TIMER1_COUNTER.w = pMB->sy6522.TIMER1_LATCH.w; + StartTimer(pMB); + } + + if(!g_bFullSpeed) + MB_Update(); + } + } +} + +//----------------------------------------------------------------------------- + +eSOUNDCARDTYPE MB_GetSoundcardType() +{ + return g_SoundcardType; +} + +void MB_SetSoundcardType(eSOUNDCARDTYPE NewSoundcardType) +{ + if ((NewSoundcardType == SC_UNINIT) || (g_SoundcardType == NewSoundcardType)) + return; + + g_SoundcardType = NewSoundcardType; + + if(g_SoundcardType == SC_NONE) + MB_Mute(); + + g_bPhasorEnable = (g_SoundcardType == SC_PHASOR); +} + +//----------------------------------------------------------------------------- + +double MB_GetFramePeriod() +{ + return (g_bMBTimerIrqActive||(g_MB[0].sy6522.IFR & TIMER1)) ? (double)g_n6522TimerPeriod : g_f6522TimerPeriod_NoIRQ; +} + +bool MB_IsActive() +{ + if(!MockingboardVoice.bActive) + return false; + + // Ignore /g_bMBTimerIrqActive/ as timer's irq handler will access 6522 regs affecting /g_bMB_Active/ + + return g_bMB_Active; +} + +//----------------------------------------------------------------------------- + +DWORD MB_GetVolume() +{ + return MockingboardVoice.dwUserVolume; +} + +void MB_SetVolume(DWORD dwVolume, DWORD dwVolumeMax) +{ + MockingboardVoice.dwUserVolume = dwVolume; + + MockingboardVoice.nVolume = NewVolume(dwVolume, dwVolumeMax); + + if(MockingboardVoice.bActive) + MockingboardVoice.lpDSBvoice->SetVolume(MockingboardVoice.nVolume); +} + +//=========================================================================== + +DWORD MB_GetSnapshot(SS_CARD_MOCKINGBOARD* pSS, DWORD dwSlot) +{ + pSS->Hdr.UnitHdr.dwLength = sizeof(SS_CARD_DISK2); + pSS->Hdr.UnitHdr.dwVersion = MAKE_VERSION(1,0,0,0); + + pSS->Hdr.dwSlot = dwSlot; + pSS->Hdr.dwType = CT_Mockingboard; + + UINT nMbCardNum = dwSlot - SLOT4; + UINT nDeviceNum = nMbCardNum*2; + SY6522_AY8910* pMB = &g_MB[nDeviceNum]; + + for(UINT i=0; iUnit[i].RegsSY6522, &pMB->sy6522, sizeof(SY6522)); + memcpy(&pSS->Unit[i].RegsAY8910, AY8910_GetRegsPtr(nDeviceNum), 16); + memcpy(&pSS->Unit[i].RegsSSI263, &pMB->SpeechChip, sizeof(SSI263A)); + pSS->Unit[i].nAYCurrentRegister = pMB->nAYCurrentRegister; + + nDeviceNum++; + pMB++; + } + + return 0; +} + +DWORD MB_SetSnapshot(SS_CARD_MOCKINGBOARD* pSS, DWORD /*dwSlot*/) +{ + if(pSS->Hdr.UnitHdr.dwVersion != MAKE_VERSION(1,0,0,0)) + return -1; + + UINT nMbCardNum = pSS->Hdr.dwSlot - SLOT4; + UINT nDeviceNum = nMbCardNum*2; + SY6522_AY8910* pMB = &g_MB[nDeviceNum]; + + g_nSSI263Device = 0; + g_nCurrentActivePhoneme = -1; + + for(UINT i=0; isy6522, &pSS->Unit[i].RegsSY6522, sizeof(SY6522)); + memcpy(AY8910_GetRegsPtr(nDeviceNum), &pSS->Unit[i].RegsAY8910, 16); + memcpy(&pMB->SpeechChip, &pSS->Unit[i].RegsSSI263, sizeof(SSI263A)); + pMB->nAYCurrentRegister = pSS->Unit[i].nAYCurrentRegister; + + StartTimer(pMB); // Attempt to start timer + + // + + // Crude - currently only support a single speech chip + if(pMB->SpeechChip.DurationPhonome) + { + g_nSSI263Device = nDeviceNum; + + if((pMB->SpeechChip.CurrentMode != MODE_IRQ_DISABLED) && (pMB->sy6522.PCR == 0x0C) && (pMB->sy6522.IER & PERIPHERAL)) + { + pMB->sy6522.IFR |= PERIPHERAL; + UpdateIFR(pMB); + CpuIRQ(); + } + } + + nDeviceNum++; + pMB++; + } + + return 0; +} diff --git a/AppleWin/source/Mockingboard.h b/AppleWin/source/Mockingboard.h new file mode 100644 index 00000000..90ee5802 --- /dev/null +++ b/AppleWin/source/Mockingboard.h @@ -0,0 +1,25 @@ +#pragma once + +extern bool g_bMBTimerIrqActive; + +void MB_Initialize(); +void MB_Reinitialize(); +void MB_Destroy(); +void MB_Reset(); +BYTE MB_Read(WORD nAddr); +void MB_Write(WORD nAddr, BYTE nValue); +void MB_Mute(); +void MB_Demute(); +void MB_EndOfFrame(); +void MB_CheckIRQ(); +void MB_UpdateCycles(USHORT nClocks); +eSOUNDCARDTYPE MB_GetSoundcardType(); +void MB_SetSoundcardType(eSOUNDCARDTYPE NewSoundcardType); +double MB_GetFramePeriod(); +bool MB_IsActive(); +DWORD MB_GetVolume(); +void MB_SetVolume(DWORD dwVolume, DWORD dwVolumeMax); +DWORD MB_GetSnapshot(SS_CARD_MOCKINGBOARD* pSS, DWORD dwSlot); +DWORD MB_SetSnapshot(SS_CARD_MOCKINGBOARD* pSS, DWORD dwSlot); + +BYTE __stdcall PhasorIO (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/PropertySheetPage.cpp b/AppleWin/source/PropertySheetPage.cpp new file mode 100644 index 00000000..7e0a13b2 --- /dev/null +++ b/AppleWin/source/PropertySheetPage.cpp @@ -0,0 +1,1006 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Property Sheet Pages + * + * Author: Copyright (c) 2002-2006, Tom Charlesworth + */ + +#include "StdAfx.h" +#pragma hdrstop +#include "..\resource\resource.h" + + +TCHAR computerchoices[] = TEXT("Apple ][+\0") + TEXT("Apple //e\0"); + +TCHAR* szJoyChoice0 = TEXT("Disabled\0"); +TCHAR* szJoyChoice1 = TEXT("PC Joystick #1\0"); +TCHAR* szJoyChoice2 = TEXT("PC Joystick #2\0"); +TCHAR* szJoyChoice3 = TEXT("Keyboard (standard)\0"); +TCHAR* szJoyChoice4 = TEXT("Keyboard (centering)\0"); +TCHAR* szJoyChoice5 = TEXT("Mouse\0"); + +const int g_nMaxJoyChoiceLen = 40; + +enum JOY0CHOICE {J0C_DISABLED=0, J0C_JOYSTICK1, J0C_KEYBD_STANDARD, J0C_KEYBD_CENTERING, J0C_MOUSE, J0C_MAX}; +TCHAR* pszJoy0Choices[J0C_MAX] = { szJoyChoice0, + szJoyChoice1, // PC Joystick #1 + szJoyChoice3, + szJoyChoice4, + szJoyChoice5 }; +int g_nJoy0ChoiceTranlationTbl[J0C_MAX]; +TCHAR joystick0choices[J0C_MAX*g_nMaxJoyChoiceLen]; + +enum JOY1CHOICE {J1C_DISABLED=0, J1C_JOYSTICK2, J1C_KEYBD_STANDARD, J1C_KEYBD_CENTERING, J1C_MOUSE, J1C_MAX}; +TCHAR* pszJoy1Choices[J1C_MAX] = { szJoyChoice0, + szJoyChoice2, // PC Joystick #2 + szJoyChoice3, + szJoyChoice4, + szJoyChoice5 }; +int g_nJoy1ChoiceTranlationTbl[J1C_MAX]; +TCHAR joystick1choices[J1C_MAX*g_nMaxJoyChoiceLen]; + +TCHAR serialchoices[] = TEXT("None\0") + TEXT("COM1\0") + TEXT("COM2\0") + TEXT("COM3\0") + TEXT("COM4\0"); + +TCHAR soundchoices[] = TEXT("Disabled\0") + TEXT("PC Speaker (direct)\0") + TEXT("PC Speaker (translated)\0") + TEXT("Sound Card\0"); + +TCHAR videochoices[] = TEXT("Monochrome\0") + TEXT("Color (standard)\0") + TEXT("Color (text optimized)\0") + TEXT("Color (TV emulation)\0"); + +TCHAR discchoices[] = TEXT("Authentic Speed\0") + TEXT("Enhanced Speed\0"); + + +const UINT VOLUME_MIN = 0; +const UINT VOLUME_MAX = 59; + +enum {PG_CONFIG=0, PG_INPUT, PG_SOUND, PG_SAVESTATE, PG_DISK, PG_NUM_SHEETS}; + +UINT g_nLastPage = PG_CONFIG; + +//=========================================================================== + +static void FillComboBox (HWND window, int controlid, LPCTSTR choices, int currentchoice) +{ + HWND combowindow = GetDlgItem(window,controlid); + SendMessage(combowindow,CB_RESETCONTENT,0,0); + while (*choices) { + SendMessage(combowindow,CB_ADDSTRING,0,(LPARAM)(LPCTSTR)choices); + choices += _tcslen(choices)+1; + } + SendMessage(combowindow,CB_SETCURSEL,currentchoice,0); +} + +//=========================================================================== + +static void EnableTrackbar (HWND window, BOOL enable) +{ + EnableWindow(GetDlgItem(window,IDC_SLIDER_CPU_SPEED),enable); + EnableWindow(GetDlgItem(window,IDC_0_5_MHz),enable); + EnableWindow(GetDlgItem(window,IDC_1_0_MHz),enable); + EnableWindow(GetDlgItem(window,IDC_2_0_MHz),enable); + EnableWindow(GetDlgItem(window,IDC_MAX_MHz),enable); +} + +//=========================================================================== + +static void InitJoystickChoices(HWND window, int nJoyNum, int nIdcValue) +{ + TCHAR *pszMem; + int nIdx; + unsigned long i; + + TCHAR* pnzJoystickChoices; + int *pnJoyTranslationTbl; + int nJoyTranslationTblSize; + unsigned short nJC_DISABLED,nJC_JOYSTICK,nJC_KEYBD_STANDARD,nJC_KEYBD_CENTERING,nJC_MAX; + TCHAR** ppszJoyChoices; + int nOtherJoyNum = nJoyNum == JN_JOYSTICK0 ? JN_JOYSTICK1 : JN_JOYSTICK0; + + + if(nJoyNum == JN_JOYSTICK0) + { + pnzJoystickChoices = joystick0choices; + pnJoyTranslationTbl = g_nJoy0ChoiceTranlationTbl; + nJoyTranslationTblSize = sizeof(g_nJoy0ChoiceTranlationTbl); + nJC_DISABLED = J0C_DISABLED; + nJC_JOYSTICK = J0C_JOYSTICK1; + nJC_KEYBD_STANDARD = J0C_KEYBD_STANDARD; + nJC_KEYBD_CENTERING = J0C_KEYBD_CENTERING; + nJC_MAX = J0C_MAX; + ppszJoyChoices = pszJoy0Choices; + } + else + { + pnzJoystickChoices = joystick1choices; + pnJoyTranslationTbl = g_nJoy1ChoiceTranlationTbl; + nJoyTranslationTblSize = sizeof(g_nJoy1ChoiceTranlationTbl); + nJC_DISABLED = J1C_DISABLED; + nJC_JOYSTICK = J1C_JOYSTICK2; + nJC_KEYBD_STANDARD = J1C_KEYBD_STANDARD; + nJC_KEYBD_CENTERING = J1C_KEYBD_CENTERING; + nJC_MAX = J1C_MAX; + ppszJoyChoices = pszJoy1Choices; + } + + pszMem = pnzJoystickChoices; + nIdx = 0; + memset(pnJoyTranslationTbl, -1, nJoyTranslationTblSize); + + // Build the Joystick choices string list. These first 2 are always selectable. + memcpy(pszMem, ppszJoyChoices[nJC_DISABLED], strlen(ppszJoyChoices[nJC_DISABLED])+1); + pszMem += strlen(ppszJoyChoices[nJC_DISABLED])+1; + pnJoyTranslationTbl[nIdx++] = nJC_DISABLED; + + memcpy(pszMem, ppszJoyChoices[nJC_JOYSTICK], strlen(ppszJoyChoices[nJC_JOYSTICK])+1); + pszMem += strlen(ppszJoyChoices[nJC_JOYSTICK])+1; + pnJoyTranslationTbl[nIdx++] = nJC_JOYSTICK; + + // Now exclude the other Joystick type (if it exists) from this new list + for(i=nJC_KEYBD_STANDARD; ihdr.code) + { + case PSN_KILLACTIVE: + SetWindowLong(window, DWL_MSGRESULT, FALSE); // Changes are valid + break; + case PSN_APPLY: + SetWindowLong(window, DWL_MSGRESULT, PSNRET_NOERROR); // Changes are valid + ConfigDlg_OK(window, afterclose); + break; + case PSN_QUERYCANCEL: + // Can use this to ask user to confirm cancel + break; + case PSN_RESET: + ConfigDlg_CANCEL(window); + break; + } + } + break; + + case WM_COMMAND: + switch (LOWORD(wparam)) + { + case IDC_AUTHENTIC_SPEED: // Authentic Machine Speed + SendDlgItemMessage(window,IDC_SLIDER_CPU_SPEED,TBM_SETPOS,1,SPEED_NORMAL); + EnableTrackbar(window,0); + break; + + case IDC_CUSTOM_SPEED: // Select Custom Speed + SetFocus(GetDlgItem(window,IDC_SLIDER_CPU_SPEED)); + EnableTrackbar(window,1); + break; + + case IDC_SLIDER_CPU_SPEED: // CPU speed slider + CheckRadioButton(window,IDC_AUTHENTIC_SPEED,IDC_CUSTOM_SPEED,IDC_CUSTOM_SPEED); + EnableTrackbar(window,1); + break; + + case IDC_BENCHMARK: + afterclose = WM_USER_BENCHMARK; + PropSheet_PressButton(GetParent(window), PSBTN_OK); + break; + + case IDC_MONOCOLOR: + VideoChooseColor(); + break; + +#if 0 + case IDC_RECALIBRATE: + RegSaveValue(TEXT(""),TEXT("RunningOnOS"),0,0); + if (MessageBox(window, + TEXT("The emulator has been set to recalibrate ") + TEXT("itself the next time it is started.\n\n") + TEXT("Would you like to restart the emulator now?"), + TEXT("Configuration"), + MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDYES) { + afterclose = WM_USER_RESTART; + PropSheet_PressButton(GetParent(window), PSBTN_OK); + } + break; +#endif + } // switch( (LOWORD(wparam)) + break; // WM_COMMAND + + case WM_HSCROLL: + CheckRadioButton(window, IDC_AUTHENTIC_SPEED, IDC_CUSTOM_SPEED, IDC_CUSTOM_SPEED); // FirstButton, LastButton, CheckButton + break; + + case WM_INITDIALOG: + { + g_nLastPage = PG_CONFIG; + + FillComboBox(window,IDC_COMPUTER,computerchoices,apple2e); + FillComboBox(window,IDC_VIDEOTYPE,videochoices,videotype); + FillComboBox(window,IDC_SERIALPORT,serialchoices,serialport); + SendDlgItemMessage(window,IDC_SLIDER_CPU_SPEED,TBM_SETRANGE,1,MAKELONG(0,40)); + SendDlgItemMessage(window,IDC_SLIDER_CPU_SPEED,TBM_SETPAGESIZE,0,5); + SendDlgItemMessage(window,IDC_SLIDER_CPU_SPEED,TBM_SETTICFREQ,10,0); + SendDlgItemMessage(window,IDC_SLIDER_CPU_SPEED,TBM_SETPOS,1,g_dwSpeed); + { + BOOL custom = 1; + if (g_dwSpeed == SPEED_NORMAL) { + custom = 0; + RegLoadValue(TEXT("Configuration"),TEXT("Custom Speed"),1,(DWORD *)&custom); + } + CheckRadioButton(window, IDC_AUTHENTIC_SPEED, IDC_CUSTOM_SPEED, custom ? IDC_CUSTOM_SPEED : IDC_AUTHENTIC_SPEED); + SetFocus(GetDlgItem(window, custom ? IDC_SLIDER_CPU_SPEED : IDC_AUTHENTIC_SPEED)); + EnableTrackbar(window, custom); + } + + afterclose = 0; + break; + } + + case WM_LBUTTONDOWN: + { + POINT pt = {LOWORD(lparam), + HIWORD(lparam)}; + ClientToScreen(window,&pt); + RECT rect; + GetWindowRect(GetDlgItem(window,IDC_SLIDER_CPU_SPEED),&rect); + if ((pt.x >= rect.left) && (pt.x <= rect.right) && + (pt.y >= rect.top) && (pt.y <= rect.bottom)) { + CheckRadioButton(window, IDC_AUTHENTIC_SPEED, IDC_CUSTOM_SPEED, IDC_CUSTOM_SPEED); + EnableTrackbar(window,1); + SetFocus(GetDlgItem(window,IDC_SLIDER_CPU_SPEED)); + ScreenToClient(GetDlgItem(window,IDC_SLIDER_CPU_SPEED),&pt); + PostMessage(GetDlgItem(window,IDC_SLIDER_CPU_SPEED),WM_LBUTTONDOWN, + wparam,MAKELONG(pt.x,pt.y)); + } + break; + } + + case WM_SYSCOLORCHANGE: + SendDlgItemMessage(window,IDC_SLIDER_CPU_SPEED,WM_SYSCOLORCHANGE,0,0); + break; + } + return 0; +} + +//=========================================================================== + +static void InputDlg_OK(HWND window, BOOL afterclose) +{ + DWORD newjoytype0 = (DWORD)SendDlgItemMessage(window,IDC_JOYSTICK0,CB_GETCURSEL,0,0); + DWORD newjoytype1 = (DWORD)SendDlgItemMessage(window,IDC_JOYSTICK1,CB_GETCURSEL,0,0); + +// bool bNewKeybBufferEnable = IsDlgButtonChecked(window, IDC_KEYB_BUFFER_ENABLE) ? true : false; + + if (!JoySetEmulationType(window,g_nJoy0ChoiceTranlationTbl[newjoytype0],JN_JOYSTICK0)) + { + afterclose = 0; + return; + } + + if (!JoySetEmulationType(window,g_nJoy1ChoiceTranlationTbl[newjoytype1],JN_JOYSTICK1)) + { + afterclose = 0; + return; + } + + JoySetTrim((short)SendDlgItemMessage(window, IDC_SPIN_XTRIM, UDM_GETPOS, 0, 0), true); + JoySetTrim((short)SendDlgItemMessage(window, IDC_SPIN_YTRIM, UDM_GETPOS, 0, 0), false); + +// KeybSetBufferMode(bNewKeybBufferEnable); + + SAVE(TEXT("Joystick 0 Emulation"),joytype[0]); + SAVE(TEXT("Joystick 1 Emulation"),joytype[1]); + SAVE(TEXT(REGVALUE_PDL_XTRIM),JoyGetTrim(true)); + SAVE(TEXT(REGVALUE_PDL_YTRIM),JoyGetTrim(false)); +// SAVE(TEXT(REGVALUE_KEYB_BUFFER_ENABLE),KeybGetBufferMode() ? 1 : 0); + + // + + if (afterclose) + PostMessage(framewindow,afterclose,0,0); +} + +static void InputDlg_CANCEL(HWND window) +{ +} + +//--------------------------------------------------------------------------- + +static BOOL CALLBACK InputDlgProc (HWND window, + UINT message, + WPARAM wparam, + LPARAM lparam) +{ + static BOOL afterclose = 0; + + switch (message) + { + case WM_NOTIFY: + { + // Property Sheet notifications + + switch (((LPPSHNOTIFY)lparam)->hdr.code) + { + case PSN_KILLACTIVE: + SetWindowLong(window, DWL_MSGRESULT, FALSE); // Changes are valid + break; + case PSN_APPLY: + SetWindowLong(window, DWL_MSGRESULT, PSNRET_NOERROR); // Changes are valid + InputDlg_OK(window, afterclose); + break; + case PSN_QUERYCANCEL: + // Can use this to ask user to confirm cancel + break; + case PSN_RESET: + InputDlg_CANCEL(window); + break; + +/* // Could use this to display PDL() value + case UDN_DELTAPOS: + LPNMUPDOWN lpnmud = (LPNMUPDOWN) lparam; + if (lpnmud->hdr.idFrom == IDC_SPIN_XTRIM) + { + static int x = 0; + x = lpnmud->iPos + lpnmud->iDelta; + x = SendDlgItemMessage(window, IDC_SPIN_XTRIM, UDM_GETPOS, 0, 0); + } + else if (lpnmud->hdr.idFrom == IDC_SPIN_YTRIM) + { + static int y = 0; + y = lpnmud->iPos + lpnmud->iDelta; + y = SendDlgItemMessage(window, IDC_SPIN_YTRIM, UDM_GETPOS, 0, 0); + } + break; +*/ + } + } + break; + + case WM_COMMAND: + switch (LOWORD(wparam)) + { + case IDC_JOYSTICK0: // joystick0 + if(HIWORD(wparam) == CBN_SELCHANGE) + { + DWORD newjoytype = (DWORD)SendDlgItemMessage(window,IDC_JOYSTICK0,CB_GETCURSEL,0,0); + JoySetEmulationType(window,g_nJoy0ChoiceTranlationTbl[newjoytype],JN_JOYSTICK0); + InitJoystickChoices(window, JN_JOYSTICK1, IDC_JOYSTICK1); // Re-init joy1 list + } + break; + case IDC_JOYSTICK1: // joystick1 + if(HIWORD(wparam) == CBN_SELCHANGE) + { + DWORD newjoytype = (DWORD)SendDlgItemMessage(window,IDC_JOYSTICK1,CB_GETCURSEL,0,0); + JoySetEmulationType(window,g_nJoy1ChoiceTranlationTbl[newjoytype],JN_JOYSTICK1); + InitJoystickChoices(window, JN_JOYSTICK0, IDC_JOYSTICK0); // Re-init joy0 list + } + break; +// case IDC_KEYB_BUFFER_ENABLE: +// break; + case IDC_PASTE_FROM_CLIPBOARD: + ClipboardInitiatePaste(); + break; + } + break; + + case WM_INITDIALOG: + { + g_nLastPage = PG_INPUT; + + InitJoystickChoices(window, JN_JOYSTICK0, IDC_JOYSTICK0); + InitJoystickChoices(window, JN_JOYSTICK1, IDC_JOYSTICK1); + + SendDlgItemMessage(window, IDC_SPIN_XTRIM, UDM_SETRANGE, 0, MAKELONG(128,-127)); + SendDlgItemMessage(window, IDC_SPIN_YTRIM, UDM_SETRANGE, 0, MAKELONG(128,-127)); + + SendDlgItemMessage(window, IDC_SPIN_XTRIM, UDM_SETPOS, 0, MAKELONG(JoyGetTrim(true),0)); + SendDlgItemMessage(window, IDC_SPIN_YTRIM, UDM_SETPOS, 0, MAKELONG(JoyGetTrim(false),0)); + +// CheckDlgButton(window, IDC_KEYB_BUFFER_ENABLE, KeybGetBufferMode() ? BST_CHECKED : BST_UNCHECKED); + } + } + + return 0; +} + +//=========================================================================== + +static void SoundDlg_OK(HWND window, BOOL afterclose, UINT uNewSoundcardType) +{ + DWORD newsoundtype = (DWORD)SendDlgItemMessage(window,IDC_SOUNDTYPE,CB_GETCURSEL,0,0); + + DWORD dwSpkrVolume = SendDlgItemMessage(window,IDC_SPKR_VOLUME,TBM_GETPOS,0,0); + DWORD dwMBVolume = SendDlgItemMessage(window,IDC_MB_VOLUME,TBM_GETPOS,0,0); + + if (!SpkrSetEmulationType(window,newsoundtype)) + { + afterclose = 0; + return; + } + + // NB. Volume: 0=Loudest, VOLUME_MAX=Silence + SpkrSetVolume(dwSpkrVolume, VOLUME_MAX); + MB_SetVolume(dwMBVolume, VOLUME_MAX); + + MB_SetSoundcardType((eSOUNDCARDTYPE)uNewSoundcardType); + + SAVE(TEXT("Sound Emulation") ,soundtype); + SAVE(TEXT(REGVALUE_SPKR_VOLUME),SpkrGetVolume()); + SAVE(TEXT(REGVALUE_MB_VOLUME),MB_GetVolume()); + SAVE(TEXT(REGVALUE_SOUNDCARD_TYPE),(DWORD)MB_GetSoundcardType()); + + // + + if (afterclose) + PostMessage(framewindow,afterclose,0,0); +} + +static void SoundDlg_CANCEL(HWND window) +{ +} + +//--------------------------------------------------------------------------- + +static BOOL CALLBACK SoundDlgProc (HWND window, + UINT message, + WPARAM wparam, + LPARAM lparam) +{ + static BOOL afterclose = 0; + static UINT uNewSoundcardType = SC_UNINIT; + + switch (message) + { + case WM_NOTIFY: + { + // Property Sheet notifications + + switch (((LPPSHNOTIFY)lparam)->hdr.code) + { + case PSN_KILLACTIVE: + SetWindowLong(window, DWL_MSGRESULT, FALSE); // Changes are valid + break; + case PSN_APPLY: + SetWindowLong(window, DWL_MSGRESULT, PSNRET_NOERROR); // Changes are valid + SoundDlg_OK(window, afterclose, uNewSoundcardType); + break; + case PSN_QUERYCANCEL: + // Can use this to ask user to confirm cancel + break; + case PSN_RESET: + SoundDlg_CANCEL(window); + break; + } + } + break; + + case WM_COMMAND: + switch (LOWORD(wparam)) + { + case IDC_SPKR_VOLUME: + break; + case IDC_MB_VOLUME: + break; + case IDC_MB_ENABLE: + uNewSoundcardType = SC_MOCKINGBOARD; + EnableWindow(GetDlgItem(window, IDC_MB_VOLUME), TRUE); + break; + case IDC_PHASOR_ENABLE: + uNewSoundcardType = SC_PHASOR; + EnableWindow(GetDlgItem(window, IDC_MB_VOLUME), TRUE); + break; + case IDC_SOUNDCARD_DISABLE: + uNewSoundcardType = SC_NONE; + EnableWindow(GetDlgItem(window, IDC_MB_VOLUME), FALSE); + break; + } + break; + + case WM_INITDIALOG: + { + g_nLastPage = PG_SOUND; + + FillComboBox(window,IDC_SOUNDTYPE,soundchoices,soundtype); + + SendDlgItemMessage(window,IDC_SPKR_VOLUME,TBM_SETRANGE,1,MAKELONG(VOLUME_MIN,VOLUME_MAX)); + SendDlgItemMessage(window,IDC_SPKR_VOLUME,TBM_SETPAGESIZE,0,10); + SendDlgItemMessage(window,IDC_SPKR_VOLUME,TBM_SETTICFREQ,10,0); + SendDlgItemMessage(window,IDC_SPKR_VOLUME,TBM_SETPOS,1,SpkrGetVolume()); + + SendDlgItemMessage(window,IDC_MB_VOLUME,TBM_SETRANGE,1,MAKELONG(VOLUME_MIN,VOLUME_MAX)); + SendDlgItemMessage(window,IDC_MB_VOLUME,TBM_SETPAGESIZE,0,10); + SendDlgItemMessage(window,IDC_MB_VOLUME,TBM_SETTICFREQ,10,0); + SendDlgItemMessage(window,IDC_MB_VOLUME,TBM_SETPOS,1,MB_GetVolume()); + + int nID; + eSOUNDCARDTYPE SoundcardType = MB_GetSoundcardType(); + if(SoundcardType == SC_MOCKINGBOARD) + nID = IDC_MB_ENABLE; + else if(SoundcardType == SC_PHASOR) + nID = IDC_PHASOR_ENABLE; + else + nID = IDC_SOUNDCARD_DISABLE; + + CheckRadioButton(window, IDC_MB_ENABLE, IDC_SOUNDCARD_DISABLE, nID); + + afterclose = 0; + } + } + + return 0; +} + +//=========================================================================== + +static char g_szNewDirectory[MAX_PATH]; +static char g_szNewFilename[MAX_PATH]; + +static void SaveStateUpdate() +{ + Snapshot_SetFilename(g_szNewFilename); + + RegSaveString(TEXT("Configuration"),REGVALUE_SAVESTATE_FILENAME,1,Snapshot_GetFilename()); + + if(g_szNewDirectory[0]) + RegSaveString(TEXT("Preferences"),TEXT("Starting Directory"),1,g_szNewDirectory); +} + +static void SaveStateDlg_OK(HWND window, BOOL afterclose) +{ + char szFilename[MAX_PATH]; + + memset(szFilename, 0, sizeof(szFilename)); + * ((USHORT*) szFilename) = sizeof(szFilename); + + UINT nLineLength = SendDlgItemMessage(window,IDC_SAVESTATE_FILENAME,EM_LINELENGTH,0,0); + + SendDlgItemMessage(window,IDC_SAVESTATE_FILENAME,EM_GETLINE,0,(LPARAM)szFilename); + + nLineLength = nLineLength > sizeof(szFilename)-1 ? sizeof(szFilename)-1 : nLineLength; + szFilename[nLineLength] = 0x00; + + SaveStateUpdate(); + + g_bSaveStateOnExit = IsDlgButtonChecked(window, IDC_SAVESTATE_ON_EXIT) ? true : false; + + SAVE(TEXT(REGVALUE_SAVE_STATE_ON_EXIT), g_bSaveStateOnExit ? 1 : 0); + + // + + if (afterclose) + PostMessage(framewindow,afterclose,0,0); +} + +static void SaveStateDlg_CANCEL(HWND window) +{ +} + +//--------------------------------------------------------------------------- + +static int SaveStateSelectImage(HWND hWindow, TCHAR* pszTitle, bool bSave) +{ + TCHAR szDirectory[MAX_PATH] = TEXT(""); + TCHAR szFilename[MAX_PATH]; + + strcpy(szFilename, Snapshot_GetFilename()); + + RegLoadString(TEXT("Preferences"),TEXT("Starting Directory"),1,szDirectory,MAX_PATH); + + + // + + OPENFILENAME ofn; + ZeroMemory(&ofn,sizeof(OPENFILENAME)); + + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = hWindow; + ofn.hInstance = instance; + ofn.lpstrFilter = TEXT("Save State files (*.aws)\0*.aws\0") + TEXT("All Files\0*.*\0"); + ofn.lpstrFile = szFilename; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrInitialDir = szDirectory; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; + ofn.lpstrTitle = pszTitle; + + int nRes = bSave ? GetSaveFileName(&ofn) : GetOpenFileName(&ofn); + + if(nRes) + { + strcpy(g_szNewFilename, &szFilename[ofn.nFileOffset]); + + szFilename[ofn.nFileOffset] = 0; + if (_tcsicmp(szDirectory, szFilename)) + strcpy(g_szNewDirectory, szFilename); + } + + return nRes; +} + +//--------------------------------------------------------------------------- + +static BOOL CALLBACK SaveStateDlgProc (HWND window, + UINT message, + WPARAM wparam, + LPARAM lparam) +{ + static BOOL afterclose = 0; + + switch (message) + { + case WM_NOTIFY: + { + // Property Sheet notifications + + switch (((LPPSHNOTIFY)lparam)->hdr.code) + { + case PSN_KILLACTIVE: + SetWindowLong(window, DWL_MSGRESULT, FALSE); // Changes are valid + break; + case PSN_APPLY: + SetWindowLong(window, DWL_MSGRESULT, PSNRET_NOERROR); // Changes are valid + SaveStateDlg_OK(window, afterclose); + break; + case PSN_QUERYCANCEL: + // Can use this to ask user to confirm cancel + break; + case PSN_RESET: + SaveStateDlg_CANCEL(window); + break; + } + } + break; + + case WM_COMMAND: + switch (LOWORD(wparam)) + { + case IDC_SAVESTATE_FILENAME: + break; + case IDC_SAVESTATE_BROWSE: + if(SaveStateSelectImage(window, TEXT("Select Save State file"), true)) + SendDlgItemMessage(window, IDC_SAVESTATE_FILENAME, WM_SETTEXT, 0, (LPARAM) g_szNewFilename); + break; + case IDC_SAVESTATE_ON_EXIT: + break; + case IDC_SAVESTATE: + afterclose = WM_USER_SAVESTATE; + break; + case IDC_LOADSTATE: + afterclose = WM_USER_LOADSTATE; + break; + } + break; + + case WM_INITDIALOG: + { + g_nLastPage = PG_SAVESTATE; + + SendDlgItemMessage(window,IDC_SAVESTATE_FILENAME,WM_SETTEXT,0,(LPARAM)Snapshot_GetFilename()); + + CheckDlgButton(window, IDC_SAVESTATE_ON_EXIT, g_bSaveStateOnExit ? BST_CHECKED : BST_UNCHECKED); + + g_szNewDirectory[0] = 0x00; + + afterclose = 0; + } + } + + return 0; +} + +//=========================================================================== + +static void EnableHDD(HWND window, BOOL bEnable) +{ + EnableWindow(GetDlgItem(window, IDC_HDD1), bEnable); + EnableWindow(GetDlgItem(window, IDC_EDIT_HDD1), bEnable); + + EnableWindow(GetDlgItem(window, IDC_HDD2), bEnable); + EnableWindow(GetDlgItem(window, IDC_EDIT_HDD2), bEnable); +} + +//--------------------------------------------------------------------------- + +static void DiskDlg_OK(HWND window, BOOL afterclose) +{ + BOOL newdisktype = (BOOL) SendDlgItemMessage(window,IDC_DISKTYPE,CB_GETCURSEL,0,0); + + if (newdisktype != enhancedisk) + { + if (MessageBox(window, + TEXT("You have changed the disk speed setting. ") + TEXT("This change will not take effect ") + TEXT("until the next time you restart the ") + TEXT("emulator.\n\n") + TEXT("Would you like to restart the emulator now?"), + TEXT("Configuration"), + MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDYES) + afterclose = WM_USER_RESTART; + } + + bool bHDDIsEnabled = IsDlgButtonChecked(window, IDC_HDD_ENABLE) ? true : false; + HD_SetEnabled(bHDDIsEnabled); + + SAVE(TEXT("Enhance Disk Speed"),newdisktype); + SAVE(TEXT(REGVALUE_HDD_ENABLED), bHDDIsEnabled ? 1 : 0); + RegSaveString(TEXT("Configuration"), TEXT(REGVALUE_HDD_IMAGE1), 1, HD_GetFullName(0)); + RegSaveString(TEXT("Configuration"), TEXT(REGVALUE_HDD_IMAGE2), 1, HD_GetFullName(1)); + + // + + if (afterclose) + PostMessage(framewindow,afterclose,0,0); +} + +static void DiskDlg_CANCEL(HWND window) +{ +} + +//--------------------------------------------------------------------------- + +static BOOL CALLBACK DiskDlgProc (HWND window, + UINT message, + WPARAM wparam, + LPARAM lparam) +{ + static BOOL afterclose = 0; + + switch (message) + { + case WM_NOTIFY: + { + // Property Sheet notifications + + switch (((LPPSHNOTIFY)lparam)->hdr.code) + { + case PSN_KILLACTIVE: + SetWindowLong(window, DWL_MSGRESULT, FALSE); // Changes are valid + break; + case PSN_APPLY: + SetWindowLong(window, DWL_MSGRESULT, PSNRET_NOERROR); // Changes are valid + DiskDlg_OK(window, afterclose); + break; + case PSN_QUERYCANCEL: + // Can use this to ask user to confirm cancel + break; + case PSN_RESET: + DiskDlg_CANCEL(window); + break; + } + } + break; + + case WM_COMMAND: + switch (LOWORD(wparam)) + { + case IDC_DISK1: + DiskSelect(0); + SendDlgItemMessage(window,IDC_EDIT_DISK1,WM_SETTEXT,0,(LPARAM)DiskGetFullName(0)); + break; + case IDC_DISK2: + DiskSelect(1); + SendDlgItemMessage(window,IDC_EDIT_DISK2,WM_SETTEXT,0,(LPARAM)DiskGetFullName(1)); + break; + case IDC_HDD1: + if(IsDlgButtonChecked(window, IDC_HDD_ENABLE)) + { + HD_Select(0); + SendDlgItemMessage(window,IDC_EDIT_HDD1,WM_SETTEXT,0,(LPARAM)HD_GetFullName(0)); + } + break; + case IDC_HDD2: + if(IsDlgButtonChecked(window, IDC_HDD_ENABLE)) + { + HD_Select(1); + SendDlgItemMessage(window,IDC_EDIT_HDD2,WM_SETTEXT,0,(LPARAM)HD_GetFullName(1)); + } + break; + case IDC_HDD_ENABLE: + EnableHDD(window, IsDlgButtonChecked(window, IDC_HDD_ENABLE)); + break; + } + break; + + case WM_INITDIALOG: + { + g_nLastPage = PG_DISK; + + FillComboBox(window,IDC_DISKTYPE,discchoices,enhancedisk); + + SendDlgItemMessage(window,IDC_EDIT_DISK1,WM_SETTEXT,0,(LPARAM)DiskGetFullName(0)); + SendDlgItemMessage(window,IDC_EDIT_DISK2,WM_SETTEXT,0,(LPARAM)DiskGetFullName(1)); + + SendDlgItemMessage(window,IDC_EDIT_HDD1,WM_SETTEXT,0,(LPARAM)HD_GetFullName(0)); + SendDlgItemMessage(window,IDC_EDIT_HDD2,WM_SETTEXT,0,(LPARAM)HD_GetFullName(1)); + + CheckDlgButton(window, IDC_HDD_ENABLE, HD_CardIsEnabled() ? BST_CHECKED : BST_UNCHECKED); + + EnableHDD(window, IsDlgButtonChecked(window, IDC_HDD_ENABLE)); + + afterclose = 0; + } + } + + return 0; +} + +//=========================================================================== + +void PSP_Init() +{ + PROPSHEETPAGE PropSheetPages[PG_NUM_SHEETS]; + + PropSheetPages[PG_CONFIG].dwSize = sizeof(PROPSHEETPAGE); + PropSheetPages[PG_CONFIG].dwFlags = PSP_DEFAULT; + PropSheetPages[PG_CONFIG].hInstance = instance; + PropSheetPages[PG_CONFIG].pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGE_CONFIG); + PropSheetPages[PG_CONFIG].pfnDlgProc = (DLGPROC)ConfigDlgProc; + + PropSheetPages[PG_INPUT].dwSize = sizeof(PROPSHEETPAGE); + PropSheetPages[PG_INPUT].dwFlags = PSP_DEFAULT; + PropSheetPages[PG_INPUT].hInstance = instance; + PropSheetPages[PG_INPUT].pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGE_INPUT); + PropSheetPages[PG_INPUT].pfnDlgProc = (DLGPROC)InputDlgProc; + + PropSheetPages[PG_SOUND].dwSize = sizeof(PROPSHEETPAGE); + PropSheetPages[PG_SOUND].dwFlags = PSP_DEFAULT; + PropSheetPages[PG_SOUND].hInstance = instance; + PropSheetPages[PG_SOUND].pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGE_SOUND); + PropSheetPages[PG_SOUND].pfnDlgProc = (DLGPROC)SoundDlgProc; + + PropSheetPages[PG_SAVESTATE].dwSize = sizeof(PROPSHEETPAGE); + PropSheetPages[PG_SAVESTATE].dwFlags = PSP_DEFAULT; + PropSheetPages[PG_SAVESTATE].hInstance = instance; + PropSheetPages[PG_SAVESTATE].pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGE_SAVESTATE); + PropSheetPages[PG_SAVESTATE].pfnDlgProc = (DLGPROC)SaveStateDlgProc; + + PropSheetPages[PG_DISK].dwSize = sizeof(PROPSHEETPAGE); + PropSheetPages[PG_DISK].dwFlags = PSP_DEFAULT; + PropSheetPages[PG_DISK].hInstance = instance; + PropSheetPages[PG_DISK].pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGE_DISK); + PropSheetPages[PG_DISK].pfnDlgProc = (DLGPROC)DiskDlgProc; + + PROPSHEETHEADER PropSheetHeader; + + PropSheetHeader.dwSize = sizeof(PROPSHEETHEADER); + PropSheetHeader.dwFlags = PSH_NOAPPLYNOW | /* PSH_NOCONTEXTHELP | */ PSH_PROPSHEETPAGE; + PropSheetHeader.hwndParent = framewindow; + PropSheetHeader.pszCaption = "AppleWin Configuration"; + PropSheetHeader.nPages = PG_NUM_SHEETS; + PropSheetHeader.nStartPage = g_nLastPage; + PropSheetHeader.ppsp = PropSheetPages; + + int i = PropertySheet(&PropSheetHeader); // Result: 0=Cancel, 1=OK +} + +DWORD PSP_GetVolumeMax() +{ + return VOLUME_MAX; +} + +bool PSP_SaveStateSelectImage(HWND hWindow, bool bSave) +{ + g_szNewDirectory[0] = 0x00; + + if(SaveStateSelectImage(hWindow, bSave ? TEXT("Select Save State file") + : TEXT("Select Load State file"), bSave)) + { + SaveStateUpdate(); + return true; + } + else + { + return false; // Cancelled + } +} diff --git a/AppleWin/source/PropertySheetPage.h b/AppleWin/source/PropertySheetPage.h new file mode 100644 index 00000000..42d4d78d --- /dev/null +++ b/AppleWin/source/PropertySheetPage.h @@ -0,0 +1,5 @@ +#pragma once + +void PSP_Init(); +DWORD PSP_GetVolumeMax(); +bool PSP_SaveStateSelectImage(HWND hWindow, bool bSave); diff --git a/AppleWin/source/Registry.cpp b/AppleWin/source/Registry.cpp new file mode 100644 index 00000000..052f2876 --- /dev/null +++ b/AppleWin/source/Registry.cpp @@ -0,0 +1,99 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Registry module + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop + +//=========================================================================== +BOOL RegLoadString (LPCTSTR section, LPCTSTR key, BOOL peruser, + LPTSTR buffer, DWORD chars) { + BOOL success = 0; + TCHAR fullkeyname[256]; + wsprintf(fullkeyname, + TEXT("Software\\AppleWin\\CurrentVersion\\%s"), + (LPCTSTR)section); + HKEY keyhandle; + if (!RegOpenKeyEx((peruser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE), + fullkeyname, + 0, + KEY_READ, + &keyhandle)) { + DWORD type; + DWORD size = chars; + success = (!RegQueryValueEx(keyhandle,key,0,&type,(LPBYTE)buffer,&size)) && + size; + RegCloseKey(keyhandle); + } + return success; +} + +//=========================================================================== +BOOL RegLoadValue (LPCTSTR section, LPCTSTR key, BOOL peruser, DWORD *value) { + if (!value) + return 0; + TCHAR buffer[32] = TEXT(""); + if (!RegLoadString(section,key,peruser,buffer,32)) + return 0; + buffer[31] = 0; + *value = (DWORD)_ttoi(buffer); + return 1; +} + +//=========================================================================== +void RegSaveString (LPCTSTR section, LPCTSTR key, BOOL peruser, LPCTSTR buffer) { + TCHAR fullkeyname[256]; + wsprintf(fullkeyname, + TEXT("Software\\AppleWin\\CurrentVersion\\%s"), + (LPCTSTR)section); + HKEY keyhandle; + DWORD disposition; + if (!RegCreateKeyEx((peruser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE), + fullkeyname, + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_READ | KEY_WRITE, + (LPSECURITY_ATTRIBUTES)NULL, + &keyhandle, + &disposition)) { + RegSetValueEx(keyhandle, + key, + 0, + REG_SZ, + (CONST BYTE *)buffer, + (_tcslen(buffer)+1)*sizeof(TCHAR)); + RegCloseKey(keyhandle); + } +} + +//=========================================================================== +void RegSaveValue (LPCTSTR section, LPCTSTR key, BOOL peruser, DWORD value) { + TCHAR buffer[32] = TEXT(""); + _ultot(value,buffer,10); + RegSaveString(section,key,peruser,buffer); +} diff --git a/AppleWin/source/Registry.h b/AppleWin/source/Registry.h new file mode 100644 index 00000000..a1ab9120 --- /dev/null +++ b/AppleWin/source/Registry.h @@ -0,0 +1,6 @@ +#pragma once + +BOOL RegLoadString (LPCTSTR,LPCTSTR,BOOL,LPTSTR,DWORD); +BOOL RegLoadValue (LPCTSTR,LPCTSTR,BOOL,DWORD *); +void RegSaveString (LPCTSTR,LPCTSTR,BOOL,LPCTSTR); +void RegSaveValue (LPCTSTR,LPCTSTR,BOOL,DWORD); diff --git a/AppleWin/source/Riff.cpp b/AppleWin/source/Riff.cpp new file mode 100644 index 00000000..8f763083 --- /dev/null +++ b/AppleWin/source/Riff.cpp @@ -0,0 +1,139 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: RIFF funcs + * + * Author: Various + */ + +#include +#include "riff.h" + +static HANDLE g_hRiffFile = INVALID_HANDLE_VALUE; +static DWORD dwTotalOffset; +static DWORD dwDataOffset; +static DWORD g_dwTotalNumberOfBytesWritten = 0; +static unsigned int g_NumChannels = 2; + +int RiffInitWriteFile(char* pszFile, unsigned int sample_rate, unsigned int NumChannels) +{ + g_hRiffFile = CreateFile(pszFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); + + if(g_hRiffFile == INVALID_HANDLE_VALUE) + return 1; + + g_NumChannels = NumChannels; + + // + + UINT32 temp32; + UINT16 temp16; + + DWORD dwNumberOfBytesWritten; + + WriteFile(g_hRiffFile, "RIFF", 4, &dwNumberOfBytesWritten, NULL); + + temp32 = 0; // total size + dwTotalOffset = SetFilePointer(g_hRiffFile, 0, NULL, FILE_CURRENT); + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + WriteFile(g_hRiffFile, "WAVE", 4, &dwNumberOfBytesWritten, NULL); + + // + + WriteFile(g_hRiffFile, "fmt ", 4, &dwNumberOfBytesWritten, NULL); + + temp32 = 16; // format length + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + temp16 = 1; // PCM format + WriteFile(g_hRiffFile, &temp16, 2, &dwNumberOfBytesWritten, NULL); + + temp16 = NumChannels; // channels + WriteFile(g_hRiffFile, &temp16, 2, &dwNumberOfBytesWritten, NULL); + + temp32 = sample_rate; // sample rate + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + temp32 = sample_rate * 2 * NumChannels; // bytes/second + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + temp16 = 2 * NumChannels; // block align + WriteFile(g_hRiffFile, &temp16, 2, &dwNumberOfBytesWritten, NULL); + + temp16 = 16; // bits/sample + WriteFile(g_hRiffFile, &temp16, 2, &dwNumberOfBytesWritten, NULL); + + // + + WriteFile(g_hRiffFile, "data", 4, &dwNumberOfBytesWritten, NULL); + + temp32 = 0; // data length + dwDataOffset = SetFilePointer(g_hRiffFile, 0, NULL, FILE_CURRENT); + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + return 0; +} + +int RiffFinishWriteFile() +{ + if(g_hRiffFile == INVALID_HANDLE_VALUE) + return 1; + + // + + UINT32 temp32; + + DWORD dwNumberOfBytesWritten; + + temp32 = g_dwTotalNumberOfBytesWritten - (dwTotalOffset + 4); + SetFilePointer(g_hRiffFile, dwTotalOffset, NULL, FILE_BEGIN); + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + temp32 = g_dwTotalNumberOfBytesWritten - (dwDataOffset + 4); + SetFilePointer(g_hRiffFile, dwDataOffset, NULL, FILE_BEGIN); + WriteFile(g_hRiffFile, &temp32, 4, &dwNumberOfBytesWritten, NULL); + + return CloseHandle(g_hRiffFile); +} + +int RiffPutSamples(short* buf, unsigned int uSamples) +{ + if(g_hRiffFile == INVALID_HANDLE_VALUE) + return 1; + + // + + DWORD dwNumberOfBytesWritten; + + BOOL bRes = WriteFile( + g_hRiffFile, + buf, + uSamples * sizeof(short) * g_NumChannels, + &dwNumberOfBytesWritten, + NULL); + + g_dwTotalNumberOfBytesWritten += dwNumberOfBytesWritten; + + return 0; +} diff --git a/AppleWin/source/Riff.h b/AppleWin/source/Riff.h new file mode 100644 index 00000000..d1d44f8a --- /dev/null +++ b/AppleWin/source/Riff.h @@ -0,0 +1,5 @@ +#pragma once + +int RiffInitWriteFile(char* pszFile, unsigned int sample_rate, unsigned int NumChannels); +int RiffFinishWriteFile(); +int RiffPutSamples(short* buf, unsigned int uSamples); diff --git a/AppleWin/source/SSI263Phonemes.h b/AppleWin/source/SSI263Phonemes.h new file mode 100644 index 00000000..2ae5cfcd --- /dev/null +++ b/AppleWin/source/SSI263Phonemes.h @@ -0,0 +1,19615 @@ +typedef struct +{ + unsigned int nOffset; + unsigned int nLength; +} PHONEME_INFO, *PPHONEME_INFO; + +static const PHONEME_INFO g_nPhonemeInfo[62] = +{ + {0x00000000,0x00000A60},{0x00000A60,0x00000A4C}, + {0x000014AC,0x00000A22},{0x00001ECE,0x00000A93}, + {0x00002961,0x00000ABA},{0x0000341B,0x00000A46}, + {0x00003E61,0x00000A54},{0x000048B5,0x00000C83}, + {0x00005538,0x00000A4F},{0x00005F87,0x00000A95}, + {0x00006A1C,0x00000A21},{0x0000743D,0x00000A11}, + {0x00007E4E,0x000009F4},{0x00008842,0x00000A91}, + {0x000092D3,0x00000A3C},{0x00009D0F,0x00000A5F}, + {0x0000A76E,0x00000AAB},{0x0000B219,0x00000A4F}, + {0x0000BC68,0x00000AAF},{0x0000C717,0x00000A74}, + {0x0000D18B,0x00000A2E},{0x0000DBB9,0x00000A49}, + {0x0000E602,0x00000A72},{0x0000F074,0x00000A5D}, + {0x0000FAD1,0x000009FB},{0x000104CC,0x00000A12}, + {0x00010EDE,0x00000A4B},{0x00011929,0x00000A5A}, + {0x00012383,0x00000A67},{0x00012DEA,0x00000A23}, + {0x0001380D,0x000009D0},{0x000141DD,0x00000A61}, + {0x00014C3E,0x00000A3A},{0x00015678,0x00000A31}, + {0x000160A9,0x000003F4},{0x0001649D,0x00000383}, + {0x00016820,0x00000A83},{0x000172A3,0x00000380}, + {0x00017623,0x00000370},{0x00017993,0x00000389}, + {0x00017D1C,0x00000A0F},{0x0001872B,0x00000C7F}, + {0x000193AA,0x00000A37},{0x00019DE1,0x00000D2D}, + {0x0001AB0E,0x000009EB},{0x0001B4F9,0x00000A3A}, + {0x0001BF33,0x00000A2B},{0x0001C95E,0x00000A58}, + {0x0001D3B6,0x00000A52},{0x0001DE08,0x00000A28}, + {0x0001E830,0x00000A60},{0x0001F290,0x00000A0E}, + {0x0001FC9E,0x00000AA0},{0x0002073E,0x00000A65}, + {0x000211A3,0x00000A4E},{0x00021BF1,0x00000AAB}, + {0x0002269C,0x00000A53},{0x000230EF,0x00000A22}, + {0x00023B11,0x00000A18},{0x00024529,0x00000A53}, + {0x00024F7C,0x00000A04},{0x00025980,0x00000A16}, +}; + +static const unsigned short g_nPhonemeData[156566] = +{ + 0xFE64,0xFE8A,0xFD76,0xFCAF,0xFCBA,0xFCF5,0xFD5F,0xFD8C, + 0xFDE2,0xFDBF,0xFDCE,0xFD1A,0xFCB4,0xFCCD,0xFD67,0xFDC8, + 0xFE24,0xFE37,0xFE1E,0xFDC7,0xFD49,0xFD59,0xFD92,0xFDFB, + 0xFE30,0xFE41,0xFDC7,0xFD87,0xFD75,0xFD6F,0xFD43,0xFDDC, + 0xFE1E,0xFE39,0xFDE3,0xFD96,0xFD85,0xFD61,0xFD85,0xFE01, + 0xFE42,0xFE31,0xFE52,0xFE18,0xFD8A,0xFD71,0xFDF0,0xFE49, + 0xFE8A,0xFE7C,0xFE0B,0xFD9E,0xFD76,0xFDB0,0xFE3E,0xFE2F, + 0xFE39,0xFE7D,0xFEA1,0xFE31,0xFE2B,0xFED8,0xFFF0,0x0065, + 0x02D7,0x01F1,0x005B,0x014E,0x0202,0x0319,0x0443,0x054D, + 0x05EE,0x0751,0x08A7,0x091B,0x07EC,0x0701,0x0681,0x069A, + 0x06C5,0x06D5,0x0679,0x057E,0x04F2,0x049E,0x04A6,0x0515, + 0x0638,0x0666,0x05AA,0x0506,0x0554,0x063F,0x065A,0x0673, + 0x06F3,0x07E8,0x0910,0x09AE,0x09E3,0x0A35,0x0A6B,0x0B1B, + 0x0C4C,0x0D7D,0x0E89,0x0ED6,0x0E66,0x0E60,0x0F12,0x1027, + 0x10B1,0x10A8,0x106F,0x11DF,0x1356,0x1472,0x148F,0x1400, + 0x13A0,0x1341,0x13E7,0x15AF,0x1756,0x1799,0x16E7,0x154A, + 0x1324,0x12E0,0x13AC,0x1438,0x153C,0x1623,0x15D4,0x14E2, + 0x13E9,0x13B5,0x1427,0x14C9,0x1593,0x15AE,0x14C0,0x1451, + 0x1342,0x131F,0x1445,0x149C,0x14EF,0x1573,0x146E,0x1294, + 0x1163,0x118B,0x12CF,0x13C7,0x13FD,0x1347,0x128B,0x119F, + 0x10AA,0x0FB1,0x0F20,0x0FC2,0x114E,0x1256,0x11D0,0x0F89, + 0x0D8B,0x0C34,0x0C62,0x0F0C,0x0F87,0x0ECF,0x0E17,0x0C94, + 0x0AE3,0x0A5F,0x0A70,0x0AA7,0x0AE1,0x0ADE,0x0AEC,0x0B6F, + 0x0B3C,0x0A08,0x092E,0x0852,0x0802,0x0855,0x08F4,0x0914, + 0x084F,0x06EA,0x0527,0x041A,0x0432,0x0459,0x048D,0x03DC, + 0x0317,0x0340,0x032F,0x02AE,0x0044,0xFCAC,0xF6E4,0xF020, + 0xE768,0xDD48,0xD48B,0xD1C0,0xD8D8,0xE8ED,0xF9F8,0x0177, + 0xF8AB,0xE3B0,0xCF3D,0xC837,0xD3CE,0xEDA5,0x0916,0x19A9, + 0x1A87,0x0E3F,0xFD82,0xF0F1,0xEF06,0xFAD0,0x0ED8,0x2332, + 0x2F87,0x2F6E,0x22F6,0x11CF,0x04C3,0x016F,0x0883,0x1464, + 0x1BFA,0x1C21,0x158C,0x0C12,0x0298,0xFA88,0xF5CA,0xF399, + 0xF11C,0xEF77,0xF069,0xEE90,0xED50,0xEB1F,0xE74D,0xE27E, + 0xDDA9,0xD9BB,0xD73E,0xD88A,0xDE49,0xE684,0xEDBE,0xEFEB, + 0xEC01,0xE465,0xDDE7,0xDE22,0xE62F,0xF282,0xFE8E,0x04D4, + 0x04AB,0xFF6E,0xF95A,0xF5BE,0xF695,0xFB0D,0x02C4,0x0A76, + 0x0EC6,0x0DDD,0x06B3,0xFD54,0xF6A4,0xF51C,0xF782,0xFB4E, + 0xFDC8,0xFC78,0xF778,0xF161,0xECC8,0xEA32,0xE770,0xE52D, + 0xE30F,0xE28A,0xE392,0xE4B3,0xE4F6,0xE309,0xE029,0xDDA5, + 0xDCF1,0xDE50,0xE124,0xE412,0xE6C0,0xE986,0xEE1C,0xF064, + 0xF000,0xEF0E,0xEE0E,0xEEF9,0xF24F,0xF7FA,0xFD84,0x0074, + 0xFFB9,0xFCD2,0xFA42,0xF9C9,0xFA80,0xFBF5,0xFD65,0xFEE1, + 0xFFB1,0xFE97,0xFBD6,0xF866,0xF42A,0xF136,0xF0ED,0xF249, + 0xF33C,0xF233,0xEEDA,0xEB64,0xE924,0xE850,0xE7E4,0xE775, + 0xE6C6,0xE727,0xE771,0xE7B1,0xE8AF,0xE9CA,0xEA62,0xE978, + 0xE842,0xE92D,0xEB9F,0xED78,0xEFC9,0xF329,0xF56E,0xF621, + 0xF4E7,0xF3EF,0xF444,0xF6B2,0xF984,0xFBDF,0xFC84,0xFC47, + 0xFB14,0xF8A6,0xF66C,0xF6F5,0xF892,0xFA8A,0xFAE8,0xF97D, + 0xF6E3,0xF405,0xF274,0xF2C2,0xF335,0xF2EB,0xF1E5,0xF09A, + 0xEF7C,0xEF2A,0xEEB8,0xED9D,0xECF0,0xEDA7,0xEEE4,0xEF00, + 0xEE34,0xEDF1,0xEE35,0xEE7E,0xEF8A,0xF1A6,0xF3C5,0xF407, + 0xF2C2,0xF221,0xF3F2,0xF74C,0xF97A,0xFA3A,0xFA4E,0xFA86, + 0xFB6E,0xFBED,0xFC59,0xFC92,0xFD04,0xFDB5,0xFEA6,0xFF18, + 0xFEDC,0xFD30,0xFABA,0xF9BC,0xFAF6,0xFCA5,0xFD04,0xFA89, + 0xF6FA,0xF50A,0xF54C,0xF664,0xF7D2,0xF86A,0xF6F2,0xF571, + 0xF511,0xF21A,0xF36F,0xF4EA,0xF573,0xF62F,0xF6D7,0xF706, + 0xF683,0xF57A,0xF5AE,0xF79A,0xFA38,0xFB4E,0xFA68,0xF9E9, + 0xF8B6,0xF464,0xEB03,0xD941,0xC424,0xBF0A,0xC00D,0xC021, + 0xC0C3,0xDCEE,0x027D,0x0AC3,0xEDCA,0xC500,0xBFF6,0xC260, + 0xC0F4,0xEF2E,0x2FA5,0x3DAF,0x3CCC,0x25B3,0xF9C7,0xE25A, + 0xE889,0x0E86,0x3899,0x3F57,0x3EC7,0x3EB3,0x3F3D,0x2C1D, + 0x1486,0x1878,0x30DA,0x401A,0x3E8F,0x3F4F,0x3CED,0x285C, + 0x15AA,0x0BFB,0x059F,0xFEDB,0xF760,0xF1B5,0xF06D,0xF263, + 0xF2EB,0xF0CA,0xE7D5,0xD860,0xC6C7,0xBF8F,0xBF5D,0xC562, + 0xDC31,0xF39C,0x0046,0xFCA8,0xEAA8,0xD4DC,0xC933,0xD229, + 0xEE3B,0x10CB,0x29FA,0x3199,0x2A13,0x192F,0x081B,0x0197, + 0x09A6,0x1CFB,0x3331,0x3F0C,0x3F30,0x3999,0x279F,0x1632, + 0x0C6E,0x0D48,0x14B5,0x1B87,0x1C31,0x15FE,0x0C85,0x02AD, + 0xF9E7,0xF226,0xEB44,0xE69D,0xE256,0xE08E,0xE2B1,0xE6EA, + 0xEA1C,0xE90A,0xE3A1,0xDC29,0xD54D,0xD2FA,0xD7DF,0xE396, + 0xF1D3,0xFDB9,0x034E,0x009C,0xF884,0xF15C,0xF01A,0xF800, + 0x06C2,0x168F,0x2155,0x24B6,0x1FFA,0x164B,0x0D5C,0x09DB, + 0x0D5B,0x15BB,0x1F93,0x2529,0x23FC,0x1BC0,0x1030,0x0556, + 0xFF7B,0xFEA0,0x005D,0x02A5,0x0331,0x008D,0xFB18,0xF4C7, + 0xEE1E,0xE94F,0xE692,0xE547,0xE654,0xE8C2,0xEB68,0xED42, + 0xEDEB,0xED8C,0xECB2,0xEB2B,0xEA03,0xEB36,0xEFD8,0xF779, + 0xFFBA,0x05AC,0x08BF,0x07AC,0x0486,0x01AA,0x01CA,0x065A, + 0x0E04,0x150D,0x1966,0x1988,0x156B,0x105E,0x0C60,0x0A8A, + 0x0931,0x0D28,0x0F96,0x0F89,0x0E38,0x0965,0x02FF,0xFD25, + 0xF9C3,0xF8E6,0xF912,0xF8C0,0xF7D7,0xF63A,0xF4B4,0xF2D9, + 0xF0B9,0xEE77,0xED00,0xEC62,0xED95,0xF015,0xF2EB,0xF514, + 0xF668,0xF70B,0xF718,0xF77C,0xF854,0xFA16,0xFD2B,0x00D1, + 0x0472,0x07C5,0x0918,0x0873,0x071D,0x06E6,0x07E1,0x096E, + 0x0BAC,0x0D6D,0x0DD5,0x0BFD,0x0A54,0x08E9,0x078C,0x0656, + 0x049B,0x0313,0x0254,0x0204,0x00A7,0xFE66,0xFC25,0xFA64, + 0xF901,0xF85E,0xF81D,0xF70E,0xF580,0xF584,0xF7F1,0xF98F, + 0xFA6F,0xF9A0,0xF731,0xF52A,0xF55F,0xF7FC,0xFBA2,0xFED3, + 0xFFC1,0xFFC6,0xFF89,0xFD33,0xF660,0xE8DB,0xD296,0xC0EA, + 0xBFD7,0xC02B,0xC00A,0xC821,0xF044,0x0F75,0x0DCC,0xE4EC, + 0xBFBF,0xC217,0xC05E,0xC939,0x0F60,0x3DFF,0x3B71,0x3CDA, + 0x1F12,0xF248,0xE254,0xF529,0x2531,0x3F95,0x3DD3,0x3E89, + 0x3DF1,0x3EB6,0x2AED,0x1639,0x20A4,0x3949,0x3F89,0x3E62, + 0x3EED,0x3C4F,0x283B,0x15AD,0x0B00,0x02C6,0xFA01,0xF24D, + 0xEE84,0xF0DB,0xF6F8,0xFA12,0xF331,0xE2E3,0xCC92,0xBE79, + 0xBF1F,0xBF67,0xCF55,0xE901,0xFC51,0x01FE,0xF79C,0xE26C, + 0xCEDA,0xC94F,0xDA1E,0xFC9E,0x208A,0x3631,0x3731,0x266D, + 0x0FF1,0x0249,0x03D0,0x1406,0x2AA8,0x3BA8,0x3DE2,0x3D6B, + 0x3285,0x2144,0x13F3,0x0D8A,0x0E6F,0x1376,0x180E,0x17FA, + 0x126E,0x0923,0xFEFB,0xF5D5,0xED47,0xE51F,0xDF14,0xDBD0, + 0xDC79,0xE16A,0xE6AC,0xE961,0xE5E6,0xDCFB,0xD265,0xCB98, + 0xCCF8,0xD7EC,0xE866,0xF82B,0x010B,0x007C,0xF85A,0xF065, + 0xEBAE,0xF009,0xFF96,0x1078,0x1DF1,0x2428,0x221D,0x19F4, + 0x1114,0x0B80,0x0D01,0x13FE,0x1D41,0x23DF,0x2478,0x1F36, + 0x15A7,0x0C12,0x0508,0x0192,0x0103,0x0112,0x0048,0xFF25, + 0xFCA1,0xF87D,0xF2C4,0xEC29,0xE67D,0xE34E,0xE2B9,0xE3BB, + 0xE6C9,0xEA73,0xED39,0xED85,0xEB62,0xE880,0xE6F5,0xE7F6, + 0xEC31,0xF31C,0xFB87,0x02E4,0x060F,0x05D5,0x03E6,0x02BA, + 0x0374,0x063A,0x0AE1,0x1133,0x1657,0x1895,0x1754,0x140D, + 0x1041,0x0CD6,0x0B70,0x0C0A,0x0DD4,0x0F07,0x0EC0,0x0A8D, + 0x05A0,0x0113,0xFBD4,0xF713,0xF457,0xF47F,0xF6B6,0xF7F6, + 0xF6EB,0xF419,0xF03E,0xEC9E,0xEA41,0xE957,0xEAAC,0xEE3B, + 0xF1F3,0xF583,0xF6C5,0xF6FA,0xF71C,0xF662,0xF630,0xF8D4, + 0xFD2A,0x0142,0x0540,0x084F,0x0985,0x0A25,0x0A57,0x09A5, + 0x09E6,0x0AAC,0x0C8D,0x0EC5,0x1094,0x10F3,0x0F77,0x0CC5, + 0x0A30,0x086F,0x0853,0x07DC,0x0526,0x0370,0x0310,0x0364, + 0x0309,0xFFC7,0xFAAA,0xF5BD,0xF35B,0xF487,0xF85A,0xFB90, + 0xFBE8,0xFA84,0xF838,0xF661,0xF453,0xF381,0xF546,0xF8E7, + 0xFCE6,0x0062,0x01C2,0x0195,0x0014,0xFE58,0xFDBC,0xFBF9, + 0xF67B,0xE9A7,0xD294,0xC151,0xC0B0,0xC17C,0xC07B,0xCC46, + 0xF785,0x1440,0x0B2C,0xDBD0,0xBFA3,0xC3BB,0xC03D,0xD224, + 0x1E13,0x3F60,0x3CF4,0x39B5,0x1164,0xEA6E,0xE337,0xFD51, + 0x2D21,0x4096,0x3ED1,0x3F5F,0x3F90,0x3CB4,0x2291,0x16A3, + 0x286E,0x3E97,0x3FCA,0x3F12,0x4035,0x38A5,0x227E,0x145E, + 0x0B93,0x02E4,0xFA8E,0xF401,0xF20F,0xF492,0xF977,0xF869, + 0xF030,0xE23A,0xCD9D,0xC0FB,0xC06E,0xC26C,0xD42F,0xECBD, + 0xFF83,0x03C9,0xF6CA,0xE049,0xCDB1,0xCCB5,0xE14E,0x034C, + 0x245B,0x3753,0x369A,0x25C0,0x1018,0x02EF,0x0520,0x15EA, + 0x2E78,0x3E06,0x3EB8,0x3E26,0x316C,0x1D3C,0x1041,0x0D20, + 0x1263,0x19ED,0x1D05,0x1A40,0x12D2,0x08BD,0xFEC1,0xF5C0, + 0xEDEE,0xE6DF,0xE08E,0xDDB9,0xE01C,0xE59B,0xE99E,0xE93D, + 0xE2C6,0xD9D2,0xD209,0xCEEB,0xD246,0xDCB0,0xEB04,0xF7D2, + 0xFEB7,0xFDCA,0xF848,0xF07A,0xEE31,0xF5A5,0x02C9,0x12E7, + 0x2077,0x25AA,0x2129,0x17FA,0x0F84,0x0C58,0x0F91,0x1700, + 0x1E3D,0x21E5,0x20D6,0x1BCC,0x1355,0x0AAA,0x047B,0x00C2, + 0xFF4C,0xFE85,0xFEB7,0xFD80,0xFA4B,0xF58B,0xF05B,0xEA68, + 0xE576,0xE136,0xDEB1,0xDF78,0xE317,0xE815,0xEC13,0xEC71, + 0xE957,0xE38C,0xDFF6,0xE1F9,0xE8B6,0xF1D3,0xFA71,0x000A, + 0x0228,0x00D8,0xFD49,0xFB11,0xFD1C,0x01F8,0x09ED,0x1201, + 0x1702,0x16CB,0x1288,0x0CFB,0x096A,0x0844,0x0990,0x0BCB, + 0x0D0B,0x0BFE,0x0A0E,0x05A7,0xFFF6,0xFB68,0xF889,0xF70D, + 0xF68A,0xF5AC,0xF398,0xF0AD,0xEF35,0xEEC1,0xEE72,0xEC94, + 0xE9F2,0xE7BB,0xE7F3,0xEAB3,0xEE9A,0xF1E1,0xF367,0xF3B1, + 0xF365,0xF32D,0xF45E,0xF6FC,0xFA6D,0xFEAD,0x029B,0x0607, + 0x077E,0x06F8,0x05BC,0x05BA,0x069B,0x0928,0x0BF4,0x0DA2, + 0x0DF5,0x0D1D,0x0C22,0x0A3D,0x0765,0x0486,0x02EA,0x029B, + 0x0392,0x03C3,0x027B,0xFFDD,0xFC51,0xF82B,0xF5A4,0xF516, + 0xF62C,0xF6D1,0xF5D9,0xF53F,0xF556,0xF510,0xF491,0xF465, + 0xF08D,0xF20D,0xF5FF,0xF97D,0xFB0D,0xFC49,0xFC01,0xFBE8, + 0xFC17,0xFCE6,0xFD96,0xFAF0,0xF270,0xE1E8,0xC937,0xBED5, + 0xBFFD,0xC077,0xBF64,0xD77B,0x045E,0x1640,0xFFBC,0xCEC5, + 0xBF4A,0xC32E,0xBF2F,0xE4A2,0x2E0E,0x3DC5,0x3D59,0x3351, + 0x065E,0xE74E,0xE7D2,0x0941,0x3646,0x3FAC,0x3EB4,0x3ED6, + 0x3FD1,0x3861,0x1E14,0x1827,0x2CF2,0x3F27,0x3F3D,0x3EC0, + 0x3FD3,0x32AC,0x1E50,0x1360,0x0ACC,0x014B,0xF793,0xF0A4, + 0xEFE5,0xF4D2,0xF9E5,0xF971,0xEFAB,0xDDFF,0xC921,0xBE8D, + 0xBF08,0xC215,0xD6FC,0xF07D,0x00CA,0x00C6,0xF0B7,0xD948, + 0xC976,0xCE4D,0xE869,0x0C97,0x2ACF,0x3702,0x2FF3,0x1D66, + 0x0BD7,0x042B,0x0A2E,0x1C55,0x327D,0x3E50,0x3ECF,0x3D3D, + 0x2E93,0x1C39,0x10BF,0x0F3B,0x14C2,0x1B2A,0x1CD1,0x190A, + 0x110B,0x0760,0xFE29,0xF5D8,0xEDAB,0xE66C,0xE151,0xDF88, + 0xE1A1,0xE66D,0xEBC6,0xEAAA,0xE431,0xDBD6,0xD42A,0xD079, + 0xD444,0xDEFD,0xEDBD,0xFBEB,0x037F,0x02AD,0xFA57,0xF1F1, + 0xF02B,0xF751,0x0619,0x174F,0x23DC,0x26F8,0x21F4,0x19A5, + 0x12BA,0x0FC4,0x124A,0x18EA,0x1F8C,0x240A,0x2362,0x1D57, + 0x14A5,0x0B92,0x04DA,0x00FE,0xFF7A,0xFFC7,0x004A,0xFFB5, + 0xFD09,0xF887,0xF225,0xEBA6,0xE60A,0xE291,0xE2E3,0xE59D, + 0xE9E6,0xEDD0,0xEF11,0xEE39,0xEB29,0xE84C,0xE72F,0xE8D9, + 0xEE01,0xF673,0xFF8C,0x0643,0x0845,0x055E,0x01C2,0xFFF1, + 0x01D8,0x0737,0x0EB6,0x153A,0x184E,0x17E5,0x147E,0x1021, + 0x0C5C,0x0A4E,0x0A23,0x0B84,0x0D17,0x0E81,0x0D97,0x0804, + 0x037C,0xFDF7,0xF8C8,0xF6D6,0xF693,0xF6D9,0xF602,0xF48A, + 0xF315,0xF181,0xF09C,0xEECF,0xEBE4,0xE916,0xE925,0xECCC, + 0xF244,0xF635,0xF796,0xF6C5,0xF5B2,0xF4B3,0xF55D,0xF7C2, + 0xFC57,0x0243,0x06EE,0x0909,0x0999,0x08F6,0x06A4,0x0451, + 0x0518,0x0A38,0x0FB4,0x128F,0x114B,0x0D57,0x094D,0x066B, + 0x0591,0x05FB,0x0701,0x064F,0x0468,0x0262,0x00AF,0xFF37, + 0xFCAE,0xF9E2,0xF750,0xF662,0xF72F,0xF7E6,0xF6CD,0xF58D, + 0xF4E1,0xF453,0xF48D,0xF4E0,0xF65A,0xF7E7,0xF779,0xFA22, + 0xFDF4,0x00A5,0x012E,0xFF64,0xFD21,0xFB1A,0xF6DE,0xED2E, + 0xDABC,0xC4CB,0xBFBB,0xC07A,0xC0A5,0xC2A7,0xE3E1,0x0B3D, + 0x124E,0xF175,0xC59D,0xC081,0xC208,0xC2B8,0xFCCD,0x3960, + 0x3C5B,0x3DBA,0x2761,0xF88B,0xE29B,0xEF2C,0x1A51,0x3CDA, + 0x3E47,0x3E83,0x3E1C,0x3F34,0x308B,0x18F6,0x1C7E,0x3473, + 0x3F6F,0x3DB7,0x3DAD,0x3D79,0x2BCB,0x1866,0x0D33,0x0518, + 0xFCC3,0xF3E5,0xEE2A,0xEED0,0xF4A1,0xF8BA,0xF53B,0xE88A, + 0xD3DB,0xC157,0xBEE6,0xBEB2,0xC780,0xE148,0xF91C,0x0397, + 0xFC67,0xE783,0xD0B2,0xC72A,0xD3B9,0xF29E,0x170C,0x3167, + 0x37E3,0x2AA1,0x1494,0x0457,0x02AC,0x0EDC,0x2306,0x373A, + 0x3E26,0x3E03,0x36CD,0x240D,0x147B,0x0C8C,0x0D23,0x1320, + 0x191C,0x19FA,0x13C9,0x08AF,0xFD5A,0xF466,0xEDF3,0xE78F, + 0xE138,0xDC65,0xDAC8,0xDD93,0xE30C,0xE766,0xE5F1,0xDE8B, + 0xD45F,0xCC33,0xCBA4,0xD391,0xE221,0xF150,0xFC36,0xFF42, + 0xFB1F,0xF230,0xEBC7,0xED39,0xF794,0x07FB,0x1B2A,0x24D0, + 0x232B,0x1B27,0x1037,0x09BC,0x0A3B,0x10D7,0x19D5,0x20BF, + 0x220B,0x1D38,0x1478,0x0BA6,0x04E2,0x0095,0xFF56,0xFF5D, + 0xFF42,0xFDBA,0xFAAB,0xF635,0xF145,0xEBBF,0xE6CC,0xE3C4, + 0xE259,0xE192,0xE20C,0xE517,0xE91B,0xEBAE,0xEB54,0xE93D, + 0xE6B4,0xE58A,0xE6F2,0xEC82,0xF4FB,0xFDEB,0x0451,0x0629, + 0x0398,0x0003,0xFE7D,0x0036,0x055E,0x0D07,0x13A8,0x1784, + 0x16EC,0x1212,0x0C45,0x0914,0x0827,0x0988,0x0B93,0x0D5F, + 0x0D23,0x09FE,0x0592,0x001B,0xFAA0,0xF534,0xF0ED,0xF076, + 0xF35A,0xF4E8,0xF479,0xF188,0xECD5,0xE8A2,0xE662,0xE675, + 0xE94A,0xED57,0xF06A,0xF25E,0xF227,0xF152,0xF110,0xF25A, + 0xF465,0xF5E9,0xF92D,0xFE25,0x0229,0x045F,0x0592,0x0598, + 0x05AC,0x060E,0x073F,0x08AE,0x0AE9,0x0CAC,0x0E28,0x0DA3, + 0x0C71,0x0AF2,0x08F4,0x06D1,0x04C8,0x0417,0x0432,0x0421, + 0x0256,0x016A,0x00DC,0xFD29,0xF953,0xF5A8,0xF363,0xF397, + 0xF5CA,0xF7FC,0xF8AC,0xF77B,0xF50E,0xF2B0,0xF1C4,0xF38A, + 0xF744,0xFA91,0xFC9A,0xFDCB,0xFE30,0xFEDE,0xFEBE,0xFE24, + 0xFE65,0xFD9C,0xF91F,0xEDC5,0xD7C7,0xC2BB,0xC0BE,0xC1D0, + 0xC0FF,0xC8C4,0xF405,0x1587,0x1125,0xE4D6,0xC187,0xC2F4, + 0xC1BC,0xC99E,0x0FB2,0x3E27,0x3CAA,0x3DF7,0x1D52,0xEFA8, + 0xE0F2,0xF476,0x24D4,0x4002,0x3EE8,0x3F80,0x3F12,0x3F12, + 0x2997,0x16AB,0x2150,0x39EA,0x4030,0x3F19,0x3FC8,0x3D3D, + 0x2882,0x164B,0x0BCD,0x03D0,0xFBFC,0xF504,0xF12E,0xF33E, + 0xF84A,0xFA5A,0xF3E9,0xE44E,0xD09D,0xC282,0xC053,0xC0B9, + 0xD0F9,0xE855,0xFB92,0x02B8,0xFA0D,0xE669,0xD2FB,0xCCC1, + 0xDB95,0xFB02,0x1D8F,0x342E,0x3785,0x2A00,0x1627,0x07D5, + 0x0661,0x12EE,0x284D,0x3B2B,0x3F03,0x3F29,0x3947,0x2718, + 0x1710,0x0DB4,0x0DC4,0x14B9,0x1C06,0x1D29,0x1795,0x0D55, + 0x0227,0xF806,0xEEA9,0xE6B2,0xE064,0xDE0B,0xE077,0xE65C, + 0xEC05,0xECCC,0xE6E0,0xDC54,0xD23B,0xCE16,0xD163,0xDBD0, + 0xE9FF,0xF6FE,0xFE9D,0xFEC8,0xF90E,0xF168,0xECB2,0xEF7F, + 0xFB47,0x0D5E,0x1E63,0x2703,0x2641,0x1BC3,0x0F3D,0x092E, + 0x0BBA,0x144B,0x1D9C,0x2366,0x233E,0x1DD2,0x151D,0x0B23, + 0x0371,0xFF54,0xFEBB,0x000C,0x00DD,0xFF62,0xFC10,0xF6CA, + 0xF12C,0xEC8C,0xE755,0xE2A5,0xE022,0xE057,0xE40C,0xEA45, + 0xEEFB,0xEEBF,0xEA2F,0xE499,0xE1D5,0xE373,0xE90A,0xF1A3, + 0xFA9A,0x0176,0x03EE,0x029D,0xFFE7,0xFD46,0xFCA8,0x0080, + 0x0858,0x104E,0x169B,0x188F,0x14B4,0x0E5E,0x096E,0x07B6, + 0x08FC,0x0BEE,0x0E8E,0x0E0C,0x0ABE,0x061F,0x0133,0xFCDA, + 0xF855,0xF5D2,0xF453,0xF347,0xF28D,0xF224,0xF18F,0xEFBF, + 0xECA7,0xE9FC,0xE7B2,0xE6C6,0xE772,0xEA02,0xEDDC,0xF0ED, + 0xF1F9,0xF168,0xF105,0xF174,0xF2C2,0xF4C9,0xF865,0xFCD8, + 0x016F,0x04B7,0x0690,0x05BE,0x0402,0x02F1,0x0364,0x05BD, + 0x096B,0x0C9B,0x0D5D,0x0C8D,0x0A26,0x07B1,0x050D,0x0379, + 0x02D8,0x0316,0x03A1,0x036B,0x01AA,0xFEEE,0xFC29,0xF8F4, + 0xF677,0xF4B2,0xF4B7,0xF597,0xF621,0xF557,0xF42A,0xF43A, + 0xF4F5,0xF45E,0xF363,0xF3BB,0xF3E5,0xF614,0xFA2B,0xFAA6, + 0xFC98,0xFCF7,0xFBB8,0xFB91,0xFC48,0xFB63,0xF658,0xEAA1, + 0xD884,0xC3A9,0xBF18,0xC083,0xC00E,0xD7B2,0xFD1D,0x1032, + 0x0582,0xDF65,0xC1A6,0xC226,0xBFA3,0xDAD0,0x1A7A,0x3B18, + 0x3DAF,0x3127,0x0AA7,0xEDCC,0xE928,0xFE25,0x272E,0x3F03, + 0x3E4A,0x3EAB,0x3F7F,0x32E1,0x182C,0x10AB,0x1D57,0x3442, + 0x3F71,0x3EC4,0x3DA4,0x2C0B,0x199B,0x0E86,0x07ED,0x0155, + 0xFAF3,0xF618,0xF506,0xF749,0xFA88,0xFACF,0xF438,0xE6BC, + 0xD6EF,0xCB1A,0xC836,0xD049,0xE090,0xF297,0xFE00,0xFFE3, + 0xF5F1,0xE432,0xD698,0xD70A,0xE811,0x0383,0x1D58,0x2B26, + 0x288F,0x1A30,0x0925,0xFF49,0x0307,0x1234,0x24DC,0x3316, + 0x3755,0x3131,0x2544,0x16ED,0x0C16,0x08EC,0x0D14,0x1400, + 0x17AD,0x15EF,0x0F0E,0x0596,0xFD47,0xF6BA,0xF1F9,0xEE1A, + 0xEA70,0xE7E2,0xE7A3,0xEA6A,0xEECA,0xF01B,0xECA0,0xE54B, + 0xDD94,0xDB44,0xDE80,0xE650,0xF149,0xFAAC,0xFFEC,0xFFEA, + 0xFB2B,0xF5B7,0xF400,0xF811,0x01BE,0x0DD7,0x185B,0x1E3E, + 0x1DAD,0x1707,0x0F22,0x0B02,0x0BD3,0x1116,0x17EE,0x1D27, + 0x1E98,0x1A4F,0x11F1,0x09D3,0x0463,0x01C2,0x0120,0x0200, + 0x0252,0x0124,0xFF05,0xFAFD,0xF613,0xF05D,0xEB72,0xE873, + 0xE8BC,0xEB10,0xEE30,0xF0CC,0xF248,0xF22F,0xEFAC,0xECFD, + 0xEB0A,0xEC24,0xEFE0,0xF5DB,0xFD09,0x02C8,0x04F1,0x02D7, + 0xFF24,0xFCFF,0xFE02,0x0270,0x093B,0x0F22,0x122A,0x1157, + 0x0DD3,0x0A20,0x07D8,0x06CD,0x0763,0x0850,0x0995,0x09A2, + 0x087A,0x05F3,0x01F1,0xFE2B,0xFACE,0xF885,0xF64E,0xF81D, + 0xF868,0xF68F,0xF58E,0xF4C0,0xF34E,0xF065,0xEDA4,0xEC40, + 0xED49,0xEFFD,0xF392,0xF6EF,0xF85F,0xF7CA,0xF60B,0xF4AE, + 0xF5D5,0xF875,0xFC72,0xFF7C,0x02A7,0x059A,0x06F1,0x053A, + 0x0272,0x01AA,0x037D,0x06F3,0x0A39,0x0B69,0x0A7F,0x085B, + 0x0612,0x04F9,0x04DB,0x04EC,0x0458,0x0292,0x0137,0x007B, + 0x000D,0xFEB1,0xFC4E,0xF9F8,0xF884,0xF77B,0xF6BD,0xF673, + 0xF562,0xF476,0xF45E,0xF65A,0xF815,0xF85B,0xF667,0xF3B1, + 0xF209,0xF36C,0xF7E1,0xFD92,0x0175,0x009F,0xFEEC,0xFD2C, + 0xFB06,0xF7C6,0xF42D,0xF02D,0xEBF1,0xE861,0xE7BA,0xECDF, + 0xF764,0x0227,0x069B,0x010F,0xF467,0xE792,0xE226,0xE885, + 0xFABE,0x0F3F,0x1AFB,0x19A1,0x0E66,0x001F,0xF720,0xF7E9, + 0x0234,0x1100,0x1D72,0x232D,0x1F82,0x15AA,0x0AF4,0x0393, + 0x0280,0x07CD,0x0FE5,0x1622,0x167E,0x10C3,0x092B,0x0365, + 0xFF51,0xFD8B,0xFE47,0xFDF4,0xFC3F,0xFB34,0xFB40,0xFC4D, + 0xFCA6,0xFB42,0xF7B2,0xF269,0xEDB3,0xEC39,0xEFA3,0xF588, + 0xFC52,0x00B0,0x00BF,0xFC0C,0xF4A7,0xEF24,0xF030,0xF832, + 0x0376,0x0C8C,0x0F2A,0x0AB1,0x031A,0xFCEA,0xFB6C,0xFF65, + 0x0706,0x0DAF,0x1062,0x0E6D,0x0AE4,0x06F9,0x0303,0x0036, + 0xFF13,0x0109,0x03E3,0x054A,0x0339,0xFF07,0xFB3A,0xF9E1, + 0xFA00,0xFA9D,0xF920,0xF66F,0xF435,0xF37D,0xF4A5,0xF6C8, + 0xF7C2,0xF5C5,0xF2AF,0xF012,0xEEBE,0xEF05,0xEFBA,0xF088, + 0xF0A9,0xF0DB,0xF0A5,0xF025,0xEF42,0xEE5D,0xEF2E,0xF3E4, + 0xF9DE,0xFED4,0x0071,0xFDE1,0xF948,0xF8DC,0xF7BB,0xF8ED, + 0xFD26,0xFEC4,0xFEE2,0xFE5C,0xFD0A,0xFBE4,0xFB17,0xFA12, + 0xF97F,0xF8A1,0xF7E5,0xF74D,0xF687,0xF580,0xF3E9,0xF32E, + 0xF281,0xF25C,0xF1C1,0xF159,0xF017,0xEF56,0xEE9C,0xEE53, + 0xEE38,0xED6F,0xECCF,0xEC85,0xEBE8,0xEB9E,0xEB41,0xEAA9, + 0xEAE0,0xEA7D,0xEAA1,0xEA52,0xEA2D,0xEA12,0xE98C,0xE945, + 0xE96A,0xE96A,0xE9AE,0xEA12,0xE9B6,0xE920,0xE8F5,0xE90A, + 0xE90B,0xE981,0xE97F,0xE987,0xE9A0,0xE9F6,0xEA45,0xE9F1, + 0xEA23,0xEA37,0xEA62,0xEA98,0xEACF,0xE94A,0xE843,0xE915, + 0xE9AD,0xE98F,0xEA6A,0xEAD5,0xEB34,0xEBBF,0xEBE2,0xEC52, + 0xEC9F,0xED73,0xEE44,0xEEAF,0xEF28,0xEFC9,0xF023,0xF088, + 0xF03E,0xF08B,0xF1EF,0xF304,0xF31D,0xF3AF,0xF406,0xF479, + 0xF4BE,0xF518,0xF5C9,0xF6C7,0xF6FF,0xF744,0xF7E6,0xF7AA, + 0xF7CF,0xF83D,0xF894,0xF928,0xF9EC,0xFA4E,0xFB01,0xFAD0, + 0xFB93,0xFC5B,0xFB94,0xFC23,0xFCBE,0xFD68,0xFE3E,0xFE7E, + 0xFEA2,0xFF3A,0x0008,0x0092,0x01B0,0x022F,0x02FC,0x03DC, + 0x0401,0x0412,0x04B8,0x04CF,0x04F2,0x04ED,0x0534,0x059C, + 0x0627,0x063E,0x0667,0x06DB,0x0782,0x0761,0x0781,0x080A, + 0x07EB,0x0751,0x0794,0x07FA,0x0844,0x0892,0x08B5,0x08CC, + 0x08B1,0x08F0,0x08DD,0x08D5,0x0922,0x0964,0x09A8,0x09E5, + 0x09E0,0x09F7,0x0A11,0x0A67,0x0ADB,0x0AE3,0x0AF4,0x0B18, + 0x0B39,0x0B86,0x0BC2,0x0BC8,0x0C2F,0x0C74,0x0C65,0x0C05, + 0x0C21,0x0C5D,0x0CD6,0x0CE7,0x0CF8,0x0CB0,0x0CB1,0x0C44, + 0x0CEF,0x0D30,0x0D9B,0x0D4F,0x0D9C,0x0CB0,0x0CBC,0x0E8E, + 0x0D64,0x0D69,0x0DAA,0x0E17,0x0E13,0x0D8A,0x0D98,0x0E3C, + 0x0E3B,0x0E3F,0x0EA3,0x0EAE,0x0E7E,0x0E23,0x0E19,0x0E9B, + 0x0F06,0x0EE2,0x0EEC,0x0E92,0x0E4B,0x0E44,0x0E4E,0x0E13, + 0x0E72,0x0E5A,0x0E37,0x0E5C,0x0E6E,0x0E7B,0x0E4A,0x0DF5, + 0x0DC1,0x0DD2,0x0E1D,0x0DC6,0x0D87,0x0D5B,0x0D15,0x0D1F, + 0x0D09,0x0D4C,0x0D56,0x0D01,0x0D26,0x0D23,0x0D05,0x0D1A, + 0x0D2E,0x0CE3,0x0C61,0x0C0E,0x0C33,0x0C84,0x0C29,0x0C10, + 0x0BF7,0x0BF6,0x0C31,0x0E49,0x0ED8,0x0E5A,0x0DEF,0x0D40, + 0x0CFC,0x0C8F,0x0C92,0x0D46,0x0D49,0x0D20,0x0C79,0x0C36, + 0x0C0B,0x0C04,0x0B77,0x0B91,0x0B89,0x0B4A,0x0AA5,0x0A6C, + 0x0B62,0x0B4E,0x0A3F,0x0A3C,0x0A7F,0x0A5B,0x0A03,0x099B, + 0x0991,0x09FB,0x09C4,0x09D1,0x098E,0x091A,0x095E,0x0955, + 0x093F,0x08E4,0x0893,0x0899,0x0883,0x08AA,0x089F,0x0858, + 0x06EA,0x070C,0x07D8,0x07D0,0x0828,0x07EB,0x07BB,0x07BD, + 0x0797,0x068E,0x0685,0x067C,0x05A1,0x0557,0x051C,0x04D2, + 0x0496,0x04A9,0x04B3,0x0485,0x03C7,0x035B,0x0335,0x03D5, + 0x040E,0x03FB,0x0402,0x0415,0x0404,0x03C1,0x0404,0x03F0, + 0x0373,0x030C,0x02EC,0x02BD,0x02F7,0x031A,0x0377,0x0367, + 0x02E1,0x02E6,0x02AF,0x02D1,0x02E3,0x028F,0x025E,0x02D8, + 0x02EF,0x02FE,0x02DE,0x02E8,0x02D5,0x0288,0x02AA,0x02D9, + 0x02B1,0x026F,0x0213,0x0250,0x0235,0x021A,0x021E,0x01EA, + 0x0143,0x0150,0x013E,0x0125,0x0110,0x0110,0x013B,0x015C, + 0x0111,0x0188,0x0212,0x0125,0x01B8,0x02B0,0x0074,0x0156, + 0x0195,0x016B,0x0160,0x011E,0x0099,0x0131,0x0148,0x0100, + 0x00F5,0x00B4,0x00CF,0x0130,0x0121,0x012B,0x00FA,0x0072, + 0xFE45,0xFEE3,0xFEC0,0xFEFB,0xFF07,0xFF47,0xFF00,0xFF37, + 0xFF47,0xFF4C,0xFED3,0xFF43,0xFF51,0xFEEF,0xFED4,0xFED1, + 0xFF31,0xFEEF,0xFF22,0xFF02,0xFF19,0xFE77,0xFE64,0xFEC2, + 0xFF6A,0xFF24,0xFF11,0xFF48,0xFF4F,0xFF50,0xFF27,0xFEC3, + 0xFE68,0xFF19,0xFF57,0xFF65,0xFF71,0xFFAC,0xFF29,0xFEFD, + 0xFF2E,0xFF6C,0xFFA5,0xFFF0,0xFFF0,0xFFAF,0xFFE7,0x0067, + 0x018C,0x019A,0x00B1,0x00E4,0x02E8,0x050E,0x0653,0x0631, + 0x0718,0x0955,0x0BD0,0x0C90,0x0CBC,0x0C82,0x0B5C,0x0B93, + 0x0D82,0x0E18,0x0E17,0x0CB5,0x0B28,0x0BAD,0x0E19,0x10BF, + 0x11D7,0x119D,0x1146,0x11DA,0x12AB,0x126A,0x1204,0x12B5, + 0x148D,0x1483,0x13CF,0x1473,0x159F,0x15F3,0x16C7,0x17C7, + 0x1756,0x1542,0x1272,0x1005,0x106F,0x12D9,0x155B,0x175E, + 0x184D,0x17A0,0x1552,0x10EB,0x0D31,0x0DB4,0x11FE,0x167B, + 0x1842,0x17ED,0x177F,0x14DF,0x1261,0x1164,0x11ED,0x1329, + 0x149F,0x1638,0x1835,0x18F0,0x1824,0x16F6,0x1582,0x155D, + 0x1664,0x176E,0x1806,0x18D0,0x1983,0x1A00,0x1AD6,0x1AAB, + 0x1885,0x15AF,0x1461,0x1563,0x1778,0x1985,0x19DF,0x1861, + 0x1589,0x125E,0x11F2,0x1336,0x1466,0x136A,0x1176,0x108F, + 0x114A,0x11DF,0x10B7,0x0E49,0x0BBA,0x09EA,0x09B0,0x0A2D, + 0x09C1,0x08C2,0x0736,0x05C8,0x05B7,0x0667,0x0564,0x0201, + 0xFE22,0xFCE7,0xFF11,0x0251,0x02EF,0x00B8,0xFE29,0xFBB8, + 0xF992,0xF96B,0xFA74,0xFBC2,0xFC76,0xFC3B,0xFB9A,0xFAFE, + 0xF954,0xF800,0xF746,0xF803,0xFA53,0xFC2D,0xFA42,0xF76C, + 0xF7CD,0xF6F9,0xF8B4,0xFA1C,0xF9B3,0xF883,0xF7A8,0xF738, + 0xF739,0xF809,0xF9F7,0xFB0F,0xFACC,0xF902,0xF7C5,0xF75C, + 0xF710,0xF6DE,0xF78F,0xF92C,0xF9EF,0xF941,0xF796,0xF668, + 0xF63C,0xF65D,0xF63A,0xF68C,0xF763,0xF747,0xF5B9,0xF455, + 0xF3CA,0xF52B,0xF59D,0xF45F,0xF1F1,0xF062,0xF148,0xF338, + 0xF45E,0xF398,0xF1CC,0xEFA0,0xEEE0,0xEEBD,0xEF8D,0xF090, + 0xF067,0xEFCB,0xEF2E,0xEEDC,0xEEC0,0xEEDD,0xECF6,0xEBDE, + 0xEC71,0xEE04,0xEF1F,0xEEBF,0xEFC9,0xEF65,0xEDFD,0xEE15, + 0xEF63,0xEFF7,0xEF52,0xEDE5,0xED98,0xEEC3,0xF008,0xF065, + 0xEFD4,0xEED7,0xEE82,0xEEBC,0xEF76,0xF002,0xF032,0xEF95, + 0xF016,0xF1EB,0xF202,0xF0E8,0xEFB7,0xEF5A,0xEF71,0xF131, + 0xF25E,0xF2D7,0xF225,0xF119,0xF097,0xF104,0xF15A,0xF11A, + 0xF0A2,0xF10F,0xF261,0xF35A,0xF289,0xF149,0xEFC9,0xEFCB, + 0xF169,0xF256,0xF266,0xF285,0xF154,0xF005,0xF075,0xF1EC, + 0xF2D9,0xF233,0xF0BF,0xEFD2,0xEFB5,0xEFD0,0xF0AF,0xF0FA, + 0xF06D,0xEFC8,0xEE28,0xEC3A,0xEBB6,0xED3C,0xEFCF,0xF192, + 0xF1E1,0xF0F8,0xEEC9,0xED06,0xECAD,0xEE3C,0xF0A0,0xF256, + 0xF2A1,0xF1C6,0xF113,0xF07C,0xEFFF,0xF013,0xF0D3,0xF203, + 0xF271,0xF1C5,0xEFBD,0xED46,0xE887,0xE0CB,0xD721,0xCEF3, + 0xCC1C,0xD0E1,0xDC5A,0xE8B7,0xED0E,0xE589,0xD546,0xC543, + 0xBED0,0xC44A,0xD2D2,0xE281,0xEC58,0xEDC2,0xE849,0xE083, + 0xDAB3,0xD9C1,0xDE8C,0xE7BD,0xF2D6,0xFBC1,0x0059,0x01C7, + 0x00E8,0x004E,0x01C7,0x05CF,0x08CC,0x0ADA,0x0EE2,0x11F1, + 0x1A45,0x2368,0x27BE,0x25E4,0x1FB8,0x18DD,0x1638,0x19A6, + 0x2170,0x2A7D,0x2F9F,0x2FD4,0x2AD3,0x23FF,0x1D27,0x188D, + 0x1664,0x186C,0x1D08,0x218B,0x21EA,0x1CDC,0x14F6,0x0D81, + 0x0823,0x058D,0x04D5,0x045A,0x0313,0x015A,0xFFD8,0xFE71, + 0xFC3B,0xF73E,0xF06A,0xEB18,0xE882,0xE8F7,0xEAA2,0xEBD6, + 0xEC86,0xEB69,0xE8C6,0xE44A,0xDF97,0xDCC7,0xDC5A,0xDF08, + 0xE3A7,0xE7AE,0xE95E,0xE903,0xE733,0xE54E,0xE488,0xE4F6, + 0xE681,0xEA39,0xEF24,0xF385,0xF610,0xF5CF,0xF3D4,0xF362, + 0xF410,0xF5A5,0xF87C,0xFC91,0x00AA,0x03E5,0x064F,0x073C, + 0x06FA,0x05EA,0x04F7,0x05C7,0x0856,0x0AD0,0x0CBC,0x0F0A, + 0x1083,0x0FD0,0x0EC3,0x0CD2,0x0A2F,0x0902,0x0A6A,0x0D04, + 0x0E29,0x0DDB,0x0C34,0x09DC,0x077D,0x05D4,0x046A,0x02F7, + 0x01B7,0x0149,0x011B,0x0023,0xFF2F,0xFDCA,0xFBBF,0xF8F0, + 0xF64E,0xF563,0xF55B,0xF3F0,0xF36B,0xF461,0xF53B,0xF39D, + 0xF063,0xED55,0xEC92,0xED8E,0xEF1F,0xF064,0xF17B,0xF2C3, + 0xF361,0xF265,0xF13F,0xF08D,0xF0A9,0xF1AD,0xF384,0xF5DD, + 0xF7C6,0xF7FF,0xF78A,0xF78F,0xF8BE,0xF9E8,0xFAC8,0xFBCA, + 0xFD32,0xFEFF,0x0086,0x00C1,0x018A,0x02C8,0x03D8,0x0452, + 0x04DA,0x05E4,0x0606,0x0644,0x073F,0x095D,0x0AD3,0x0A8D, + 0x089D,0x070B,0x0741,0x088D,0x0983,0x0922,0x0875,0x080F, + 0x07B0,0x06F6,0x061F,0x053E,0x0416,0x03A3,0x0432,0x04DE, + 0x048E,0x02DF,0x00CD,0xFF19,0xFF4E,0xFF19,0xFE3A,0xFC42, + 0xFBB2,0xFCBA,0xFDB0,0xFCCA,0xFA76,0xF7FC,0xF566,0xF781, + 0xFA0A,0xFA18,0xF972,0xF7CA,0xF588,0xF56E,0xF77B,0xF940, + 0xF9E0,0xF8B5,0xF7DA,0xF825,0xF81A,0xF7D2,0xF7BD,0xF8E2, + 0xFADE,0xFD14,0xFE05,0xFCDD,0xF9CA,0xF58A,0xF0B1,0xEAF4, + 0xE353,0xD920,0xCFD5,0xCD45,0xD533,0xE56A,0xF440,0xF624, + 0xE8B8,0xD29D,0xC2FC,0xBFD3,0xC9E1,0xDE8D,0xF00D,0xF7A8, + 0xF660,0xEFCA,0xE774,0xE231,0xE28B,0xE970,0xF5E6,0x0401, + 0x0D95,0x1172,0x10E8,0x0FE6,0x10FA,0x15F8,0x1A94,0x1CCF, + 0x1D21,0x1F4B,0x2778,0x352D,0x3F8E,0x4023,0x3E66,0x333E, + 0x2A14,0x2943,0x3059,0x3B98,0x3FDC,0x3F7D,0x3FC1,0x3EB6, + 0x34F3,0x2AC8,0x25D2,0x26CC,0x2D2E,0x3392,0x34DE,0x2E4E, + 0x2418,0x1AE2,0x151C,0x12FA,0x11D0,0x0EBB,0x0A54,0x057F, + 0x0258,0x01AD,0x018E,0xFF81,0xF97E,0xEFFA,0xE7A4,0xE3D0, + 0xE3DC,0xE6AD,0xE9F2,0xEC21,0xEA39,0xE448,0xDCEF,0xD79A, + 0xD530,0xD66A,0xDC31,0xE3DC,0xE7ED,0xE85E,0xE568,0xE13C, + 0xDF68,0xE0A2,0xE49C,0xE964,0xED8E,0xF083,0xF2A1,0xF3C9, + 0xF53F,0xF777,0xF894,0xF908,0xFB2C,0xFEA9,0x02DA,0x0662, + 0x091A,0x0B11,0x0D47,0x0ED7,0x0E82,0x0CEB,0x0C01,0x0D8A, + 0x1185,0x15C1,0x18B3,0x190F,0x172A,0x13D9,0x10C3,0x0F8E, + 0x10C6,0x126A,0x132F,0x12E8,0x119F,0x0F9A,0x0C8B,0x093C, + 0x0751,0x0646,0x0474,0x0204,0x0059,0xFFBD,0xFF36,0xFE30, + 0xFC67,0xF9DD,0xF63C,0xF28E,0xEFD6,0xEEF5,0xF009,0xF1E3, + 0xF2F6,0xF1E6,0xEDA9,0xE9A9,0xE69B,0xE661,0xE7F1,0xEB08, + 0xED7F,0xEE0D,0xECFE,0xEB24,0xE8BA,0xEA68,0xEBDF,0xEC8C, + 0xEFE8,0xF20B,0xF346,0xF2FB,0xF33B,0xF433,0xF6C0,0xF940, + 0xFADB,0xFBA7,0xFC6D,0xFCDA,0xFDCB,0x003D,0x02F4,0x05F0, + 0x0663,0x05CB,0x0552,0x05D8,0x063E,0x0798,0x0A10,0x0CBD, + 0x0D8F,0x0C5A,0x0AF6,0x0A39,0x0A5C,0x0A98,0x0B3A,0x0BDD, + 0x0CB0,0x0BB4,0x0A35,0x0927,0x08EC,0x090F,0x0842,0x075B, + 0x05FF,0x0408,0x02BE,0x029D,0x0375,0x03C6,0x028F,0xFF61, + 0xFC5D,0xFABE,0xFBA3,0xFD19,0xFD2D,0xFB64,0xF861,0xF6F6, + 0xF713,0xF7C5,0xF739,0xF5F7,0xF4A9,0xF390,0xF3AD,0xF533, + 0xF4DF,0xF384,0xF26E,0xF369,0xF5D7,0xF7D5,0xF7D6,0xF693, + 0xF602,0xF77D,0xF9F0,0xFB5D,0xFB7E,0xFAEF,0xFB22,0xFC9D, + 0xFBC0,0xF8EA,0xF408,0xEB27,0xDFEE,0xD61B,0xD164,0xD359, + 0xDCBD,0xEAC9,0xF577,0xF5A8,0xE855,0xD369,0xC311,0xC0B2, + 0xCD91,0xE47F,0xF793,0xFF30,0xFB0A,0xF04F,0xE63B,0xE21A, + 0xE769,0xF2DA,0xFE0F,0x080C,0x0FA5,0x1413,0x15B7,0x1529, + 0x148A,0x15EB,0x195D,0x1D5A,0x217C,0x271E,0x2FE4,0x398D, + 0x3FC0,0x403C,0x3BC6,0x3365,0x2C4D,0x2BDC,0x32B6,0x3D88, + 0x40A5,0x405B,0x40A7,0x3BE1,0x3167,0x2A67,0x281A,0x2937, + 0x2C88,0x2F88,0x2F63,0x2BA3,0x25F0,0x1E7F,0x16D2,0x10E0, + 0x0D56,0x0AC5,0x090C,0x0759,0x0591,0x03F5,0x014B,0xFBD5, + 0xF454,0xED6A,0xE8FC,0xE68C,0xE614,0xE839,0xEBC0,0xED08, + 0xEA19,0xE38E,0xDD6E,0xD9FB,0xD9B8,0xDC7B,0xE143,0xE621, + 0xE8A0,0xE7D0,0xE570,0xE347,0xE350,0xE4AB,0xE72D,0xEA9E, + 0xEF1C,0xF2F9,0xF60D,0xF7C0,0xFA34,0xFB4E,0xFC01,0xFE60, + 0xFD58,0xFE1C,0x0286,0x0885,0x0DE3,0x1169,0x11CC,0x1010, + 0x0DE1,0x0D11,0x0E53,0x11DB,0x15F6,0x187D,0x19A2,0x190D, + 0x179D,0x1604,0x13BE,0x11C1,0x110D,0x11C2,0x137C,0x1409, + 0x12E6,0x101B,0x0CFB,0x09B0,0x06A3,0x04DF,0x03E4,0x02F2, + 0x01C8,0x0189,0x0127,0xFF04,0xFBC8,0xF7BC,0xF46C,0xF2F0, + 0xF282,0xF242,0xF2A8,0xF21C,0xF0EB,0xEE6F,0xECF1,0xEBEF, + 0xEB30,0xEA63,0xE9F2,0xEA61,0xEAD2,0xEBC1,0xEC9C,0xED2A, + 0xED27,0xECFF,0xED74,0xEFE3,0xF1BD,0xF2BC,0xF4AA,0xF71C, + 0xF8AB,0xF955,0xF9E6,0xFB61,0xFC27,0xFBBD,0xFC24,0xFE5D, + 0x02D3,0x0702,0x0889,0x06C0,0x047E,0x042A,0x05C4,0x0812, + 0x0A3C,0x0B08,0x0B9A,0x0C95,0x0C97,0x0B5B,0x0AD1,0x0AD2, + 0x0AF3,0x0B80,0x0C44,0x0CFC,0x0BDD,0x0969,0x082E,0x0882, + 0x0995,0x08CE,0x063F,0x03E3,0x02B6,0x02A6,0x0344,0x0335, + 0x0149,0xFEAF,0xFDE1,0xFCAB,0xFC04,0xFB59,0xFA92,0xFA18, + 0xF945,0xF92F,0xF8AF,0xF749,0xF4B0,0xF21F,0xF0A5,0xF150, + 0xF43A,0xF5AC,0xF52B,0xF2D8,0xF0B4,0xF050,0xF16E,0xF387, + 0xF4FA,0xF485,0xF3AF,0xF3D3,0xF560,0xF735,0xF7EB,0xF707, + 0xF60A,0xF790,0xFA56,0xFBA0,0xF9D7,0xF555,0xEED8,0xE622, + 0xDB59,0xD11A,0xCBB3,0xCFA3,0xDCE1,0xEDA1,0xF78F,0xF239, + 0xDE53,0xC6AB,0xBED4,0xC121,0xD284,0xE950,0xF783,0xF9F3, + 0xF2B5,0xE8AC,0xE0FD,0xDEC3,0xE388,0xEEB2,0xFCA0,0x082B, + 0x0EB8,0x0F4D,0x0D78,0x0D31,0x103A,0x1535,0x19CA,0x1BA1, + 0x1BFE,0x20D5,0x2A97,0x3546,0x3CC4,0x3EE9,0x35C7,0x2CAA, + 0x270B,0x27D5,0x309E,0x3BDD,0x3F03,0x3E92,0x3EFC,0x38CA, + 0x2E39,0x25AB,0x228D,0x258E,0x2C78,0x31A2,0x3113,0x2AB9, + 0x2071,0x16BF,0x105A,0x0DF0,0x0D86,0x0C14,0x084B,0x0502, + 0x03BB,0x02C5,0xFFE4,0xFA0B,0xF29B,0xEC6A,0xE826,0xE629, + 0xE640,0xE83F,0xEAF7,0xEB9F,0xE88F,0xE38A,0xDE58,0xD984, + 0xD75A,0xD95F,0xDF69,0xE6FE,0xEAFB,0xE989,0xE533,0xE209, + 0xE17E,0xE342,0xE5AE,0xE9FC,0xEF88,0xF4F6,0xF805,0xF8B8, + 0xF844,0xF88B,0xF9BB,0xFBD3,0xFE5A,0xFF99,0x0318,0x0641, + 0x092C,0x0CDB,0x1022,0x101D,0x0CD8,0x097E,0x098D,0x0CF1, + 0x1281,0x1772,0x19A3,0x1828,0x13E0,0x0F9B,0x0E4E,0x0E97, + 0x0F29,0x10F6,0x1306,0x13AE,0x1190,0x0E1E,0x0A26,0x0718, + 0x05A6,0x0542,0x051B,0x0415,0x01E0,0xFF35,0xFCBD,0xFC46, + 0xFBCC,0xFA3B,0xF6A7,0xF2C2,0xF0CF,0xF021,0xF0D2,0xF168, + 0xF2D5,0xF251,0xEEF4,0xEBD3,0xE901,0xE7F0,0xE857,0xEAF4, + 0xEE6F,0xF0AC,0xEFF1,0xEDA0,0xEC17,0xEBC4,0xED8F,0xF04D, + 0xF2B8,0xF592,0xF7E2,0xF83D,0xF768,0xF797,0xF923,0xFA2C, + 0xFB50,0xFD17,0xFFD5,0x02D7,0x041F,0x0443,0x048A,0x057C, + 0x063D,0x070B,0x07EE,0x0933,0x0AD6,0x0C1A,0x0D56,0x0DBA, + 0x0D3F,0x0BFC,0x0B32,0x0C0C,0x0C6A,0x0C49,0x0BFF,0x0C15, + 0x0C93,0x0BFA,0x09CF,0x078C,0x06C5,0x06D7,0x0651,0x04F2, + 0x049A,0x0559,0x050D,0x0267,0xFFF9,0xFF3B,0xFEE8,0xFE27, + 0xFCA4,0xFBF4,0xFBB8,0xFC14,0xFB3E,0xFA16,0xF91D,0xF7C1, + 0xF5EB,0xF473,0xF51F,0xF734,0xF958,0xF6FA,0xF6E8,0xF5DE, + 0xF385,0xF3A7,0xF519,0xF692,0xF77E,0xF7FB,0xF856,0xF83B, + 0xF83E,0xF8B9,0xF914,0xF97D,0xFA2C,0xFC30,0xFD63,0xFBD1, + 0xF5D1,0xECF4,0xE2AE,0xD900,0xD1E3,0xCFA6,0xD505,0xE259, + 0xF0F6,0xF743,0xEF8D,0xDC4D,0xC864,0xBFD4,0xC4DA,0xD8F5, + 0xEEE6,0xFC60,0xFCE8,0xF371,0xE881,0xE2AB,0xE345,0xE96B, + 0xF3E7,0x00AC,0x0BC7,0x1231,0x14B0,0x1486,0x1402,0x14B8, + 0x16A1,0x1953,0x1CF0,0x21AA,0x28F8,0x327B,0x3B30,0x3EB6, + 0x3E83,0x360E,0x2C90,0x29D8,0x2CFA,0x37FB,0x4028,0x3FDF, + 0x3FA6,0x3FEB,0x3826,0x2C8E,0x262F,0x258A,0x2929,0x2F07, + 0x32DE,0x319A,0x29E2,0x1EB1,0x1533,0x0FD4,0x0E3E,0x0DDC, + 0x0BA3,0x06EC,0x0320,0x01CD,0x0096,0xFDDC,0xF8AF,0xF0AE, + 0xE855,0xE2E6,0xE229,0xE4E5,0xE806,0xE980,0xE8CD,0xE4E6, + 0xE01A,0xDA10,0xD526,0xD3E9,0xD7B9,0xDEDC,0xE5FC,0xE8A7, + 0xE58D,0xE1CC,0xDEF4,0xDE63,0xE1F2,0xE6C9,0xEAFE,0xEE4C, + 0xF228,0xF615,0xF8C1,0xF897,0xF717,0xF6D5,0xF854,0xFB4D, + 0xFFC3,0x0360,0x069B,0x09A0,0x0C7D,0x0E70,0x0E09,0x0BC9, + 0x090B,0x0944,0x0D51,0x1401,0x187C,0x1849,0x14F7,0x115C, + 0x0EF1,0x0E36,0x0E36,0x0EB6,0x0F84,0x104D,0x0FE1,0x0E30, + 0x0B7D,0x07B7,0x04EB,0x0311,0x0284,0x0106,0xFF13,0xFD60, + 0xFCA7,0xFD33,0xFC58,0xF81D,0xF2C1,0xEF44,0xEE36,0xEEA1, + 0xEF79,0xEFAD,0xEF6F,0xEDFC,0xEB5C,0xE90C,0xE751,0xE60F, + 0xE64B,0xE70E,0xE930,0xEBCD,0xEC43,0xEA87,0xE8F8,0xE8F3, + 0xEB75,0xED81,0xEDBD,0xED3E,0xF080,0xF219,0xF312,0xF5DA, + 0xF6F0,0xF84C,0xF90D,0xF98C,0xFA8C,0xFCB7,0xFE7C,0xFFF8, + 0x011A,0x0382,0x05A6,0x061C,0x0524,0x043F,0x051A,0x06AA, + 0x08CE,0x0A53,0x0BAC,0x0B2D,0x09EC,0x0958,0x09D9,0x09D6, + 0x0895,0x0737,0x07E3,0x0A07,0x0B45,0x0A33,0x0721,0x0488, + 0x02FA,0x02D5,0x02DC,0x02B2,0x01A1,0x0077,0xFF7E,0xFED7, + 0xFE5A,0xFCC8,0xFAB2,0xF92F,0xF8AB,0xF844,0xF875,0xF90C, + 0xF833,0xF69D,0xF4D9,0xF44D,0xF4D1,0xF552,0xF518,0xF402, + 0xF3BC,0xF4F7,0xF5D6,0xF53C,0xF24C,0xF08B,0xF1C3,0xF396, + 0xF52B,0xF5B3,0xF63B,0xF6F4,0xF771,0xF7A0,0xF883,0xFA58, + 0xFB08,0xFACE,0xFA2B,0xF81A,0xF3EE,0xEC42,0xE26D,0xD6DF, + 0xCED9,0xCEC3,0xD7B1,0xE6B1,0xF43C,0xF6A5,0xE9A5,0xD3AA, + 0xC33E,0xBFF1,0xC8D2,0xDE82,0xF259,0xFCF2,0xFAEE,0xF0C5, + 0xE5A5,0xE073,0xE2BD,0xEC9B,0xF9F0,0x06B9,0x0F3C,0x12B7, + 0x12A5,0x1050,0x1144,0x153E,0x1938,0x1BD6,0x1D95,0x2169, + 0x2966,0x33E8,0x3C22,0x3F2D,0x3B79,0x3394,0x2D54,0x2BC4, + 0x3030,0x3A26,0x40A7,0x4040,0x40A2,0x3F23,0x352A,0x29EA, + 0x23E1,0x25BE,0x2C61,0x3281,0x3329,0x2DA3,0x247D,0x1B71, + 0x14C3,0x10C6,0x0F48,0x0D99,0x0B49,0x083A,0x061B,0x0455, + 0x01F1,0xFD74,0xF696,0xEFCE,0xE9BA,0xE58C,0xE4DE,0xE7F1, + 0xEC57,0xEE9D,0xEBC1,0xE50B,0xDD98,0xD7E0,0xD620,0xD980, + 0xE0D1,0xE760,0xEA3C,0xE8EB,0xE572,0xE286,0xE147,0xE26D, + 0xE6D1,0xECA5,0xF236,0xF573,0xF57F,0xF4E7,0xF5BA,0xF941, + 0xFCEB,0xFED0,0xFFB7,0x0115,0x026C,0x051F,0x0BDB,0x0FD4, + 0x11E6,0x11FD,0x0F61,0x0CBC,0x0C33,0x0EF6,0x141E,0x19AC, + 0x1C88,0x1BB7,0x183E,0x1393,0x105B,0x0FF7,0x11F2,0x141E, + 0x162A,0x1622,0x13AB,0x1021,0x0CE0,0x0A65,0x08CC,0x0764, + 0x0631,0x0539,0x03E7,0x0283,0x0159,0x0029,0xFE10,0xFAAB, + 0xF6B7,0xF393,0xF24A,0xF2B3,0xF39A,0xF493,0xF447,0xF128, + 0xED2A,0xEA85,0xE9F3,0xEA5A,0xEB41,0xEC95,0xEDD4,0xEE06, + 0xED5B,0xEC2F,0xEBBF,0xEC82,0xED67,0xEF08,0xEF83,0xF01A, + 0xF18F,0xF48A,0xF973,0xFBD7,0xFB68,0xFAA2,0xF9DC,0xFA42, + 0xFC62,0xFF0B,0x0228,0x0528,0x06A7,0x0709,0x062B,0x047D, + 0x0460,0x05C5,0x0878,0x0B0A,0x0C49,0x0BDB,0x0B1D,0x0B77, + 0x0AC5,0x09DB,0x0A5B,0x0B1E,0x0B2E,0x0B4B,0x0AD5,0x0A13, + 0x08CB,0x06EA,0x05E7,0x06B5,0x0708,0x0601,0x0373,0x00EA, + 0xFFD9,0x0062,0x0104,0x006A,0xFEB4,0xFC8F,0xFB3F,0xF91B, + 0xF763,0xF851,0xF96F,0xF9AB,0xF927,0xF761,0xF56A,0xF3E3, + 0xF387,0xF35F,0xF362,0xF300,0xF254,0xF176,0xF179,0xF30E, + 0xF3B8,0xF30B,0xF1B4,0xF12D,0xF1FB,0xF389,0xF527,0xF5C6, + 0xF674,0xF72D,0xF76E,0xF776,0xF7A2,0xF835,0xF856,0xF61D, + 0xF04B,0xE70E,0xDB28,0xCFFE,0xCA86,0xCE09,0xDA7A,0xEA47, + 0xF39A,0xF05B,0xE02D,0xCAC5,0xBF68,0xBF5C,0xCB2E,0xE307, + 0xF552,0xFB78,0xF4DE,0xE8DA,0xDF50,0xDCFD,0xE292,0xEE26, + 0xFB80,0x0656,0x0C69,0x0E20,0x0DFA,0x0ECD,0x10BC,0x13C2, + 0x1723,0x19E7,0x1CB5,0x20B8,0x2852,0x325F,0x3AF7,0x3DA9, + 0x38CA,0x2F34,0x2634,0x24D0,0x2DE1,0x390C,0x3F0F,0x3E87, + 0x3EF0,0x37E7,0x2B43,0x2382,0x21D3,0x2548,0x2B50,0x2FD1, + 0x2FFD,0x2AEA,0x2136,0x1733,0x0F63,0x0B88,0x0A51,0x0A96, + 0x09C5,0x06E0,0x0301,0xFF4D,0xFCC7,0xF9B6,0xF413,0xEC4E, + 0xE549,0xE2B0,0xE4AC,0xE879,0xEA97,0xE986,0xE617,0xE16A, + 0xDBC6,0xD706,0xD62B,0xD8FB,0xDE4E,0xE40B,0xE787,0xE752, + 0xE436,0xE0AA,0xDF44,0xE0C1,0xE4F7,0xE9D4,0xEE64,0xF23A, + 0xF4FA,0xF6C8,0xF70A,0xF7D6,0xF981,0xFB53,0xFD25,0xFEF7, + 0x02AE,0x0825,0x0D22,0x0F01,0x0D77,0x0C56,0x0B0F,0x0A23, + 0x0B47,0x0ED9,0x13C1,0x1829,0x1A0A,0x1891,0x150D,0x112C, + 0x0ED9,0x0F0F,0x1131,0x13AD,0x145B,0x12AD,0x0F67,0x0C44, + 0x0B6E,0x0A88,0x083D,0x0526,0x02A6,0x019C,0x010C,0x00E5, + 0x003C,0xFE0F,0xFBAB,0xF904,0xF653,0xF366,0xF15D,0xEFE5, + 0xF117,0xF266,0xF2BC,0xF0AF,0xED2A,0xEA8B,0xE959,0xEA82, + 0xEAB7,0xEACB,0xEC21,0xED81,0xEE56,0xED6E,0xEC6A,0xEBF6, + 0xEC3D,0xED9F,0xF0B9,0xF3BA,0xF50D,0xF5CD,0xF77B,0xF975, + 0xFAA3,0xFA9D,0xFA17,0xFA7C,0xFD5E,0x018D,0x04E6,0x05FA, + 0x04D0,0x034F,0x0389,0x05A8,0x0881,0x0A7A,0x0B3B,0x0B02, + 0x0B50,0x0C9E,0x0CD1,0x0C18,0x0AB6,0x0A71,0x0B0D,0x0C68, + 0x0D0C,0x0C17,0x0AB8,0x0A5A,0x0A27,0x09F6,0x08D2,0x06A8, + 0x0453,0x0309,0x040C,0x05DC,0x05A3,0x03B8,0x0102,0xFF2A, + 0xFE9C,0xFDA9,0xFC0B,0xFB0A,0xFB6E,0xFC59,0xFC40,0xFAAE, + 0xF91C,0xF708,0xF622,0xF59C,0xF5EB,0xF606,0xF66B,0xF6B7, + 0xF6A4,0xF6E8,0xF6E0,0xF63F,0xF307,0xF426,0xF67A,0xF7BE, + 0xF982,0xF9D7,0xF982,0xF914,0xF97A,0xFA66,0xFB24,0xFC1E, + 0xFCB2,0xFC46,0xFB27,0xF8EA,0xF546,0xF0F2,0xED03,0xEC03, + 0xEEB6,0xF41C,0xFA0C,0xFD45,0xFB91,0xF516,0xECC2,0xE7BC, + 0xE9D8,0xF0F7,0xF8D5,0xFE5F,0x009D,0xFF96,0xFCB6,0xF95A, + 0xF797,0xF8A2,0xFC57,0x011E,0x05AA,0x0996,0x0C33,0x0CA8, + 0x0AFA,0x0A32,0x0AAE,0x0B43,0x0BBF,0x0D0B,0x101F,0x14B4, + 0x181B,0x198C,0x1932,0x1709,0x12F5,0x1012,0x1003,0x134D, + 0x17D8,0x1B07,0x1CEF,0x1B29,0x17E4,0x13B0,0x0F15,0x0C9D, + 0x0D0A,0x0F50,0x1125,0x1207,0x10BA,0x0CED,0x07ED,0x03BB, + 0x01C7,0x01DD,0x0242,0x01C1,0x00AC,0xFF43,0xFEE7,0xFE10, + 0xFBE6,0xF988,0xF711,0xF325,0xF114,0xF29D,0xF5B4,0xF75F, + 0xF6D4,0xF4F2,0xF272,0xF031,0xEE9C,0xEE03,0xEE95,0xF12B, + 0xF45F,0xF65C,0xF65A,0xF515,0xF3A0,0xF3A9,0xF33F,0xF2D2, + 0xF5DB,0xF9B3,0xFBB7,0xFC52,0xFCDB,0xFD74,0xFCC5,0xFBF0, + 0xFBD4,0xFDAD,0xFFC1,0x0109,0x01D2,0x0275,0x0312,0x03D5, + 0x0395,0x0259,0x01B7,0x01B6,0x02EA,0x04C5,0x0692,0x077A, + 0x071D,0x05D2,0x0414,0x0224,0x01B8,0x0216,0x0383,0x04A1, + 0x0507,0x0432,0x0211,0x0025,0xFF2D,0xFF0F,0xFE81,0xFC49, + 0xFADC,0xFBFC,0xFE44,0xFE55,0xFC65,0xFA2D,0xF86F,0xF69E, + 0xF4F7,0xF520,0xF6B6,0xF7FD,0xF85E,0xF822,0xF7AE,0xF632, + 0xF301,0xF024,0xF08C,0xF3EA,0xF790,0xF923,0xF76D,0xF515, + 0xF35C,0xF354,0xF432,0xF56D,0xF6B0,0xF86F,0xF906,0xF97D, + 0xFAAE,0xFB2B,0xF9F6,0xFAE1,0xFA93,0xFA79,0xFD36,0xFD8C, + 0xFDEB,0xFE9B,0xFFEA,0x0104,0x023A,0x01DA,0x00D7,0xFF6A, + 0xFEBC,0x0085,0x037A,0x0594,0x0570,0x0444,0x0360,0x035E, + 0x02FF,0x0245,0x00DB,0x00CA,0x01E3,0x02F6,0x0307,0x0179, + 0xFF53,0xFDA4,0xFCCE,0xFC7B,0xFCC5,0xFC6C,0xFBBF,0xFB19, + 0xFA2E,0xF928,0xF831,0xF898,0xF94F,0xFA4A,0xFAB0,0xFADF, + 0xFB37,0xFAFC,0xF9E0,0xF8C5,0xF7DE,0xF8BB,0xF9DE,0xFA20, + 0xF96A,0xF7FC,0xF726,0xF6EA,0xF68B,0xF5D1,0xF52A,0xF483, + 0xF3F2,0xF2FE,0xF1F8,0xEF8E,0xEE67,0xEEF5,0xEE81,0xEE28, + 0xED87,0xEC7D,0xEBA4,0xEB2E,0xEAF7,0xEAFD,0xEAEB,0xEA6C, + 0xE9F2,0xE95E,0xE8D5,0xE817,0xE81E,0xE863,0xE756,0xE6F1, + 0xE7AE,0xE7FF,0xE765,0xE6CA,0xE6E0,0xE6D7,0xE6E5,0xE711, + 0xE6C0,0xE698,0xE685,0xE6DC,0xE6D2,0xE6BC,0xE69B,0xE6C0, + 0xE6F7,0xE735,0xE759,0xE765,0xE7E7,0xE83E,0xE88D,0xE992, + 0xE8ED,0xE867,0xE878,0xE8E7,0xE95B,0xE9C0,0xEA3E,0xEA91, + 0xEACA,0xEBBD,0xECF4,0xED9D,0xEE3F,0xEF3C,0xEFB6,0xEFF3, + 0xF061,0xF100,0xF16F,0xF1E5,0xF298,0xF35A,0xF3E9,0xF46A, + 0xF4A7,0xF4EF,0xF562,0xF5F6,0xF5F4,0xF5D8,0xF5F2,0xF662, + 0xF697,0xF721,0xF767,0xF7A8,0xF855,0xF8D8,0xF8F0,0xF942, + 0xFA20,0xFA61,0xFA3F,0xFA84,0xFB31,0xFB8A,0xFBD1,0xFBEF, + 0xFC6B,0xFC8D,0xFCF1,0xFD6E,0xFD9C,0xFE3D,0xFE7C,0xFEFC, + 0xFF4D,0xFFC2,0xFFE5,0x0054,0x00F7,0x012B,0x016F,0x01D1, + 0x027E,0x028C,0x0327,0x0373,0x03AA,0x03D7,0x045B,0x04A6, + 0x0520,0x05B9,0x0670,0x05F2,0x0559,0x07DE,0x0786,0x073B, + 0x07A7,0x07FF,0x085A,0x085C,0x089A,0x08FF,0x092C,0x09AD, + 0x099D,0x09B9,0x0A05,0x0A12,0x0A38,0x0A7D,0x0A71,0x0AA1, + 0x0AA2,0x0B0A,0x0B64,0x0BC9,0x0BB5,0x0B70,0x0B6C,0x0B7E, + 0x0BA0,0x0B9A,0x0BDA,0x0C5B,0x0C12,0x0C17,0x0C57,0x0C62, + 0x0C03,0x0C2E,0x0C18,0x0C3B,0x0C40,0x0CAA,0x0CB4,0x0C8C, + 0x0C77,0x0CD5,0x0D1E,0x0CDF,0x0D33,0x0D13,0x0D5C,0x0D53, + 0x0D3B,0x0D15,0x0D45,0x0D81,0x0D5F,0x0D85,0x0DCF,0x0E08, + 0x0E6F,0x1048,0x105F,0x0F8E,0x0FAB,0x0FA8,0x0FB5,0x0F7E, + 0x0F25,0x0F22,0x0EE8,0x0F1A,0x0F63,0x0F43,0x0F2D,0x0F22, + 0x0F15,0x0EBF,0x0E3F,0x0E7E,0x0E77,0x0DFB,0x0F25,0x0F17, + 0x0E54,0x0DF6,0x0E1C,0x0D80,0x0D93,0x0D77,0x0D70,0x0DCF, + 0x0DA8,0x0D48,0x0D3E,0x0D0E,0x0D2B,0x0D49,0x0D98,0x0DBC, + 0x0D01,0x0CD0,0x0CE0,0x0CBD,0x0D0F,0x0D0B,0x0BCE,0x0B22, + 0x0BE1,0x0C3E,0x0C26,0x0C37,0x0C4A,0x0C13,0x0BB0,0x0B3D, + 0x0ADB,0x0A79,0x09E2,0x097F,0x098D,0x08C8,0x0890,0x08E0, + 0x08EB,0x08D6,0x08A4,0x08C0,0x0885,0x081B,0x0825,0x0831, + 0x0855,0x08D1,0x08C8,0x08A7,0x0879,0x07F7,0x0824,0x0865, + 0x0893,0x0811,0x07FA,0x0816,0x07C2,0x07B6,0x07EA,0x0803, + 0x0824,0x080C,0x07E1,0x0766,0x073C,0x0777,0x07BC,0x0776, + 0x0773,0x079C,0x07DB,0x07CE,0x0732,0x0736,0x0712,0x069E, + 0x0665,0x065C,0x0669,0x069B,0x0663,0x0675,0x0623,0x05FA, + 0x05B4,0x0582,0x0504,0x0551,0x059D,0x05E4,0x055A,0x0547, + 0x0599,0x053F,0x050F,0x06BB,0x04BC,0x04FA,0x055B,0x0536, + 0x0527,0x04FC,0x053F,0x0510,0x0541,0x052A,0x0556,0x04B7, + 0x0467,0x0480,0x04CD,0x04B6,0x0452,0x0402,0x03F6,0x0452, + 0x0439,0x03C6,0x0370,0x03BE,0x0364,0x0387,0x0358,0x035C, + 0x034D,0x02F9,0x033D,0x034C,0x0349,0x0308,0x035A,0x02F3, + 0x031C,0x02E0,0x02D8,0x030E,0x0363,0x035C,0x037E,0x02D8, + 0x02B1,0x0304,0x0308,0x02CD,0x029F,0x02C8,0x0314,0x0306, + 0x02A1,0x02EE,0x02FD,0x026A,0x027F,0x02D2,0x02ED,0x0329, + 0x02F7,0x0289,0x0185,0xFF5F,0xFFAF,0xFFCE,0xFFBC,0xFFDA, + 0xFFB2,0xFF70,0xFF48,0xFFC6,0xFF9C,0xFF5B,0xFF44,0xFF7B, + 0xFF51,0xFFB3,0x005E,0x01A2,0x01E0,0x0187,0x0093,0x00CB, + 0x01DE,0x0350,0x04EA,0x0635,0x0623,0x048C,0x075A,0x083E, + 0x093D,0x0ADF,0x0BA2,0x0BAD,0x0BB5,0x0BCD,0x0C23,0x0C50, + 0x0D10,0x0D84,0x0D7A,0x0D1F,0x0C39,0x0B8B,0x0B7A,0x0C2D, + 0x0D78,0x0DD0,0x0DEE,0x0E19,0x0EA4,0x0E77,0x0E15,0x0E56, + 0x0F0C,0x0FFD,0x1071,0x1101,0x11B7,0x123D,0x1259,0x119C, + 0x11D8,0x1279,0x133F,0x13CB,0x1452,0x1556,0x15A1,0x14A3, + 0x139D,0x13A7,0x150A,0x16A3,0x1722,0x16CE,0x15A3,0x1496, + 0x13B6,0x1399,0x14CE,0x16F8,0x17C8,0x174C,0x161B,0x14DF, + 0x13C8,0x136F,0x1653,0x18DF,0x189A,0x17DA,0x16A9,0x1585, + 0x1539,0x1541,0x1458,0x13AC,0x13B2,0x13C4,0x13DA,0x13FD, + 0x1362,0x12CF,0x1198,0x104C,0x1039,0x0FED,0x0FC2,0x1017, + 0x0F2F,0x0DCC,0x0DB4,0x0EB8,0x0EB9,0x0E57,0x0C91,0x0A77, + 0x0946,0x097D,0x0AA2,0x0B94,0x0AA5,0x07AE,0x0333,0xFDBC, + 0xF941,0xF66A,0xF753,0xFAE1,0xFF4F,0x0404,0x05BA,0x0184, + 0xF8C5,0xF1B2,0xEDDC,0xEF74,0xF6F9,0xFFEE,0x0642,0x07D0, + 0x04A5,0xFEB4,0xF89E,0xF57E,0xF703,0xFC1E,0x0237,0x07A9, + 0x0ABD,0x0A54,0x077E,0x038D,0x00C6,0x0061,0x027E,0x05B1, + 0x0813,0x0A36,0x0B2C,0x0AD2,0x090C,0x06D7,0x0578,0x0444, + 0x02D0,0x01F1,0x0199,0x0226,0x031F,0x0324,0x023A,0x006B, + 0xFD8B,0xF9EF,0xF60D,0xF3A2,0xF380,0xF463,0xF5E1,0xF71A, + 0xF6DC,0xF4D1,0xF0C3,0xEC43,0xE97F,0xE860,0xE83A,0xEA25, + 0xEC8A,0xEF1C,0xEFF7,0xEE0C,0xEA7D,0xE69F,0xE467,0xE455, + 0xE650,0xE9DE,0xED76,0xEEED,0xEF46,0xEE7D,0xEDAC,0xEC71, + 0xEBA1,0xEC1B,0xED0F,0xEED5,0xF347,0xF3F1,0xF505,0xF627, + 0xF57C,0xF48E,0xF353,0xF260,0xF236,0xF35E,0xF53A,0xF71B, + 0xF8FB,0xFA30,0xF919,0xF664,0xF35F,0xF173,0xF112,0xF2F8, + 0xF5AE,0xF733,0xF6C9,0xF48E,0xF1CA,0xEF84,0xEE7C,0xEE4E, + 0xEEAF,0xEEFC,0xEEF9,0xEF19,0xEEF9,0xEE74,0xED1A,0xEBA4, + 0xEAEC,0xEA89,0xEAFD,0xEB60,0xEB3C,0xEA4A,0xEA0B,0xEABE, + 0xEC49,0xED7A,0xED4A,0xEC74,0xEB96,0xEB1C,0xEB89,0xEC8B, + 0xEDEA,0xEFF0,0xF0FA,0xF143,0xF115,0xF067,0xEFEF,0xEFD9, + 0xF0FF,0xF2EB,0xF4A3,0xF4A3,0xF1EB,0xF165,0xF1AC,0xF23C, + 0xF36C,0xF501,0xF66A,0xF5D9,0xF487,0xF40D,0xF4A0,0xF589, + 0xF61F,0xF63D,0xF6A3,0xF681,0xF5A5,0xF56B,0xF544,0xF486, + 0xF4A1,0xF4BA,0xF485,0xF539,0xF673,0xF5BE,0xF410,0xF243, + 0xF141,0xF20B,0xF313,0xF3B2,0xF4C9,0xF3EA,0xF2C2,0xF20E, + 0xF230,0xF320,0xF345,0xF32B,0xF31E,0xF35B,0xF3B7,0xF51A, + 0xF5CD,0xF4B9,0xF4D6,0xF541,0xF4D5,0xF55D,0xF64F,0xF699, + 0xF735,0xF739,0xF811,0xF92B,0xF9E1,0xFA41,0xFADA,0xFB02, + 0xFB75,0xFB7C,0xFB5A,0xFC27,0xFD02,0xFCC2,0xFC04,0xFC01, + 0xFCC2,0xFD69,0xFD8D,0xFCF4,0xFC57,0xFBFF,0xFBB5,0xFC49, + 0xFCF0,0xFD35,0xFCEC,0xFC1A,0xFB6C,0xFAB5,0xFA5D,0xFA4F, + 0xFA92,0xFAE0,0xFAE1,0xFAC6,0xFA99,0xFAE4,0xF8D5,0xF4FB, + 0xF01A,0xE9F9,0xE337,0xDBDA,0xD7AA,0xD891,0xDF2E,0xEA03, + 0xF3AA,0xF706,0xEFEC,0xE18B,0xD378,0xCC67,0xD0FC,0xDFBB, + 0xF1B0,0xFFF7,0x0676,0x03ED,0xFA82,0xEF60,0xE909,0xEA8E, + 0xF3F6,0x02B2,0x11FF,0x1CFF,0x1DF4,0x1A64,0x1354,0x0ACA, + 0x08EF,0x0D94,0x15FA,0x1E7D,0x23DA,0x25C5,0x24CF,0x21F7, + 0x1E8D,0x1B74,0x1990,0x17E4,0x163A,0x14BC,0x1420,0x150B, + 0x16AA,0x170A,0x14F5,0x102D,0x092B,0x01B8,0xFBB1,0xF896, + 0xF955,0xFC7C,0xFF92,0x00C4,0xFE3A,0xF7AD,0xEFE6,0xE8E6, + 0xE44D,0xE39B,0xE799,0xED92,0xF214,0xF36B,0xF0B1,0xEBB7, + 0xE6DE,0xE3A1,0xE38B,0xE692,0xEB85,0xF107,0xF500,0xF6D0, + 0xF718,0xF5EE,0xF44C,0xF3E9,0xF5AA,0xF965,0xFD7E,0x0115, + 0x045B,0x0775,0x0AE5,0x0AAF,0x0A2A,0x0A85,0x0B57,0x0BB3, + 0x0C03,0x0D78,0x0E7C,0x0EF5,0x0F9A,0x1028,0x1022,0x0E6E, + 0x0CC0,0x0B59,0x0A6A,0x08E7,0x07C7,0x0706,0x0818,0x0890, + 0x0719,0x03E5,0x003B,0xFC2C,0xF8EB,0xF834,0xF93E,0xFB12, + 0xFBA4,0xFA5B,0xF775,0xF471,0xF194,0xEF7A,0xEE73,0xEF69, + 0xF106,0xF2F6,0xF391,0xF264,0xF07E,0xF012,0xEF38,0xEEC6, + 0xF110,0xF2D3,0xF48B,0xF615,0xF6CC,0xF7BC,0xF8AA,0xF9F2, + 0xFB18,0xFB8D,0xFC4B,0xFD63,0xFDA2,0xFD9A,0xFDE1,0xFFFD, + 0x02B4,0x0527,0x0674,0x0658,0x044F,0x020A,0x014D,0x02B7, + 0x0546,0x086F,0x0A1D,0x09A2,0x06BA,0x0327,0x0038,0xFF1D, + 0xFF9D,0x016F,0x0359,0x03B0,0x0245,0x0016,0xFD7D,0xFB53, + 0xFA62,0xFA0F,0xFA17,0xFA99,0xFB11,0xFA9A,0xF979,0xF7BC, + 0xF6C2,0xF619,0xF598,0xF646,0xF6DE,0xF750,0xF6EB,0xF55B, + 0xF48A,0xF621,0xF7E8,0xF90B,0xF8C0,0xF824,0xF725,0xF690, + 0xF807,0xFAF0,0xFCF6,0xFDDA,0xFE6A,0xFF00,0xFE72,0xFE35, + 0xFE96,0xFFB9,0x004E,0x02CE,0x04FE,0x052B,0x06B2,0x04B5, + 0x02D6,0x0221,0x02D8,0x0402,0x05E0,0x0797,0x07F6,0x06D8, + 0x04F5,0x032C,0x0299,0x029D,0x027B,0x02A8,0x02E5,0x0377, + 0x03A5,0x024C,0x0057,0xFE9D,0xFDD4,0xFE85,0xFEE7,0xFF3B, + 0xFEE7,0xFD81,0xFA48,0xF5BE,0xEF4F,0xE7C6,0xDEF1,0xD662, + 0xD1B6,0xD44B,0xDE6C,0xEBFB,0xF5CC,0xF524,0xE9F6,0xD9A0, + 0xCBB8,0xC74D,0xD021,0xE305,0xF75D,0x0545,0x09DC,0x04EB, + 0xFA6D,0xF001,0xEAE1,0xEF21,0xFC18,0x0DEA,0x1E60,0x28E2, + 0x29B1,0x22FC,0x1891,0x0FE7,0x0F03,0x1819,0x23DB,0x2D67, + 0x3203,0x3139,0x2D5E,0x29A8,0x2797,0x25DB,0x241B,0x219B, + 0x1F10,0x1DF0,0x1DE3,0x1E96,0x1ED2,0x1DAB,0x1928,0x1316, + 0x0DA3,0x06F1,0xFF98,0xFB35,0xFA86,0xFD39,0x00F2,0x035F, + 0x0189,0xF978,0xEE18,0xE2F5,0xDE62,0xE14E,0xE83D,0xEFFC, + 0xF48F,0xF483,0xEFCF,0xE887,0xE2FE,0xE0F0,0xE352,0xE9C4, + 0xF006,0xF65A,0xFACD,0xFB88,0xF9B0,0xF705,0xF5BB,0xF811, + 0xFC66,0x018C,0x066C,0x09B3,0x0BD6,0x0E7E,0x1110,0x12EB, + 0x141C,0x1380,0x11F6,0x114E,0x129D,0x1578,0x183C,0x1A91, + 0x1C48,0x1CBF,0x1AB7,0x15B4,0x1039,0x0D3A,0x0C06,0x0DD1, + 0x1114,0x139B,0x13C1,0x0FC1,0x0878,0x0176,0xFD33,0xFBB2, + 0xFC58,0xFDE0,0xFF1A,0xFECA,0xFC2E,0xF8FA,0xF4C1,0xF0FA, + 0xEEA1,0xEDC7,0xEEEC,0xF0FB,0xF37A,0xF3BA,0xF2EB,0xF1F3, + 0xF0D0,0xF049,0xF0B5,0xF1B0,0xF23C,0xF30A,0xF504,0xF7D2, + 0xFA59,0xFBC6,0xFCBB,0xFCCD,0xFC83,0xFC4D,0xFD4A,0xFFB6, + 0x028D,0x0573,0x086E,0x0967,0x08CE,0x0AD6,0x08F6,0x072C, + 0x07EB,0x0993,0x0B7A,0x0DE8,0x0FB6,0x0FE3,0x0DBE,0x0ABF, + 0x0895,0x0744,0x0787,0x07E6,0x089C,0x095A,0x0928,0x078C, + 0x0538,0x02D3,0x0015,0xFE6E,0xFD47,0xFD6C,0xFE03,0xFE8F, + 0xFE05,0xFC1E,0xFA1F,0xF845,0xF656,0xF5D7,0xF6A9,0xF78F, + 0xF829,0xF795,0xF727,0xF650,0xF605,0xF642,0xF6D9,0xF73C, + 0xF75B,0xF7B8,0xF872,0xF9C3,0xFB06,0xFBA5,0xFBD8,0xFC4A, + 0xFD46,0xFE63,0xFEB9,0xFEB2,0xFF68,0x01A9,0x0400,0x0591, + 0x061A,0x075B,0x074F,0x0597,0x057D,0x06B0,0x0986,0x0AF9, + 0x0A6B,0x090D,0x07C5,0x06B3,0x05A7,0x0577,0x05DA,0x0699, + 0x05FB,0x05AA,0x0528,0x03F8,0x0222,0xFFE8,0xFF27,0xFF59, + 0xFF4E,0xFFD4,0xFFCD,0xFD76,0xFB2A,0xF9A2,0xF78B,0xF382, + 0xECA4,0xE3B0,0xDA2D,0xD20D,0xCF80,0xD539,0xE16F,0xEE65, + 0xF592,0xF1B4,0xE441,0xD2CA,0xC6A1,0xC682,0xD357,0xE807, + 0xFD77,0x09C6,0x0A36,0x01B4,0xF505,0xEB95,0xEA3E,0xF289, + 0x01FA,0x1428,0x2276,0x28DD,0x266F,0x1D50,0x14B6,0x10DB, + 0x155B,0x1E8B,0x27F8,0x2EAE,0x316F,0x30BE,0x2E82,0x2C26, + 0x2A7F,0x2809,0x24EB,0x2197,0x1EF1,0x1DA5,0x1E12,0x1FA9, + 0x20CE,0x202E,0x1BDF,0x13A3,0x09AA,0x0031,0xF9DC,0xF8DC, + 0xFC45,0x0224,0x0587,0x038C,0xFB25,0xEFC9,0xE500,0xDE5A, + 0xDDFD,0xE35B,0xEAE4,0xF008,0xF12F,0xEEEC,0xE993,0xE30E, + 0xDE89,0xDDEC,0xE194,0xE7C6,0xEE39,0xF373,0xF5D3,0xF5F3, + 0xF42C,0xF369,0xF42C,0xF71B,0xFAA2,0xFDDE,0x00BB,0x0449, + 0x07B1,0x0AB6,0x0DC4,0x1137,0x0ED2,0x0C97,0x0BC8,0x0C49, + 0x0F89,0x1361,0x1671,0x1830,0x186A,0x168F,0x132F,0x0F71, + 0x0C86,0x0AC4,0x0ABA,0x0BB0,0x0DB9,0x0F5B,0x0DB7,0x0989, + 0x034A,0xFDE8,0xFAD3,0xFA46,0xFAF4,0xFB93,0xFB9E,0xFA6F, + 0xF7B5,0xF3EC,0xF19C,0xF0D1,0xEFC2,0xEE24,0xEDA7,0xEDCA, + 0xEEA7,0xEED0,0xEEFE,0xEF6E,0xEFAB,0xF08D,0xF059,0xF02A, + 0xF077,0xF130,0xF2AA,0xF4E5,0xF837,0xFBE4,0xFE2F,0xFD56, + 0xFBBC,0xFB35,0xFC10,0xFEE6,0x025B,0x05EF,0x086E,0x090C, + 0x08E1,0x08B1,0x0790,0x059C,0x05FC,0x0799,0x094A,0x0A8A, + 0x0B18,0x0AF3,0x0A13,0x0899,0x073B,0x066D,0x060A,0x0578, + 0x0462,0x03B7,0x034E,0x029C,0x024C,0x0156,0xFED4,0xFD14, + 0xFAEF,0xF93B,0xF90E,0xF966,0xF98F,0xF9A5,0xF988,0xF837, + 0xF60F,0xF46C,0xF335,0xF3A8,0xF510,0xF611,0xF689,0xF66C, + 0xF518,0xF436,0xF3FB,0xF5A1,0xF739,0xF7F7,0xF9EC,0xFB95, + 0xFAB5,0xFAE2,0xFBA4,0xFC58,0xFDC0,0xFF89,0x00BF,0x01FB, + 0x02D9,0x0323,0x0422,0x0576,0x0662,0x07A6,0x07F0,0x07F8, + 0x07D2,0x0826,0x0867,0x08CE,0x08C5,0x07ED,0x07F8,0x08A2, + 0x0951,0x0956,0x081C,0x065C,0x04BE,0x041A,0x03C6,0x040D, + 0x041A,0x0341,0x0268,0x0138,0xFFC1,0xFEE3,0xFF01,0xFE72, + 0xFCD4,0xF91C,0xF2E3,0xEAF5,0xE223,0xDA81,0xD4FC,0xD483, + 0xDAD0,0xE61D,0xF16B,0xF61B,0xF086,0xE19E,0xD0D6,0xC80C, + 0xCC12,0xDB90,0xEFBC,0x009A,0x08F6,0x06B3,0xFCFB,0xF2B0, + 0xED83,0xF021,0xF99D,0x06EB,0x15F6,0x2234,0x2883,0x26C8, + 0x1F9A,0x18EA,0x1705,0x17E2,0x1FD5,0x29E6,0x3032,0x33BE, + 0x3298,0x2FDF,0x2D1E,0x2AA4,0x2765,0x22EB,0x1FD9,0x1F02, + 0x2016,0x2191,0x2218,0x21B4,0x1EAC,0x17FA,0x0F39,0x06E2, + 0x0082,0xFD01,0xFC20,0xFE0B,0x00E5,0x01F2,0xFF0F,0xF833, + 0xEEA0,0xE635,0xE130,0xE023,0xE314,0xE905,0xEDA0,0xEFCA, + 0xEE3D,0xE99F,0xE3F5,0xE04B,0xDFD3,0xE277,0xE7B4,0xEE0B, + 0xF362,0xF64D,0xF700,0xF661,0xF602,0xF674,0xF7F1,0xFABC, + 0xFE99,0x027C,0x06D6,0x0AB8,0x0DCC,0x1024,0x106F,0x0F6F, + 0x0F64,0x11F2,0x12A0,0x1406,0x1650,0x18FF,0x1AA1,0x1AB3, + 0x1942,0x1641,0x1255,0x0E3B,0x0BBF,0x0CA1,0x0ECE,0x1055, + 0x0FCE,0x0D78,0x0966,0x03CB,0xFE59,0xFBD1,0xFBC6,0xFB64, + 0xFB37,0xFB82,0xFAEB,0xF8FB,0xF5D9,0xF13E,0xEDEB,0xEC4F, + 0xEBE2,0xECF0,0xEEF9,0xF07D,0xF10C,0xF036,0xEDE7,0xEC4A, + 0xEC17,0xED0F,0xEEDE,0xF14A,0xF33A,0xF3DD,0xF38E,0xF4B6, + 0xF735,0xF9A7,0xFB98,0xFCA2,0xFD00,0xFD39,0xFE5E,0x004A, + 0x02D1,0x0528,0x064F,0x069E,0x05BD,0x04E1,0x04D0,0x0516, + 0x05C2,0x06C4,0x07F6,0x098E,0x0A1E,0x0A5B,0x088A,0x056C, + 0x02B8,0x017C,0x02B2,0x04A7,0x058D,0x04DB,0x028E,0xFFE4, + 0xFD0F,0xFB0F,0xFA74,0xFA7C,0xFA68,0xF98E,0xF8EC,0xF8C7, + 0xF7C2,0xF5EA,0xF397,0xF2AC,0xF2AE,0xF3D3,0xF4EF,0xF521, + 0xF4D8,0xF367,0xF198,0xF10A,0xF287,0xF525,0xF70B,0xF734, + 0xF6A0,0xF698,0xF6EA,0xF70A,0xF7B8,0xF8E2,0xFAE5,0xFC89, + 0xFDA3,0xFE53,0xFF0A,0xFF51,0xFF31,0xFF85,0x0106,0x0365, + 0x0570,0x052E,0x05B5,0x061E,0x03E1,0x04D6,0x0507,0x0578, + 0x05E2,0x0567,0x0473,0x03D9,0x03D0,0x043F,0x0406,0x036B, + 0x0338,0x0254,0x0110,0xFF53,0xFE03,0xFD8C,0xFE71,0xFF7D, + 0x0045,0xFF69,0xFD32,0xF9FB,0xF5CF,0xF201,0xEE4B,0xE89F, + 0xE012,0xD70A,0xD0A3,0xD158,0xD92F,0xE5E9,0xF17F,0xF4EB, + 0xEC38,0xDB77,0xCC27,0xC5DC,0xCD27,0xDE57,0xF2C6,0x02EA, + 0x09B6,0x0675,0xFBF2,0xF046,0xEA64,0xED7B,0xF9C3,0x0BA3, + 0x1DFC,0x29CB,0x2B79,0x2475,0x19BB,0x128C,0x139E,0x1B9C, + 0x26D0,0x2FD5,0x32C9,0x30C0,0x2E11,0x2B38,0x2923,0x27BC, + 0x2560,0x22B6,0x2066,0x1E75,0x1DA4,0x1DDA,0x1E73,0x1D9E, + 0x1ACC,0x1568,0x0E49,0x061B,0xFF67,0xFABA,0xF9AF,0xFCFC, + 0x0152,0x0380,0x013D,0xF997,0xEE08,0xE3CA,0xDE4A,0xDFDE, + 0xE6BD,0xEF3E,0xF48E,0xF3AD,0xEDF9,0xE63B,0xE045,0xDE56, + 0xE130,0xE75E,0xEF04,0xF58F,0xF966,0xF969,0xF834,0xF4DF, + 0xF31D,0xF519,0xFA20,0x014C,0x06FD,0x09BB,0x098B,0x09B9, + 0x0B77,0x0E6A,0x10AB,0x1284,0x1429,0x14AF,0x137C,0x1327, + 0x14A9,0x1761,0x1936,0x190F,0x1812,0x15C2,0x12AA,0x0E9D, + 0x0B2B,0x0AD4,0x0CBE,0x0EF4,0x0FD7,0x0DF0,0x097E,0x0357, + 0xFD2D,0xF9BA,0xF937,0xFA90,0xFC3B,0xFD30,0xFC03,0xF863, + 0xF385,0xEF27,0xEC56,0xEC36,0xEE1E,0xF05F,0xF1F7,0xF1FB, + 0xF085,0xEDFE,0xEBB1,0xEB46,0xED1A,0xEF25,0xF1D6,0xF3D6, + 0xF4A1,0xF46C,0xF4AB,0xF65B,0xF8E6,0xFBAF,0xFD1E,0xFE01, + 0xFE29,0xFECA,0xFFED,0x0158,0x0381,0x06AB,0x0937,0x094F, + 0x082E,0x07C8,0x071F,0x0639,0x08D8,0x09C1,0x0B5E,0x0CB3, + 0x0C6C,0x0A5C,0x085B,0x06C6,0x05B1,0x053E,0x05DE,0x06B1, + 0x065B,0x0414,0x01A3,0x0013,0xFEA2,0xFD74,0xFC5A,0xFBAE, + 0xFB1D,0xFACF,0xFA2C,0xF8BA,0xF713,0xF5D2,0xF446,0xF3FA, + 0xF47D,0xF4C8,0xF450,0xF38E,0xF2F2,0xF3B0,0xF560,0xF5BC, + 0xF526,0xF434,0xF3C8,0xF4F6,0xF68C,0xF875,0xFAB9,0xFBE5, + 0xFB41,0xFA97,0xFA87,0xFBA6,0xFD41,0xFE61,0xFF8C,0x01B8, + 0x03ED,0x04B4,0x041A,0x02C4,0x019D,0x01D8,0x03AB,0x0697, + 0x0A75,0x0BBE,0x0989,0x0782,0x0612,0x062A,0x073C,0x07CF, + 0x07DF,0x07B4,0x0684,0x04B2,0x0305,0x02D4,0x02DE,0x036C, + 0x0339,0x0214,0x0094,0xFE71,0xFD75,0xFE16,0xFD39,0xFB32, + 0xF95C,0xF5C9,0xEF1F,0xE654,0xDBFC,0xD289,0xCDD0,0xD169, + 0xDE16,0xED8C,0xF74C,0xF50A,0xE7DC,0xD55B,0xC693,0xC3FA, + 0xD008,0xE510,0xF9BF,0x06AE,0x08BD,0x00D9,0xF577,0xED5C, + 0xEAE0,0xF0BD,0xFF18,0x113B,0x1FFE,0x276E,0x26F8,0x211D, + 0x189D,0x1343,0x1474,0x1B79,0x24CA,0x2CB7,0x30D7,0x30C9, + 0x2EF1,0x2C9D,0x29F9,0x2748,0x2410,0x209F,0x1D39,0x1BDF, + 0x1CFB,0x1FF2,0x21A4,0x1F76,0x19DF,0x11E5,0x0874,0x0009, + 0xFAB4,0xF98A,0xFB6A,0xFEB6,0x0176,0x011D,0xFC4B,0xF332, + 0xE844,0xDF8E,0xDCB9,0xDF5B,0xE5BE,0xEC43,0xEFEA,0xEF08, + 0xEB06,0xE495,0xDF97,0xDD7D,0xDED5,0xE3D3,0xEAAC,0xF1B4, + 0xF66B,0xF7CC,0xF67C,0xF495,0xF36B,0xF3FF,0xF718,0xFB4A, + 0x0083,0x049E,0x0808,0x0B64,0x0E5E,0x0F26,0x0D9D,0x0B0F, + 0x0984,0x0AA1,0x0FD3,0x1235,0x1576,0x1886,0x17BC,0x15CB, + 0x1205,0x0E3A,0x0BA2,0x0A0E,0x0951,0x0A9C,0x0C67,0x0D70, + 0x0BC4,0x081A,0x0335,0xFEEB,0xFB88,0xF907,0xF7D9,0xF7C5, + 0xF839,0xF86F,0xF792,0xF57F,0xF31D,0xEFE6,0xEC31,0xE99D, + 0xE982,0xEA7E,0xEBB5,0xECF3,0xEE2F,0xF012,0xF095,0xEE58, + 0xEBDB,0xEA94,0xEB34,0xEE37,0xF19E,0xF585,0xF96B,0xFAF7, + 0xFAA3,0xF95B,0xF967,0xFA62,0xFC2E,0xFE14,0x00A6,0x0474, + 0x0744,0x08AA,0x08BB,0x0832,0x07A8,0x065E,0x0697,0x07FC, + 0x09E7,0x0B28,0x0924,0x08AB,0x083B,0x0754,0x0665,0x048C, + 0x03A9,0x0345,0x0309,0x02E8,0x02C7,0x0305,0x02C1,0x0175, + 0xFE94,0xFC35,0xF9C8,0xF93B,0xF934,0xF8D5,0xF995,0xF9ED, + 0xF948,0xF74D,0xF649,0xF569,0xF422,0xF295,0xF180,0xF238, + 0xF48E,0xF678,0xF7E3,0xF894,0xF7CF,0xF6A3,0xF5FB,0xF5D5, + 0xF722,0xF940,0xFACF,0xFC4A,0xFD55,0xFFC2,0x0153,0x003F, + 0xFF50,0xFF23,0xFFFB,0x0133,0x029E,0x04BB,0x0718,0x0880, + 0x0910,0x0895,0x0749,0x06AE,0x06B8,0x066D,0x0702,0x08E7, + 0x0A3F,0x0A63,0x0977,0x07A1,0x054C,0x0319,0x01DB,0x0263, + 0x03DC,0x057D,0x05F8,0x04D1,0x027C,0xFF8F,0xFD1B,0xFCBF, + 0xFD4C,0xFDC7,0xFD27,0xFA4A,0xF573,0xEEE6,0xE77F,0xE015, + 0xDA81,0xD908,0xDC6C,0xE47D,0xEE3B,0xF514,0xF273,0xE824, + 0xDB01,0xD23A,0xD24A,0xDBFF,0xEB9F,0xFA8B,0x03DA,0x052E, + 0xFF8C,0xF7C2,0xF21E,0xF16F,0xF6D7,0x00CA,0x0E34,0x1A4C, + 0x2173,0x2142,0x1B97,0x1560,0x127E,0x1429,0x193A,0x1FEE, + 0x264F,0x2A2D,0x287E,0x2884,0x2897,0x260D,0x232F,0x1EAC, + 0x1A7A,0x1893,0x191D,0x1AF2,0x1C5E,0x1C86,0x19CE,0x14CA, + 0x0E21,0x0714,0x0144,0xFD69,0xFC36,0xFD06,0xFF05,0x0006, + 0xFE87,0xF9FD,0xF33C,0xEC7E,0xE771,0xE545,0xE671,0xEA31, + 0xEE91,0xF098,0xEFCD,0xED4C,0xEA42,0xE7CC,0xE680,0xE6F1, + 0xE9BC,0xEE53,0xF28B,0xF650,0xF8E3,0xFA45,0xFA1E,0xF907, + 0xF811,0xF931,0xFD4B,0x0203,0x05BB,0x0888,0x0AF3,0x0BD5, + 0x0C09,0x0C34,0x0C78,0x0BEB,0x0B2C,0x0BBE,0x0E89,0x12C5, + 0x17D5,0x1808,0x1633,0x1353,0x0F3E,0x0BD7,0x09CC,0x09B6, + 0x0A7C,0x0C2C,0x0C47,0x0AE8,0x0825,0x042C,0x0009,0xFC5B, + 0xF9F9,0xF886,0xF853,0xF823,0xF900,0xF930,0xF711,0xF3C1, + 0xF051,0xEE0B,0xED71,0xEDAF,0xEED8,0xEFAB,0xF037,0xF0B9, + 0xF0C7,0xF133,0xF073,0xF002,0xEF72,0xEF51,0xF05E,0xF335, + 0xF6DD,0xF993,0xFB2A,0xFBD5,0xFB86,0xFA3F,0xF9F0,0xFB7D, + 0xFD5A,0x0068,0x03F7,0x06A8,0x07CD,0x07C9,0x06FF,0x059B, + 0x048D,0x04EA,0x068A,0x0810,0x0891,0x0938,0x0928,0x082D, + 0x06C8,0x0517,0x045B,0x041E,0x0416,0x03D0,0x02F6,0x028C, + 0x021F,0x0157,0x0009,0xFE65,0xFD44,0xFBBA,0xFA01,0xF94D, + 0xF9F1,0xFB48,0xFB8E,0xFAE1,0xF8AB,0xF664,0xF464,0xF3B2, + 0xF41A,0xF514,0xF63A,0xF6DA,0xF6FD,0xF695,0xF59C,0xF565, + 0xF597,0xF6A1,0xF798,0xF86C,0xF955,0xFA6D,0xFAFF,0xFAF0, + 0xFA77,0xFB61,0xFCD1,0xFEBD,0xFF85,0xFFCB,0xFF69,0xFF70, + 0xFF5B,0x0016,0x024C,0x0535,0x0667,0x051E,0x036E,0x02BE, + 0x016F,0x0367,0x0500,0x046D,0x06F2,0x06A3,0x0481,0x0369, + 0x0256,0x0111,0x005C,0xFFF3,0x00BD,0x0212,0x02EC,0x0287, + 0x0043,0xFDC5,0xFB6E,0xFAA1,0xFC10,0xFDD7,0xFEEE,0xFD6C, + 0xFA4A,0xF60E,0xF23F,0xEEFA,0xEC69,0xEBFF,0xEF14,0xF4F5, + 0xFA8F,0xFC76,0xFA61,0xF3F8,0xECFE,0xE95A,0xEB27,0xF242, + 0xFB3A,0x020C,0x03C0,0x0254,0xFF36,0xFBEF,0xF9C0,0xFA71, + 0xFE32,0x0363,0x08F4,0x0DB6,0x107A,0x0FAD,0x0C73,0x08B9, + 0x0784,0x09F6,0x0D84,0x10E1,0x129B,0x12C5,0x1148,0x0FA7, + 0x0F25,0x0DC5,0x0C86,0x0BB5,0x09CB,0x0827,0x075E,0x0849, + 0x0996,0x0A65,0x09D3,0x0719,0x030C,0xFF1B,0xFCE6,0xFC8D, + 0xFCD3,0xFCD7,0xFDEA,0xFF20,0xFE68,0xFC61,0xF92E,0xF4B8, + 0xF0E4,0xEFCA,0xF20B,0xF671,0xFA81,0xFC2C,0xF9FA,0xF607, + 0xF29D,0xF08A,0xF188,0xF3A4,0xF630,0xF83E,0xF920,0xF8DB, + 0xF825,0xF77B,0xF6E9,0xF68F,0xF6E3,0xF8DE,0xF866,0xF7CB, + 0xF756,0xF705,0xF66E,0xF5B2,0xF618,0xF6E4,0xF820,0xF946, + 0xFA02,0xFA76,0xFAF6,0xFB91,0xFC6A,0xFC5B,0xFBED,0xFB2D, + 0xFA5C,0xF9A8,0xF935,0xF96E,0xF903,0xF893,0xF82D,0xF782, + 0xF666,0xF58B,0xF4B1,0xF3E3,0xF309,0xF26F,0xF1F9,0xF129, + 0xF09C,0xEFF2,0xEF21,0xEE4F,0xED71,0xEC8B,0xEBEF,0xEBCF, + 0xEBA3,0xEB66,0xEB45,0xEAC1,0xE9FE,0xE997,0xE970,0xE93B, + 0xE95E,0xE979,0xE96D,0xE8B9,0xE8B0,0xE8C6,0xE89F,0xE82D, + 0xE81D,0xE809,0xE84B,0xE892,0xE8E1,0xE90B,0xE94C,0xE8A3, + 0xE8C6,0xE89A,0xE933,0xE91B,0xE978,0xEA4D,0xEAB8,0xEB3F, + 0xEC37,0xEB78,0xE9F3,0xEBEA,0xEB9C,0xEBC9,0xEC77,0xECF7, + 0xED5B,0xED89,0xEDBC,0xED90,0xEDEE,0xEE6E,0xEEEB,0xEF5D, + 0xEF83,0xEF86,0xF031,0xF066,0xF0B1,0xF16E,0xF1F1,0xF21C, + 0xF2A6,0xF336,0xF355,0xF39F,0xF3E5,0xF445,0xF4B7,0xF5CD, + 0xF665,0xF71A,0xF73A,0xF74B,0xF7B0,0xF81C,0xF8C9,0xF9C4, + 0xFA99,0xFAFC,0xFB50,0xFB99,0xFBF8,0xFBED,0xFBF5,0xFC9E, + 0xFCE7,0xFD28,0xFDD4,0xFE48,0xFED4,0xFED5,0xFEC6,0xFEE3, + 0xFF71,0x0011,0x00AE,0x0168,0x0169,0x01A9,0x0226,0x042B, + 0x05C2,0x0554,0x0542,0x056B,0x0570,0x0570,0x057C,0x05B0, + 0x05DE,0x0683,0x06C3,0x070F,0x071F,0x06E9,0x06EE,0x06EC, + 0x07A9,0x0829,0x0801,0x084A,0x09D2,0x09FD,0x0960,0x08EE, + 0x0908,0x091A,0x0954,0x09A6,0x0A21,0x0A6B,0x0A8F,0x0A35, + 0x0A45,0x0A64,0x0AE9,0x0B47,0x0B99,0x0B54,0x0B35,0x0B1F, + 0x0B35,0x0AB0,0x0B50,0x0BB9,0x0B52,0x0AD5,0x0B8F,0x0BDC, + 0x0B6F,0x0B85,0x0BAF,0x0C26,0x0C5C,0x0C1B,0x0B86,0x0B26, + 0x0AA5,0x0A99,0x0ADC,0x0A49,0x0A32,0x0A9F,0x0AD4,0x0A9F, + 0x0A57,0x0A20,0x0A2A,0x0A5E,0x0AC5,0x0B37,0x0BA9,0x0B49, + 0x0B24,0x0B1F,0x0B61,0x0BCD,0x0C0E,0x0C44,0x0C01,0x0B93, + 0x0B2C,0x0B3A,0x0B9B,0x0BE2,0x0BC1,0x0BC0,0x0BCD,0x0B61, + 0x0AEA,0x0B3D,0x0B70,0x0B9C,0x0B96,0x0BB6,0x0B9D,0x0BD3, + 0x0B8F,0x0B65,0x0B5B,0x0B43,0x0B78,0x0B9F,0x0B5A,0x0B1D, + 0x0AF9,0x0B1E,0x0AFD,0x0AA8,0x0AD4,0x0B5E,0x0B47,0x0B8B, + 0x0B5E,0x0B4D,0x0B6E,0x0BE3,0x0B6A,0x0B6D,0x0BC5,0x0BA4, + 0x0ADD,0x0CB4,0x0B32,0x0ACD,0x0B99,0x0B03,0x0B26,0x0B3A, + 0x0B13,0x0B37,0x0B56,0x0B15,0x0B6E,0x0B28,0x0B14,0x0ABA, + 0x0AC5,0x0AAD,0x0A88,0x0A62,0x09EE,0x0A2D,0x0A0B,0x09F1, + 0x09BF,0x09CE,0x09EB,0x09EE,0x09B3,0x0993,0x0997,0x09B3, + 0x0A06,0x09C4,0x0976,0x0939,0x0936,0x0990,0x09DC,0x09DC, + 0x0988,0x090D,0x08B6,0x08D7,0x08C6,0x0901,0x0921,0x08E5, + 0x08F0,0x08A8,0x082F,0x0834,0x083F,0x0820,0x07D2,0x0769, + 0x075B,0x0798,0x0798,0x071D,0x0722,0x0734,0x0727,0x06E5, + 0x0656,0x03F8,0x03EF,0x045D,0x0453,0x04A4,0x04EF,0x051E, + 0x04F6,0x04CB,0x04A2,0x0458,0x0496,0x04C3,0x04B2,0x049B, + 0x04B8,0x04FA,0x04EC,0x04ED,0x041C,0x0480,0x056A,0x0573, + 0x0515,0x0515,0x0593,0x059B,0x05BB,0x0592,0x05CD,0x0600, + 0x05A9,0x05C8,0x0624,0x05DE,0x059E,0x05B9,0x05DC,0x05D2, + 0x0582,0x05A5,0x05CD,0x05AD,0x06A9,0x0670,0x051F,0x04A6, + 0x044A,0x03E3,0x03DC,0x0431,0x0498,0x046C,0x0499,0x04F0, + 0x051B,0x0592,0x05A7,0x0625,0x05C4,0x0563,0x0504,0x04D2, + 0x052C,0x0538,0x049B,0x04D7,0x04E9,0x04B1,0x0494,0x0487, + 0x042D,0x03B2,0x03A1,0x0373,0x039F,0x036D,0x030E,0x0298, + 0x0258,0x0282,0x0293,0x0289,0x02B6,0x022C,0x0242,0x01C6, + 0x01EA,0x0234,0x0252,0x021A,0x01BF,0x01DF,0x0199,0x0195, + 0x019E,0x01B0,0x0184,0x0159,0x017D,0x0167,0x0137,0x0150, + 0x0126,0x00FE,0x00E0,0x0103,0x016E,0x012A,0x0109,0x00E0, + 0x0114,0x0105,0x00C2,0x007D,0x0070,0x008F,0xFE98,0xFEA5, + 0xFEB0,0xFF32,0xFF96,0xFF4A,0xFEA7,0xFE1A,0xFE19,0xFE77, + 0xFEB4,0xFEC5,0xFE99,0xFE79,0xFEA9,0xFED4,0xFEE2,0xFE91, + 0xFDFE,0xFE61,0xFECC,0xFE03,0xFD91,0xFE7C,0xFE67,0xFE00, + 0xFDEC,0xFE95,0xFEF2,0xFE93,0xFE9F,0xFE91,0xFE66,0xFE36, + 0xFD75,0xFD32,0xFC3D,0xFC43,0xFCFC,0xFD63,0xFD63,0xFCF1, + 0xFCAB,0xFC98,0xFCA6,0xFCFF,0xFD52,0xFD3F,0xFD3F,0xFD53, + 0xFD14,0xFD41,0xFDAF,0xFD88,0xFD46,0xFDEB,0xFE21,0xFDB2, + 0xFD92,0xFD80,0xFDA9,0xFDA9,0xFDBB,0xFDDC,0xFDCB,0xFD95, + 0xFD6A,0xFD56,0xFDA4,0xFE16,0xFDE8,0xFDEC,0xFDF7,0xFDAA, + 0xFD69,0xFD55,0xFD59,0xFD56,0xFD69,0xFDC2,0xFE02,0xFDC9, + 0xFD6D,0xFD6F,0xFD14,0xFCA3,0xFD36,0xFD36,0xFD70,0xFCE3, + 0xFC8B,0xFCA1,0xFD66,0xFD9B,0xFE8E,0x001F,0x013B,0x01B3, + 0x0372,0x01C4,0x0239,0x03CF,0x03D3,0x0546,0x0733,0x0892, + 0x095A,0x099B,0x0988,0x09B7,0x09B1,0x0A78,0x0B6B,0x0C72, + 0x0CAF,0x0CAA,0x0CB1,0x0BEB,0x0B60,0x0B3E,0x0BE6,0x0D8E, + 0x1003,0x10E7,0x10EE,0x1013,0x0FDD,0x0FC2,0x0FC8,0x104A, + 0x119B,0x12F2,0x13DE,0x13C6,0x12AE,0x126C,0x12CD,0x14E1, + 0x1643,0x1656,0x155A,0x147A,0x14B6,0x15D5,0x1763,0x17E0, + 0x1776,0x167C,0x15F0,0x15B8,0x1629,0x16C4,0x1689,0x16AE, + 0x16F7,0x170C,0x1702,0x167C,0x1570,0x1491,0x1473,0x146A, + 0x1393,0x13D2,0x137A,0x12A4,0x1243,0x11A7,0x10BF,0x10DA, + 0x1194,0x128C,0x124F,0x1179,0x1007,0x0E9A,0x0DF2,0x0E47, + 0x0FFB,0x11A7,0x1171,0x0E56,0x0C22,0x0BF1,0x0CF0,0x0D67, + 0x0DFA,0x0DDD,0x0D23,0x0C9C,0x0C2A,0x0BE5,0x0B64,0x0B0B, + 0x0B17,0x0A43,0x08F5,0x0807,0x07B0,0x06B2,0x049A,0x0004, + 0xF917,0xF03A,0xE86E,0xE62D,0xEB06,0xF4C4,0xFFDA,0x03FF, + 0xFD50,0xEEBD,0xE0B8,0xDB11,0xE1AF,0xF196,0x02D2,0x0D52, + 0x0CC3,0x049F,0xFB74,0xF615,0xF803,0x001A,0x0B1F,0x14EF, + 0x1A69,0x1ABC,0x17FE,0x141C,0x119C,0x1214,0x143C,0x16DF, + 0x18D1,0x1A4C,0x1C10,0x1DA1,0x1D9C,0x1AC0,0x1578,0x0E47, + 0x0801,0x05E3,0x089F,0x0D2E,0x108A,0x0FDF,0x0973,0xFE5D, + 0xF2B1,0xEBB8,0xEC0A,0xF163,0xF6C2,0xF932,0xF75C,0xF0C4, + 0xE796,0xDFD2,0xDC88,0xDEE7,0xE49C,0xE9B8,0xEC06,0xEB66, + 0xE886,0xE4EA,0xE323,0xE3C6,0xE6CF,0xEA86,0xEDD4,0xEF9E, + 0xF03C,0xF19D,0xF42E,0xF6A4,0xF6B5,0xF646,0xF708,0xF941, + 0xF8A6,0xFC49,0x01C9,0x03A5,0x03AF,0x013B,0xFDF8,0xFC46, + 0xFBF4,0xFD73,0xFFE6,0x028B,0x02FF,0xFFE9,0xFB61,0xF75D, + 0xF534,0xF400,0xF3D4,0xF3FA,0xF429,0xF35A,0xF11E,0xEDE4, + 0xEAE8,0xE8EC,0xE833,0xE778,0xE71A,0xE78D,0xE7A4,0xE6E0, + 0xE606,0xE5AE,0xE48D,0xE349,0xE29C,0xE2EF,0xE54A,0xE877, + 0xEA83,0xEA67,0xE98D,0xE940,0xEA4D,0xEC01,0xEDCE,0xEEB1, + 0xF02D,0xF2A8,0xF4BE,0xF59D,0xF4F1,0xF431,0xF4F6,0xF6E6, + 0xF8E8,0xFA09,0xFA37,0xF9CD,0xF980,0xFAAD,0xFD75,0xFD8F, + 0xFC75,0xFB3D,0xFA7F,0xFA08,0xF96C,0xF879,0xF71A,0xF67D, + 0xF60F,0xF5C4,0xF4AC,0xF2E5,0xF05C,0xEE38,0xECE4,0xEDFE, + 0xF0A8,0xF157,0xEFE7,0xED03,0xE99F,0xE856,0xE9AD,0xEB88, + 0xED03,0xEE82,0xEEDB,0xEDF8,0xEB4F,0xEA0D,0xEB55,0xECDF, + 0xEF3E,0xF164,0xF25D,0xF2DD,0xF1E6,0xF0EF,0xF241,0xF44C, + 0xF5EA,0xF6C0,0xF696,0xF54B,0xF632,0xF8F0,0xFAF2,0xFB5C, + 0xFAA6,0xF98D,0xF8E8,0xF956,0xF906,0xF8C7,0xF8A4,0xF937, + 0xF9D8,0xF9A2,0xF74D,0xF4EE,0xF30B,0xF263,0xF32A,0xF4BA, + 0xF5F5,0xF610,0xF43E,0xF1BF,0xF00A,0xF009,0xF14D,0xF1FB, + 0xF1F3,0xF1C1,0xF162,0xF0FB,0xF02C,0xEF4E,0xEF68,0xF18E, + 0xF438,0xF4FE,0xF3BE,0xF1C1,0xF0D1,0xF177,0xF3A0,0xF6CA, + 0xF856,0xF741,0xF52C,0xF48A,0xF5DF,0xF82A,0xF9B3,0xF96F, + 0xF795,0xF2A1,0xEA36,0xDDA2,0xCAC8,0xBE42,0xBF05,0xBF4B, + 0xBE51,0xD094,0xEB10,0xF28D,0xDD5A,0xC17F,0xBED7,0xC064, + 0xBEAA,0xD4EB,0x0047,0x1410,0x0E78,0xF7B8,0xDE8E,0xD53D, + 0xDEC5,0xF6D2,0x188D,0x3495,0x3E03,0x3E16,0x355A,0x276D, + 0x228D,0x287A,0x36AE,0x3EE2,0x3EE7,0x3F3A,0x3F3E,0x3F60, + 0x3ED4,0x3F6E,0x3BB8,0x2D57,0x2221,0x1FEF,0x264B,0x3079, + 0x3612,0x3155,0x201F,0x0844,0xF23F,0xE52C,0xE543,0xEFC6, + 0xFC8D,0x0283,0xFCB2,0xEBFD,0xD72F,0xC745,0xC211,0xC871, + 0xD47E,0xDF42,0xE49C,0xE340,0xDD50,0xD777,0xD469,0xD5FA, + 0xDB7F,0xE2DC,0xEB48,0xF3B4,0xFB27,0x018F,0x050B,0x05D0, + 0x05DE,0x0571,0x0699,0x0B60,0x14BB,0x2019,0x2923,0x2BD9, + 0x27E5,0x208F,0x18E6,0x146E,0x1622,0x1DAF,0x2697,0x2B93, + 0x2A01,0x2222,0x171C,0x0C1C,0x04E1,0x03B7,0x066C,0x0A1A, + 0x0B25,0x07E9,0xFEF5,0xF513,0xEE29,0xE97E,0xE6E8,0xE645, + 0xE6BA,0xE6FD,0xE670,0xE5F2,0xE3CB,0xE04E,0xDD69,0xDB8A, + 0xDB80,0xDDA3,0xE1E3,0xE681,0xEAFE,0xEDB9,0xEEDE,0xEE85, + 0xEE17,0xEEC0,0xF130,0xF776,0xFE82,0x04A0,0x0915,0x0AAD, + 0x0A7A,0x09BC,0x0950,0x0AB3,0x0E9A,0x139D,0x17B4,0x19C3, + 0x19BA,0x191A,0x170E,0x13EB,0x111A,0x0F87,0x10AB,0x1212, + 0x12C0,0x1093,0x0D2C,0x08FB,0x0468,0xFFE3,0xFD4A,0xFBDD, + 0xFBD5,0xFBDB,0xFA75,0xF7F7,0xF4D6,0xF15C,0xEE01,0xEC4E, + 0xEC81,0xED64,0xEDCB,0xEE97,0xEEE6,0xEE2C,0xED91,0xED78, + 0xEE79,0xF006,0xF184,0xF38C,0xF5F2,0xF7D6,0xF981,0xFBE8, + 0xFE54,0xFF69,0xFFF6,0x0085,0x02E4,0x0650,0x09B0,0x0BC9, + 0x0CFF,0x0D83,0x0D82,0x0D2D,0x0D06,0x0CAD,0x0D57,0x0E0E, + 0x0EB5,0x0F27,0x0F39,0x0D1E,0x095B,0x0636,0x05BA,0x057D, + 0x0425,0x04DA,0x02AE,0x00CA,0xFFDE,0xFDC9,0xFAC1,0xF814, + 0xF5C0,0xF554,0xF64B,0xF829,0xF7F0,0xF585,0xF255,0xF0F8, + 0xF13D,0xF29A,0xF327,0xF36D,0xF4C9,0xF6E8,0xF82B,0xF6F6, + 0xF5C3,0xF61E,0xF77C,0xFA31,0xFD34,0xFFCD,0x0060,0xFF9A, + 0x0002,0x0201,0x04CD,0x060F,0x0332,0xFBFF,0xF1E3,0xE328, + 0xCD64,0xBFD7,0xC05F,0xBF56,0xC4FE,0xE746,0x0067,0xFD03, + 0xD915,0xBF44,0xC0B9,0xC013,0xC43A,0xEEAF,0x1640,0x1F6A, + 0x1031,0xF5AD,0xDFEA,0xDA5C,0xE8E1,0x09DC,0x2FAB,0x4018, + 0x3EEB,0x405B,0x3C05,0x2E3F,0x2E91,0x3A3D,0x400D,0x3FB2, + 0x3FC8,0x3FDD,0x3FE2,0x3FE7,0x3FA1,0x3F59,0x3F67,0x329C, + 0x2809,0x2A35,0x35D8,0x3E9A,0x3F0B,0x394B,0x2373,0x0867, + 0xF12F,0xE47B,0xE6D9,0xF596,0x05A7,0x0BDE,0x019E,0xE8AB, + 0xCD07,0xC07E,0xBFAA,0xC929,0xDB9D,0xE788,0xE887,0xE16E, + 0xD83B,0xD1FB,0xD039,0xD309,0xDB5B,0xE546,0xEEE4,0xF78C, + 0xFE0B,0x01DC,0x036F,0x0434,0x04E1,0x054D,0x06A1,0x0C10, + 0x1709,0x236C,0x2CB4,0x2FA0,0x2A88,0x213A,0x1838,0x1439, + 0x17E3,0x224E,0x2D1E,0x31A0,0x2CEE,0x214A,0x1427,0x09C4, + 0x049C,0x0488,0x07AE,0x0B43,0x0B50,0x075C,0xFEC4,0xF3EB, + 0xEA19,0xE40A,0xE217,0xE2E4,0xE493,0xE4DF,0xE35C,0xE0EF, + 0xDEDF,0xDC97,0xD977,0xD601,0xD439,0xD655,0xDC97,0xE55B, + 0xEC14,0xEE14,0xEC47,0xE8D7,0xE764,0xE96D,0xEF22,0xF768, + 0x0007,0x06B2,0x0A95,0x0B28,0x086F,0x04F7,0x049E,0x096E, + 0x1280,0x1A05,0x1B51,0x18AC,0x1538,0x1377,0x1390,0x15A4, + 0x1249,0x0F87,0x0ED9,0x0ECE,0x0F6A,0x0F58,0x0CD6,0x0792, + 0x016F,0xFC92,0xFA79,0xF99C,0xF8AC,0xF74C,0xF678,0xF59E, + 0xF37A,0xEEA2,0xE958,0xE565,0xE4AD,0xE6A0,0xE9E4,0xED78, + 0xEDE1,0xEB23,0xE883,0xE7F4,0xE905,0xEA79,0xECC3,0xEFC1, + 0xF3E7,0xF844,0xFAFA,0xFB40,0xFA31,0xF937,0xFA9D,0xFE8E, + 0x035B,0x06FF,0x092A,0x0A2D,0x0AA0,0x0B3E,0x0B62,0x0BA8, + 0x0B5F,0x0B6C,0x0C94,0x0DE1,0x0F8F,0x1013,0x0E4B,0x0ACE, + 0x0773,0x05F8,0x05DE,0x05B3,0x058D,0x04A5,0x0224,0xFD6B, + 0xFA81,0xF849,0xF615,0xF59A,0xF5F5,0xF5B6,0xF466,0xF293, + 0xF17C,0xF149,0xF0F9,0xF0DC,0xF0E4,0xF0C3,0xF03A,0xF05C, + 0xF229,0xF428,0xF524,0xF64E,0xF72D,0xF803,0xF907,0xFA80, + 0xFBFB,0xFDB0,0x00DA,0x037D,0x0418,0x03CF,0x03AD,0x0202, + 0xFC30,0xF04F,0xDDCF,0xC766,0xBFE3,0xC188,0xBFA6,0xD073, + 0xF22D,0x0234,0xF72E,0xD15F,0xBF77,0xC1EA,0xC04D,0xCC2C, + 0xFE17,0x21C3,0x252F,0x0E22,0xEE97,0xDA71,0xDCF8,0xF4C1, + 0x1988,0x3AC1,0x40B6,0x3FC0,0x411C,0x3896,0x2D67,0x3204, + 0x3E31,0x40DC,0x4077,0x40B3,0x4094,0x40D2,0x409F,0x402B, + 0x4091,0x3E1B,0x2E79,0x25AD,0x2B04,0x396F,0x3FA9,0x3FF2, + 0x3724,0x1AAB,0xFE52,0xEA33,0xE53B,0xEEF7,0x002F,0x0CBF, + 0x0B94,0xFB08,0xE0E5,0xC9D7,0xC0C6,0xC29C,0xD11F,0xE247, + 0xEBB6,0xEA31,0xE16C,0xD789,0xD221,0xD281,0xD8B4,0xE29A, + 0xED3C,0xF5A2,0xFB6C,0x0011,0x034B,0x0544,0x06B2,0x078C, + 0x089A,0x0BEC,0x126B,0x1BBE,0x2656,0x2F7C,0x32C7,0x2BCE, + 0x2242,0x19C3,0x15AE,0x1B52,0x2637,0x3031,0x3376,0x2E26, + 0x2222,0x1314,0x074B,0x0340,0x0613,0x0B82,0x0EE0,0x0D1E, + 0x063A,0xFB6A,0xF010,0xE8A1,0xE5CD,0xE67F,0xE781,0xE71C, + 0xE658,0xE520,0xE39D,0xE13B,0xDE70,0xDBC6,0xD9D8,0xD979, + 0xDC15,0xE1DF,0xE946,0xEED9,0xF0A7,0xEEC8,0xEBEA,0xEA60, + 0xEC45,0xF27D,0xFAE5,0x03FC,0x0B1F,0x0D3D,0x0BC3,0x0884, + 0x0622,0x06F0,0x0B27,0x117A,0x1816,0x1B84,0x1A6C,0x16F9, + 0x1301,0x115D,0x10F9,0x1106,0x11CF,0x1365,0x11BD,0x1001, + 0x0E08,0x0B6D,0x07CE,0x035D,0xFF12,0xFAD9,0xF7AF,0xF6F6, + 0xF86E,0xF8E1,0xF6F9,0xF2C6,0xECFC,0xE800,0xE4D6,0xE49F, + 0xE6EF,0xEB61,0xEE3C,0xED96,0xEB8D,0xE96C,0xE7A9,0xE6BF, + 0xE92E,0xED8E,0xF250,0xF5F6,0xF7AE,0xF87B,0xF8D8,0xF8AD, + 0xF9F6,0xFC79,0xFF73,0x01E8,0x03EE,0x064F,0x0966,0x0B06, + 0x0B7A,0x09BF,0x072E,0x07DE,0x09AE,0x0B77,0x0D87,0x0EDE, + 0x0E71,0x0C73,0x0962,0x06B9,0x040D,0x0291,0x0220,0x0218, + 0x021A,0x008A,0xFE76,0xFBF9,0xF898,0xF582,0xF32F,0xF2AD, + 0xF3A4,0xF4AF,0xF40A,0xF245,0xF0EF,0xEFC4,0xEEB8,0xEDB5, + 0xEE02,0xEF97,0xF16C,0xF390,0xF482,0xF4BE,0xF451,0xF3F0, + 0xF472,0xF67E,0xF921,0xFAB9,0xFBF0,0xFD09,0xFECD,0x0195, + 0x032C,0x027F,0xFF60,0xFAC6,0xF4A2,0xEA09,0xD7E1,0xC2A2, + 0xBE72,0xBFEC,0xBE30,0xD1CF,0xF372,0xFF6C,0xEB06,0xC5C0, + 0xBE4F,0xC06E,0xBE5B,0xD355,0x0526,0x1ED7,0x1A30,0x0034, + 0xE3C6,0xD546,0xDC97,0xF730,0x1C2F,0x3969,0x3EAC,0x3E86, + 0x3E0F,0x31B0,0x2903,0x2F51,0x3C15,0x3F4F,0x3ED9,0x3F18, + 0x3F1E,0x3F35,0x3F2A,0x3EB1,0x3F81,0x3821,0x2AB6,0x278C, + 0x2F19,0x3A90,0x3EDE,0x3D74,0x2CD3,0x12D3,0xFA33,0xE951, + 0xE5CA,0xF022,0x0040,0x0A7F,0x0642,0xF3BE,0xDAC4,0xC641, + 0xBFE1,0xC298,0xD217,0xE39B,0xEB9C,0xE824,0xDDA6,0xD44E, + 0xD06D,0xD29C,0xD9C0,0xE2F4,0xEBCF,0xF35B,0xFA09,0xFF91, + 0x0339,0x057A,0x0603,0x0611,0x0717,0x0B46,0x1387,0x1F0F, + 0x29E8,0x30B1,0x3069,0x28EF,0x1F5B,0x17E4,0x15E9,0x1B83, + 0x273B,0x2F5E,0x3002,0x289C,0x1B61,0x0D5B,0x04E2,0x038E, + 0x0794,0x0BDE,0x0CB1,0x08D4,0x00C4,0xF71D,0xEE6C,0xE875, + 0xE5AF,0xE45C,0xE460,0xE5E5,0xE5C6,0xE3A9,0xE114,0xDE3A, + 0xDBA7,0xD9B3,0xD941,0xD9E0,0xDCB2,0xE136,0xE723,0xEC27, + 0xEE78,0xEE2A,0xED2D,0xEC29,0xED47,0xF1E8,0xF99B,0x03AC, + 0x0B9B,0x0E0E,0x0CF8,0x08F8,0x0652,0x0763,0x0C0F,0x132A, + 0x198A,0x1D08,0x1C13,0x1840,0x14A1,0x1299,0x1144,0x10A2, + 0x11A2,0x1374,0x1427,0x11CC,0x0DE0,0x098D,0x05A8,0x0136, + 0xFD68,0xFAA0,0xF9C1,0xF9EA,0xFAC4,0xFA5A,0xF803,0xF2D4, + 0xEC9F,0xE86F,0xE766,0xE909,0xEB49,0xED6A,0xEE63,0xEDF1, + 0xEC1B,0xEA57,0xE8F4,0xE90E,0xEB26,0xF04A,0xF5ED,0xF965, + 0xFA70,0xF911,0xF7DE,0xF9AA,0xFD47,0x00FA,0x03AB,0x05ED, + 0x078D,0x090A,0x0AA9,0x0BE1,0x0D49,0x0D01,0x0BD0,0x0B6F, + 0x0CD9,0x0EF6,0x0FC3,0x0F9C,0x0E62,0x0D21,0x0ADF,0x07D3, + 0x0472,0x02B4,0x02DB,0x03FE,0x051F,0x0534,0x0176,0xFB12, + 0xF833,0xF49D,0xF42B,0xF6ED,0xF8FB,0xF8E8,0xF68F,0xF353, + 0xF137,0xF023,0xEF89,0xF098,0xF256,0xF430,0xF540,0xF609, + 0xF566,0xF4F1,0xF4E2,0xF640,0xF8B5,0xFB3C,0xFBF5,0xFCC1, + 0xFE1B,0xFFC6,0x0252,0x03E4,0x0461,0x03F5,0x01D3,0xFDD7, + 0xF5E2,0xE7AC,0xD251,0xC0F1,0xBFE4,0xC023,0xC0FB,0xDCA5, + 0xFA9D,0xFFCF,0xE365,0xC166,0xC002,0xC140,0xBFA7,0xDF4E, + 0x0F32,0x220C,0x1749,0xFA8C,0xDF3B,0xD540,0xE1C3,0xFF17, + 0x23CD,0x3C52,0x3E5E,0x3EEE,0x3E16,0x2F1F,0x29F5,0x342E, + 0x3F4F,0x3FC0,0x3FD9,0x3FE0,0x3FD4,0x3FEA,0x3FDF,0x3F5B, + 0x3FB4,0x34B1,0x2788,0x276A,0x31EC,0x3D22,0x3F6B,0x390E, + 0x22FF,0x0A1C,0xF43B,0xE6E3,0xE68B,0xF127,0xFFC7,0x07AB, + 0x00FF,0xEB9B,0xD0D2,0xC15C,0xBF49,0xC51D,0xD743,0xE4A1, + 0xE6E0,0xDFBA,0xD5BE,0xCF87,0xD03E,0xD44F,0xD9CD,0xE122, + 0xEA49,0xF2B2,0xF95E,0xFF59,0x0342,0x0419,0x0323,0x031F, + 0x0614,0x0C29,0x154F,0x20B8,0x2B2A,0x3078,0x2CFE,0x2195, + 0x1588,0x10FD,0x170A,0x22C7,0x2C7B,0x2FA1,0x2ACB,0x1FC9, + 0x1359,0x0A57,0x0618,0x0592,0x06E0,0x0943,0x0A7E,0x075E, + 0xFEC9,0xF2E6,0xE890,0xE3F1,0xE39D,0xE480,0xE4AC,0xE37A, + 0xE13C,0xDFA4,0xDF0B,0xDE6B,0xDBF5,0xD7FC,0xD4C9,0xD561, + 0xDA72,0xE205,0xE913,0xED2C,0xEDA9,0xEB7F,0xE935,0xE846, + 0xEAD8,0xF271,0xFC8F,0x0699,0x0C73,0x0C5A,0x07E3,0x0338, + 0x0220,0x0740,0x0FF1,0x1740,0x1B47,0x1AB3,0x17F0,0x1551, + 0x1390,0x118C,0x10F0,0x1044,0x107D,0x11B1,0x13EA,0x1036, + 0x0BAE,0x06C8,0x0117,0xFE39,0xFC7A,0xFB7A,0xFA15,0xF93F, + 0xF744,0xF5BD,0xF395,0xF0B3,0xEBB9,0xE795,0xE6AA,0xE873, + 0xEB4F,0xED24,0xEDF8,0xECDD,0xEA17,0xE771,0xE7BA,0xEA95, + 0xEEBB,0xF204,0xF479,0xF664,0xF7C3,0xF868,0xF91E,0xFA2B, + 0xFC2C,0xFF7E,0x0350,0x06E3,0x08AE,0x0923,0x08F7,0x0A33, + 0x0BAC,0x0CCD,0x0CA3,0x0BF7,0x0C67,0x0DFA,0x107D,0x1103, + 0x0F75,0x0C09,0x089C,0x069F,0x0713,0x0782,0x0705,0x0581, + 0x0341,0x0141,0xFF8A,0xFD73,0xFAA0,0xF7CC,0xF4DA,0xF578, + 0xF5DD,0xF43B,0xF1EC,0xF03C,0xEFAD,0xF02A,0xF120,0xF188, + 0xF1CA,0xF196,0xF144,0xF190,0xF370,0xF547,0xF640,0xF7C1, + 0xF96D,0xFA17,0xFB2E,0xFC2A,0xFC80,0xFE93,0x01A4,0x0475, + 0x0507,0x029B,0xFB39,0xEE6C,0xDCC2,0xC881,0xBFC0,0xC0F5, + 0xBF97,0xC782,0xE954,0xFEBC,0xF952,0xD639,0xBFF6,0xC1B4, + 0xC0B8,0xC64D,0xF309,0x19D1,0x2209,0x1010,0xF32F,0xDD1B, + 0xD98D,0xEA2D,0x0A65,0x2FE4,0x403F,0x3F0A,0x40FA,0x39AE, + 0x2B8A,0x2C47,0x3960,0x4105,0x406F,0x40BC,0x40AD,0x40A1, + 0x40BC,0x4058,0x4075,0x3F01,0x2E26,0x244B,0x2911,0x36FE, + 0x3F60,0x3FAD,0x365A,0x1E7F,0x03CA,0xED7E,0xE456,0xE98D, + 0xF7BE,0x0545,0x0936,0xFE64,0xE72A,0xCD6F,0xC176,0xC0CE, + 0xCA99,0xDC51,0xE72B,0xE86F,0xE2D2,0xDA62,0xD351,0xD080, + 0xD33A,0xDAF4,0xE5D3,0xF0DA,0xF9F4,0xFFF0,0x0325,0x03D9, + 0x039E,0x03F4,0x0591,0x0951,0x0FDC,0x1960,0x2417,0x2CC7, + 0x305A,0x2B58,0x20AD,0x1724,0x1513,0x1B8E,0x23B1,0x2D2B, + 0x30DA,0x2B86,0x2199,0x1516,0x09AA,0x0461,0x0556,0x091E, + 0x0CCC,0x0CF3,0x07DC,0xFDEF,0xF2D0,0xE9C1,0xE50F,0xE3C6, + 0xE476,0xE573,0xE60F,0xE603,0xE51D,0xE1FE,0xDCEB,0xD7F8, + 0xD575,0xD6EE,0xDBCB,0xE1CE,0xE74C,0xEC0A,0xEE58,0xED07, + 0xE96B,0xE6B5,0xE8C6,0xF01E,0xFA0B,0x02CE,0x0876,0x09C9, + 0x07B5,0x0540,0x04B1,0x06AA,0x0AF8,0x0F4F,0x1433,0x184C, + 0x19D1,0x1761,0x12F4,0x0F25,0x0D6F,0x0E0E,0x0F27,0x0FBD, + 0x0EEE,0x0DB0,0x0BDB,0x09BA,0x07AB,0x025D,0xFE46,0xFBFB, + 0xFAB5,0xF9EF,0xF8BA,0xF770,0xF63F,0xF3ED,0xF036,0xEB4F, + 0xE6E8,0xE4F6,0xE6BB,0xEB60,0xEFA2,0xF0C6,0xED4E,0xE855, + 0xE68D,0xE7AE,0xE9A7,0xED03,0xF1DB,0xF5E6,0xF867,0xF9A5, + 0xF9D7,0xF8F4,0xF84F,0xFA5B,0xFEFF,0x0424,0x0789,0x0953, + 0x09F3,0x0A8E,0x0A58,0x09FB,0x0A51,0x0A4D,0x0AA1,0x0C68, + 0x0E37,0x0E9B,0x0E96,0x0D3D,0x098A,0x078F,0x0693,0x0591, + 0x03DC,0x02D5,0x0311,0x0363,0x01BC,0xFDAF,0xF7FD,0xF35B, + 0xF1C7,0xF424,0xF63C,0xF6C1,0xF463,0xF0AD,0xEE38,0xEE5E, + 0xF006,0xF0BA,0xEF7B,0xEDEE,0xEE42,0xF0F8,0xF446,0xF585, + 0xF5B5,0xF4FC,0xF472,0xF4F0,0xF6FA,0xF9A9,0xFC94,0xFFD3, + 0x0215,0x02F7,0x01D5,0xFF42,0xFD79,0xFBF5,0xF8E7,0xF1C3, + 0xE2EC,0xCC10,0xBE9F,0xBFCB,0xBE69,0xCF5C,0xF20B,0x0216, + 0xF55A,0xCF3B,0xBDD7,0xC0C8,0xBEC4,0xCDAE,0xFAE2,0x1939, + 0x1B03,0x07FA,0xEDDB,0xDB98,0xDB7C,0xEE98,0x0F0E,0x31FA, + 0x3E4D,0x3DF3,0x3BA4,0x2C08,0x22BF,0x298F,0x3784,0x3E0F, + 0x3F0B,0x3EE7,0x3EEE,0x3F10,0x3F0D,0x3E90,0x3F31,0x35DF, + 0x2733,0x225D,0x2778,0x31AD,0x39A4,0x392C,0x2CCC,0x16B2, + 0xFDBA,0xEB00,0xE5BD,0xEE35,0xFCDF,0x07B7,0x060B,0xF688, + 0xDFEF,0xCC48,0xC38F,0xC7CA,0xD4C3,0xE1CD,0xE7BF,0xE5C1, + 0xDF8B,0xD9B9,0xD620,0xD67D,0xDA54,0xE151,0xE94D,0xF12A, + 0xF7EE,0xFE44,0x035B,0x05DF,0x0631,0x0568,0x0547,0x0769, + 0x0D9A,0x187F,0x24AB,0x2D5A,0x2E13,0x26C6,0x1C11,0x1442, + 0x13D4,0x1B2D,0x252C,0x2C05,0x2C94,0x251C,0x18C1,0x0D29, + 0x04EC,0x02B4,0x05E6,0x0A80,0x0CF9,0x0AA5,0x0351,0xF8BE, + 0xEF5E,0xEA0C,0xE8DE,0xEA73,0xEAE9,0xE914,0xE689,0xE525, + 0xE42E,0xE356,0xE298,0xDFD1,0xDBE8,0xDA8B,0xDDE2,0xE459, + 0xEB1D,0xEF85,0xF0A2,0xEFDE,0xEE07,0xEC9A,0xEDF2,0xF310, + 0xFB63,0x041E,0x09B0,0x0B89,0x09EB,0x06D0,0x0552,0x074C, + 0x0CEF,0x13E1,0x167D,0x16CB,0x1625,0x1585,0x1514,0x1348, + 0x1024,0x0D10,0x0C5F,0x0EA9,0x1101,0x1120,0x0E6C,0x0ACA, + 0x069A,0x0176,0xFD7A,0xFB86,0xFB68,0xFB5F,0xFABE,0xF9FB, + 0xF87C,0xF543,0xF031,0xEB55,0xE942,0xEA85,0xED95,0xEFB7, + 0xF071,0xEFB9,0xED73,0xEBB6,0xEBBC,0xED26,0xEF3B,0xF1C1, + 0xF45B,0xF74E,0xF9A8,0xFB37,0xFBBE,0xFBF7,0xFD28,0xFEDE, + 0x00F7,0x02E7,0x045C,0x06F6,0x0A2F,0x0C88,0x0C54,0x0A68, + 0x08AE,0x07E5,0x08FB,0x0AD0,0x0D7A,0x0F1E,0x0EDF,0x0C55, + 0x0871,0x051A,0x0401,0x03DA,0x0416,0x040D,0x03C6,0x01E8, + 0xFFC5,0xFC91,0xF96B,0xF708,0xF789,0xF7D5,0xF707,0xF85D, + 0xF655,0xF3E0,0xF2E4,0xF24A,0xF26A,0xF263,0xF277,0xF308, + 0xF366,0xF3DF,0xF4B0,0xF5B7,0xF607,0xF635,0xF6E3,0xF8B5, + 0xF9F6,0xFAC8,0xFBC2,0xFDA8,0xFF96,0x007A,0x0170,0x01FB, + 0x021D,0x0032,0xFD83,0xFA59,0xF5A9,0xEFA6,0xE942,0xE5CE, + 0xEB0C,0xF611,0x0086,0x0314,0xFB00,0xEC7E,0xDF28,0xDAFE, + 0xE308,0xF319,0x0273,0x097D,0x061C,0xFCF6,0xF3BB,0xEE68, + 0xEF7C,0xF7A2,0x0361,0x0E36,0x146B,0x135E,0x0D24,0x0753, + 0x056B,0x095D,0x0FEE,0x16AB,0x192A,0x171A,0x169F,0x184E, + 0x19F0,0x18E8,0x1430,0x0E38,0x0A8C,0x0A61,0x0D01,0x109C, + 0x12C7,0x1294,0x0EE5,0x0737,0xFDF5,0xF73F,0xF581,0xF9A0, + 0x019A,0x0760,0x0668,0xFF47,0xF5A0,0xECC2,0xE9DA,0xECF5, + 0xF35D,0xF9B8,0xFD40,0xFBF9,0xF7CF,0xF230,0xEEA2,0xEE84, + 0xF12D,0xF5D7,0xFACB,0xFEA4,0xFFEB,0xFE8E,0xFC8E,0xFC65, + 0xFD21,0xFEEF,0x00CE,0x0208,0x03A4,0x0773,0x0B98,0x0CEC, + 0x0AAE,0x0726,0x0491,0x03C7,0x04B6,0x07B2,0x0B21,0x0BD8, + 0x0B63,0x0935,0x064D,0x032A,0x0019,0xFED6,0x005F,0x0354, + 0x04C0,0x035E,0x003C,0xFD2B,0xFA6F,0xF896,0xF84D,0xF8DC, + 0xF970,0xF95C,0xF8D4,0xF896,0xF7C1,0xF5FF,0xF433,0xF347, + 0xF38D,0xF53E,0xF6B7,0xF827,0xF90F,0xF915,0xF883,0xF849, + 0xF875,0xF8AE,0xF850,0xF924,0xFAF2,0xFCD7,0xFE0F,0xFD23, + 0xFBA8,0xFA04,0xF90F,0xF8C4,0xF862,0xF7AD,0xF6EC,0xF63C, + 0xF480,0xF48A,0xF512,0xF5B1,0xF4E7,0xF3ED,0xF454,0xF5D4, + 0xF60D,0xF512,0xF3EC,0xF2B9,0xF1B6,0xF324,0xF11A,0xF106, + 0xF0D9,0xEF96,0xEF08,0xEE97,0xEDE6,0xED60,0xECA3,0xEBE7, + 0xEB8E,0xEAD4,0xEAC9,0xEA38,0xEA06,0xE9E3,0xE9D6,0xE95A, + 0xE89A,0xE7E3,0xE7ED,0xE800,0xE84C,0xE83D,0xE838,0xE7D5, + 0xE78F,0xE76F,0xE751,0xE74B,0xE7C4,0xE7B8,0xE7D9,0xE7FD, + 0xE844,0xE848,0xE860,0xE8CF,0xE8FD,0xE88C,0xE869,0xE8EA, + 0xE916,0xE9A0,0xE990,0xE981,0xE9D0,0xE9B9,0xE9D0,0xEA59, + 0xEAA8,0xEAC4,0xEB00,0xEB31,0xEBB0,0xEBDD,0xEBF7,0xEC48, + 0xECB5,0xED5A,0xEE57,0xEEB1,0xEDCA,0xEC47,0xECF5,0xEE06, + 0xEEAB,0xEF07,0xEF84,0xEFFC,0xF086,0xF16C,0xF202,0xF24D, + 0xF2A7,0xF2B8,0xF30A,0xF429,0xF4E3,0xF563,0xF611,0xF60B, + 0xF579,0xF6D4,0xF889,0xF8C9,0xF888,0xF8B6,0xF974,0xFA22, + 0xFB11,0xFBD1,0xFC2F,0xFC44,0xFC44,0xFCD5,0xFD71,0xFE14, + 0xFE12,0xFEAC,0xFF23,0xFF5F,0xFF89,0xFFFF,0x0048,0x0086, + 0x01A4,0x027D,0x021F,0x01D6,0x020B,0x0250,0x0261,0x030A, + 0x03DF,0x03F1,0x049A,0x0580,0x0626,0x0653,0x0741,0x0884, + 0x0846,0x0898,0x092E,0x09B2,0x0A0D,0x0A46,0x0A3F,0x09E3, + 0x0A0A,0x0A7D,0x0B44,0x0BA9,0x0B8E,0x0B75,0x0B6D,0x0B38, + 0x0B87,0x0C15,0x0C34,0x0C0D,0x0C1A,0x0C00,0x0C4E,0x0C1F, + 0x0C15,0x0C19,0x0C1E,0x0C7E,0x0CB8,0x0CCC,0x0CE1,0x0CBF, + 0x0C9A,0x0CE6,0x0CA1,0x0D1A,0x0D04,0x0CEB,0x0D4E,0x0D3C, + 0x0D66,0x0D7D,0x0D5F,0x0DC7,0x0EA0,0x0E81,0x0ED3,0x0EDD, + 0x0ECA,0x0EBD,0x0E6D,0x0EB6,0x0EF1,0x0F09,0x0ECE,0x0EB2, + 0x0E9F,0x0E99,0x0EF2,0x0F45,0x0FB9,0x0DAA,0x0E80,0x0F63, + 0x0E41,0x0E9E,0x0EE6,0x0EAE,0x0E8B,0x0E85,0x0E37,0x0E32, + 0x0E0D,0x0E9B,0x0EEA,0x0EA0,0x0E47,0x0E83,0x0E35,0x0DD5, + 0x0DA6,0x0DCC,0x0DFF,0x0DDC,0x0DEF,0x0DEF,0x0DF0,0x0E0B, + 0x0DA3,0x0D7B,0x0D54,0x0D69,0x0D76,0x0DA7,0x0D84,0x0D83, + 0x0D42,0x0CEB,0x0CE3,0x0CB5,0x0C94,0x0C8E,0x0BFC,0x0C10, + 0x0BE6,0x0BC5,0x0BD8,0x0BD5,0x0B45,0x0B21,0x0B2B,0x0AFC, + 0x0B64,0x0BB7,0x0B6E,0x0B73,0x0B1A,0x0AC7,0x0A77,0x0A21, + 0x0A3F,0x0A83,0x0B6B,0x0D28,0x0C2B,0x0B6D,0x0B06,0x0AF9, + 0x0AFE,0x0AC6,0x0A98,0x09FD,0x09C3,0x09DC,0x09DB,0x0977, + 0x0956,0x0989,0x094F,0x0911,0x0939,0x0924,0x07ED,0x0865, + 0x091B,0x08A3,0x07CA,0x0812,0x07F9,0x078B,0x0781,0x0731, + 0x0757,0x0777,0x074B,0x0743,0x0721,0x06D2,0x0710,0x070E, + 0x06DC,0x06DD,0x0724,0x0708,0x0700,0x0651,0x061F,0x0622, + 0x057C,0x05C0,0x06D1,0x0675,0x0616,0x05FE,0x05F3,0x05DC, + 0x0600,0x05DD,0x0541,0x04A7,0x0486,0x0475,0x03F7,0x034A, + 0x0303,0x0314,0x033F,0x030F,0x0339,0x0318,0x02C3,0x02D7, + 0x032A,0x0386,0x0375,0x036A,0x0346,0x02FA,0x0295,0x02DE, + 0x0331,0x0350,0x033B,0x0343,0x0326,0x02CF,0x02EF,0x02C5, + 0x0283,0x0264,0x0292,0x02DB,0x0307,0x0306,0x02C6,0x02A9, + 0x02CA,0x0279,0x0225,0x0282,0x02BD,0x02D9,0x028C,0x0241, + 0x0202,0x01F3,0x0219,0x0202,0x0222,0x01F1,0x01B5,0x0136, + 0x00EC,0x0116,0x019B,0x0173,0x01A9,0x01D7,0x01E3,0x014B, + 0x00DE,0x010F,0x01BB,0x00E8,0x020E,0x021A,0x008F,0x01AF, + 0x0184,0x0163,0x0166,0x017D,0x0122,0x0162,0x0183,0x0191, + 0x01AD,0x0169,0x00F9,0x00EA,0x018E,0x01A0,0x015F,0x00D6, + 0x0117,0x00D9,0x0122,0x011E,0x012B,0x00DB,0x0085,0x00B3, + 0x0088,0x00BD,0x00DB,0x012C,0x0125,0x0177,0x01B8,0x0154, + 0x00C9,0xFF15,0xFF28,0xFF44,0xFF2E,0xFEFF,0xFEFD,0xFE6B, + 0xFE94,0xFF93,0xFFAA,0xFEE3,0xFEF9,0xFF1E,0xFED3,0xFE62, + 0xFE47,0xFE87,0xFE5F,0xFE23,0xFE33,0xFE8E,0xFDF6,0xFD90, + 0xFD45,0xFD1C,0xFD58,0xFD52,0xFE3D,0xFE2B,0xFDE1,0xFDD1, + 0xFDBB,0xFC90,0xFBF0,0xFCC3,0xFDEB,0xFE4A,0xFE59,0xFE82, + 0xFE13,0xFDF9,0xFD70,0xFCEA,0xFC8A,0xFCA6,0xFCCD,0xFCF3, + 0xFBFC,0xFBF1,0xFC1F,0xFC09,0xFBFB,0xFC4A,0xFC4F,0xFC0A, + 0xFC45,0xFC3F,0xFC5F,0xFCBF,0xFC8B,0xFC53,0xFCA8,0xFC87, + 0xFC47,0xFC48,0xFC62,0xFCB2,0xFCFE,0xFCF9,0xFC8F,0xFC66, + 0xFC94,0xFC77,0xFC6E,0xFC81,0xFC21,0xFC4C,0xFC99,0xFCA0, + 0xFCE1,0xFCE2,0xFCC1,0xFC9B,0xFCCB,0xFCE1,0xFCDB,0xFCFB, + 0xFD2C,0xFD94,0xFD9E,0xFD4B,0xFD17,0xFD1A,0xFD1A,0xFD22, + 0xFCBC,0xFD19,0xFDB9,0xFDED,0xFDAB,0xFD3C,0xFD08,0xFD80, + 0xFDF8,0xFD66,0xFD7A,0xFDFB,0xFD52,0xFD1B,0xFEE0,0xFD48, + 0xFE36,0xFEF6,0xFE84,0xFDD4,0xFDAE,0xFD93,0xFDF6,0xFE73, + 0xFE96,0xFF0F,0xFEE0,0xFE8C,0xFDE9,0xFE2E,0xFE0B,0xFE53, + 0xFF04,0xFF22,0xFF22,0xFF34,0xFF17,0xFE88,0xFEB5,0xFEC6, + 0xFF39,0xFF60,0xFF8D,0xFF63,0xFF23,0xFF06,0xFF19,0xFF67, + 0xFFA6,0xFFEA,0x0008,0x001E,0x00B8,0x015C,0x0199,0x017C, + 0x01F3,0x02D0,0x02E4,0x036C,0x03B2,0x044A,0x05F9,0x07B2, + 0x087D,0x0735,0x05B8,0x05D1,0x061E,0x067E,0x0657,0x0659, + 0x05D7,0x05E5,0x0674,0x07B6,0x083E,0x0746,0x04BD,0x0426, + 0x0517,0x06F9,0x0873,0x0936,0x09D6,0x09D7,0x092E,0x08C6, + 0x096A,0x0AF9,0x0CD3,0x0E72,0x0F79,0x1078,0x0FD3,0x0E61, + 0x0D9B,0x0EA6,0x123E,0x14F9,0x14EC,0x13B9,0x12F0,0x1387, + 0x1482,0x15D7,0x160F,0x1575,0x1532,0x15F8,0x1759,0x1858, + 0x18D6,0x1844,0x1747,0x1676,0x1687,0x174D,0x1862,0x1840, + 0x1862,0x1984,0x1966,0x16E5,0x1586,0x1660,0x1809,0x1887, + 0x181E,0x1738,0x1643,0x1628,0x167F,0x171C,0x17B4,0x17EF, + 0x17EF,0x1746,0x1752,0x170E,0x1622,0x1512,0x14CF,0x15BE, + 0x1691,0x15E9,0x1382,0x118F,0x1208,0x143A,0x151C,0x141B, + 0x1261,0x108B,0x0EFE,0x0E8D,0x0F9F,0x112D,0x1110,0x0FC5, + 0x0DFE,0x0D57,0x0D50,0x0C14,0x0A47,0x09C9,0x0BD0,0x0DD7, + 0x0D13,0x09FC,0x06A5,0x05CD,0x0788,0x092E,0x08C3,0x066B, + 0x0401,0x03BF,0x0562,0x05B9,0x04CF,0x0264,0x013F,0x019D, + 0x01E9,0x0139,0xFE33,0xF92D,0xF49F,0xF188,0xF060,0xF0F4, + 0xF41B,0xF87C,0xFAA3,0xF841,0xF178,0xE8F3,0xE1B7,0xE504, + 0xEE2B,0xF516,0xF8B6,0xF736,0xF1E7,0xEB60,0xE82A,0xE9CF, + 0xEF84,0xF5AC,0xF91B,0xF9EC,0xF918,0xF75F,0xF6C8,0xF740, + 0xF85B,0xFACE,0xFCFA,0xFF4F,0x010A,0x02BF,0x03F7,0x0400, + 0x0321,0x0235,0x01E4,0x022D,0x033E,0x05CF,0x08E5,0x0AD1, + 0x0AB2,0x06F0,0x0235,0xFE9C,0xFEA7,0x019D,0x04BC,0x061A, + 0x04E2,0x0284,0xFEF5,0xFAEC,0xF746,0xF66B,0xF802,0xFA99, + 0xFC33,0xFB7E,0xF767,0xF1EA,0xED34,0xEB31,0xEC5C,0xEDB4, + 0xEE2C,0xEE08,0xED2B,0xECB2,0xEC74,0xE893,0xE5CD,0xE518, + 0xE5AB,0xE760,0xE8DE,0xE9CD,0xE93F,0xE73C,0xE513,0xE3B4, + 0xE35C,0xE41E,0xE603,0xE928,0xEC00,0xECCC,0xEA50,0xE6BA, + 0xE5E8,0xE7BC,0xEA1A,0xED15,0xEFB4,0xF08E,0xF077,0xEFDA, + 0xEEFB,0xEEBF,0xEE8E,0xEF87,0xF27C,0xF64E,0xF830,0xF769, + 0xF4C7,0xF349,0xF3E1,0xF620,0xF87E,0xF973,0xF906,0xF89C, + 0xF8A1,0xF7BF,0xF7DF,0xF881,0xF782,0xF6CA,0xF733,0xF7F8, + 0xF85E,0xF887,0xF82B,0xF781,0xF567,0xF348,0xF1D0,0xF091, + 0xF003,0xF1BB,0xF3A2,0xF40F,0xF19C,0xEDE0,0xEAF7,0xEA77, + 0xEC68,0xEE98,0xEF74,0xEDCB,0xEB86,0xEABC,0xEAA5,0xEB85, + 0xEB75,0xEB04,0xEB3C,0xEB59,0xEB0B,0xEB8D,0xEC34,0xEC95, + 0xEC23,0xEB77,0xEBAF,0xEC27,0xEC3E,0xECCA,0xEF66,0xF20E, + 0xF2A0,0xF04D,0xEDDF,0xEDA0,0xEF95,0xF215,0xF422,0xF5FC, + 0xF68F,0xF5E3,0xF44A,0xF3B9,0xF3D7,0xF4F3,0xF6BD,0xF9F7, + 0xFB9B,0xFB46,0xF910,0xF5F7,0xF43A,0xF740,0xFBE4,0xFE91, + 0xFCE9,0xF9F7,0xF957,0xFA69,0xF9ED,0xFB0A,0xFAA9,0xF96E, + 0xFA99,0xFA75,0xFB07,0xFB1E,0xFA1B,0xF7DC,0xF765,0xF8DE, + 0xFA9D,0xFA07,0xF7D7,0xF6B8,0xF7AC,0xF941,0xF8F6,0xF72C, + 0xF4FA,0xF479,0xF588,0xF7D8,0xF8C1,0xF763,0xF499,0xF30E, + 0xF44F,0xF600,0xF785,0xF749,0xF6D5,0xF5CA,0xF561,0xF5DA, + 0xF724,0xF7CD,0xF848,0xF84F,0xF896,0xF8B7,0xF87B,0xF887, + 0xF8B5,0xFA3A,0xFAEF,0xFA80,0xF70E,0xF0EA,0xE93E,0xE174, + 0xDC3E,0xDA4F,0xDE5A,0xE76A,0xF155,0xF4E7,0xECCE,0xDCB5, + 0xCE3A,0xC9F5,0xD3B0,0xE584,0xF3E8,0xF7D4,0xF23A,0xE8A9, + 0xDF7E,0xDBBE,0xE051,0xEBA8,0xF951,0x0451,0x0833,0x052C, + 0xFFA7,0xFCD5,0xFEF8,0x04FE,0x0C76,0x12C6,0x16D2,0x1A77, + 0x1D0D,0x201A,0x225B,0x2118,0x1D8F,0x1BE9,0x1E77,0x24E9, + 0x2CFC,0x32DE,0x3381,0x2EA1,0x25FA,0x1F6E,0x1CF3,0x1F7A, + 0x24EE,0x2AC4,0x2DCA,0x2B01,0x234A,0x186E,0x0F2F,0x0B23, + 0x0FDC,0x169C,0x18F2,0x1656,0x0E48,0x04FD,0xFE63,0xFB58, + 0xFA87,0xFAF5,0xFBEB,0xFB40,0xF967,0xF6D2,0xF3DC,0xF115, + 0xED96,0xEA99,0xE8B8,0xE8F8,0xEA24,0xEB7F,0xED26,0xED17, + 0xEA4B,0xE6D2,0xE3B7,0xE371,0xE6A7,0xEB36,0xF012,0xF2D4, + 0xF287,0xF04E,0xEDB3,0xED13,0xEF6F,0xF43F,0xFA5D,0xFE6D, + 0xFECB,0xFD32,0xFCC2,0xFE08,0x000F,0x01C4,0x03C7,0x06AC, + 0x08F0,0x0A7E,0x0B11,0x0B90,0x0C16,0x0C48,0x0C32,0x0C56, + 0x0D53,0x0EAB,0x0FE3,0x1111,0x1212,0x1232,0x102E,0x0C68, + 0x09F1,0x0A31,0x0C24,0x0DC3,0x0E1C,0x0C99,0x08CA,0x04FF, + 0x02F2,0x0138,0x0072,0x0059,0x02A3,0x02DC,0xFFD8,0xFD06, + 0xF73A,0xF433,0xF4F8,0xF6F5,0xF801,0xF732,0xF4BD,0xF26D, + 0xF170,0xF126,0xF13A,0xF0C5,0xEFEA,0xF084,0xF193,0xF182, + 0xF07E,0xEFE0,0xF0CE,0xF26F,0xF2F5,0xF21B,0xF0E1,0xF178, + 0xF4D5,0xF869,0xFA2D,0xF88D,0xF5A0,0xF51E,0xF82E,0xFC6A, + 0xFF2E,0xFF6A,0xFE4E,0xFE23,0x0002,0x028B,0x0473,0x03FF, + 0x0349,0x0478,0x06AB,0x07E3,0x075C,0x0669,0x075A,0x0971, + 0x0A84,0x094C,0x074A,0x05EF,0x067F,0x08AB,0x0B20,0x0C4E, + 0x0A4B,0x05D3,0x0329,0x064B,0x0A40,0x0B15,0x0937,0x05E6, + 0x0432,0x0427,0x0428,0x02D2,0x00E1,0x006E,0x00EE,0x018E, + 0x01A6,0xFF97,0xFCB8,0xFB00,0xFB8F,0xFD6D,0xFD81,0xFC3D, + 0xFAAD,0xF8E8,0xF901,0xFA89,0xFB71,0xFA06,0xF82C,0xF692, + 0xF6E7,0xF8D0,0xFB31,0xFD03,0xFC81,0xF9C4,0xF7AD,0xF7D2, + 0xF9D0,0xFBF3,0xFCC1,0xFE25,0xFEDE,0xFD9C,0xFC04,0xF95D, + 0xF60E,0xF3C9,0xED9D,0xE3CE,0xDB12,0xD813,0xDE36,0xEB65, + 0xF80F,0xFAAA,0xEF07,0xDA4A,0xC7CC,0xC46E,0xD358,0xEA89, + 0xFD0B,0x00DA,0xF6D9,0xE74E,0xDB51,0xD8D4,0xE20C,0xF347, + 0x05C3,0x105E,0x0FC0,0x0753,0xFF0F,0xFD79,0x0336,0x0DA9, + 0x17E7,0x1E32,0x200C,0x2035,0x224B,0x25FE,0x28AB,0x2709, + 0x2322,0x2116,0x251E,0x2DD6,0x35AB,0x38F8,0x36E5,0x30BF, + 0x29AF,0x23BB,0x2108,0x2376,0x2A5D,0x3156,0x32A2,0x2BB6, + 0x201A,0x14AF,0x0E77,0x0F98,0x155F,0x19D3,0x194F,0x1356, + 0x0A38,0x0388,0xFEFA,0xFC5C,0xFA00,0xF906,0xF976,0xF9F4, + 0xF785,0xF357,0xEF16,0xEB80,0xE972,0xE93F,0xE4CA,0xE371, + 0xE3D1,0xE639,0xE969,0xEAC0,0xE82E,0xE2E0,0xDEC9,0xDEA0, + 0xE2E1,0xE902,0xEE14,0xF08E,0xF06C,0xEDD0,0xEB8D,0xEA7F, + 0xECA8,0xF152,0xF706,0xFBF5,0xFF40,0x00A7,0xFEC4,0xFC80, + 0xFBC4,0xFEFB,0x0463,0x090F,0x0AD2,0x0BA2,0x0C2C,0x0D84, + 0x0E33,0x0D5F,0x0CCA,0x0D86,0x0FBF,0x11F0,0x131A,0x12A1, + 0x1219,0x11E5,0x10E7,0x0E12,0x0BA3,0x0B69,0x0D5A,0x0FA6, + 0x100D,0x0CDF,0x08ED,0x0581,0x0351,0x033F,0x0317,0x01F3, + 0x00A2,0x001B,0xFF07,0xFCF4,0xF928,0xF420,0xF29F,0xF37A, + 0xF493,0xF423,0xF22D,0xF083,0xEF8D,0xEFC7,0xEFF4,0xEED6, + 0xECDA,0xEBEC,0xED0F,0xEF3C,0xF149,0xF0EC,0xEFAF,0xEE7B, + 0xEE67,0xF056,0xF246,0xF2AB,0xF3E7,0xF633,0xF773,0xF805, + 0xF8F1,0xF9C3,0xF92F,0xF8C2,0xFA23,0xFE49,0x0251,0x0420, + 0x039A,0x027B,0x026E,0x02C2,0x03A4,0x0599,0x0877,0x0A12, + 0x0AD1,0x0A20,0x08E6,0x08BB,0x07FB,0x06EC,0x07B6,0x0A6E, + 0x0C83,0x0C1F,0x0A89,0x0A08,0x0A2B,0x09C2,0x08BE,0x0818, + 0x0801,0x08E5,0x0855,0x0796,0x0631,0x0464,0x028F,0x00C6, + 0x0091,0x0191,0x01C9,0x00C8,0xFEF2,0xFDA4,0xFCBB,0xFC22, + 0xFAE4,0xF9AB,0xF9A6,0xFA86,0xFB6A,0xFB35,0xF950,0xF728, + 0xF652,0xF6E1,0xF87E,0xF9AB,0xF9EC,0xF903,0xF7BB,0xF799, + 0xF90B,0xFAB1,0xFBAE,0xFB2A,0xFAA9,0xFB4E,0xFBD7,0xFC15, + 0xFD60,0xFFAF,0x0178,0xFF4A,0xF943,0xF17A,0xE881,0xDFBB, + 0xDAB0,0xDD7D,0xE81F,0xF52B,0xFBFB,0xF76A,0xE824,0xD475, + 0xC849,0xCC38,0xDED8,0xF52D,0x02EB,0xFF84,0xF40B,0xE642, + 0xDCCE,0xDF8A,0xEC11,0xFC13,0x0902,0x0EB0,0x0D48,0x086F, + 0x043F,0x035D,0x0762,0x0FA8,0x17F0,0x1DCC,0x2082,0x2314, + 0x2634,0x28D1,0x28B1,0x261D,0x2264,0x2144,0x2576,0x2DFF, + 0x3740,0x3C73,0x3987,0x2F3D,0x2436,0x1E4A,0x1FF3,0x26CF, + 0x2E42,0x32B0,0x316B,0x29C2,0x1DC8,0x1271,0x0DC6,0x0FD5, + 0x14F0,0x18B9,0x189E,0x138D,0x0B25,0x0319,0xFD3F,0xF9EB, + 0xF840,0xF7E4,0xF802,0xF881,0xF7C1,0xF50F,0xF05B,0xEB79, + 0xE636,0xE2CD,0xE310,0xE7CB,0xEC18,0xEF1C,0xEF0E,0xEB59, + 0xE5A9,0xE0AF,0xDF82,0xE21C,0xE845,0xEF14,0xF39A,0xF406, + 0xF19A,0xEE0B,0xEB04,0xEABD,0xEF7E,0xF71D,0xFCE6,0x0108, + 0x019E,0xFFBE,0xFE05,0xFD9C,0xFE17,0x018F,0x06F4,0x0B36, + 0x0DF9,0x0F25,0x0E8E,0x0D0E,0x0B60,0x0B78,0x0DB6,0x0FF7, + 0x1224,0x130A,0x139F,0x1391,0x1266,0x104A,0x0E0D,0x0BA2, + 0x09F5,0x0BB2,0x0E73,0x0E5E,0x0C42,0x09BB,0x0717,0x042C, + 0x01B3,0xFF2D,0xFE1B,0xFE47,0xFEC2,0xFF30,0xFDDD,0xFA54, + 0xF565,0xF0BE,0xEED6,0xEFC0,0xF283,0xF465,0xF422,0xF1EB, + 0xEE1D,0xE9FA,0xE8E2,0xEAC6,0xECBD,0xEE59,0xEED3,0xEF28, + 0xEE9B,0xED25,0xEC58,0xECBD,0xEE6C,0xF086,0xF200,0xF31E, + 0xF2CB,0xF237,0xF35E,0xF5DD,0xF7FF,0xF869,0xF81A,0xF807, + 0xFA0A,0xFCA6,0xFF1A,0xFFE3,0xFFBE,0xFFA0,0xFFB9,0x00F1, + 0x0344,0x0560,0x067D,0x064D,0x0597,0x04F0,0x052C,0x05F9, + 0x0735,0x0814,0x08F3,0x0902,0x07A9,0x0557,0x04CF,0x05B4, + 0x07D5,0x08D1,0x0800,0x04D5,0x03C0,0x0200,0x0074,0x0248, + 0x0360,0x02D3,0x008C,0xFECD,0xFDB6,0xFE00,0xFD79,0xFBC7, + 0xF9B8,0xF9BC,0xFB57,0xFC27,0xFA84,0xF7DD,0xF64A,0xF68D, + 0xF894,0xF8FA,0xF827,0xF682,0xF663,0xF748,0xF7F8,0xF80A, + 0xF78D,0xF7AF,0xF8B7,0xFA06,0xFA86,0xFA58,0xF977,0xF894, + 0xF94A,0xFB57,0xFD6D,0xFDFC,0xFD82,0xFCED,0xFB30,0xF708, + 0xEF42,0xE5ED,0xDDB8,0xDA11,0xDD3A,0xE789,0xF446,0xFA8F, + 0xF416,0xE2CD,0xD038,0xC86C,0xD034,0xE2A0,0xF59E,0x001F, + 0xFDD8,0xF17B,0xE3DF,0xDD7E,0xE06D,0xEBD7,0xFB51,0x0746, + 0x0D46,0x0BFB,0x06B7,0x027A,0x02EF,0x08EB,0x1097,0x16CC, + 0x1B5A,0x1F12,0x22E7,0x2708,0x29A7,0x2904,0x2503,0x1FFE, + 0x201F,0x27FB,0x32C6,0x3A1E,0x3BC6,0x363D,0x2D7F,0x256F, + 0x2143,0x21F1,0x27DB,0x2F9B,0x3407,0x3191,0x28A9,0x1D41, + 0x139C,0x0FCF,0x1169,0x166F,0x1AAB,0x19C2,0x12B7,0x09D9, + 0x03D9,0xFF5F,0xFC92,0xF9D7,0xF8B5,0xF93C,0xF9E6,0xF8BA, + 0xF534,0xF07D,0xEC17,0xE86F,0xE61B,0xE668,0xE992,0xED17, + 0xEEB7,0xEDD7,0xEB76,0xE791,0xE375,0xE1A9,0xE438,0xEA37, + 0xF125,0xF4B9,0xF353,0xF086,0xEEAE,0xEE84,0xF07A,0xF4B0, + 0xF9AA,0xFE11,0xFF87,0x0012,0x00F9,0x027B,0x038E,0x03CF, + 0x0505,0x07C6,0x0B42,0x0DF4,0x0F53,0x0FC9,0x104D,0x1009, + 0x0F4A,0x0F03,0x0F85,0x107B,0x1273,0x1460,0x152C,0x1475, + 0x1154,0x0DB0,0x0BD8,0x0BDB,0x0D43,0x0E90,0x0EAC,0x0DA6, + 0x0B1F,0x073E,0x0371,0x0171,0x00FC,0x023D,0x031B,0x028C, + 0xFFA4,0xFBE8,0xF853,0xF6D3,0xF56C,0xF43C,0xF5E2,0xF509, + 0xF430,0xF3A0,0xF20C,0xF038,0xEEAF,0xED50,0xECEB,0xEE7F, + 0xF008,0xF10F,0xF09A,0xEF88,0xEECB,0xEE84,0xEEB9,0xEF71, + 0xF0CE,0xF373,0xF645,0xF78B,0xF6AB,0xF4A9,0xF42D,0xF5DE, + 0xF9BA,0xFD72,0xFFB1,0xFF40,0xFE5B,0xFE3A,0xFEC4,0xFF8C, + 0x0081,0x02B0,0x0551,0x075F,0x0808,0x0731,0x05DD,0x052F, + 0x06A3,0x08F4,0x0A66,0x0AE8,0x0A11,0x0872,0x07A3,0x084E, + 0x0A73,0x0B55,0x09A2,0x07A9,0x0601,0x061D,0x06F9,0x066B, + 0x054F,0x046E,0x05DE,0x05FF,0x048D,0x0345,0x01BE,0x0035, + 0xFFBA,0xFFF0,0x0038,0xFE4F,0xFBA8,0xFA25,0xFA77,0xFAF0, + 0xFAF1,0xFA4C,0xFA41,0xF983,0xF81E,0xF611,0xF535,0xF6F8, + 0xF878,0xF8EC,0xF92C,0xF8C9,0xF665,0xF51F,0xF587,0xF713, + 0xF9F8,0xFB9C,0xFA82,0xF867,0xF72B,0xF878,0xFB0F,0xFCFC, + 0xFD2C,0xFBE4,0xF89F,0xF230,0xE9AE,0xE0B1,0xDA09,0xD7AC, + 0xDC47,0xE8DC,0xF550,0xF924,0xEF9C,0xDC2D,0xC9D8,0xC5BF, + 0xD1BF,0xE608,0xF701,0xFDC5,0xF894,0xEB99,0xDDF4,0xD887, + 0xDE99,0xED03,0xFD80,0x0906,0x0C5D,0x08AE,0x01A0,0xFD35, + 0xFF23,0x0750,0x10E3,0x17F4,0x1B97,0x1E2A,0x21EB,0x25AC, + 0x262D,0x235A,0x1F5C,0x1DCD,0x214F,0x28EB,0x3180,0x363F, + 0x3509,0x2F13,0x27EE,0x2254,0x1F50,0x1FEE,0x24F3,0x2C25, + 0x2F95,0x2BC9,0x20D2,0x1422,0x0C5A,0x0BD9,0x104C,0x1486, + 0x1597,0x122A,0x0B19,0x033D,0xFD23,0xF919,0xF650,0xF512, + 0xF5FC,0xF730,0xF69D,0xF2CB,0xED57,0xE878,0xE6C7,0xE65F, + 0xE5E6,0xE485,0xE2E9,0xE3CE,0xE86A,0xE8B3,0xE7B3,0xE3F8, + 0xDF83,0xDE90,0xE1B7,0xE6F5,0xEBC4,0xEE60,0xEE3A,0xED26, + 0xEC69,0xECC9,0xEE0C,0xF08D,0xF4F2,0xFA57,0xFE8C,0x002F, + 0xFF03,0xFDB4,0xFEAC,0x014A,0x0450,0x063B,0x085A,0x0B02, + 0x0DFD,0x1060,0x102D,0x0D8A,0x0AA7,0x0A5A,0x0DCF,0x12E9, + 0x15C7,0x1508,0x11BB,0x0F02,0x0DBE,0x0D7D,0x0D7A,0x0DE2, + 0x0EA2,0x0E2B,0x0C9F,0x0AD8,0x08C3,0x067E,0x03DB,0x02BC, + 0x0328,0x0388,0x02CD,0x00FB,0xFE7C,0xFC1A,0xF92A,0xF6CD, + 0xF598,0xF5A8,0xF580,0xF463,0xF1BE,0xF08D,0xEFD3,0xEEDA, + 0xEDBD,0xECFA,0xECF7,0xEDB9,0xEE9B,0xEE9E,0xEF72,0xF05F, + 0xF03D,0xEFF0,0xEF5E,0xEF79,0xF05A,0xF25B,0xF428,0xF624, + 0xF8E7,0xFACB,0xF9F7,0xF7A2,0xF6F5,0xF901,0xFCBD,0x0066, + 0x02CA,0x0385,0x02A8,0x00B8,0xFF93,0x0155,0x050D,0x0804, + 0x0927,0x094A,0x0917,0x08B7,0x0854,0x07CB,0x07C9,0x0A91, + 0x0B70,0x0B20,0x0AC9,0x0986,0x084F,0x073E,0x0795,0x07BF, + 0x073C,0x05D8,0x05C2,0x0702,0x0826,0x0760,0x04BC,0x0163, + 0xFFF6,0x011E,0x0266,0x0259,0x00F9,0xFF39,0xFD74,0xFC43, + 0xFA78,0xF935,0xF9E6,0xFAF0,0xFBA3,0xFBBA,0xFAFB,0xF869, + 0xF55C,0xF473,0xF651,0xF95B,0xFABE,0xF991,0xF74A,0xF5B1, + 0xF510,0xF5FF,0xF80C,0xFA62,0xFB44,0xFAFD,0xFA08,0xF8EF, + 0xF902,0xFAB4,0xFD27,0xFFE2,0x0074,0xFDBB,0xF7EE,0xEF3D, + 0xE735,0xE0C5,0xDC65,0xDBFD,0xE21A,0xED00,0xF69D,0xF64E, + 0xEA20,0xD787,0xC9C3,0xCA15,0xD7C8,0xEB95,0xFB62,0xFFB1, + 0xF71B,0xE7E3,0xDC8A,0xDBFF,0xE474,0xF545,0x0539,0x0C9F, + 0x0DCF,0x08D6,0x01A5,0xFDC2,0x0167,0x0B71,0x168D,0x1E50, + 0x210B,0x20F0,0x20FD,0x2272,0x245B,0x2598,0x24E8,0x239A, + 0x2507,0x2B11,0x32AC,0x383C,0x3775,0x309B,0x2701,0x208E, + 0x20EC,0x2623,0x2BE1,0x2F83,0x2F52,0x2A98,0x2230,0x1805, + 0x1052,0x0E96,0x11F9,0x1723,0x1A0F,0x16F9,0x0E81,0x0463, + 0xFCB2,0xF96D,0xF9B9,0xFAD4,0xFA62,0xF8E5,0xF6D9,0xF446, + 0xF035,0xEB12,0xE6A1,0xE472,0xE4D4,0xE676,0xE85E,0xEA22, + 0xEA56,0xE9E7,0xE89E,0xE420,0xE1AC,0xE259,0xE551,0xEAA1, + 0xF01C,0xF287,0xF165,0xEDDB,0xEA43,0xEA63,0xEDF0,0xF3E8, + 0xF961,0xFD58,0xFFAF,0xFF81,0xFD36,0xFA56,0xFAFF,0xFF76, + 0x057D,0x0B07,0x0DA4,0x0BB0,0x0852,0x0776,0x0A0B,0x0E2B, + 0x10B3,0x0FEE,0x0DB7,0x0D52,0x0F9B,0x1248,0x1213,0x1001, + 0x0D9F,0x0C5D,0x0C00,0x0BA6,0x0BEF,0x0CAA,0x0C41,0x0A49, + 0x0987,0x0757,0x02CD,0xFEE8,0xFE56,0x0165,0x0485,0x0423, + 0xFF0C,0xF85A,0xF463,0xF3DE,0xF4EA,0xF4E8,0xF311,0xF1C7, + 0xF119,0xF122,0xF097,0xEECA,0xEC66,0xEAF9,0xEB1D,0xECC7, + 0xEEED,0xEFD6,0xEF0F,0xEDBB,0xED05,0xED99,0xEE6E,0xEE5F, + 0xEE33,0xF02B,0xF34A,0xF68D,0xF815,0xF729,0xF587,0xF4BC, + 0xF5BB,0xF824,0xFB3E,0xFD43,0xFE68,0xFEE6,0xFEF3,0xFF4C, + 0xFEF0,0xFECF,0x0077,0x03F8,0x06F6,0x075E,0x057B,0x0390, + 0x03D9,0x063C,0x082B,0x08DF,0x07EF,0x06F8,0x0582,0x0594, + 0x065C,0x0780,0x07FA,0x06D8,0x04A0,0x0360,0x02FD,0x0346, + 0x0363,0x02BE,0x014A,0x0295,0x024F,0xFEB3,0xFD53,0xFB77, + 0xFBDD,0xFC9C,0xFCDD,0xFC54,0xFB58,0xF9CD,0xF873,0xF7D7, + 0xF7B0,0xF7A6,0xF77F,0xF777,0xF7B6,0xF7E6,0xF727,0xF64D, + 0xF4EF,0xF510,0xF5F9,0xF771,0xF929,0xF915,0xF83C,0xF732, + 0xF754,0xF886,0xF991,0xFA1C,0xFB06,0xFBE2,0xFC58,0xFC93, + 0xFC31,0xF94A,0xF2E0,0xEA1D,0xE317,0xE128,0xE474,0xECA5, + 0xF5DE,0xFB38,0xF805,0xEBDE,0xDD6B,0xD610,0xDAAE,0xE88F, + 0xF772,0xFFDF,0xFEB6,0xF66D,0xEC23,0xE67B,0xE8EA,0xF213, + 0xFE3B,0x07C1,0x0BB8,0x0949,0x0480,0x01A2,0x0206,0x0621, + 0x0C49,0x123F,0x15C9,0x17EC,0x1B15,0x1E59,0x1FE3,0x1E01, + 0x1AE0,0x195A,0x1AC9,0x1F8B,0x2530,0x2A49,0x2BD9,0x2993, + 0x24F2,0x1DC1,0x17A2,0x1669,0x1ACB,0x2191,0x26BC,0x2672, + 0x1F9C,0x15AC,0x0D4B,0x0A46,0x0BDF,0x0F03,0x11A6,0x1299, + 0x0FF9,0x0A05,0x028E,0xFBC0,0xF859,0xF891,0xFA19,0xFCC0, + 0xFCA3,0xFA85,0xF670,0xF14D,0xED99,0xEBC7,0xEB77,0xEBA3, + 0xECAD,0xEED4,0xF188,0xF250,0xF068,0xEC11,0xE87F,0xE780, + 0xE9DA,0xEEBD,0xF325,0xF59A,0xF587,0xF3D3,0xF1C7,0xF102, + 0xF27B,0xF557,0xF8B5,0xFCE8,0x000B,0x0125,0xFFEA,0xFEB2, + 0xFF6C,0x00AB,0x0280,0x0481,0x0768,0x09BB,0x0B3F,0x0BEF, + 0x0BF8,0x0BD0,0x0B8C,0x0AFC,0x0ADB,0x0C60,0x0EE5,0x10E1, + 0x118C,0x0FD6,0x0C4F,0x0987,0x08BF,0x092B,0x098E,0x09EF, + 0x0A5A,0x0A33,0x091A,0x06A6,0x035A,0x00E1,0xFF92,0xFF4E, + 0x00B1,0x0209,0x01FD,0xFEAE,0xFA1D,0xF76C,0xF721,0xF745, + 0xF6F4,0xF70E,0xF820,0xF83E,0xF638,0xF551,0xF1D1,0xF02D, + 0xF073,0xF19E,0xF362,0xF57A,0xF5F9,0xF4AD,0xF27C,0xF174, + 0xF1D1,0xF351,0xF461,0xF572,0xF776,0xF9AC,0xFA61,0xF8B3, + 0xF711,0xF784,0xFAA6,0xFDCF,0xFE9C,0xFE7F,0xFEC4,0x0015, + 0x0129,0x01B3,0x0248,0x028C,0x029F,0x0363,0x0503,0x0688, + 0x06BD,0x0641,0x063A,0x070A,0x0754,0x0750,0x05FD,0x0573, + 0x063A,0x074E,0x07DC,0x076C,0x05FB,0x0497,0x0432,0x0445, + 0x0463,0x03CA,0x02FC,0x0253,0x0233,0x01DE,0x00B0,0xFF4D, + 0xFE1A,0xFFD2,0x0073,0x0012,0xFFBA,0xFEC1,0xFD4D,0xFBB2, + 0xFA91,0xF9CF,0xF9D0,0xFAB0,0xFBF4,0xFC4B,0xFB25,0xF896, + 0xF6CE,0xF73C,0xF91C,0xF9E9,0xF972,0xF91A,0xF9C8,0xF996, + 0xF8D1,0xF943,0xFA41,0xF9D0,0xF9E8,0xFB79,0xFDDE,0xFE00, + 0xFBF3,0xFA43,0xFAB9,0xFCBB,0xFEB9,0xFE78,0xFCE7,0xFB0E, + 0xF8EF,0xF754,0xF708,0xF9C3,0xFD9E,0x00EB,0xFFB6,0xFBC5, + 0xF8A6,0xF5F2,0xF5AA,0xF8C6,0xFF00,0x0411,0x04BA,0x002A, + 0xFA7B,0xF802,0xF93A,0xFC62,0xFFE2,0x01ED,0x0366,0x02F7, + 0x000A,0xFE24,0xFE71,0x002E,0x01C6,0x02FA,0x044E,0x04FE, + 0x0460,0x0393,0x03D7,0x0474,0x0475,0x0454,0x04F8,0x0626, + 0x06A9,0x068C,0x0703,0x0733,0x0557,0x0298,0x0022,0x00E7, + 0x03A6,0x05D9,0x0605,0x03E3,0x0167,0xFFB9,0xFF10,0xFF5F, + 0xFFCB,0xFFFD,0x0020,0x0049,0xFFF2,0xFF0C,0xFD2D,0xFC00, + 0xFBB3,0xFBFB,0xFD2E,0xFDF3,0xFD2F,0xFB62,0xF8FE,0xF8E3, + 0xFABD,0xFCCD,0xFC66,0xFA11,0xF85C,0xF960,0xFB48,0xFCAB, + 0xFD05,0xFBE8,0xFB47,0xFC81,0xFA1F,0xFA19,0xFBBD,0xFDB6, + 0x0042,0x0136,0xFFAB,0xFCFA,0xFB27,0xFB54,0xFD90,0x00BB, + 0x0374,0x036F,0x01BA,0xFF02,0xFDB1,0xFDDC,0xFE9C,0xFEF2, + 0xFF10,0xFFB5,0xFFD0,0xFF58,0xFDE6,0xFC76,0xFB89,0xFB42, + 0xFA91,0xF9C7,0xF900,0xF831,0xF715,0xF5FE,0xF560,0xF5E8, + 0xF68F,0xF704,0xF799,0xF829,0xF876,0xF826,0xF73B,0xF645, + 0xF521,0xF488,0xF44B,0xF42B,0xF442,0xF4CC,0xF42D,0xF390, + 0xF306,0xF1E5,0xF17F,0xF179,0xF16D,0xF0D8,0xEFDD,0xEF8C, + 0xEEEB,0xEE7F,0xED89,0xEB03,0xEA60,0xEA6F,0xEA30,0xEA08, + 0xEA15,0xEA0F,0xE9CA,0xE945,0xE905,0xE8D6,0xE875,0xE7DE, + 0xE79F,0xE7A2,0xE7DD,0xE7CD,0xE82E,0xE77B,0xE637,0xE698, + 0xE766,0xE770,0xE78B,0xE7DA,0xE7D9,0xE85E,0xE8A6,0xE886, + 0xE86C,0xE87C,0xE84A,0xE8C4,0xE938,0xE9C8,0xE9EC,0xEA3B, + 0xEA3E,0xE9F6,0xEA87,0xEB06,0xEBC0,0xEB58,0xED14,0xEE08, + 0xED32,0xED21,0xED37,0xED97,0xEDB8,0xEE8A,0xEF93,0xF035, + 0xF0C2,0xF138,0xF199,0xF210,0xF2E6,0xF43D,0xF4AD,0xF4E3, + 0xF57C,0xF5B5,0xF5FD,0xF63C,0xF690,0xF6C5,0xF78D,0xF855, + 0xF86B,0xF8F2,0xF8C1,0xF8CF,0xF94C,0xF9BC,0xFAAC,0xFB0E, + 0xFB1C,0xFAF1,0xFAFA,0xFB88,0xFC50,0xFCF4,0xFD77,0xFDAB, + 0xFD94,0xFD94,0xFDE1,0xFE22,0xFE66,0xFEAF,0xFF46,0xFFD5, + 0x001E,0x0026,0x001B,0xFFF5,0x0084,0x0127,0x019A,0x0217, + 0x0264,0x029B,0x02C4,0x0329,0x0365,0x03F2,0x0459,0x04BC, + 0x04C1,0x0556,0x05E5,0x060A,0x05FD,0x069E,0x070C,0x0734, + 0x0771,0x0851,0x08C7,0x0717,0x0897,0x092B,0x085E,0x08CD, + 0x08E8,0x08E9,0x0937,0x0924,0x0950,0x09B6,0x0A2B,0x0A52, + 0x0A54,0x0A30,0x0A46,0x0A9B,0x0B72,0x0B9F,0x0B09,0x0ADF, + 0x0AE3,0x0B97,0x0B9A,0x0BE2,0x0BFB,0x0C18,0x0BE1,0x0BE0, + 0x0BE0,0x0C29,0x0C85,0x0CA8,0x0CD1,0x0CDF,0x0D3A,0x0D09, + 0x0CB2,0x0C8F,0x0CCC,0x0D0A,0x0D87,0x0D74,0x0D35,0x0D43, + 0x0D93,0x0D8B,0x0DA7,0x0DB9,0x0D76,0x0D79,0x0D67,0x0DA7, + 0x0DAE,0x0E02,0x0DDA,0x0DBC,0x0D8F,0x0DC1,0x0DE5,0x0DFE, + 0x0EFA,0x10F0,0x105D,0x0FF4,0x0FE2,0x0F72,0x0F49,0x0F13, + 0x0EFB,0x0F15,0x0E8D,0x0E91,0x0EBA,0x0E8D,0x0E4A,0x0DFF, + 0x0E0E,0x0DB1,0x0D73,0x0D95,0x0D15,0x0DB8,0x0E26,0x0D53, + 0x0CED,0x0D52,0x0CB0,0x0C83,0x0C97,0x0C65,0x0CC2,0x0C50, + 0x0BEE,0x0BEB,0x0C00,0x0BBC,0x0BDE,0x0BDC,0x0BE6,0x0BC4, + 0x0B79,0x0B56,0x0AE6,0x0AC8,0x0B88,0x0B78,0x0A4C,0x0A88, + 0x0B79,0x0B3A,0x0AD4,0x0AAE,0x0ADE,0x0A7E,0x0A7D,0x0A7D, + 0x0A0D,0x09C4,0x097C,0x08E9,0x0870,0x0873,0x087A,0x07E3, + 0x0796,0x0746,0x06F2,0x0725,0x07BC,0x0805,0x07B4,0x07B2, + 0x07C1,0x0755,0x078A,0x07CD,0x07B2,0x0728,0x06F7,0x0737, + 0x06EA,0x068B,0x065A,0x0690,0x06C8,0x06A7,0x067E,0x0683, + 0x0669,0x05F2,0x05F5,0x05E7,0x0606,0x0604,0x0655,0x069C, + 0x061B,0x05BF,0x05B9,0x055E,0x055C,0x0589,0x05D1,0x05D5, + 0x0595,0x0511,0x04FA,0x04DB,0x0535,0x04E1,0x04BF,0x04AC, + 0x0517,0x04AB,0x047D,0x0509,0x05DA,0x0572,0x04FC,0x04E4, + 0x058A,0x04A2,0x06B0,0x0663,0x0453,0x056B,0x0520,0x051B, + 0x056B,0x056F,0x051F,0x04F3,0x051C,0x055F,0x051A,0x0508, + 0x04F2,0x04BD,0x04DC,0x0491,0x0462,0x045B,0x0449,0x044D, + 0x0435,0x0434,0x03EF,0x0416,0x03D1,0x03DF,0x03EF,0x03D4, + 0x0372,0x03C5,0x03E8,0x03FA,0x0410,0x042D,0x047A,0x0428, + 0x039A,0x03BA,0x03A8,0x0323,0x030F,0x02FE,0x02DF,0x032C, + 0x0360,0x036D,0x0372,0x02FE,0x02CE,0x0322,0x0336,0x033E, + 0x0359,0x03B2,0x03DA,0x03A7,0x034C,0x0314,0x02F9,0x02A1, + 0x02D8,0x02BC,0x0119,0x0028,0x006B,0x00BB,0x0133,0x0161, + 0x0181,0x01CA,0x01D3,0x0204,0x01DA,0x01B8,0x01D3,0x019B, + 0x0111,0x00F2,0x013D,0x01BE,0x0245,0x0224,0x01B0,0x0143, + 0x00A6,0x0119,0x01D7,0x0247,0x02A4,0x0313,0x03A2,0x03C3, + 0x03B6,0x03FD,0x04AA,0x05B8,0x0693,0x0760,0x08F7,0x0A66, + 0x0A9C,0x09AF,0x0920,0x090F,0x08D2,0x08E1,0x08D1,0x0887, + 0x085C,0x07FF,0x07D5,0x07F2,0x0885,0x08B8,0x088E,0x0837, + 0x07F6,0x07B3,0x074F,0x06C9,0x0773,0x095B,0x0C72,0x0DD4, + 0x0DBC,0x0D08,0x0CBF,0x0D1F,0x0DB0,0x0F44,0x118A,0x1091, + 0x118C,0x135A,0x124D,0x1305,0x14BC,0x1600,0x15D9,0x15C6, + 0x1626,0x163C,0x1613,0x1562,0x1507,0x15F1,0x175B,0x1825, + 0x17EF,0x1717,0x16D6,0x166A,0x1613,0x15FA,0x1676,0x1673, + 0x1622,0x1658,0x1758,0x17B8,0x17A9,0x16B5,0x1572,0x14A6, + 0x1490,0x1503,0x1521,0x1567,0x14B8,0x13F7,0x1355,0x1395, + 0x1490,0x14D5,0x13FA,0x12BD,0x11F8,0x1187,0x116B,0x1200, + 0x125F,0x126F,0x120C,0x1169,0x10FF,0x0FE7,0x0DE8,0x0BBC, + 0x0970,0x064B,0x0237,0xFD47,0xF966,0xF8B8,0xF91C,0xFE5A, + 0x05E9,0x0B9F,0x0C2D,0x07BB,0x0057,0xFA71,0xF90B,0xFC76, + 0x0452,0x0BC2,0x107F,0x1223,0x128C,0x128F,0x11BA,0x0FEE, + 0x0DAD,0x0E4E,0x10C6,0x123F,0x12F2,0x13F7,0x13E0,0x133C, + 0x128A,0x11FF,0x10BF,0x0D43,0x0780,0x00DA,0xFDDB,0xFEB1, + 0x020D,0x04B6,0x04E2,0x00E7,0xFBAE,0xF6C5,0xF20D,0xEF60, + 0xEE80,0xEE76,0xEEB9,0xF149,0xF477,0xF53C,0xF36A,0xF0D4, + 0xEEE5,0xEF09,0xF082,0xF1F7,0xF28E,0xF2AE,0xF371,0xF5A4, + 0xF8FC,0xFC1A,0xFD12,0xFB77,0xF8F4,0xF7A2,0xF7E8,0xF9D9, + 0xFBB0,0xFC6C,0xFD4B,0xFE57,0xFEB2,0xFD9D,0xFB14,0xF6A7, + 0xF3EB,0xF369,0xF426,0xF507,0xF4E0,0xF34A,0xF0E9,0xEF71, + 0xEEA9,0xEE1A,0xECAB,0xEA48,0xE772,0xE6D3,0xE855,0xEA75, + 0xEB96,0xEBE3,0xEAD3,0xE9B3,0xE986,0xE9C8,0xE9EB,0xE9A5, + 0xEA32,0xEBF7,0xEDED,0xF012,0xF1B4,0xF2E7,0xF306,0xF2FC, + 0xF2BF,0xF229,0xF26E,0xF32E,0xF36D,0xF47B,0xF6F1,0xF815, + 0xF880,0xF6BD,0xF3EC,0xF28B,0xF2B1,0xF174,0xF292,0xF265, + 0xEF73,0xEF82,0xEF24,0xF089,0xF0F5,0xEEFC,0xEC29,0xEA7F, + 0xEA04,0xEAD7,0xEBA3,0xEBE1,0xEC1E,0xEBB0,0xEBD8,0xEC7F, + 0xEE18,0xEEB5,0xEDD7,0xEBF6,0xEC45,0xEE13,0xF026,0xF21D, + 0xF2E1,0xF26C,0xF1FB,0xF2BE,0xF375,0xF404,0xF3E5,0xF3C4, + 0xF3F4,0xF53C,0xF667,0xF70E,0xF6EA,0xF61E,0xF52F,0xF490, + 0xF4EA,0xF502,0xF4D0,0xF3C2,0xF2F2,0xF2F2,0xF339,0xF2C5, + 0xF1EF,0xF171,0xF0B2,0xEFF6,0xEF59,0xEF29,0xEEFD,0xEEF7, + 0xEE91,0xEE75,0xEF43,0xF045,0xF00E,0xEEF7,0xED59,0xEC5C, + 0xEDC0,0xEEDA,0xEFFB,0xF14E,0xF231,0xF293,0xF27D,0xF35A, + 0xF42B,0xF43F,0xF42D,0xF441,0xF563,0xF616,0xF593,0xF56B, + 0xF65C,0xF700,0xF70D,0xF779,0xF77C,0xF6C0,0xF53A,0xF4D8, + 0xF562,0xF63E,0xF6E8,0xF681,0xF632,0xF5D2,0xF573,0xF46C, + 0xF44C,0xF457,0xF4D5,0xF4B2,0xF417,0xF49B,0xF52B,0xF4C0, + 0xF442,0xF46B,0xF70A,0xF7EE,0xF73E,0xF5DA,0xF532,0xF5F8, + 0xF7A8,0xF8C5,0xF707,0xF18C,0xE77C,0xDA19,0xC9FC,0xC0E1, + 0xC142,0xC1E8,0xC0B1,0xCD4F,0xEB45,0xFDC8,0xFE50,0xECB3, + 0xD3AC,0xC35E,0xC33E,0xD4FE,0xF281,0x0E06,0x2009,0x2855, + 0x29E3,0x284B,0x2589,0x22D9,0x2219,0x2485,0x29DB,0x2FE1, + 0x34DD,0x38FB,0x3C49,0x3EC5,0x4006,0x3DF0,0x344F,0x2344, + 0x0FB2,0x000B,0xFACC,0x0049,0x0B48,0x1353,0x12E1,0x08AE, + 0xF742,0xE4F2,0xD72A,0xD000,0xCF68,0xD4C3,0xDD10,0xE4C4, + 0xE93E,0xE9EB,0xE732,0xE420,0xE32A,0xE545,0xE8D1,0xEBF5, + 0xEDFE,0xF2BA,0xFBBF,0x07FD,0x1474,0x1DCF,0x1FFF,0x1B41, + 0x1735,0x11AE,0x0FFC,0x1434,0x1ADE,0x22BE,0x29DB,0x2DBD, + 0x2C3F,0x245D,0x18B2,0x0DDB,0x06FC,0x041B,0x0466,0x05CA, + 0x05C2,0x02BB,0xFD30,0xF7E7,0xF3EB,0xF065,0xEBD5,0xE5FE, + 0xE025,0xDD09,0xDC93,0xDFA3,0xE48A,0xEA1B,0xEDD2,0xEEB7, + 0xEC9C,0xE995,0xE6F8,0xE6A0,0xE9F3,0xF136,0xFB4E,0x04CB, + 0x0AA6,0x0C24,0x0AEE,0x0945,0x086F,0x093A,0x0B8E,0x0ED4, + 0x1193,0x12B0,0x1305,0x1326,0x1334,0x1263,0x1006,0x0C67, + 0x07C2,0x02B0,0xFE32,0xFACE,0xFBB4,0xFE51,0xFF52,0xFEBA, + 0xFAFC,0xF4E3,0xEE5D,0xE91C,0xE61D,0xE67C,0xE848,0xEB12, + 0xED28,0xEE18,0xEE62,0xEE23,0xEE16,0xEEBE,0xEFCD,0xF16D, + 0xF3A8,0xF749,0xFA59,0xFC74,0xFF55,0x035D,0x062C,0x08AB, + 0x0A04,0x0A06,0x08BF,0x077E,0x08AA,0x0BA4,0x0E53,0x0F7D, + 0x0F17,0x0D75,0x0BD9,0x092C,0x06C8,0x04D6,0x024D,0x0002, + 0xFF42,0xFEAC,0xFD01,0xFBF0,0xF95D,0xF6B6,0xF572,0xF48F, + 0xF3AB,0xF299,0xF164,0xF021,0xEF8C,0xF026,0xF24F,0xF429, + 0xF46E,0xF3E7,0xF437,0xF4FF,0xF6BF,0xF7B3,0xF907,0xFBD1, + 0xFF2A,0x02A7,0x04DD,0x055A,0x04A4,0x03C3,0x03C9,0x0517, + 0x0801,0x0A0C,0x0A04,0x093B,0x082F,0x0769,0x0770,0x069C, + 0x0591,0x0399,0x0159,0x0015,0xFFBC,0xFF65,0xFDBE,0xFB69, + 0xFA04,0xFA45,0xFA32,0xF991,0xF7E6,0xF5EC,0xF430,0xF302, + 0xF3FD,0xF5F7,0xF828,0xF8D5,0xF868,0xF7CA,0xF7F2,0xF86A, + 0xF911,0xFA3E,0xFBF6,0xFE3C,0xFEBC,0xFC06,0xF581,0xEA28, + 0xDA14,0xC6B8,0xBECA,0xBFCE,0xBF87,0xC0AA,0xDD2A,0xFA75, + 0x094E,0x03BA,0xEBDE,0xD10C,0xC377,0xC92F,0xDFF6,0xFF6B, + 0x1D05,0x309E,0x37AF,0x367D,0x323F,0x2EB3,0x2B82,0x2A53, + 0x2D12,0x3371,0x3A85,0x3E88,0x3F67,0x3F3C,0x3F25,0x3EE3, + 0x3F8A,0x3902,0x22D5,0x0DC0,0x007A,0xFF3C,0x087E,0x1518, + 0x1C15,0x1806,0x0A01,0xF620,0xE2A7,0xD4D5,0xCEBF,0xD0B8, + 0xD86A,0xE1AF,0xE94E,0xECC4,0xEBEA,0xE94F,0xE74D,0xE6F7, + 0xE8D6,0xEB46,0xEDA0,0xF11B,0xF77F,0x0274,0x10A5,0x1D26, + 0x2449,0x2493,0x1FDB,0x1882,0x1396,0x134E,0x176E,0x2024, + 0x292D,0x2EF5,0x2F59,0x2A25,0x2135,0x1711,0x0E9B,0x090F, + 0x0571,0x03F9,0x03B5,0x035A,0x016A,0xFDA8,0xF8DB,0xF46A, + 0xEFAD,0xE883,0xE240,0xDE0D,0xDBE0,0xDC71,0xE04D,0xE71E, + 0xEDF0,0xF17C,0xF0A0,0xEC24,0xE86A,0xE814,0xEB64,0xF178, + 0xF8E7,0x00E1,0x0866,0x0CFA,0x0ECB,0x1007,0x1017,0x0F7C, + 0x0EF4,0x1090,0x1344,0x14B3,0x1619,0x1774,0x18EA,0x1962, + 0x1846,0x147A,0x0EFD,0x0904,0x0400,0x0100,0xFF60,0xFF7B, + 0x0132,0x019F,0xFED8,0xF9DF,0xF42C,0xEE9C,0xEACC,0xE9B0, + 0xE9E1,0xEB13,0xEC4C,0xED8C,0xEF32,0xF000,0xF0C5,0xF1B4, + 0xF29E,0xF460,0xF5B2,0xF6A5,0xF82D,0xFB4F,0xFFA6,0x0476, + 0x08F6,0x0C06,0x0C99,0x0BC0,0x0B12,0x0B5A,0x0C3A,0x0D64, + 0x0EB6,0x1072,0x118C,0x11C5,0x1070,0x0D53,0x0A38,0x074E, + 0x0435,0x0298,0x023A,0x01A6,0xFF9E,0xFD3B,0xFB9B,0xFAC9, + 0xF9BF,0xF746,0xF42E,0xF274,0xF1C3,0xF1B6,0xF11B,0xF0E7, + 0xF1C5,0xF468,0xF654,0xF754,0xF758,0xF727,0xF49D,0xF5AD, + 0xFA4E,0xFE01,0x021B,0x04C3,0x0580,0x05F9,0x06CE,0x0759, + 0x07FD,0x0870,0x0972,0x0A5E,0x0AC5,0x0AC4,0x0B33,0x0AF9, + 0x0A66,0x08F4,0x07C3,0x07A1,0x06B4,0x0460,0x01B2,0xFF0B, + 0xFDD8,0xFDA4,0xFD45,0xFCF3,0xFC14,0xFA33,0xF7F7,0xF591, + 0xF4AC,0xF4F4,0xF5DD,0xF6FC,0xF76A,0xF765,0xF756,0xF7DF, + 0xF927,0xFA7B,0xFB5C,0xFBD1,0xFD09,0xFDFD,0xFF1C,0x0046, + 0xFFE3,0xFD01,0xF5F5,0xE906,0xD848,0xC611,0xBEEA,0xC010, + 0xBF80,0xC5B1,0xE535,0x02BB,0x0EDF,0x02FF,0xE7DF,0xCD8D, + 0xC2D6,0xCDCB,0xE870,0x097E,0x243D,0x339E,0x38E6,0x36B8, + 0x31BA,0x2CB2,0x2A38,0x2B8D,0x3033,0x36E4,0x3DD5,0x3F31, + 0x3F6E,0x3FD1,0x3F9B,0x3E9B,0x3F64,0x36BF,0x1F03,0x0A6E, + 0xFE8B,0xFF95,0x0B2E,0x18EE,0x1EFB,0x1875,0x06F8,0xF0D2, + 0xDD85,0xD2C6,0xCFD7,0xD33F,0xDAC2,0xE38D,0xEA2F,0xEDAA, + 0xECE6,0xE7AD,0xE36D,0xE38A,0xE68D,0xEAFF,0xEF7E,0xF350, + 0xF88B,0x00A0,0x0D38,0x1A7E,0x22E9,0x233F,0x1CBC,0x1384, + 0x0CD1,0x0D7B,0x1500,0x1FD5,0x2940,0x2E06,0x2D2F,0x274F, + 0x1DEE,0x1281,0x08CB,0x034C,0x02AC,0x040B,0x0467,0x02B7, + 0xFEC6,0xF994,0xF4B0,0xF0D8,0xEC79,0xE76E,0xE07A,0xDA7C, + 0xD876,0xDA99,0xDFEF,0xE5A9,0xE9F4,0xECBB,0xEC88,0xE975, + 0xE5D7,0xE44D,0xE5F1,0xEBCD,0xF4C8,0xFE73,0x06D6,0x0B24, + 0x0BF1,0x0AC1,0x0975,0x096F,0x0A2D,0x0C20,0x0F0C,0x1138, + 0x12A5,0x1480,0x155A,0x1518,0x1327,0x0F91,0x0AD2,0x0585, + 0x0083,0xFD6E,0xFC6D,0xFCD0,0xFC7D,0xFD0A,0xFC3A,0xF60F, + 0xF1A7,0xEC9F,0xE8FA,0xE747,0xE698,0xE650,0xE822,0xEB2B, + 0xEE76,0xF049,0xEFFF,0xEF04,0xEDA2,0xEDA1,0xEF20,0xF326, + 0xF7D2,0xFBB9,0xFEBC,0x0116,0x0411,0x07A4,0x09B5,0x0967, + 0x07DB,0x0753,0x0871,0x0ACC,0x0D29,0x0E7C,0x0F00,0x0E24, + 0x0CA3,0x0B38,0x09EA,0x074C,0x0346,0xFF37,0xFCFD,0xFD3D, + 0xFE34,0xFE71,0xFCB5,0xF9AF,0xF61B,0xF375,0xF16B,0xF074, + 0xF05C,0xF08D,0xF14A,0xF313,0xF4DF,0xF544,0xF4CF,0xF4C4, + 0xF4D4,0xF634,0xF7E1,0xF9BA,0xFAB2,0xFA14,0xFA63,0xFDD3, + 0x01FE,0x04C7,0x058D,0x0557,0x0587,0x062D,0x06B1,0x06BE, + 0x0700,0x07DE,0x08ED,0x0AD0,0x0C21,0x0B79,0x08C3,0x05BD, + 0x0247,0x005C,0x00D6,0x0159,0x0109,0x0033,0xFF43,0xFDB3, + 0xFB87,0xFAF8,0xFA49,0xF924,0xF7BC,0xF6F4,0xF72E,0xF762, + 0xF7C2,0xF888,0xFA56,0xFBBA,0xFC82,0xFD08,0xFCC3,0xFC66, + 0xFCA4,0xFF34,0x00FD,0x02DE,0x02AA,0xFE8B,0xF481,0xE5A9, + 0xD29B,0xC27E,0xC060,0xC149,0xC076,0xCF7B,0xF1BA,0x0911, + 0x0CC8,0xFB63,0xDFDB,0xC998,0xC514,0xD4D8,0xF1A7,0x1007, + 0x27A2,0x34F3,0x39A0,0x37C6,0x3283,0x2D32,0x2A58,0x2B46, + 0x2FB9,0x3676,0x3D40,0x4052,0x401D,0x4048,0x4042,0x3FAD, + 0x3F79,0x2EB6,0x164E,0x045F,0xFDF8,0x0430,0x1139,0x1C02, + 0x1DD7,0x13F3,0x0130,0xEC31,0xDAF6,0xD164,0xCF84,0xD43A, + 0xDD25,0xE655,0xEC3C,0xEDF1,0xEC1B,0xE916,0xE6FD,0xE6F6, + 0xE8A9,0xEBD7,0xEF5B,0xF3E6,0xFC0A,0x08B8,0x1718,0x2255, + 0x2767,0x2402,0x1B15,0x12EC,0x1063,0x136E,0x1A92,0x269B, + 0x2DAC,0x3109,0x300E,0x28F4,0x1E4E,0x1290,0x08E9,0x0392, + 0x0365,0x05A4,0x0714,0x0514,0x001E,0xFAD0,0xF5EF,0xF18A, + 0xEC65,0xE603,0xDF84,0xDACD,0xD9A9,0xDCFC,0xE3D4,0xEAE4, + 0xEFA0,0xF02A,0xED8E,0xE9AF,0xE68E,0xE630,0xE9CD,0xF13B, + 0xFAF8,0x043B,0x0A27,0x0CD9,0x0D41,0x0CDC,0x0BC7,0x0BF5, + 0x0D25,0x0F3B,0x116B,0x132F,0x1490,0x166E,0x17BD,0x17B3, + 0x1543,0x1080,0x0AC4,0x0553,0x001F,0xFC50,0xFB0D,0xFC1A, + 0xFD24,0xFD29,0xFBC3,0xF91C,0xF370,0xEB67,0xE6C3,0xE5FB, + 0xE82A,0xEA7C,0xED33,0xEEE6,0xEF44,0xEEE1,0xEE5C,0xEEC4, + 0xEFC8,0xF12C,0xF2A6,0xF48B,0xF75F,0xFAA4,0xFED3,0x035C, + 0x07F0,0x0A87,0x09C5,0x0839,0x0758,0x06B6,0x0793,0x0A2D, + 0x0CA5,0x0FBA,0x10F2,0x1065,0x0DB6,0x097B,0x0572,0x026F, + 0x0000,0xFE89,0xFE49,0xFEC6,0xFF01,0xFC91,0xF8DE,0xF6B4, + 0xF3EC,0xF205,0xF0D2,0xEF3B,0xEEE6,0xEF4A,0xEFFB,0xF154, + 0xF2BF,0xF45C,0xF4CB,0xF464,0xF410,0xF468,0xF548,0xF533, + 0xF6CC,0xFA1D,0xFE1B,0x01F4,0x0450,0x04CE,0x0477,0x0364, + 0x02FC,0x03BA,0x04BF,0x062B,0x07D4,0x08A3,0x091A,0x0989, + 0x0884,0x05EB,0x0395,0x0201,0x012F,0x0127,0x0090,0xFEE0, + 0xFCEC,0xFB5D,0xFB4C,0xFB6A,0xFA99,0xF85D,0xF565,0xF33B, + 0xF290,0xF33D,0xF521,0xF6B6,0xF6C6,0xF5AE,0xF4DB,0xF586, + 0xF6F3,0xF812,0xF85A,0xF92C,0xFAB2,0xFC36,0xFD5B,0xFB58, + 0xF53C,0xEA92,0xDB2E,0xC8E0,0xBEC1,0xBF05,0xBF93,0xBF4B, + 0xD141,0xF341,0x0788,0x0663,0xF02F,0xD5DC,0xC2AA,0xC2D4, + 0xD7AC,0xF6A4,0x1508,0x29DF,0x3365,0x34DA,0x3292,0x2E52, + 0x2AE3,0x2865,0x28FA,0x2D4F,0x3506,0x3CF4,0x3F40,0x3F1B, + 0x3F53,0x3EEF,0x3F57,0x3B09,0x26D5,0x10BB,0xFFE0,0xFB4D, + 0x02D7,0x10E0,0x1A99,0x199D,0x0CAC,0xF896,0xE49D,0xD63D, + 0xCFE0,0xD00C,0xD50B,0xDC56,0xE3F4,0xEA6D,0xED4E,0xEBF1, + 0xE857,0xE55E,0xE540,0xE826,0xEBF5,0xF06C,0xF658,0xFEEF, + 0x0BFF,0x19C2,0x2366,0x25F3,0x20E1,0x1868,0x1252,0x11F1, + 0x16AE,0x1E39,0x26D5,0x2DB3,0x2FCC,0x2B64,0x236F,0x19E4, + 0x0F73,0x070B,0x024D,0x0176,0x02B5,0x037A,0x0159,0xFD57, + 0xF995,0xF5CD,0xF0BB,0xE9E7,0xE21E,0xDBF7,0xD9B3,0xDB80, + 0xDFA2,0xE658,0xEC97,0xEF3A,0xEE72,0xEC70,0xEA71,0xE8F3, + 0xE93F,0xEC79,0xF409,0xFE20,0x06BB,0x0C67,0x0E69,0x0E23, + 0x0D52,0x0D24,0x0D98,0x0ED9,0x10D6,0x1282,0x1435,0x15C9, + 0x18BB,0x1A7C,0x1808,0x1335,0x0DCF,0x084E,0x034B,0xFF02, + 0xFCEE,0xFD44,0xFEA9,0xFFDD,0xFEB1,0xFA92,0xF52D,0xEF44, + 0xE9F7,0xE6D3,0xE73B,0xE97B,0xEB50,0xECBF,0xEDBC,0xEF85, + 0xF158,0xF24B,0xF1F5,0xF13C,0xF160,0xF34D,0xF661,0xF9D9, + 0xFE8F,0x037A,0x07A4,0x0A6C,0x0BCB,0x0B75,0x097D,0x0839, + 0x0822,0x0AA1,0x0DC5,0x0FB4,0x1068,0x1005,0x0EFA,0x0CFC, + 0x0A5A,0x07EA,0x04B8,0x015E,0xFF10,0xFE14,0xFE24,0xFE59, + 0xFD78,0xFB40,0xF800,0xF507,0xF2C5,0xF1A1,0xF14B,0xF099, + 0xEFB3,0xEECA,0xEFCE,0xF200,0xF52B,0xF6BD,0xF5FA,0xF47D, + 0xF3EB,0xF513,0xF82D,0xFC1D,0xFF7A,0xFEEC,0x00D2,0x04BB, + 0x05D3,0x0746,0x077C,0x0632,0x0612,0x0722,0x085E,0x099F, + 0x0A00,0x0916,0x0858,0x07C9,0x0693,0x0602,0x04E1,0x02D8, + 0xFFA4,0xFD26,0xFC8B,0xFD64,0xFDFF,0xFD22,0xFB22,0xF90B, + 0xF692,0xF457,0xF414,0xF447,0xF42F,0xF446,0xF537,0xF6A9, + 0xF825,0xF89B,0xF7CA,0xF775,0xF86B,0xFA69,0xFBD2,0xFC8B, + 0xFDB7,0xFE71,0xFEBF,0xFD58,0xF774,0xEC6C,0xDB8F,0xC6D6, + 0xBEF8,0xBFDE,0xBFBC,0xC195,0xDBC8,0xFA92,0x0932,0x0299, + 0xEA94,0xCF32,0xC14E,0xC783,0xDFA1,0xFFB9,0x1D4F,0x3027, + 0x3778,0x3645,0x31CC,0x2D89,0x2ADB,0x2A83,0x2CCF,0x31C3, + 0x3884,0x3ED4,0x3FBB,0x3FA1,0x3FB0,0x3F21,0x3F57,0x38E3, + 0x236E,0x0DCF,0xFF27,0xFD28,0x06C3,0x148E,0x1D0F,0x1A47, + 0x0B53,0xF54F,0xE078,0xD210,0xCCD4,0xCFB2,0xD836,0xE242, + 0xE9E0,0xECA0,0xEBDC,0xE8EE,0xE5DD,0xE4CF,0xE655,0xE90E, + 0xEBB7,0xF070,0xF814,0x02C1,0x102D,0x1C98,0x2404,0x2452, + 0x1ECD,0x16AD,0x1123,0x108D,0x15AF,0x1EA6,0x2849,0x2E48, + 0x2FD0,0x2B42,0x2126,0x15DF,0x0B8E,0x043A,0x0179,0x0237, + 0x0403,0x03BB,0x00E5,0xFC89,0xF7B6,0xF2C4,0xED0A,0xE626, + 0xDF4F,0xDAAC,0xD8F6,0xDA6E,0xDEF8,0xE50F,0xEAE3,0xED9A, + 0xED03,0xEA5B,0xE705,0xE4B1,0xE557,0xE9A9,0xF25C,0xFD02, + 0x061F,0x0B25,0x0CEE,0x0C2E,0x0A3D,0x08F6,0x0962,0x0B41, + 0x0E77,0x10CC,0x12AE,0x149C,0x15E3,0x15C8,0x13F6,0x1049, + 0x0BBD,0x0671,0x0113,0xFD27,0xFB55,0xFBA6,0xFDD3,0xFD7B, + 0xFBD4,0xF90D,0xF40F,0xECD9,0xE80B,0xE638,0xE3F2,0xE6DF, + 0xEA24,0xED44,0xEF73,0xF03D,0xEF66,0xEE5C,0xED80,0xEEA5, + 0xF19D,0xF4C5,0xF7D5,0xFACE,0xFEA6,0x0251,0x062E,0x08C9, + 0x0A0A,0x09B5,0x083E,0x0756,0x07C5,0x0A11,0x0CC7,0x0EC4, + 0x0F71,0x0F0D,0x0DE0,0x0C3A,0x0909,0x0513,0x018D,0xFF00, + 0xFEC1,0xFEF5,0xFF0E,0xFE40,0xFC8E,0xFA2B,0xF763,0xF42C, + 0xF154,0xEFF2,0xEFB1,0xEFB0,0xF00B,0xF158,0xF2C1,0xF3DB, + 0xF444,0xF54B,0xF5C3,0xF533,0xF4EB,0xF5F0,0xF82F,0xFB82, + 0xFEC0,0x01E7,0x0484,0x058D,0x0486,0x02DE,0x0355,0x0434, + 0x04AE,0x051E,0x064A,0x088E,0x0A1E,0x09FE,0x08B4,0x0720, + 0x0592,0x03FF,0x026F,0x0114,0x000E,0xFF58,0xFEF9,0xFDDE, + 0xFC80,0xFC68,0xFB49,0xF92D,0xF6E7,0xF5A7,0xF534,0xF4D4, + 0xF515,0xF52E,0xF58C,0xF684,0xF7CD,0xF921,0xF951,0xF8B2, + 0xF866,0xF968,0xFB18,0xFD95,0xFF39,0xFFF5,0xFFAF,0xFCCE, + 0xF6EE,0xEB04,0xDAFC,0xC979,0xC01F,0xC0E5,0xC055,0xCDEE, + 0xEB56,0x01CB,0x08CF,0xFDA0,0xE6F7,0xD223,0xCA6C,0xD410, + 0xEB28,0x06F6,0x1ECE,0x2D1E,0x3190,0x2E88,0x28F8,0x2482, + 0x22DC,0x2407,0x27A9,0x2C8B,0x3251,0x37C6,0x3C7C,0x3FAF, + 0x4037,0x4028,0x39B1,0x29DF,0x1701,0x05DC,0xFD70,0x0012, + 0x0A9A,0x1575,0x1A0F,0x1490,0x0513,0xF140,0xE011,0xD628, + 0xD464,0xD964,0xE14A,0xE8A4,0xED84,0xEF4E,0xEE81,0xEBF7, + 0xE98C,0xE95A,0xEA4B,0xEBB7,0xEE6F,0xF395,0xFB43,0x05F5, + 0x11BB,0x1AFC,0x1EFA,0x1D99,0x17B9,0x115B,0x0CD5,0x0E09, + 0x14FE,0x1ED0,0x270D,0x2B61,0x2A14,0x21E8,0x19EF,0x1042, + 0x0827,0x04C4,0x0427,0x0505,0x0587,0x0440,0x00B9,0xFC35, + 0xF852,0xF487,0xF00C,0xEA74,0xE43D,0xDF8A,0xDE59,0xE146, + 0xE6E3,0xECDB,0xEFAE,0xEFEA,0xEEB5,0xECB1,0xEA80,0xE93E, + 0xEAEF,0xF04F,0xF904,0x0209,0x08B2,0x0BD1,0x0BC1,0x09D9, + 0x088A,0x0899,0x0AAA,0x0D90,0x1000,0x1188,0x1309,0x145C, + 0x1482,0x13AF,0x11B5,0x0E69,0x096A,0x043C,0xFFEE,0xFD65, + 0xFD65,0xFEA5,0xFF4F,0xFF18,0xFCF1,0xF832,0xF201,0xECC7, + 0xE9EA,0xE95B,0xEC22,0xEFD2,0xF26A,0xF457,0xF3FD,0xF295, + 0xF19C,0xF272,0xF3D8,0xF55C,0xF68E,0xF7EC,0xF9B2,0xFCD3, + 0x00CC,0x0561,0x08D6,0x0A38,0x09DD,0x077A,0x0692,0x07AF, + 0x08F1,0x097A,0x0B18,0x0D77,0x0E9F,0x0E39,0x0CAC,0x0A07, + 0x0678,0x02B9,0xFFB7,0xFEAB,0xFEA8,0x0037,0x007B,0xFE61, + 0xFB0A,0xF820,0xF66F,0xF4DA,0xF375,0xF2DD,0xF27E,0xF1B0, + 0xF078,0xF188,0xF33D,0xF463,0xF538,0xF6B7,0xF7D7,0xF808, + 0xF77A,0xF643,0xF6BD,0xF96E,0xFD5F,0x0187,0x0331,0x030D, + 0x029C,0x0161,0x00F4,0x01BC,0x02FC,0x0474,0x052E,0x0647, + 0x06BD,0x067C,0x04EF,0x0316,0x0152,0x006C,0xFF78,0xFEA4, + 0xFE35,0xFDC6,0xFD30,0xFBFE,0xFA8B,0xF9E6,0xF8DA,0xF78A, + 0xF5B4,0xF433,0xF2D0,0xF2AC,0xF315,0xF3E5,0xF5A0,0xF6F1, + 0xF79D,0xF773,0xF6BD,0xF5EF,0xF584,0xF67A,0xF875,0xFBB4, + 0xFE4D,0xFF4C,0xFD5F,0xF8BA,0xF333,0xECFE,0xE6F4,0xE205, + 0xE144,0xE502,0xEE86,0xF9CC,0x0293,0x04A7,0xFF67,0xF519, + 0xECE1,0xEAB0,0xEF94,0xF845,0x051E,0x0CE7,0x112C,0x1323, + 0x11CA,0x1006,0x0E23,0x0CAD,0x0BC2,0x0C6C,0x0E7F,0x11DF, + 0x1462,0x1613,0x171E,0x17A0,0x1610,0x121D,0x0C56,0x0588, + 0x0055,0xFD36,0xFE36,0x021C,0x06D8,0x0933,0x073E,0x0146, + 0xF98B,0xF311,0xEF36,0xEEC8,0xF0D7,0xF504,0xF8ED,0xFB57, + 0xFB8F,0xFA9C,0xF95E,0xF859,0xF805,0xF8F4,0xFA00,0xFB4D, + 0xFCB6,0xFF24,0x038A,0x08A1,0x0C08,0x0C07,0x0A5C,0x087C, + 0x06A7,0x0551,0x0563,0x07EB,0x0B4F,0x0E26,0x0F41,0x0EC1, + 0x0CDA,0x0962,0x04C7,0x0095,0xFD7E,0xFDC4,0xFF50,0xFF61, + 0xFECD,0xFE40,0xFD11,0xFB58,0xFA36,0xF839,0xF628,0xF456, + 0xF356,0xF3E6,0xF4DF,0xF6CC,0xF89F,0xF9F0,0xFAEA,0xFAAD, + 0xF9BA,0xF96C,0xF85E,0xF8C6,0xFAFB,0xFDCD,0x00AD,0x0398, + 0x057B,0x05B6,0x057F,0x04A8,0x046E,0x0430,0x03FF,0x04DC, + 0x0672,0x0724,0x076D,0x0740,0x074F,0x0704,0x04EC,0x03DA, + 0x01FF,0xFF74,0xFE5F,0xFDFB,0xFE2D,0xFE37,0xFE11,0xFD51, + 0xFC45,0xFB2F,0xFA31,0xF933,0xF90F,0xF94F,0xF9C0,0xF914, + 0xF834,0xF871,0xF879,0xF7E6,0xF771,0xF703,0xF68C,0xF5D8, + 0xF55F,0xF4CD,0xF3F5,0xF36C,0xF418,0xF4FE,0xF4EF,0xF47A, + 0xF310,0xF230,0xF1BD,0xF23C,0xF310,0xF3FE,0xF47E,0xF439, + 0xF365,0xF2DA,0xF25B,0xF1C1,0xF194,0xF122,0xF070,0xF017, + 0xEF84,0xEF07,0xEE74,0xEE06,0xED4F,0xEC8A,0xEC2F,0xEC03, + 0xEB81,0xEB17,0xEABF,0xEA9B,0xEA23,0xE9AE,0xE98B,0xEA0B, + 0xE98F,0xE930,0xE8DF,0xE968,0xE978,0xE922,0xE8CD,0xE8DC, + 0xE90E,0xE8AA,0xE8D1,0xE9B5,0xE859,0xE8BD,0xEA90,0xE962, + 0xE956,0xE9F2,0xEA06,0xE9E3,0xE9EE,0xEA67,0xEA74,0xEA67, + 0xEAF9,0xEA91,0xEA45,0xEA5A,0xEA31,0xEA84,0xEB01,0xEB78, + 0xEBB9,0xEBFB,0xEC2A,0xEC4C,0xECC1,0xED2F,0xEDD3,0xEDEA, + 0xEE25,0xEE9C,0xEF2D,0xEFCE,0xF070,0xF0BC,0xF13A,0xF195, + 0xF238,0xF30E,0xF2DA,0xF31C,0xF362,0xF3C5,0xF46F,0xF52E, + 0xF591,0xF600,0xF6B7,0xF71C,0xF750,0xF802,0xF815,0xF864, + 0xF8B3,0xF8E0,0xF989,0xF9FD,0xFA56,0xFABB,0xFB02,0xFB70, + 0xFC1D,0xFD3A,0xFFBC,0xFFD1,0xFF72,0xFF97,0xFFFC,0x003E, + 0x0036,0x00B4,0x018C,0x01E4,0x01F1,0x024D,0x0290,0x02B2, + 0x02E4,0x0325,0x0394,0x0452,0x044F,0x03A9,0x0482,0x05C6, + 0x0578,0x0501,0x05C8,0x064F,0x05DF,0x0632,0x0693,0x06E4, + 0x0716,0x070B,0x0774,0x07A1,0x078B,0x07F2,0x07F0,0x082B, + 0x0851,0x087D,0x08FD,0x0905,0x0909,0x090E,0x0944,0x08B8, + 0x08EF,0x0A30,0x0AA1,0x0AE1,0x0ACF,0x0B41,0x0B73,0x0B49, + 0x0B2F,0x0B5D,0x0B2C,0x0ADB,0x0B00,0x0B3A,0x0A7C,0x0AB7, + 0x0A92,0x0A9D,0x0AAF,0x0ACF,0x0B12,0x0B13,0x0B46,0x0B76, + 0x0B89,0x0BEF,0x0BF8,0x0C22,0x0C35,0x0C38,0x0C1E,0x0C3E, + 0x0C21,0x0BC1,0x0C12,0x0C4F,0x0C65,0x0C95,0x0C67,0x0C35, + 0x0C04,0x0BC5,0x0BEF,0x0C0B,0x0C2A,0x0C85,0x0C1D,0x0C00, + 0x0C24,0x0C93,0x0C94,0x0C55,0x0C93,0x0CC6,0x0CE9,0x0C87, + 0x0C44,0x0CA9,0x0C8D,0x0C0F,0x0C14,0x0C83,0x0C00,0x0BFE, + 0x0C32,0x0BED,0x0C38,0x0C09,0x0BC9,0x0C6B,0x0C9C,0x0C1E, + 0x0C4D,0x0CCF,0x0BD4,0x0D01,0x0E16,0x0C66,0x0CE0,0x0CA4, + 0x0C0B,0x0C2B,0x0C84,0x0BDC,0x0C28,0x0BF7,0x0C3E,0x0C46, + 0x0C0A,0x0C59,0x0C1D,0x0BDF,0x0C0A,0x0C0F,0x0B7E,0x0B55, + 0x0B58,0x0B3C,0x0B5D,0x0B3B,0x0B56,0x0B66,0x0BB6,0x0B48, + 0x0B3C,0x0AED,0x0ADA,0x0ACA,0x0AEF,0x0B14,0x0B45,0x0B40, + 0x0AD1,0x0AFC,0x0ABB,0x0A86,0x0A7A,0x0AD7,0x0AB8,0x0A82, + 0x0A57,0x0A57,0x0A53,0x09F6,0x09C3,0x09E7,0x0A36,0x0A02, + 0x09A9,0x0942,0x090A,0x0939,0x093A,0x0958,0x0949,0x0973, + 0x0962,0x0958,0x08C9,0x075C,0x05EC,0x062A,0x0668,0x0659, + 0x064C,0x06B3,0x06B9,0x06A2,0x06A4,0x0672,0x0683,0x068E, + 0x0619,0x0636,0x0620,0x05FB,0x05C0,0x0628,0x0601,0x056F, + 0x05CE,0x0619,0x05E0,0x05AE,0x05A3,0x05D6,0x05F4,0x063A, + 0x0605,0x05E3,0x0614,0x060D,0x062C,0x060E,0x05D6,0x05D8, + 0x061F,0x0601,0x05BC,0x0598,0x0586,0x05D9,0x059E,0x067C, + 0x0658,0x05A4,0x052F,0x04F4,0x0531,0x0520,0x0513,0x052F, + 0x0510,0x0505,0x0579,0x05DA,0x059D,0x060D,0x067F,0x0622, + 0x05BB,0x0582,0x0585,0x05B4,0x054F,0x04D4,0x04F0,0x050C, + 0x0514,0x04E4,0x049B,0x0478,0x046E,0x0414,0x03C9,0x03DA, + 0x039C,0x03A5,0x03B4,0x0388,0x0377,0x035C,0x033E,0x02F2, + 0x02CE,0x02CB,0x02D7,0x02EC,0x02F0,0x0291,0x0225,0x01DF, + 0x01C3,0x01CB,0x01C8,0x0188,0x01B0,0x0183,0x0102,0x00CB, + 0x00E6,0x014C,0x013A,0x00F6,0x00F8,0x00F5,0x0124,0x00B0, + 0x009C,0xFF26,0xFFAA,0x001D,0x00BE,0x0249,0x04D3,0x06AE, + 0x06CA,0x07F2,0x060B,0x06D1,0x07BD,0x07B5,0x075D,0x0724, + 0x0711,0x0623,0x05A3,0x05A4,0x06C2,0x07D6,0x083B,0x07F1, + 0x07E3,0x07A7,0x0765,0x0760,0x0857,0x0A2C,0x0B98,0x0CF9, + 0x0DE4,0x0E04,0x0D63,0x0CA4,0x0C1F,0x0D4B,0x0F75,0x11A4, + 0x12B0,0x1283,0x1151,0x10D3,0x1193,0x128A,0x13AB,0x144A, + 0x1422,0x13E9,0x13AB,0x148C,0x15BD,0x1631,0x1637,0x1649, + 0x1691,0x1683,0x1659,0x1661,0x1686,0x1672,0x1701,0x17B3, + 0x17A2,0x174F,0x1698,0x15A6,0x155E,0x14DE,0x14B3,0x1448, + 0x1313,0x0F3B,0x0A80,0x0422,0xFD0C,0xF7B5,0xF6AF,0xFB32, + 0x049F,0x0F0B,0x1596,0x1528,0x0EC9,0x0561,0xFDA9,0xFB85, + 0x0120,0x0CD4,0x19E3,0x22CF,0x24AB,0x226C,0x1D9F,0x1736, + 0x122A,0x11D4,0x164F,0x1CBD,0x21B4,0x2460,0x2392,0x2039, + 0x19FC,0x14A5,0x1196,0x0FE8,0x0E76,0x0BE1,0x08F1,0x0775, + 0x06F0,0x074A,0x0793,0x060C,0x039C,0xFEE9,0xF7C0,0xF36E, + 0xF22F,0xF4B2,0xFA00,0xFF40,0x027A,0x02F8,0x0110,0xFDED, + 0xFA25,0xF872,0xFA98,0x0014,0x0572,0x096A,0x0C2F,0x0CFF, + 0x0BEB,0x0995,0x072F,0x0560,0x0557,0x05E9,0x06AF,0x0805, + 0x093B,0x08D0,0x07A8,0x063A,0x0405,0x0013,0xFB89,0xF7EE, + 0xF5F5,0xF624,0xF7E9,0xF97C,0xF981,0xF7EB,0xF4AC,0xF0F6, + 0xEE11,0xEC18,0xEC37,0xEDC9,0xEFAD,0xF1E6,0xF41A,0xF56A, + 0xF525,0xF37D,0xF278,0xF2E4,0xF430,0xF5B9,0xF70C,0xF88C, + 0xFA1C,0xFBB3,0xFD36,0xFE38,0xFE79,0xFD18,0xFAA6,0xF8B7, + 0xF76D,0xF6F4,0xF751,0xF8EE,0xFAAD,0xFB46,0xF967,0xF617, + 0xF2C3,0xED57,0xECD8,0xEDFD,0xEED6,0xF0CA,0xF0CB,0xEFA8, + 0xEE21,0xECD6,0xEC17,0xEB23,0xEA5E,0xEA50,0xEB23,0xEC27, + 0xEDC6,0xEFBA,0xF0D5,0xF078,0xEFA1,0xEFF6,0xF0EA,0xF1AB, + 0xF1DF,0xF2AC,0xF38D,0xF49D,0xF5BC,0xF6D2,0xF75A,0xF6CC, + 0xF565,0xF3C4,0xF371,0xF3DE,0xF4A7,0xF51B,0xF531,0xF559, + 0xF40E,0xF174,0xEF4E,0xEDF8,0xEE2F,0xEF3E,0xEFB6,0xF048, + 0xF020,0xEF15,0xED02,0xEB63,0xEBA7,0xECAB,0xEE0B,0xEE95, + 0xEDF5,0xECFF,0xECB5,0xED77,0xEF35,0xF10C,0xF345,0xF5D7, + 0xF4BD,0xF387,0xF33C,0xF348,0xF3BC,0xF4B4,0xF659,0xF7EB, + 0xF855,0xF75B,0xF5ED,0xF472,0xF39E,0xF3AE,0xF413,0xF561, + 0xF6B5,0xF5B1,0xF30B,0xF163,0xF16B,0xF132,0xF0F6,0xF1E6, + 0xF25E,0xF21B,0xF0D5,0xEF2C,0xEE78,0xEF76,0xF10C,0xF231, + 0xF2A1,0xF1FA,0xF161,0xF058,0xEFC8,0xF050,0xF26F,0xF415, + 0xF4F5,0xF577,0xF631,0xF539,0xF22D,0xF103,0xF2C7,0xF5EA, + 0xF83B,0xF9B5,0xF961,0xF795,0xF5DC,0xF4A2,0xF483,0xF52F, + 0xF5C4,0xF556,0xF274,0xEBC1,0xE1E4,0xD303,0xC1FF,0xBDC8, + 0xBE64,0xBEE7,0xBE19,0xCEE6,0xEE34,0xFF90,0xFC90,0xE6BF, + 0xCA1C,0xBFB7,0xBF28,0xCEF0,0xF71C,0x1CFC,0x3637,0x3D85, + 0x358B,0x234A,0x1218,0x08E6,0x0B2C,0x1821,0x2BF0,0x3C0E, + 0x3DEE,0x3E15,0x3897,0x27AF,0x18C6,0x0E7A,0x0895,0x048D, + 0x004C,0xFAC5,0xF759,0xF791,0xF976,0xF947,0xF3F7,0xE847, + 0xD865,0xC9A7,0xC17E,0xC1F6,0xCBE1,0xDAD2,0xE9DB,0xF3EF, + 0xF69C,0xF112,0xE7BC,0xDE2E,0xDBBD,0xE369,0xF369,0x0612, + 0x195D,0x238C,0x2274,0x1D9A,0x1597,0x0F44,0x0D56,0x10CC, + 0x16D5,0x1DF9,0x22FE,0x24FB,0x2255,0x1C52,0x1480,0x0B9F, + 0x037C,0xFCCC,0xF7D0,0xF4F5,0xF4E3,0xF595,0xF548,0xF369, + 0xF05B,0xEB98,0xE49B,0xDD8B,0xD89F,0xD734,0xDA19,0xE16C, + 0xEAC8,0xF389,0xF810,0xF76D,0xF408,0xF081,0xEE78,0xF0C8, + 0xF784,0x00CE,0x0B35,0x1398,0x1863,0x18D0,0x15FA,0x1171, + 0x0CF9,0x0B06,0x0CFD,0x10BA,0x146B,0x1673,0x167C,0x135A, + 0x0E08,0x0820,0x0255,0xFD08,0xF8E7,0xF702,0xF639,0xF5E4, + 0xF3F5,0xF18C,0xF042,0xEEBA,0xEC4C,0xE98D,0xE6FC,0xE565, + 0xE627,0xE912,0xED86,0xF31D,0xF839,0xFB22,0xFB3C,0xF9B5, + 0xF8D0,0xFA49,0xFDDF,0x01B3,0x0654,0x0BF5,0x1051,0x1201, + 0x1206,0x0FF3,0x0CFE,0x0A7D,0x09A7,0x09D2,0x0BAE,0x0D84, + 0x0DDA,0x0BB5,0x0840,0x043B,0x00B1,0xFDB8,0xFAC7,0xF888, + 0xF6CB,0xF5A9,0xF52F,0xF54E,0xF720,0xF5BD,0xF2ED,0xF1C8, + 0xF014,0xEE80,0xEEEE,0xF0B0,0xF37B,0xF77B,0xFB2E,0xFE76, + 0x0060,0x007E,0xFFFE,0x0014,0x0092,0x02A6,0x04D9,0x07D2, + 0x0B5B,0x0E13,0x0E52,0x0D37,0x0B79,0x09BF,0x085B,0x0743, + 0x0739,0x07FC,0x083D,0x074B,0x05C0,0x03BA,0x01F6,0xFF6A, + 0xFCBB,0xFABB,0xF957,0xF840,0xF763,0xF74A,0xF842,0xF975, + 0xF964,0xF87C,0xF6BF,0xF535,0xF471,0xF4D4,0xF76C,0xFAB7, + 0xFDCA,0x0053,0x00C6,0x003C,0xFFD7,0x000A,0x0118,0x0288, + 0x04DA,0x07DE,0x09C9,0x0A17,0x08D5,0x079A,0x0731,0x0725, + 0x06D3,0x06D9,0x06B8,0x0624,0x0384,0xFF83,0xFA87,0xF293, + 0xE45E,0xCEB1,0xC0E2,0xBFFF,0xBFAE,0xC0E0,0xBF7D,0xD299, + 0xFC43,0x108E,0x07D1,0xE47D,0xC353,0xC1CB,0xC0AC,0xD23C, + 0x0CEA,0x39DF,0x3F11,0x3E27,0x3FCB,0x3705,0x1F28,0x159E, + 0x1CAD,0x3383,0x3FFB,0x3EEA,0x3F63,0x3F04,0x3FB3,0x3B15, + 0x282A,0x1D9E,0x191E,0x1561,0x0FB3,0x076B,0x00CA,0xFF02, + 0x0033,0xFF64,0xF77D,0xE6F4,0xD104,0xC184,0xC02C,0xBFA6, + 0xC48F,0xDA82,0xEE33,0xF9B9,0xFA98,0xF19A,0xE1A3,0xD49A, + 0xD2E1,0xE06B,0xF9E7,0x17CD,0x3034,0x3C12,0x3B81,0x2F58, + 0x2006,0x18E9,0x1A8D,0x2268,0x2CCA,0x3606,0x3B05,0x3A48, + 0x3467,0x2A7D,0x1ED5,0x133C,0x093A,0x017B,0xFC1B,0xF7FE, + 0xF4EC,0xF2AB,0xF24E,0xF26A,0xEFCE,0xE852,0xDD7E,0xD200, + 0xC971,0xC879,0xCF41,0xDB98,0xE904,0xF31A,0xF6C1,0xF418, + 0xEE3B,0xEA24,0xEA46,0xEFC4,0xFA2C,0x074C,0x15A0,0x1FF0, + 0x23A8,0x21A7,0x1C31,0x15E3,0x1403,0x14FB,0x187D,0x1DBD, + 0x205D,0x1FA1,0x1C10,0x176F,0x1246,0x0BE4,0x04D3,0xFD84, + 0xF6C3,0xF10F,0xED32,0xECC1,0xEEEA,0xF032,0xEEDE,0xEB2C, + 0xE50C,0xDE35,0xD995,0xD8DC,0xDCA9,0xE325,0xEACF,0xF1AB, + 0xF63F,0xF778,0xF6C3,0xF49D,0xF3AC,0xF62C,0xFC97,0x056D, + 0x0E10,0x142B,0x15FA,0x148A,0x11A0,0x0F84,0x0F22,0x1041, + 0x1127,0x1159,0x100B,0x0E49,0x0CB3,0x0AEF,0x08DB,0x0552, + 0x0106,0xFC12,0xF6E8,0xF30D,0xF0C4,0xEF74,0xEFBC,0xF03C, + 0xF098,0xF025,0xED85,0xE97A,0xE635,0xE4A8,0xE6EB,0xEB82, + 0xF0C2,0xF570,0xF928,0xFA87,0xFB1B,0xFB0F,0xFB02,0xFCF0, + 0x0318,0x05D1,0x098E,0x0CAB,0x0E02,0x0E52,0x0E60,0x0DEC, + 0x0E62,0x0FCA,0x0F28,0x0C84,0x090E,0x073F,0x06F6,0x0737, + 0x0741,0x062E,0x0334,0xFEC8,0xFA5C,0xF651,0xF54A,0xF53F, + 0xF5EC,0xF5E9,0xF554,0xF44F,0xF324,0xF1BD,0xF0D1,0xF131, + 0xF2A5,0xF59F,0xF8C9,0xFB61,0xFCEC,0xFE22,0xFEAF,0xFF8A, + 0x013F,0x03CD,0x071D,0x0990,0x0A57,0x09E6,0x0981,0x0A3E, + 0x0C12,0x0CEC,0x0DA1,0x0D4C,0x0B56,0x087A,0x05B7,0x0460, + 0x0446,0x02BA,0xFD02,0xF283,0xE212,0xCA6E,0xBF2D,0xBF6E, + 0xBE7D,0xBF38,0xBED0,0xDB84,0x0273,0x0D0D,0xF9A4,0xD0DE, + 0xBEFE,0xC198,0xC088,0xDE3F,0x1A70,0x3C9D,0x3D79,0x3DFB, + 0x3E82,0x2F13,0x1ACD,0x157F,0x21D9,0x39E5,0x3FF1,0x3EB9, + 0x3F65,0x3F03,0x3FC8,0x39D0,0x28DE,0x201F,0x1AC7,0x1457, + 0x0C33,0x0481,0x017C,0x0351,0x05BB,0x0250,0xF5EB,0xE147, + 0xC968,0xC00C,0xC11F,0xC0CB,0xCAF3,0xE1A9,0xF30E,0xFBD8, + 0xF8BE,0xEBF4,0xDC73,0xD2C4,0xD62B,0xE8DE,0x0548,0x220C, + 0x3620,0x3CF2,0x37A1,0x2BCE,0x209D,0x1C6D,0x1FB0,0x2801, + 0x3188,0x3929,0x3C52,0x3B0E,0x356C,0x2C99,0x2172,0x1585, + 0x09FF,0x007D,0xFA00,0xF684,0xF5DC,0xF67C,0xF71D,0xF506, + 0xEED7,0xE4B7,0xD8A7,0xCDD1,0xC7DE,0xC966,0xD23C,0xDF85, + 0xEC10,0xF383,0xF558,0xF1B4,0xEBF2,0xE7C5,0xE8C9,0xF077, + 0xFD1D,0x0B33,0x17C0,0x2071,0x2398,0x213A,0x1C02,0x1744, + 0x1556,0x15FE,0x18BB,0x1CAE,0x1FF2,0x20BE,0x1E70,0x19F7, + 0x12CC,0x0AB9,0x022F,0xFA31,0xF3E4,0xF091,0xEFC1,0xF0BD, + 0xEFBB,0xF01D,0xEF19,0xE95C,0xE2BC,0xDC27,0xD87A,0xD946, + 0xDD83,0xE488,0xEC2F,0xF2C6,0xF6B1,0xF705,0xF5AA,0xF482, + 0xF59F,0xF92F,0xFF4B,0x069C,0x0DEA,0x13CB,0x1728,0x178A, + 0x167D,0x1435,0x115F,0x0F9E,0x0FE2,0x1168,0x1286,0x1271, + 0x11CF,0x1022,0x0C3B,0x063E,0x006A,0xFB7E,0xF775,0xF3D8, + 0xF199,0xF21A,0xF355,0xF36D,0xF205,0xEF2C,0xEC14,0xE85C, + 0xE66D,0xE75A,0xEA53,0xEE92,0xF2D0,0xF627,0xF924,0xFBC1, + 0xFCCB,0xFCF1,0xFD4F,0xFEBF,0x0163,0x0650,0x0D02,0x113A, + 0x13F9,0x14A4,0x12B7,0x103A,0x0E6C,0x0D4A,0x0CB1,0x0CDE, + 0x0CE0,0x0D09,0x0CDF,0x0AB9,0x074E,0x03A7,0xFFD7,0xFC0E, + 0xF8F0,0xF772,0xF7E7,0xF7B8,0xF5CA,0xF402,0xF3EC,0xF363, + 0xF227,0xF139,0xF014,0xEF8D,0xEFE3,0xF1E0,0xF539,0xF911, + 0xFBFD,0xFE63,0xFEEF,0xFED5,0xFE06,0xFDEB,0x0039,0x037C, + 0x0661,0x091F,0x0AA7,0x0A60,0x0A90,0x0A6D,0x08CB,0x0782, + 0x060E,0x04A2,0x049F,0x0512,0x02D7,0xFAEA,0xECF3,0xD741, + 0xC1A9,0xBE04,0xBE18,0xBEB1,0xBE20,0xC370,0xE5C7,0x01F8, + 0x04C7,0xEC84,0xC805,0xBE4E,0xC064,0xC20E,0xEB23,0x23BF, + 0x3CDC,0x3C95,0x3DAC,0x3BFE,0x27AD,0x1857,0x1952,0x296C, + 0x3C2E,0x3E4D,0x3E2C,0x3E81,0x3DCD,0x3E9D,0x3815,0x2643, + 0x1C4D,0x15FF,0x0FC8,0x0955,0x0412,0x01E3,0x0292,0x022A, + 0xFCB1,0xEEBB,0xD99E,0xC4B7,0xBEAF,0xBFA4,0xBF02,0xCCF5, + 0xE24F,0xF1ED,0xF7D3,0xF354,0xE62F,0xD7CE,0xD107,0xD735, + 0xEA96,0x06D5,0x21DA,0x3344,0x3797,0x3115,0x249B,0x1CCB, + 0x1933,0x1AB9,0x24DF,0x2F33,0x3719,0x3AEC,0x39A7,0x3245, + 0x2776,0x1A25,0x0D8A,0x03FF,0xFDDC,0xFA4D,0xF83F,0xF7CF, + 0xF719,0xF53B,0xF0C5,0xEA3D,0xE129,0xD6E8,0xCE42,0xCAB4, + 0xCD6C,0xD5A7,0xE1A8,0xECA5,0xF2FD,0xF3E0,0xF177,0xEDA1, + 0xEB68,0xEC5F,0xF39A,0xFF52,0x0CE6,0x1932,0x2196,0x249E, + 0x223E,0x1C9E,0x16C2,0x13E8,0x14E2,0x1941,0x1E0D,0x2183, + 0x2193,0x1E7E,0x18D6,0x1192,0x09A7,0x0228,0xFB5A,0xF5CE, + 0xF311,0xF270,0xF2A8,0xF29A,0xF0BD,0xECE4,0xE812,0xE158, + 0xDAFC,0xD90A,0xD952,0xDCBE,0xE2FF,0xEB79,0xF352,0xF79A, + 0xF8F0,0xF6EB,0xF4A0,0xF453,0xF7DD,0xFEC8,0x070B,0x0F32, + 0x15FC,0x1987,0x18C1,0x156F,0x126A,0x0F4D,0x0DC0,0x0ED8, + 0x1221,0x149A,0x1455,0x1195,0x0D74,0x086F,0x03F5,0x001F, + 0xFC89,0xF899,0xF4C7,0xF1C9,0xF04C,0xEFEF,0xF0E0,0xF17C, + 0xF00E,0xED38,0xEA5F,0xE9A6,0xE855,0xE864,0xEB14,0xEFF7, + 0xF554,0xF9B7,0xFCF8,0xFEB4,0xFE52,0xFD7F,0xFD4F,0xFFAF, + 0x0579,0x0C51,0x10F0,0x129C,0x11E3,0x0FD6,0x0E0A,0x0D7D, + 0x0D54,0x0D49,0x0C35,0x0A9C,0x0977,0x096B,0x08F3,0x06A3, + 0x02F8,0xFF81,0xFCEF,0xFAA2,0xF822,0xF603,0xF41D,0xF2D9, + 0xF22F,0xF2DF,0xF4F7,0xF6E0,0xF605,0xF271,0xEFA7,0xEF42, + 0xF181,0xF5AD,0xF9C7,0xFDC3,0x0021,0xFFFD,0xFEF3,0xFF4C, + 0x0147,0x038F,0x04EB,0x06E3,0x0955,0x0BB7,0x0D04,0x0C54, + 0x0AA7,0x0997,0x08E3,0x08F2,0x0964,0x08CB,0x06CC,0x0253, + 0xFC2D,0xF312,0xE784,0xD4D9,0xC1AA,0xBFC4,0xC052,0xC0BF, + 0xBECA,0xC9CA,0xF278,0x0B7C,0x0716,0xE5FA,0xC428,0xC153, + 0xC127,0xC9C0,0xFCF4,0x31B5,0x3F26,0x3DD3,0x3F85,0x3A89, + 0x2385,0x1538,0x1973,0x2EF5,0x3FC3,0x3F33,0x3F72,0x3F2D, + 0x3F01,0x3DDC,0x2E19,0x20E6,0x1B8D,0x163B,0x0F45,0x07EF, + 0x01C0,0xFF9A,0x00A7,0x00BC,0xF9F2,0xEA02,0xD300,0xC158, + 0xBFC6,0xC004,0xC0CC,0xD35E,0xE9CB,0xF7E5,0xFA51,0xF13A, + 0xE190,0xD3B9,0xD02A,0xDB2E,0xF312,0x1130,0x2B77,0x3952, + 0x3901,0x2E7E,0x2121,0x1821,0x177E,0x203A,0x2BFA,0x3574, + 0x3BB1,0x3BBA,0x36BC,0x2E13,0x237E,0x1879,0x0D74,0x03E7, + 0xFC1C,0xF6BF,0xF3FC,0xF415,0xF5C0,0xF594,0xF178,0xE971, + 0xDD7E,0xD0CB,0xC810,0xC5A8,0xCB5C,0xD7A0,0xE556,0xEFDD, + 0xF53C,0xF384,0xED8D,0xE7FC,0xE62C,0xEAD1,0xF5F8,0x0452, + 0x12A1,0x1D8B,0x2232,0x20AB,0x1C00,0x1756,0x14E8,0x14D3, + 0x16CC,0x198C,0x1BBA,0x1CF5,0x1E11,0x1BB8,0x158B,0x0DD5, + 0x0510,0xFCF1,0xF596,0xF0E0,0xEE2C,0xEDA2,0xEE75,0xEFC4, + 0xEF68,0xEACB,0xE372,0xDB12,0xD4FA,0xD40E,0xD7D6,0xDF2A, + 0xE7C7,0xEECA,0xF2C3,0xF38C,0xF23C,0xF0F8,0xF16F,0xF3D3, + 0xF86F,0xFFF6,0x08E5,0x108B,0x1485,0x1519,0x12C6,0x100A, + 0x0EA0,0x0E86,0x0F00,0x0F79,0x0F25,0x0E6F,0x0D53,0x0C6F, + 0x0B1D,0x080C,0x0345,0xFD3C,0xF657,0xF0BD,0xEE5C,0xEE0E, + 0xEFB9,0xF217,0xF2D3,0xF0DB,0xEC82,0xE758,0xE35C,0xE231, + 0xE3F6,0xE841,0xEE0D,0xF3F6,0xF7B0,0xF92C,0xF885,0xF767, + 0xF7B0,0xFA3D,0xFECA,0x04DA,0x0A0E,0x0C1B,0x0C69,0x0EB7, + 0x0D20,0x0DCE,0x0E5C,0x0DDE,0x0CDD,0x0AFA,0x08CA,0x07F8, + 0x0859,0x087C,0x0789,0x053E,0x0225,0xFE37,0xF9A8,0xF55E, + 0xF278,0xF1DE,0xF2F8,0xF4E5,0xF5B0,0xF55C,0xF38E,0xF07F, + 0xED42,0xECAF,0xEEDA,0xF26A,0xF656,0xF929,0xFB0A,0xFC0F, + 0xFC27,0xFC84,0xFEAB,0x01D7,0x0474,0x0580,0x063F,0x07BB, + 0x0969,0x0ADF,0x0C48,0x0D8D,0x0CFD,0x0B29,0x08E2,0x0788, + 0x06E0,0x0698,0x0622,0x048D,0xFF90,0xF514,0xE42C,0xCBA7, + 0xBF1F,0xC014,0xBFA1,0xC0EB,0xBF48,0xD4C5,0xFBAC,0x085A, + 0xFB61,0xD68E,0xBEE8,0xC15F,0xBF6C,0xD4A2,0x0F7D,0x3948, + 0x3DAC,0x3D87,0x3F18,0x3297,0x1D51,0x1765,0x2195,0x373F, + 0x3FA9,0x3EFC,0x3EFC,0x3EE0,0x3F4C,0x3DA0,0x2EDB,0x2295, + 0x1BE6,0x14DF,0x0CA9,0x055C,0x01CE,0x02EE,0x052C,0x03FA, + 0xFA77,0xE650,0xCCC9,0xC058,0xC112,0xC024,0xC753,0xDE51, + 0xF115,0xF9F4,0xF8D3,0xEDC8,0xDD1F,0xD29A,0xD44F,0xE3F7, + 0xFE44,0x1B2A,0x3065,0x391F,0x344B,0x28B6,0x1F07,0x1C61, + 0x210A,0x2919,0x30C6,0x3634,0x388C,0x3808,0x34BE,0x2E8A, + 0x2591,0x1A50,0x0E01,0x038E,0xFBF0,0xF7AD,0xF55A,0xF5A0, + 0xF65D,0xF606,0xF247,0xE9BC,0xDD32,0xD04F,0xC7AD,0xC700, + 0xCFFF,0xDE3C,0xEBEC,0xF424,0xF4EC,0xF0D2,0xEA91,0xE70C, + 0xE91F,0xF12E,0xFD71,0x0A65,0x1510,0x1C8D,0x1FC7,0x1F9B, + 0x1D82,0x1A46,0x1811,0x1776,0x18B1,0x1B21,0x1DA1,0x1F24, + 0x1E33,0x1AD6,0x15AA,0x0E6F,0x05EC,0xFDB2,0xF6E1,0xF174, + 0xEE6D,0xEE63,0xF063,0xF194,0xEF80,0xEA9A,0xE46B,0xDC25, + 0xD934,0xDA3E,0xDD1A,0xE32C,0xE9BF,0xEF2C,0xF32F,0xF59D, + 0xF5C9,0xF58E,0xF64C,0xF8AF,0xFD70,0x0374,0x09B2,0x0FCE, + 0x14BF,0x1783,0x176D,0x154F,0x1259,0x1033,0x0E3A,0x0D24, + 0x0DA9,0x0EF7,0x0FA6,0x0E6F,0x0B1E,0x0650,0x0010,0xF93D, + 0xF401,0xF109,0xF00E,0xF071,0xF0C3,0xF0A0,0xEF3F,0xECA2, + 0xE943,0xE6AF,0xE553,0xE568,0xE6BF,0xE95F,0xEC94,0xF09D, + 0xF4A1,0xF75B,0xF98B,0xFB30,0xFC67,0xFC9E,0xFD41,0xFEE4, + 0x0221,0x0700,0x0C4B,0x101C,0x128A,0x12F2,0x0F61,0x0C03, + 0x09A2,0x08AB,0x08A2,0x0971,0x0A9E,0x0A6D,0x0847,0x041C, + 0xFF6D,0xFB29,0xF771,0xF4B1,0xF499,0xF59F,0xF62D,0xF4CB, + 0xF1D2,0xF06B,0xF067,0xEFC0,0xF018,0xF1D6,0xF334,0xF359, + 0xF380,0xF43C,0xF6F9,0xFA8A,0xFDAF,0x001B,0x01F8,0x0296, + 0x02BD,0x0255,0x0287,0x03AA,0x06A5,0x0ABB,0x0DC6,0x0E26, + 0x0C3A,0x07E8,0x029A,0x00C7,0x02A0,0x047F,0x042C,0xFE67, + 0xF169,0xDD9E,0xC527,0xBE64,0xBF24,0xBEDD,0xBF4B,0xBFA8, + 0xDF45,0x00EA,0x0748,0xF139,0xCA9C,0xBE03,0xC09F,0xC066, + 0xE195,0x1C54,0x3BB2,0x3CA7,0x3D7A,0x3C5C,0x299D,0x17AF, + 0x1528,0x22A4,0x3916,0x3E8A,0x3DEB,0x3E64,0x3DD9,0x3E6E, + 0x3827,0x2771,0x1E5C,0x184C,0x1273,0x0B25,0x0485,0x0177, + 0x0225,0x0341,0xFF97,0xF33B,0xDE93,0xC720,0xBEBE,0xBFB8, + 0xBEF0,0xCAA0,0xE0E1,0xF08D,0xF689,0xF1FE,0xE58A,0xD86E, + 0xD15E,0xD520,0xE615,0x00BA,0x1CFF,0x30B3,0x36F8,0x3138, + 0x25E8,0x1B1D,0x1711,0x1ABC,0x23C8,0x2D14,0x3672,0x39B9, + 0x3653,0x31F6,0x28E7,0x1D9E,0x1145,0x0692,0xFE96,0xFA5A, + 0xF7E7,0xF673,0xF57E,0xF490,0xF1F0,0xEC8D,0xE403,0xD8B9, + 0xCEA1,0xC8FD,0xCA80,0xD348,0xE0E0,0xED26,0xF418,0xF45D, + 0xF003,0xEB12,0xE882,0xEB84,0xF3DE,0x0016,0x0D47,0x18C8, + 0x2032,0x2287,0x20BD,0x1C2C,0x1795,0x1595,0x1739,0x1A9F, + 0x1E23,0x2107,0x21C5,0x1F56,0x1AAB,0x13FA,0x0C1C,0x03EC, + 0xFBE9,0xF63A,0xF36C,0xF31D,0xF46C,0xF4B2,0xF322,0xEF03, + 0xE950,0xE330,0xDE14,0xDBE0,0xDCB5,0xE06D,0xE52F,0xEB11, + 0xF190,0xF49F,0xF4EB,0xF3F0,0xF371,0xF4E0,0xF8DC,0xFEB7, + 0x0614,0x0CE7,0x118C,0x1420,0x1554,0x156E,0x13F3,0x11EE, + 0x1057,0x0ED6,0x0ED1,0x10BD,0x1178,0x10ED,0x0F02,0x0AE9, + 0x05B7,0x006D,0xFB64,0xF680,0xF2F9,0xF108,0xF0F8,0xF296, + 0xF342,0xF26C,0xEFA0,0xEB99,0xE7FF,0xE663,0xE717,0xE9CC, + 0xEDD1,0xF238,0xF7AB,0xF98F,0xFA61,0xFAF8,0xFAAC,0xFAE4, + 0xFCF9,0x015F,0x0690,0x0B1D,0x0E66,0x103A,0x10AA,0x1020, + 0x0FD9,0x0F5F,0x0EEC,0x0E53,0x0D46,0x0CBE,0x0C9A,0x0C01, + 0x09EE,0x06D2,0x0348,0x004B,0xFD77,0xFB41,0xF98D,0xF807, + 0xF62F,0xF3EF,0xF2F8,0xF3B9,0xF4B2,0xF4CC,0xF339,0xF13A, + 0xEFA4,0xEF45,0xF141,0xF54E,0xF9C7,0xFD7C,0xFEAF,0xFE66, + 0xFE3D,0xFE1D,0xFF0E,0x0143,0x048F,0x07EB,0x0A6B,0x0BF5, + 0x0C32,0x0B1D,0x08C3,0x06A4,0x065B,0x073F,0x08C2,0x091A, + 0x0754,0x03D8,0xFF46,0xFA7F,0xF5AF,0xEFAE,0xE6AE,0xDC1C, + 0xD2D6,0xCF67,0xD4B6,0xE0FD,0xF06A,0xFBD2,0xFC2A,0xF140, + 0xE481,0xD866,0xD5ED,0xE0E1,0xF418,0x0941,0x1A5F,0x2197, + 0x1F24,0x169F,0x0D52,0x0794,0x0851,0x0F60,0x1ACF,0x261C, + 0x2C8E,0x2C15,0x2601,0x1D43,0x15B3,0x10F7,0x0E1D,0x0BF9, + 0x0841,0x0411,0x00C3,0xFF47,0xFFFB,0x0108,0xFF2B,0xF929, + 0xF010,0xE640,0xDECC,0xDD19,0xE11E,0xE87D,0xF0B5,0xF6B3, + 0xF961,0xF6EA,0xF0EC,0xEB46,0xE956,0xED0B,0xF54B,0x0013, + 0x0A26,0x10BE,0x1296,0x1060,0x0C94,0x0A03,0x09EA,0x0BAB, + 0x0F69,0x13DB,0x1712,0x17E9,0x1834,0x15B4,0x1114,0x0DE3, + 0x0AE5,0x0748,0x037B,0x0045,0xFD0C,0xFA9F,0xFA6C,0xFC30, + 0xFCF2,0xFB03,0xF5CD,0xEF7A,0xEA27,0xE79F,0xE8C9,0xED55, + 0xF38D,0xF994,0xFBE5,0xF9BB,0xF66F,0xF48A,0xF359,0xF5AB, + 0xFA89,0x014C,0x0718,0x0AF9,0x0BA7,0x0A9B,0x08F2,0x08A1, + 0x09B6,0x0B2F,0x0C2C,0x0C5E,0x0C0E,0x0AB5,0x0969,0x0825, + 0x0881,0x07BC,0x05C3,0x044A,0x016C,0xFC32,0xF725,0xF495, + 0xF54B,0xF8DE,0xFC17,0xFC46,0xF96B,0xF3EB,0xEE00,0xE9CD, + 0xE8EE,0xEC7D,0xF252,0xF746,0xF9F9,0xFA6F,0xF92D,0xF6A1, + 0xF4F5,0xF5C4,0xF8DA,0xFD24,0x01F9,0x0559,0x0696,0x060D, + 0x04C2,0x049F,0x0547,0x06A4,0x0760,0x070D,0x0626,0x059C, + 0x04FE,0x047F,0x03FC,0x0390,0x0299,0x0154,0xFEB8,0xFBE4, + 0xF96B,0xF813,0xF7B4,0xF7D9,0xF759,0xF6AA,0xF5D4,0xF467, + 0xF2D5,0xF218,0xF1F0,0xF2EE,0xF4AD,0xF751,0xF9FC,0xFBB3, + 0xFC10,0xFB40,0xFAC1,0xFA9E,0xFB74,0xFD2D,0xFEDE,0x000A, + 0x0081,0xFFA5,0xFF30,0xFF2E,0xFE4A,0xFD7B,0xFED1,0xFC00, + 0xFB14,0xFACD,0xF91F,0xF85C,0xF797,0xF6C5,0xF583,0xF4D3, + 0xF3A1,0xF299,0xF127,0xF08F,0xEFA4,0xEF1A,0xEE95,0xEDB3, + 0xECBD,0xEBC1,0xEAD9,0xEA12,0xE9EA,0xE940,0xE904,0xE8CA, + 0xE88C,0xE7EF,0xE765,0xE702,0xE6C6,0xE6BD,0xE673,0xE667, + 0xE640,0xE619,0xE5DB,0xE5FD,0xE61D,0xE63A,0xE66E,0xE666, + 0xE635,0xE580,0xE529,0xE506,0xE53F,0xE574,0xE5C1,0xE63F, + 0xE69E,0xE659,0xE5FD,0xE5C3,0xE5B8,0xE60C,0xE668,0xE732, + 0xE78E,0xE7EF,0xE824,0xE82F,0xE7DB,0xE756,0xE629,0xE664, + 0xE798,0xE859,0xE915,0xE961,0xE98B,0xE9F2,0xEA7E,0xEB4E, + 0xEC16,0xED3B,0xED88,0xEDA0,0xEDD9,0xEE8B,0xEEE0,0xF005, + 0xF106,0xF0BB,0xF0FE,0xF245,0xF2C9,0xF2A3,0xF305,0xF3AD, + 0xF3F5,0xF51B,0xF622,0xF684,0xF71B,0xF75B,0xF766,0xF775, + 0xF7D0,0xF86D,0xF974,0xFA41,0xFA97,0xFA70,0xFA8C,0xFB41, + 0xFBBE,0xFD42,0xFE29,0xFD92,0xFDE9,0xFE43,0xFE90,0xFF6C, + 0x0018,0x0097,0x0166,0x0211,0x0339,0x0393,0x03BD,0x0448, + 0x0513,0x0586,0x05B9,0x0632,0x0697,0x06CF,0x068B,0x069F, + 0x0735,0x0788,0x081A,0x0810,0x0839,0x08A9,0x0871,0x086A, + 0x087D,0x089C,0x08C6,0x093E,0x0979,0x0983,0x09C2,0x0A3B, + 0x0A43,0x0A01,0x0A78,0x0AEA,0x0B56,0x0B81,0x0B9B,0x0B9E, + 0x0BAF,0x0BCF,0x0C38,0x0C4F,0x0C4E,0x0C9F,0x0C91,0x0CFB, + 0x0CEF,0x0CF4,0x0CE6,0x0CBF,0x0D16,0x0D00,0x0D57,0x0D7B, + 0x0DD1,0x0E20,0x0DE9,0x0DD8,0x0DFE,0x0E58,0x0E17,0x0DB9, + 0x0DB1,0x0DCC,0x0D9E,0x0E5B,0x0EBC,0x0F49,0x0D6C,0x0DF3, + 0x0F47,0x0DF2,0x0E06,0x0E4E,0x0E2F,0x0E97,0x0E29,0x0DBA, + 0x0DC7,0x0DE4,0x0DB3,0x0D90,0x0D5B,0x0D75,0x0E23,0x0E18, + 0x0DD2,0x0E34,0x0E71,0x0E40,0x0E5F,0x0E95,0x0E66,0x0E07, + 0x0DBE,0x0D50,0x0D6D,0x0D6E,0x0DBF,0x0DEA,0x0DA0,0x0D96, + 0x0D5E,0x0D17,0x0CD5,0x0CAA,0x0CA7,0x0CFB,0x0D11,0x0D19, + 0x0CEB,0x0C64,0x0BEC,0x0C57,0x0C69,0x0C9B,0x0CBC,0x0C6A, + 0x0C5A,0x0C20,0x0BFB,0x0C42,0x0CB0,0x0C75,0x0C75,0x0C08, + 0x0BBE,0x0BD5,0x0BCD,0x0CA7,0x0E6C,0x0E3F,0x0DF2,0x0D9E, + 0x0D16,0x0CC2,0x0CAF,0x0C4F,0x0BFC,0x0BEB,0x0C44,0x0C44, + 0x0BF5,0x0BB5,0x0BB4,0x0B7F,0x0B5D,0x0B4C,0x0B0F,0x0A60, + 0x0A9E,0x0B02,0x0A40,0x09BD,0x09D7,0x0A21,0x09BB,0x097A, + 0x0957,0x092F,0x08EC,0x08B5,0x0854,0x0818,0x07D6,0x0830, + 0x0830,0x0848,0x07C6,0x078C,0x079D,0x0748,0x0729,0x078E, + 0x073A,0x05B8,0x05F1,0x071D,0x0766,0x0718,0x06A9,0x06A6, + 0x066F,0x0647,0x0647,0x0642,0x0582,0x04F6,0x047A,0x04A8, + 0x0475,0x043B,0x0442,0x03E2,0x0363,0x030D,0x036A,0x03BF, + 0x03F1,0x03D7,0x03BD,0x034D,0x0354,0x03B7,0x041A,0x039C, + 0x038E,0x039A,0x03A2,0x0389,0x0371,0x0333,0x032A,0x0358, + 0x036D,0x034A,0x02CD,0x02DB,0x02A1,0x026B,0x0282,0x029E, + 0x029E,0x0230,0x01F5,0x01F2,0x0255,0x027A,0x023E,0x0235, + 0x0236,0x023D,0x0233,0x01C6,0x01CF,0x01BA,0x0181,0x01AB, + 0x013D,0x0141,0x018F,0x01C9,0x0198,0x018E,0x01FD,0x0313, + 0x02A0,0x0285,0x02D1,0x029E,0x0160,0x028D,0x032E,0x018F, + 0x02B0,0x02C2,0x0289,0x022D,0x0280,0x022F,0x02B9,0x02BF, + 0x02D3,0x0200,0x01CB,0x021D,0x0201,0x0262,0x0272,0x0279, + 0x023B,0x02A1,0x0286,0x023C,0x0257,0x01FB,0x01FE,0x0224, + 0x0244,0x0266,0x02EB,0x0238,0x0229,0x0245,0x0271,0x0278, + 0x028C,0x02B4,0x0242,0x01DA,0x01AB,0x021B,0x0234,0x01F5, + 0x021B,0x0235,0x0258,0x021E,0x0202,0x0213,0x0195,0x019E, + 0x01B9,0x01E4,0x01FF,0x0232,0x0237,0x0207,0x0174,0x0143, + 0x0172,0x0158,0x0195,0x0154,0x00D6,0xFFFF,0xFFD7,0xFF73, + 0xFF58,0xFF38,0xF5B6,0xF1ED,0xF7B6,0xFA5F,0xFAF8,0xF9B4, + 0xFA07,0xFE8A,0x04CF,0x04D1,0x0124,0xFD5B,0xFA23,0xFBC5, + 0xFE67,0x0164,0x037A,0x03A1,0x01D2,0xFF7C,0xFF83,0x0143, + 0x0215,0x0167,0x003C,0x0078,0x01D2,0x022C,0x0163,0x00A4, + 0x0092,0x01B3,0x036E,0x0446,0x040F,0x0257,0xFF9F,0xFDC6, + 0xFED3,0x01E2,0x0422,0x03AE,0x0242,0x0124,0x0057,0xFFF7, + 0xFFEC,0x0059,0x0078,0x00A2,0x0020,0x004E,0x0169,0x0153, + 0x0077,0x003D,0x00DF,0x0163,0x016F,0x006B,0xFF1D,0xFE76, + 0xFE90,0xFFFD,0x014A,0x0235,0x01B5,0x00A6,0xFF70,0xFF30, + 0x0043,0x02FB,0x032F,0x0276,0x022B,0x0239,0x0288,0x027D, + 0x0234,0x01E2,0x01EE,0x01A2,0x01AC,0x0136,0x00CC,0x002F, + 0xFFA2,0x000B,0x00BC,0x019A,0x00E9,0x0083,0x001E,0xFEEC, + 0xFE55,0xFED3,0xFF6E,0xFFDB,0x0002,0xFFD9,0xFFC8,0xFF68, + 0xFF27,0xFF2A,0xFF35,0xFF12,0xFF0D,0xFF17,0xFE8D,0xFDF7, + 0xFE09,0xFE3D,0xFE83,0xFE9D,0xFF34,0xFE96,0xFCD3,0xFC1D, + 0xFCFA,0xFE0F,0xFEF9,0xFEBB,0xFEBE,0xFEC4,0xFE95,0xFDE4, + 0xFDBA,0xFD46,0xFCBF,0xFD07,0xFC92,0xFBE7,0xFCDE,0xFCB8, + 0xFC3B,0xFC21,0xFC4A,0xFC97,0xFCBC,0xFCC1,0xFC8B,0xFC76, + 0xFCA2,0xFCB4,0xFCFA,0xFD68,0xFDD7,0xFDAA,0xFD0E,0xFD0F, + 0xFCE1,0xFCD3,0xFCA3,0xFC41,0xFC5B,0xFC57,0xFC70,0xFCC6, + 0xFCB9,0xFC30,0xFC3D,0xFC76,0xFC71,0xFCA6,0xFCA0,0xFC72, + 0xFBFC,0xFBFA,0xFC38,0xFCB7,0xFD05,0xFD0C,0xFCA7,0xFC5C, + 0xFC40,0xFC03,0xFC54,0xFBCF,0xFBF4,0xFC15,0xFBF2,0xFC1E, + 0xFC9C,0xFC41,0xFC1F,0xFC56,0xFD39,0xFD7B,0xFD6C,0xFD5A, + 0xFD82,0xFC82,0xFDED,0xFED2,0xFCEB,0xFE4E,0xFE56,0xFDE2, + 0xFDA7,0xFDD4,0xFD94,0xFD9A,0xFDB9,0xFDFF,0xFE32,0xFE18, + 0xFE54,0xFDA4,0xFDCC,0xFDC3,0xFDD2,0xFE3D,0xFEBB,0xFEE3, + 0xFEDA,0xFE85,0xFE7F,0xFE91,0xFE7B,0xFE64,0xFE35,0xFE27, + 0xFE28,0xFE86,0xFE5F,0xFE8B,0xFEC7,0xFED4,0xFEE8,0xFEE7, + 0xFF1D,0xFF3B,0xFF31,0xFED8,0xFF1B,0xFF4D,0xFF89,0xFFC7, + 0xFFDE,0xFFFC,0xFFA5,0xFF63,0xFF28,0xFF70,0xFF64,0xFFA1, + 0xFFF5,0xFFFC,0xFFDF,0x001E,0x0018,0x0012,0x0010,0xFFB8, + 0xFFAB,0xFFB1,0xFE9D,0xFCC9,0xFD6B,0xFD71,0xFD8E,0xFDA1, + 0xFDE7,0xFE5D,0xFE7D,0xFE6A,0xFE5C,0xFE86,0xFE9F,0xFE6D, + 0xFE8A,0xFEF4,0xFF02,0xFF1A,0xFF7D,0xFF00,0xFE07,0xFED7, + 0xFFC7,0xFF93,0xFF97,0x0014,0x0050,0xFFD9,0x0004,0x0023, + 0xFFE9,0x0052,0x0072,0x007A,0x0048,0x0057,0x0043,0x0036, + 0x0057,0x0063,0x0080,0x0081,0x004C,0x001F,0x018A,0x00CC, + 0x0054,0x002E,0x005C,0x0064,0x0063,0x003A,0x003E,0x0049, + 0x00B0,0x0147,0x017F,0x01A6,0x0203,0x025F,0x0201,0x01EA, + 0x021E,0x01F9,0x020A,0x0200,0x01F7,0x01FB,0x01DA,0x01DF, + 0x0216,0x01BA,0x017D,0x01FB,0x01EE,0x01A9,0x0153,0x012D, + 0x012B,0x0123,0x019F,0x01FE,0x01FB,0x01BB,0x018E,0x0121, + 0x00F8,0x011B,0x014D,0x0191,0x01C2,0x01C2,0x015B,0x0107, + 0x0102,0x00CB,0x00C1,0x00F1,0x00E9,0x00E9,0x00FA,0x0090, + 0x00A8,0x008B,0x00B8,0x0105,0x0120,0x0109,0x00ED,0x00D1, + 0x0059,0x0081,0x005C,0x003C,0x0028,0x0073,0x0072,0x0020, + 0xFFC3,0x0033,0x0001,0xFEBF,0x009A,0x0029,0xFFB0,0xFFFC, + 0xFFA8,0xFF2D,0xFF15,0xFF10,0xFF3B,0xFF52,0xFF82,0xFF6A, + 0xFF2C,0xFF2A,0xFEC0,0xFED4,0xFEEE,0xFEF7,0xFF3A,0xFF2D, + 0xFF56,0xFF5C,0xFF2D,0xFF27,0xFEE4,0xFF87,0xFFE4,0xFFB0, + 0xFFDA,0xFFE7,0xFF98,0xFEE4,0xFED4,0xFE99,0xFE45,0xFEBD, + 0xFF76,0xFEB9,0xFE0F,0xFDFE,0xFE02,0xFE59,0xFE7C,0xFE73, + 0xFE92,0xFEC2,0xFEAA,0xFE4A,0xFDD2,0xFDD0,0xFE5B,0xFE64, + 0xFE49,0xFE8D,0xFE46,0xFE17,0xFDF2,0xFE0E,0xFE1F,0xFEAA, + 0x0095,0x0199,0x00D4,0x009E,0xFFF9,0xFF89,0xFF78,0xFFD4, + 0x0034,0x009D,0x0054,0xFFD0,0xFFA3,0xFF68,0xFF63,0xFF3E, + 0xFF89,0xFFBC,0xFFFE,0xFFC0,0xFEF5,0xFFC5,0xFFAC,0xFECC, + 0xFE5E,0xFF4A,0xFF3A,0xFEDD,0xFE79,0xFE13,0xFDFB,0xFE1A, + 0xFE6F,0xFF24,0xFF07,0xFEC5,0xFEC7,0xFE83,0xFE3E,0xFE92, + 0xFEDA,0xFEF5,0xFEB0,0xFEDF,0xFF74,0xFECE,0xFDBE,0xFE8A, + 0xFF40,0xFF3D,0xFF3A,0xFF2C,0xFED6,0xFEAD,0xFE77,0xFE67, + 0xFE77,0xFDE3,0xFD8D,0xFE32,0xFCD9,0xFC40,0xFCC8,0xFC98, + 0xFCD2,0xFD28,0xFD13,0xFD1E,0xFD0D,0xFD17,0xFD2D,0xFCEB, + 0xFCE4,0xFD2F,0xFCF8,0xFD3C,0xFD92,0xFD7B,0xFD44,0xFD3B, + 0xFD13,0xFD10,0xFD49,0xFD89,0xFDB5,0xFD82,0xFDC9,0xFD44, + 0xFD40,0xFDA3,0xFDD1,0xFDA3,0xFD9E,0xFD43,0xFD41,0xFD41, + 0xFD27,0xFCE5,0xFD3B,0xFD02,0xFD12,0xFD3B,0xFD91,0xFD4E, + 0xFD73,0xFD0E,0xFD19,0xFD2B,0xFD5F,0xFD5C,0xFDF1,0xFDCA, + 0xFD85,0xFD2F,0xFD56,0xFDC8,0xFE84,0xFE4F,0xFE48,0xFE74, + 0xFE50,0xFE06,0xFFEF,0xFE61,0xFE1F,0xFF1D,0xFEC1,0xFEE5, + 0xFF00,0xFF12,0xFECD,0xFED5,0xFEA2,0xFEEA,0xFF36,0xFF3B, + 0xFF30,0xFF3F,0xFF24,0xFEF1,0xFF45,0xFF0E,0xFF40,0xFF8F, + 0xFF93,0xFF85,0xFFA3,0xFF53,0xFF7C,0xFFB0,0xFF81,0xFF5A, + 0xFFAF,0xFFD0,0xFFB0,0xFF30,0xFF3F,0x002E,0x007E,0x018A, + 0x026C,0x035D,0x0383,0x0350,0x034E,0x035F,0x04AB,0x0672, + 0x0812,0x0976,0x0A32,0x0A5F,0x0A90,0x0AE8,0x0B56,0x0B63, + 0x0B68,0x0B51,0x0B06,0x0AE9,0x0AE1,0x0B3B,0x0BF8,0x0CB2, + 0x0CC2,0x0CA8,0x0B8A,0x0C1B,0x0D44,0x0CD3,0x0BD1,0x0C0A, + 0x0D91,0x0F58,0x10A5,0x11A7,0x1240,0x11E4,0x10E0,0x10CC, + 0x11CD,0x1341,0x139D,0x13BE,0x139F,0x130C,0x13C1,0x1533, + 0x15C3,0x1582,0x14F6,0x150A,0x14E7,0x1546,0x15D0,0x15BB, + 0x15A1,0x156F,0x1572,0x1634,0x1727,0x1755,0x176D,0x1769, + 0x16FA,0x16ED,0x16E3,0x16E0,0x166F,0x17AD,0x17E8,0x167B, + 0x1680,0x176B,0x17E3,0x16A4,0x1532,0x1407,0x13C8,0x1459, + 0x1541,0x168C,0x16BA,0x159B,0x1458,0x13E4,0x141B,0x145E, + 0x1444,0x13A0,0x1294,0x111C,0x0FD4,0x0E57,0x0C3A,0x0913, + 0x04E7,0x0009,0xFA3B,0xF49E,0xF20E,0xF37F,0xF951,0x0218, + 0x0A44,0x0E38,0x0CF6,0x0701,0xFF52,0xFAD7,0xFB35,0x000F, + 0x080B,0x111C,0x183D,0x1C32,0x1BE9,0x195F,0x1601,0x12FB, + 0x1004,0x0E7C,0x0EEE,0x1147,0x130E,0x1374,0x127F,0x1125, + 0x0F64,0x0D20,0x09F5,0x0602,0x0152,0xFBD5,0xF6D6,0xF467, + 0xF50F,0xF7D5,0xFAE4,0xFBC7,0xFA16,0xF6CD,0xF206,0xED4B, + 0xEAB9,0xEB01,0xEBA4,0xF01A,0xF5F5,0xF8C2,0xFB94,0xFC85, + 0xFBAD,0xF9E6,0xF89A,0xF92D,0xFB08,0xFD23,0xFEF4,0x001C, + 0x0128,0x01CC,0x026F,0x038F,0x0417,0x0367,0x0067,0xFBCF, + 0xF7D7,0xF5C0,0xF5C1,0xF701,0xF7A3,0xF84C,0xF7B4,0xF532, + 0xF17C,0xED60,0xE9D3,0xE77E,0xE67B,0xE671,0xE815,0xEA54, + 0xEBAB,0xEB9F,0xEAA6,0xE98E,0xE993,0xEA5F,0xEB58,0xEC68, + 0xEC96,0xED2F,0xEE7C,0xF086,0xF35F,0xF5DE,0xF6EE,0xF690, + 0xF562,0xF4FA,0xF4E5,0xF4FD,0xF548,0xF610,0xF71A,0xF854, + 0xFA67,0xF94A,0xF75C,0xF4D3,0xF2C6,0xF16F,0xF0E6,0xEFD1, + 0xEEA0,0xEE3C,0xED68,0xEC74,0xEBA1,0xEB5C,0xEB2F,0xEA40, + 0xE982,0xE8F9,0xE8A2,0xE7CF,0xE878,0xEA66,0xEB9D,0xEC39, + 0xED54,0xEEC1,0xEF38,0xEF7D,0xEECC,0xEE7D,0xEF70,0xF18E, + 0xF320,0xF43F,0xF4EB,0xF572,0xF523,0xF41D,0xF395,0xF413, + 0xF46E,0xF399,0xF2D4,0xF28E,0xF25D,0xF0E9,0xF08A,0xF0FE, + 0xF10A,0xF00C,0xEF0F,0xEDEE,0xEDAF,0xEDED,0xED61,0xECB1, + 0xEC1F,0xEBF1,0xEC40,0xEC27,0xEB90,0xEC35,0xEC2D,0xEC97, + 0xED7A,0xEDD7,0xEEC0,0xEF70,0xF077,0xF0FB,0xF1DB,0xF28B, + 0xF310,0xF346,0xF32E,0xF38A,0xF437,0xF4DC,0xF631,0xF760, + 0xF7AB,0xF76B,0xF647,0xF527,0xF487,0xF480,0xF543,0xF596, + 0xF523,0xF498,0xF439,0xF3B8,0xF2F5,0xF293,0xF287,0xF23A, + 0xF1FD,0xF207,0xF23C,0xF24D,0xF1DB,0xF178,0xF1ED,0xF3B9, + 0xF4C8,0xF526,0xF504,0xF4C6,0xF43D,0xF407,0xF3DF,0xF4A4, + 0xF5EE,0xF751,0xF8E6,0xF9D6,0xF995,0xF8BF,0xF893,0xF8B0, + 0xF834,0xF9BC,0xFAC7,0xF944,0xFAC2,0xFAB9,0xF9FC,0xF9E2, + 0xF875,0xF452,0xED5F,0xE215,0xD19D,0xC198,0xBF25,0xBF8E, + 0xBFD6,0xBFAE,0xC3A9,0xE315,0x0032,0x0A83,0x000A,0xE7CE, + 0xCE63,0xC1F9,0xCA55,0xE4A2,0x081E,0x2ABD,0x3DFA,0x3EC1, + 0x3EE8,0x3F59,0x3920,0x2E9E,0x28BC,0x28D8,0x2DBE,0x34E9, + 0x3A95,0x3C8E,0x3A8C,0x3628,0x302B,0x28D9,0x1ED5,0x0FDA, + 0xFCD2,0xE8EA,0xDA4D,0xD5EA,0xDBD5,0xE843,0xF33F,0xF7AB, + 0xF31C,0xE5E5,0xD4A6,0xC59A,0xC02F,0xC131,0xCB7D,0xDCF9, + 0xEF29,0xFD9F,0x05A1,0x08B0,0x0648,0x01F2,0xFFA1,0x012E, + 0x0711,0x1099,0x19BB,0x2096,0x25E1,0x2A3B,0x2DED,0x2FD8, + 0x2E21,0x2830,0x1EF1,0x14D5,0x0A2D,0x03AC,0x0342,0x0611, + 0x08E3,0x09E8,0x0804,0x016A,0xF75C,0xEBB8,0xDFBC,0xD619, + 0xD1F1,0xD3F8,0xDB36,0xE392,0xEA0B,0xECCD,0xEBA2,0xE757, + 0xE326,0xE2D9,0xE69B,0xEBC6,0xF14D,0xF915,0xFFB0,0x064D, + 0x0D11,0x1292,0x163F,0x1768,0x1641,0x147F,0x1404,0x14A5, + 0x160F,0x16D4,0x17B5,0x19AA,0x1B62,0x1AFC,0x189B,0x12E4, + 0x09D1,0xFFF6,0xF899,0xF4E1,0xF4B6,0xF661,0xF79C,0xF81C, + 0xF557,0xF03E,0xEB57,0xE78F,0xE522,0xE45C,0xE550,0xE821, + 0xEBDF,0xEF72,0xF2FC,0xF5EB,0xF8EB,0xFB0D,0xFDD2,0x008B, + 0x02B9,0x0480,0x0561,0x069E,0x0929,0x0D3E,0x1240,0x1693, + 0x189C,0x1806,0x14CA,0x103B,0x0B6C,0x0848,0x0748,0x07FB, + 0x0907,0x0933,0x08C5,0x062B,0x01F6,0xFC9F,0xF74E,0xF304, + 0xF0C0,0xEF53,0xEFA2,0xF05F,0xF0E5,0xEFC1,0xEE77,0xEE74, + 0xF0A4,0xF27B,0xF194,0xF416,0xF45D,0xF45E,0xF59C,0xF783, + 0xFB3D,0x008A,0x04F1,0x06F9,0x0834,0x085D,0x0860,0x0830, + 0x07BF,0x0826,0x092F,0x0AC3,0x0C72,0x0D5C,0x0CD1,0x0A8A, + 0x0763,0x04FC,0x037C,0x01E9,0xFF75,0xFDBD,0xFC81,0xFB52, + 0xF9A2,0xF84D,0xF7CB,0xF6D3,0xF535,0xF35D,0xF2B0,0xF270, + 0xF25D,0xF2AF,0xF39A,0xF4BC,0xF659,0xF89D,0xFA83,0xFC75, + 0xFDFC,0xFE6A,0xFF05,0xFF7C,0xFFB0,0x0198,0x04BA,0x078B, + 0x091E,0x09A9,0x09F4,0x09AC,0x084F,0x06FB,0x06DC,0x08D0, + 0x09B9,0x07C8,0x0634,0x041E,0xFE3F,0xF2E7,0xE205,0xCBF6, + 0xBFE4,0xC050,0xBFCB,0xC093,0xBFCD,0xC760,0xEC2F,0x06E4, + 0x0BAC,0xFB39,0xDC6B,0xC3F2,0xC0B9,0xC90D,0xEA50,0x13C2, + 0x3777,0x3F15,0x3E97,0x3F02,0x3EC8,0x3ECB,0x370F,0x3163, + 0x34D3,0x3C71,0x3F34,0x3ECB,0x3EF5,0x3EC2,0x3EC2,0x3CC1, + 0x33FB,0x271E,0x1435,0xFD18,0xE667,0xD69B,0xD33B,0xDAC4, + 0xE8F5,0xF54F,0xF8DE,0xF078,0xDF51,0xCA1A,0xBF1D,0xBF9E, + 0xBEB1,0xC364,0xD86B,0xEEAA,0x0014,0x09E6,0x0B5C,0x06C2, + 0x00B4,0xFED6,0x0324,0x0CE0,0x18B4,0x23CA,0x2BF9,0x31C1, + 0x36F3,0x3A4B,0x3C0F,0x3A7F,0x345D,0x293F,0x1BC4,0x107A, + 0x0A42,0x0978,0x0C0B,0x0F59,0x110E,0x0E77,0x05B4,0xF782, + 0xE6D4,0xD6F4,0xCCA2,0xCA53,0xCF7D,0xD8BD,0xE1BC,0xE743, + 0xE7E3,0xE4D6,0xE0E4,0xDE57,0xDEBD,0xE23D,0xE7B5,0xEEC3, + 0xF66F,0xFEEB,0x071B,0x0EEB,0x14E7,0x1990,0x1BE6,0x1C71, + 0x1A6B,0x16E5,0x14E9,0x155C,0x17B5,0x1BF5,0x20CC,0x22E3, + 0x20D2,0x1CC0,0x10C3,0x0507,0xFCD9,0xF65A,0xF373,0xF2B1, + 0xF35B,0xF415,0xF33F,0xF01E,0xEBB6,0xE6B0,0xE27F,0xDF2A, + 0xDDC7,0xDD81,0xDFBA,0xE39E,0xE87A,0xEDB5,0xF28B,0xF7A7, + 0xFBDC,0xFE66,0xFE8A,0xFE06,0xFF1C,0x01EE,0x0639,0x0BE6, + 0x1236,0x1767,0x1A87,0x1A78,0x191A,0x166F,0x131D,0x0F55, + 0x0C7F,0x0B99,0x0B59,0x0B6A,0x0AD5,0x0906,0x062C,0x01DE, + 0xFD1B,0xF8EF,0xF533,0xF1FA,0xEEF9,0xEC75,0xEBE8,0xED3A, + 0xEEC6,0xF09B,0xF1D3,0xF2AC,0xF262,0xF0B6,0xEFD2,0xF090, + 0xF31F,0xF5CA,0xFA1C,0xFEF3,0x038E,0x0715,0x08DB,0x097B, + 0x0A12,0x0AB8,0x0BF7,0x0CBD,0x0E17,0x0F5D,0x10C1,0x11AE, + 0x1182,0x101C,0x0EF0,0x0D1D,0x0909,0x05B8,0x02F2,0x0091, + 0xFE78,0xFD8C,0xFD5A,0xFCD9,0xFBF8,0xFA01,0xF6D1,0xF46B, + 0xF29F,0xF1BE,0xF1BE,0xF297,0xF40C,0xF538,0xF65E,0xF816, + 0xF995,0xFB52,0xFCCA,0xFD4F,0xFED9,0x012E,0x0247,0x0435, + 0x0688,0x085C,0x09E4,0x0B6F,0x0C87,0x0D6A,0x0D32,0x0C8A, + 0x0B4E,0x0AC2,0x0AD4,0x0AA3,0x0A2C,0x08F9,0x0741,0x0301, + 0xFB00,0xEE74,0xDCE1,0xC70A,0xC053,0xC0F7,0xC08C,0xC1A3, + 0xC01C,0xCDFB,0xF496,0x0A4D,0x0A00,0xF4C8,0xD4E6,0xC226, + 0xC1E7,0xD08B,0xF738,0x2256,0x3E25,0x3F77,0x3FE8,0x3FEA, + 0x3FEF,0x3F68,0x382E,0x359E,0x3B63,0x4012,0x3FEA,0x3FD7, + 0x3FEB,0x3FE2,0x3FCA,0x3D78,0x340C,0x25D2,0x119B,0xFA24, + 0xE544,0xD879,0xD71C,0xE033,0xEE36,0xF825,0xF85C,0xEDE8, + 0xDC2C,0xC772,0xBFEB,0xC0B2,0xC021,0xCB6F,0xE246,0xF828, + 0x07FF,0x0D56,0x0CB3,0x08F1,0x03C3,0x0468,0x0A8A,0x1492, + 0x1FAD,0x290E,0x3049,0x3608,0x3A68,0x3D7F,0x3E01,0x3AB9, + 0x3315,0x2879,0x1CE2,0x12A4,0x0C0A,0x0A3C,0x0C9B,0x0FDA, + 0x10F6,0x0D53,0x03B3,0xF459,0xE2A3,0xD495,0xCCE5,0xCBC4, + 0xD14C,0xD9CE,0xE20B,0xE769,0xE785,0xE3D6,0xDFA5,0xDD8D, + 0xDE4E,0xE1E0,0xE7C0,0xEF9A,0xF8A7,0x0195,0x09D3,0x10D3, + 0x165B,0x1980,0x1AA5,0x19F7,0x18A8,0x1759,0x160C,0x169F, + 0x1887,0x1C36,0x1FA1,0x209B,0x1E34,0x17E9,0x0EDC,0x065A, + 0xFCB1,0xF5FC,0xF2F3,0xF20F,0xF279,0xF21D,0xF12A,0xEEDB, + 0xEB1C,0xE67F,0xE142,0xDD2C,0xDB0A,0xDBA9,0xDDD9,0xE235, + 0xE7E6,0xEDDC,0xF262,0xF69A,0xFA34,0xFBC8,0xFC9D,0xFE09, + 0xFF8C,0x01FA,0x0693,0x0C5F,0x1203,0x1698,0x192F,0x19E5, + 0x18B4,0x14DB,0x10FD,0x0D4C,0x0B5E,0x0A1C,0x08BE,0x083C, + 0x081A,0x072C,0x0499,0xFFC2,0xF92A,0xF415,0xEFF7,0xECB0, + 0xEB02,0xEA0F,0xEAAF,0xEBA6,0xECF2,0xEDB9,0xEE22,0xEDC8, + 0xECF9,0xECE1,0xECF0,0xEDFF,0xF08B,0xF458,0xF8F5,0xFDFA, + 0x0278,0x061F,0x07ED,0x086C,0x0850,0x081D,0x089F,0x09B0, + 0x0B31,0x0CEA,0x0EC7,0x0FB8,0x0EEA,0x0CD9,0x0AB9,0x07D1, + 0x04BB,0x01F8,0x0016,0xFE9F,0xFD3D,0xFBA0,0xF9A3,0xF7DB, + 0xF647,0xF482,0xF31F,0xF1C7,0xF093,0xEF06,0xED21,0xED05, + 0xEE51,0xF109,0xF3DF,0xF606,0xF76D,0xF7FE,0xF7FE,0xF80D, + 0xF9A2,0xFC02,0xFEDE,0x01A6,0x03EA,0x0682,0x08DC,0x09E7, + 0x0984,0x08CA,0x0845,0x07C4,0x07C4,0x089B,0x092D,0x0835, + 0x0837,0x06E5,0x0169,0xFD17,0xF4B9,0xE88F,0xD655,0xC21D, + 0xBEEF,0xBF52,0xBF21,0xC05E,0xBEEE,0xD6E9,0xFC76,0x0B26, + 0x0375,0xE971,0xCB09,0xC014,0xC21F,0xD80D,0x0185,0x2C01, + 0x3F05,0x3E3F,0x3F0A,0x3EDC,0x3F69,0x3C3D,0x356A,0x3739, + 0x3D6F,0x3F6C,0x3F35,0x3F74,0x3F71,0x3F48,0x3F4D,0x3D49, + 0x32DB,0x21C9,0x0A70,0xF20A,0xDEB1,0xD589,0xD847,0xE44B, + 0xF1DD,0xF8AF,0xF50B,0xE812,0xD492,0xC2A8,0xBFE2,0xC0B8, + 0xC06C,0xCFB1,0xE805,0xFC2E,0x0896,0x0CBE,0x0A69,0x050C, + 0x008C,0x00F1,0x0950,0x149B,0x1F87,0x2870,0x2F91,0x3598, + 0x3A3A,0x3DB0,0x3D18,0x379B,0x2E1B,0x21CC,0x1608,0x0DAB, + 0x0A75,0x0B61,0x0F5C,0x1171,0x0FD1,0x09EA,0xFE3D,0xEE4C, + 0xDE43,0xD243,0xCC7D,0xCD47,0xD3FD,0xDCB6,0xE431,0xE819, + 0xE711,0xE307,0xDEB5,0xDD15,0xDF0E,0xE43D,0xEB8B,0xF421, + 0xFCD0,0x0555,0x0D45,0x1455,0x1AE3,0x1D13,0x1C96,0x1B3F, + 0x192A,0x1834,0x1820,0x18F6,0x1B77,0x1F52,0x2252,0x234F, + 0x206C,0x1997,0x0FA9,0x0540,0xFBDA,0xF556,0xF2A7,0xF333, + 0xF4EA,0xF531,0xF396,0xEFC4,0xEA87,0xE4B0,0xDF46,0xDC54, + 0xDCA0,0xDF6A,0xE394,0xE814,0xEC97,0xF11F,0xF4DA,0xF7E7, + 0xFB08,0xFE03,0x0057,0x0195,0x02F4,0x05C8,0x0A25,0x0F1B, + 0x1377,0x179A,0x1ACD,0x1B57,0x1A1F,0x1760,0x133D,0x0EF1, + 0x0B5F,0x098E,0x097E,0x0A90,0x0A95,0x08E7,0x053B,0xFF97, + 0xF949,0xF3EE,0xEFE6,0xEDB2,0xEC5A,0xEBBD,0xEB23,0xEBA2, + 0xECC5,0xED7B,0xED6B,0xEDE0,0xEE29,0xEE3A,0xEEFE,0xF1D2, + 0xF435,0xF5C9,0xFAC3,0xFE15,0x0226,0x06EF,0x09F6,0x0BCC, + 0x0BF8,0x0AC8,0x0995,0x0978,0x0A5E,0x0C08,0x0E2C,0x0F64, + 0x0FEB,0x0EC4,0x0BA6,0x085B,0x0531,0x01F1,0xFED4,0xFC60, + 0xFAF2,0xFA24,0xF9DC,0xF8CC,0xF6F1,0xF4F5,0xF319,0xF177, + 0xF08E,0xF072,0xF00F,0xEF66,0xEFD3,0xF195,0xF401,0xF688, + 0xF8D1,0xFA98,0xFBD2,0xFD62,0xFEB6,0xFFB9,0x0072,0x0158, + 0x032F,0x060E,0x0911,0x0ABA,0x0C2E,0x0C8E,0x0AF2,0x090A, + 0x07AF,0x0651,0x0575,0x0586,0x0634,0x059D,0x026F,0xF8DE, + 0xE819,0xD1EA,0xC092,0xC063,0xBFFB,0xC06D,0xC0C1,0xC2C4, + 0xE2E7,0x029D,0x0BC0,0xFEF8,0xE2E7,0xC77F,0xC081,0xC5CD, + 0xE215,0x09F2,0x3105,0x3FC4,0x3EFE,0x3F33,0x3EB1,0x3FA4, + 0x3AFB,0x3340,0x34CA,0x3BEC,0x3F33,0x3F36,0x3F0F,0x3EDB, + 0x3EAF,0x3EFB,0x39F4,0x2CBA,0x19AA,0x025A,0xEBC4,0xDBA8, + 0xD607,0xDBF3,0xE91D,0xF3D2,0xF66D,0xF0E6,0xE294,0xCF1F, + 0xC090,0xBFAF,0xBF7E,0xC1A9,0xD36D,0xE93B,0xFCBC,0x08E6, + 0x0B8B,0x075A,0x00F3,0xFECD,0x015C,0x088D,0x1278,0x1CF4, + 0x26B6,0x2E96,0x3520,0x3A43,0x3CC8,0x3A6E,0x3258,0x26B5, + 0x1B09,0x10E5,0x0A21,0x07CC,0x095F,0x0D04,0x0E9C,0x0C04, + 0x049D,0xF86E,0xE889,0xD8EF,0xCD15,0xC80B,0xC9FF,0xD183, + 0xDA02,0xE0D8,0xE41E,0xE369,0xE124,0xDE7F,0xDCCA,0xDD97, + 0xE165,0xE78B,0xF001,0xF9F3,0x03C5,0x0C52,0x1286,0x1679, + 0x1950,0x19B9,0x17D7,0x144F,0x119D,0x116E,0x1451,0x1893, + 0x1D57,0x2064,0x1FE4,0x19E6,0x1144,0x07B4,0xFE82,0xF687, + 0xF37C,0xEF83,0xEF83,0xF105,0xF0DF,0xEF64,0xEC9F,0xE839, + 0xE247,0xDD3F,0xDA9F,0xDAAF,0xDCEB,0xE0B9,0xE58F,0xEB45, + 0xEFF5,0xF38C,0xF701,0xFA88,0xFCD9,0xFDA3,0xFE0D,0xFEFA, + 0x02B9,0x0856,0x0E2A,0x1329,0x170B,0x18AD,0x17B6,0x1545, + 0x129D,0x0F7D,0x0C69,0x09F4,0x088B,0x0879,0x0861,0x07D1, + 0x058E,0x0101,0xFC35,0xF6A1,0xF22D,0xEF4C,0xED51,0xEBC3, + 0xEAFB,0xEAD6,0xEB18,0xEC7D,0xEDF9,0xEEDB,0xEF61,0xEE77, + 0xEE0A,0xEE8A,0xF05F,0xF3EB,0xF8A6,0xFD6B,0x0157,0x03C2, + 0x047A,0x0682,0x0853,0x094E,0x0A1B,0x0A03,0x0A79,0x0B95, + 0x0D8C,0x1017,0x10BC,0x0F2A,0x0CE0,0x0A80,0x0826,0x05BA, + 0x03BC,0x01B6,0xFE5E,0xFA3A,0xF8A2,0xF92F,0xF9EE,0xF974, + 0xF76A,0xF40F,0xF103,0xEE98,0xEDA3,0xEF53,0xF212,0xF348, + 0xF3F8,0xF4DE,0xF744,0xFA03,0xFC68,0xFD59,0xFD2B,0xFD82, + 0xFED8,0x017C,0x04B7,0x0819,0x0AF3,0x0B18,0x0B1F,0x0B19, + 0x0BA8,0x0C2F,0x0BAB,0x0A04,0x0885,0x081B,0x0897,0x08DA, + 0x07A4,0x0462,0xFDBE,0xF268,0xE246,0xCC7F,0xC059,0xC113, + 0xC0AE,0xC163,0xC0E2,0xC82F,0xEDF6,0x0A64,0x0E9C,0xFC8E, + 0xDCE7,0xC4CF,0xC161,0xCB48,0xEECA,0x1AE7,0x3BC1,0x3FD7, + 0x3FD4,0x402F,0x3FE3,0x407B,0x3A7B,0x354C,0x3A28,0x3FDB, + 0x3FFE,0x3FEF,0x4016,0x3FDB,0x4008,0x3E56,0x3715,0x2BA5, + 0x18F2,0x0006,0xE794,0xD77E,0xD415,0xDCC1,0xEACA,0xF6A5, + 0xF977,0xF11E,0xDFB6,0xCA99,0xC04F,0xC0E0,0xC00C,0xC57A, + 0xDCA0,0xF33B,0x042C,0x0C89,0x0B77,0x05AD,0x00DA,0x01B0, + 0x06E2,0x12C6,0x1F00,0x265E,0x2D0F,0x326E,0x3741,0x3BB5, + 0x3DC1,0x3C19,0x34FD,0x295A,0x1C7E,0x118F,0x0B9C,0x0A03, + 0x0B52,0x0DE3,0x0F47,0x0D75,0x0601,0xF7EF,0xE640,0xD5EA, + 0xCB44,0xC8C1,0xCE39,0xD7B3,0xE0E7,0xE67B,0xE669,0xE29A, + 0xDF8E,0xDE9B,0xDEBF,0xE0AF,0xE5A8,0xED4C,0xF68F,0xFFCE, + 0x0898,0x105D,0x15F6,0x1852,0x197B,0x1A8C,0x1B1B,0x1995, + 0x169D,0x14DF,0x15BF,0x1971,0x1E63,0x21BC,0x20F6,0x1B0F, + 0x10EA,0x0540,0xFB0C,0xF412,0xF0EC,0xF199,0xF3FC,0xF3CA, + 0xF277,0xF02B,0xEC97,0xE795,0xE203,0xDD69,0xDB01,0xDBC4, + 0xDF2B,0xE440,0xE918,0xECAA,0xEF9E,0xF2D5,0xF77B,0xFC1D, + 0xFF79,0x007E,0x00F9,0x020C,0x03B2,0x077D,0x0E02,0x141F, + 0x183E,0x1ADE,0x19CC,0x16A4,0x1255,0x0D9B,0x0927,0x06AA, + 0x05C2,0x06D4,0x080C,0x0805,0x0501,0xFF32,0xF84A,0xF1CF, + 0xECFB,0xEA96,0xEA2B,0xE93B,0xE8BE,0xE91C,0xE87C,0xE860, + 0xEA1F,0xEBA0,0xEC65,0xEC90,0xEC7B,0xED54,0xEF06,0xF10F, + 0xF42C,0xF764,0xFB0F,0x0003,0x0409,0x072A,0x0803,0x06E9, + 0x0538,0x0458,0x05C6,0x0820,0x0ABB,0x0C11,0x0C4B,0x0B3A, + 0x08CD,0x05D1,0x02A0,0xFF59,0xFCF5,0xFB51,0xF9E0,0xF852, + 0xF62A,0xF498,0xF262,0xF0AF,0xEFE3,0xEFFF,0xEFA8,0xEEE4, + 0xEDC7,0xEC35,0xEC08,0xECF9,0xEEC1,0xF210,0xF535,0xF79D, + 0xF8FF,0xF99F,0xFA1C,0xFAAB,0xFB76,0xFCB8,0xFF57,0x02A7, + 0x05ED,0x083A,0x0890,0x0822,0x065C,0x051F,0x05D6,0x06D2, + 0x0752,0x06DC,0x057F,0x0377,0x0117,0xFDB5,0xF656,0xED22, + 0xE03C,0xCA4C,0xBF03,0xBF82,0xBF23,0xBFFB,0xBF0C,0xCFB0, + 0xF30F,0x06F0,0x05F0,0xF205,0xD6EC,0xC3FD,0xC2E3,0xD647, + 0xF771,0x1D58,0x398F,0x3EE4,0x3E9E,0x3EF4,0x3F32,0x37A4, + 0x3032,0x2F4C,0x344F,0x3C7C,0x3F5E,0x3F03,0x3EF2,0x3F4A, + 0x3BFA,0x34EA,0x2C98,0x206B,0x0EC7,0xF9C1,0xE733,0xDC12, + 0xDC14,0xE463,0xEF93,0xF730,0xF67B,0xED13,0xDD48,0xCD01, + 0xC23C,0xC011,0xC233,0xCF9F,0xE2C5,0xF5D6,0x049A,0x0BCF, + 0x0B43,0x06C3,0x0276,0x024D,0x0809,0x1214,0x1C80,0x2371, + 0x28AE,0x2E63,0x3342,0x36D1,0x377E,0x33E5,0x2BDD,0x21C9, + 0x1817,0x10D7,0x0D71,0x0D06,0x0D18,0x0DA2,0x0D88,0x0A4A, + 0x0387,0xF958,0xEA66,0xDBD7,0xD2F1,0xD183,0xD614,0xDE9E, + 0xE768,0xEC72,0xEC31,0xE8DE,0xE55C,0xE3BC,0xE4AD,0xE7BF, + 0xECCF,0xF350,0xFAD8,0x0334,0x0BB0,0x121F,0x1667,0x189F, + 0x196D,0x1986,0x1920,0x1A04,0x184C,0x15E4,0x1693,0x1929, + 0x1C8D,0x1E7D,0x1DBA,0x1906,0x108B,0x067B,0xFDC5,0xF7C7, + 0xF51D,0xF509,0xF659,0xF6CC,0xF60A,0xF3A2,0xEFB5,0xEB17, + 0xE703,0xE454,0xE262,0xE2D8,0xE5AD,0xE9E0,0xEE41,0xF216, + 0xF631,0xF9A3,0xFC38,0xFEA6,0x00DF,0x02DD,0x0428,0x056D, + 0x08CF,0x0CE3,0x1116,0x14A4,0x1760,0x1870,0x1785,0x1542, + 0x1282,0x0FAE,0x0CD4,0x0AA3,0x0985,0x0958,0x093F,0x0777, + 0x0471,0x0087,0xFC95,0xF8B5,0xF4FA,0xF1DD,0xEF21,0xED51, + 0xECCC,0xEDCA,0xEFE4,0xF117,0xF16E,0xF093,0xEFA9,0xEF61, + 0xF033,0xF23B,0xF579,0xF89E,0xFB8F,0xFE87,0x02E4,0x05AA, + 0x0695,0x098E,0x096E,0x093B,0x09CB,0x0A4F,0x0B95,0x0CE6, + 0x0D82,0x0D1F,0x0C5C,0x0B3B,0x0A36,0x0949,0x07A0,0x048E, + 0x002C,0xFC76,0xFA55,0xF9A9,0xF91D,0xF8F0,0xF83C,0xF685, + 0xF3C6,0xF134,0xF060,0xF0D6,0xF0A0,0xF016,0xF049,0xF183, + 0xF3E1,0xF64E,0xF7BA,0xF8EC,0xF9A9,0xF9B4,0xFAB8,0xFD1A, + 0x0008,0x01AF,0x01C5,0x0265,0x038F,0x05B0,0x07EE,0x09BB, + 0x0A25,0x08E1,0x0725,0x056F,0x0458,0x03C2,0x0363,0x02C4, + 0x00E7,0xFCB9,0xF658,0xEE1E,0xE4E9,0xDC92,0xD571,0xD0C8, + 0xD3C3,0xDE21,0xEC77,0xF8E9,0xFDB2,0xFA34,0xF020,0xE527, + 0xDF9E,0xE2DB,0xEE05,0xFDB5,0x0C35,0x168C,0x1C9B,0x1E4E, + 0x1D30,0x1A06,0x17B1,0x15FC,0x1518,0x16D4,0x1B42,0x1ECF, + 0x2065,0x1FAC,0x1CE3,0x1A2E,0x1770,0x13D2,0x0ECD,0x0654, + 0xFC17,0xF3BA,0xEF75,0xF099,0xF51E,0xF950,0xFB5D,0xF8A0, + 0xF217,0xEADB,0xE481,0xE01A,0xE057,0xE371,0xE912,0xF0CB, + 0xF8A4,0xFDE4,0x0014,0xFF1A,0xFCB8,0xFB35,0xFC73,0xFFF5, + 0x0541,0x096C,0x0CC0,0x0FBD,0x11DF,0x1366,0x14A5,0x1498, + 0x12E8,0x0F74,0x0B41,0x077F,0x04B0,0x03F2,0x04E1,0x05C4, + 0x0576,0x03F3,0x009E,0xFC8B,0xF6C4,0xF084,0xEB7C,0xE97F, + 0xEAC9,0xEE09,0xF101,0xF2A6,0xF2AE,0xF0DF,0xEE8C,0xED31, + 0xED8F,0xEF36,0xF16F,0xF3E8,0xF728,0xFA78,0xFDC2,0x0061, + 0x02B6,0x04DB,0x066A,0x075E,0x0752,0x06D1,0x066F,0x0601, + 0x06EC,0x08ED,0x0BB2,0x0DD5,0x0D7F,0x0B34,0x06A0,0x01DD, + 0xFE18,0xFBE3,0xFB50,0xFC6B,0xFCF7,0xFC5B,0xFAD0,0xFAAF, + 0xF623,0xF357,0xF24D,0xF15B,0xF163,0xF127,0xF17B,0xF2D8, + 0xF528,0xF701,0xF7C6,0xF7F8,0xF93D,0xFAAE,0xFB75,0xFBC1, + 0xFBCE,0xFBCF,0xFC02,0xFC7D,0xFDCC,0xFF01,0xFEA3,0xFE7B, + 0xFE06,0xFD67,0xFCED,0xFCE9,0xFCEF,0xFCA8,0xFD0A,0xFDB6, + 0xFDC2,0xFD48,0xFD29,0xFB85,0xF98F,0xF758,0xF5DD,0xF486, + 0xF40B,0xF3D8,0xF304,0xF223,0xF13C,0xF08A,0xEFF7,0xEF30, + 0xEE9D,0xEE05,0xED43,0xEC8C,0xEC2A,0xEB7A,0xEB0C,0xEB05, + 0xEAC4,0xEAA2,0xEA58,0xE9F8,0xE9D9,0xE95E,0xE860,0xE649, + 0xE5D9,0xE671,0xE6E1,0xE726,0xE673,0xE682,0xE60C,0xE5C0, + 0xE57E,0xE558,0xE5BF,0xE600,0xE5B6,0xE552,0xE58B,0xE587, + 0xE5B0,0xE627,0xE5B1,0xE5AF,0xE644,0xE623,0xE640,0xE700, + 0xE7A8,0xE815,0xE84B,0xE8B6,0xE8D5,0xE9A7,0xEA52,0xEADC, + 0xEB41,0xEB2B,0xEBC4,0xECA4,0xED56,0xEE1C,0xEEBF,0xEEF7, + 0xEF40,0xEF69,0xF109,0xF1AC,0xF0C3,0xF0E9,0xF16C,0xF1F4, + 0xF2ED,0xF369,0xF3A3,0xF413,0xF448,0xF4F9,0xF627,0xF6E9, + 0xF7C0,0xF89B,0xF8E2,0xF91B,0xF901,0xF8F2,0xF99A,0xFA13, + 0xFA8D,0xFB06,0xFB55,0xFBA0,0xFBDC,0xFC67,0xFD0A,0xFD6C, + 0xFDC9,0xFDFF,0xFE63,0xFF3E,0xFF7C,0xFF87,0x0013,0x0067, + 0x00D6,0x016D,0x0225,0x026C,0x02AB,0x02D7,0x0339,0x03AD, + 0x0410,0x0455,0x04B4,0x04E8,0x04F8,0x04EE,0x0536,0x055B, + 0x0561,0x059E,0x05D9,0x0620,0x062E,0x0659,0x0640,0x0652, + 0x0675,0x06ED,0x0787,0x0808,0x0841,0x0862,0x087A,0x08A5, + 0x08FA,0x08ED,0x0987,0x09DD,0x0987,0x09BE,0x0B11,0x0997, + 0x0AA6,0x0C10,0x0B3C,0x0B6C,0x0BDA,0x0C18,0x0C12,0x0C00, + 0x0BAA,0x0BA1,0x0B93,0x0C31,0x0C95,0x0C65,0x0C4C,0x0BD0, + 0x0BA3,0x0C13,0x0C26,0x0C4B,0x0C7B,0x0CC4,0x0C62,0x0C4D, + 0x0C9A,0x0CC4,0x0D96,0x0CFC,0x0CEE,0x0D10,0x0D16,0x0CCF, + 0x0C9A,0x0D3E,0x0D84,0x0D4C,0x0D30,0x0D5D,0x0D98,0x0DAA, + 0x0E09,0x0E42,0x0DE8,0x0D7C,0x0E17,0x0E40,0x0E43,0x0E3F, + 0x0DF0,0x0E1C,0x0E17,0x0E39,0x0E1C,0x0E08,0x0DC7,0x0D7B, + 0x0D84,0x0DB0,0x0DB3,0x0E1A,0x0EB4,0x10BB,0x102B,0x0F59, + 0x0F39,0x0EF2,0x0EC2,0x0EB7,0x0EE9,0x0EFD,0x0EFA,0x0E9E, + 0x0E63,0x0E41,0x0DE9,0x0DFB,0x0E23,0x0E52,0x0E41,0x0D8F, + 0x0CB7,0x0D18,0x0DBF,0x0D58,0x0C79,0x0C9F,0x0CC3,0x0C0D, + 0x0C29,0x0BFF,0x0BA4,0x0B85,0x0B4B,0x0B18,0x0B04,0x0AAC, + 0x0AE9,0x0AE9,0x0A43,0x09B2,0x09E6,0x09CB,0x097C,0x0937, + 0x09C9,0x099A,0x0830,0x08D7,0x096A,0x0991,0x09A8,0x096F, + 0x0949,0x092A,0x095A,0x092A,0x08B6,0x0853,0x0818,0x07C6, + 0x0746,0x0694,0x0669,0x0663,0x061B,0x066A,0x05F1,0x05FC, + 0x05FE,0x05FA,0x05D8,0x05B4,0x0599,0x057F,0x05BD,0x0605, + 0x06A4,0x06BF,0x064A,0x0603,0x0609,0x05DA,0x05B1,0x05B6, + 0x057A,0x0596,0x054C,0x0505,0x0534,0x0519,0x050A,0x0540, + 0x0519,0x04B3,0x0463,0x048D,0x0475,0x0450,0x0462,0x047D, + 0x0494,0x048E,0x04DC,0x04BC,0x04D5,0x04C7,0x0446,0x045F, + 0x0471,0x03FC,0x03FA,0x03AE,0x03DC,0x0434,0x03FD,0x03D3, + 0x0467,0x042B,0x044D,0x041E,0x0423,0x0369,0x04CA,0x04F7, + 0x038F,0x04CE,0x0458,0x042D,0x03B6,0x03B9,0x039C,0x03A8, + 0x03B1,0x0372,0x0378,0x03A1,0x03BD,0x03AE,0x03DD,0x03B6, + 0x03C5,0x036A,0x03AF,0x03D5,0x03FF,0x03AE,0x0395,0x039B, + 0x0335,0x0337,0x02F4,0x0332,0x0306,0x02FA,0x02FF,0x02FD, + 0x0306,0x030E,0x0333,0x033D,0x032D,0x02DA,0x02C1,0x02DC, + 0x0324,0x02CF,0x030E,0x033E,0x031E,0x0322,0x02C5,0x02C4, + 0x02A1,0x02A7,0x02CA,0x030B,0x0302,0x02F6,0x0300,0x02F6, + 0x02D4,0x02C7,0x02DF,0x0311,0x02F5,0x027F,0x00E4,0xFF3C, + 0xFFD3,0x0017,0x006E,0x0084,0x0091,0x00C7,0x00E9,0x00F9, + 0x010E,0x010B,0x01B8,0x0259,0x01AB,0x0193,0x0171,0x0156, + 0x0139,0x0138,0x01C2,0x0172,0x00E4,0x00F9,0x01B5,0x01EF, + 0x01E0,0x015C,0x0157,0x016B,0x01E6,0x028C,0x038E,0x048A, + 0x0517,0x058F,0x0612,0x0732,0x0809,0x085B,0x0861,0x08C4, + 0x08E1,0x08D6,0x08B3,0x08D2,0x08DF,0x085C,0x0864,0x0904, + 0x096D,0x0978,0x0943,0x0893,0x083E,0x07EF,0x083D,0x09A8, + 0x0AAC,0x0B7C,0x0C3E,0x0CDB,0x0D90,0x0DE9,0x0DC3,0x0D88, + 0x0DEC,0x0F1A,0x0FFC,0x10C8,0x11AF,0x11AF,0x1220,0x1396, + 0x1494,0x132A,0x140E,0x14CE,0x13A9,0x1403,0x1524,0x16B0, + 0x1773,0x16B0,0x15FA,0x15FE,0x1710,0x1887,0x18C8,0x17C6, + 0x1626,0x139E,0x10DC,0x0D8A,0x0913,0x03B1,0xFD63,0xF72E, + 0xF55F,0xFABF,0x0636,0x13E2,0x1DF9,0x21B5,0x1F1A,0x1933, + 0x13C8,0x11A3,0x146D,0x19BE,0x1F76,0x2536,0x2A7F,0x2E16, + 0x2F45,0x2D84,0x2AFF,0x27B8,0x22EC,0x1E0C,0x1923,0x1397, + 0x0DDE,0x0A39,0x09D7,0x0C67,0x0FE1,0x11B8,0x0F7C,0x09AE, + 0x01E9,0xFA85,0xF604,0xF5E7,0xF912,0xFDC0,0x034D,0x09D1, + 0x0CBA,0x0E8B,0x0F5A,0x0F4B,0x0EBA,0x0E65,0x0E3B,0x0DF7, + 0x0E4C,0x0F89,0x1101,0x1282,0x13C2,0x151C,0x1609,0x151F, + 0x10E9,0x09FE,0x025E,0xFD7E,0xFB1A,0xF98D,0xFA3C,0xFBE1, + 0xFB35,0xF8F2,0xF755,0xF5D2,0xF412,0xF1B9,0xEFF5,0xEECF, + 0xEE8A,0xEFD3,0xF27A,0xF4FB,0xF758,0xF933,0xFB7A,0xFEE1, + 0x0130,0x00E5,0xFEDF,0xFC35,0xF991,0xFA00,0xFC86,0xFF0B, + 0x00DD,0x019E,0x0009,0xFD93,0xFABC,0xF7C7,0xF43E,0xF03F, + 0xED32,0xECC6,0xEC59,0xEB5A,0xEAF0,0xEA31,0xEA13,0xEA00, + 0xE9BD,0xE997,0xE9B5,0xE965,0xE89D,0xE835,0xE83F,0xEA7F, + 0xEE56,0xF209,0xF525,0xF645,0xF641,0xF5EC,0xF4A0,0xF422, + 0xF423,0xF3D2,0xF420,0xF411,0xF4DA,0xF5FB,0xF542,0xF309, + 0xF0E8,0xEF82,0xEE42,0xED84,0xEC80,0xEAF2,0xE9B7,0xE841, + 0xE7AA,0xE87B,0xEA2E,0xEB72,0xEB07,0xE9CB,0xE954,0xE944, + 0xE962,0xE9E2,0xEB3F,0xECAD,0xEE5A,0xEF88,0xF109,0xF388, + 0xF431,0xF448,0xF3BA,0xF2A4,0xF286,0xF303,0xF2D2,0xF157, + 0xF253,0xF21A,0xF182,0xF382,0xF318,0xF192,0xEF2D,0xECF7, + 0xEB9A,0xEBD2,0xEBEC,0xEC43,0xEC71,0xECA9,0xECC9,0xEDAB, + 0xEF0C,0xF033,0xF05F,0xEFF6,0xEFE1,0xEFD7,0xF0CF,0xF1B9, + 0xF272,0xF310,0xF46A,0xF690,0xF877,0xF8EE,0xF848,0xF738, + 0xF5D5,0xF502,0xF4DE,0xF5A5,0xF663,0xF6A9,0xF5CF,0xF4E0, + 0xF441,0xF426,0xF412,0xF398,0xF24D,0xF19A,0xF17D,0xF16C, + 0xF203,0xF1C0,0xF112,0xF148,0xF22C,0xF379,0xF55C,0xF681, + 0xF617,0xF50B,0xF413,0xF4CD,0xF6AE,0xF866,0xF921,0xF96F, + 0xF7A6,0xF5F4,0xF6CA,0xF734,0xF7F3,0xF78E,0xF6ED,0xF670, + 0xF605,0xF613,0xF5C5,0xF46B,0xF13A,0xEAFB,0xE1A6,0xD3A3, + 0xC309,0xBF0C,0xBF9D,0xBF24,0xC01D,0xBEF0,0xCBAE,0xF517, + 0x12B6,0x1C1C,0x1269,0xFF9F,0xF0A1,0xED86,0xF95F,0x0E9F, + 0x2531,0x38A7,0x3FDE,0x3F78,0x3FDA,0x3FCF,0x3F6D,0x3F15, + 0x3265,0x2137,0x0F9F,0xFEFF,0xF2FD,0xEB96,0xED07,0xF541, + 0xFEA7,0x022A,0xFAB4,0xE7E7,0xCE72,0xC090,0xC10E,0xC0A8, + 0xC3CF,0xD5FC,0xE7A9,0xF537,0xFE58,0x04E0,0x0A1D,0x0E18, + 0x108B,0x117A,0x1158,0x1341,0x16C4,0x1B66,0x219E,0x29B3, + 0x3237,0x380E,0x38BE,0x316F,0x221A,0x0D10,0xF915,0xEB8C, + 0xE7CE,0xEA68,0xEF05,0xF11F,0xEFD9,0xEB27,0xE474,0xDDE7, + 0xD8DD,0xD4AC,0xD21F,0xD1FF,0xD50C,0xDADE,0xE2D6,0xEC04, + 0xF60E,0x00D7,0x0B2E,0x128B,0x15ED,0x14A0,0x0FEC,0x0BA9, + 0x0AAD,0x0EE3,0x1650,0x1DD4,0x21F7,0x219D,0x1C54,0x147C, + 0x0BD3,0x038E,0xFB2B,0xF3B9,0xED8E,0xE8C7,0xE596,0xE579, + 0xE526,0xE460,0xE71D,0xE698,0xE5F7,0xE582,0xE387,0xE111, + 0xE007,0xE227,0xE80C,0xF117,0xFC52,0x060B,0x0C4C,0x0EE8, + 0x0EEF,0x0E90,0x0E75,0x0D64,0x0CC2,0x0D3F,0x0E91,0x0FC3, + 0x1010,0x0EFB,0x0D14,0x0A50,0x0644,0x01CD,0xFCC8,0xF5FE, + 0xEE2C,0xE7B6,0xE4E0,0xE54B,0xE7F0,0xEB04,0xEDB6,0xEF19, + 0xEE5A,0xEC51,0xEB34,0xEB69,0xECD0,0xEFA9,0xF456,0xF9D0, + 0xFF32,0x0411,0x07CF,0x0ACD,0x0CE0,0x0E66,0x0EBC,0x0D83, + 0x0BC3,0x0974,0x0796,0x0702,0x07D5,0x0844,0x092B,0x0813, + 0x049F,0x00B9,0xFC27,0xF779,0xF336,0xEFCB,0xEE41,0xEE23, + 0xEF3D,0xF15C,0xF387,0xF40B,0xF4A7,0xF5BC,0xF705,0xF813, + 0xF915,0xF9E4,0xFBBA,0xFFB8,0x0373,0x066E,0x0A1F,0x0D03, + 0x0DB7,0x0D98,0x0D74,0x0C4B,0x0B58,0x0A19,0x07DC,0x05D8, + 0x04AD,0x044C,0x03C7,0x027F,0x00F8,0xFE93,0xFB9F,0xF90E, + 0xF6B8,0xF547,0xF3C4,0xF210,0xF183,0xF3C7,0xF67F,0xF86C, + 0xFA8F,0xFC04,0xFCE7,0xFD27,0xFDBD,0xFEF7,0x0049,0x019C, + 0x02FC,0x0541,0x0689,0x07DE,0x0900,0x09D4,0x0A4F,0x09C3, + 0x0849,0x0673,0x04CC,0x02E1,0x011C,0xFFD0,0xFF18,0xFD52, + 0xF85B,0xEE21,0xDDF5,0xC785,0xBE04,0xBE9E,0xBE29,0xBE44, + 0xC029,0xBDF0,0xCF3A,0x052C,0x26D4,0x2DC1,0x1DAA,0x03F1, + 0xF24F,0xF3FA,0x0816,0x26E3,0x3C95,0x3DF8,0x3E42,0x3E54, + 0x3E73,0x3E7E,0x3E3F,0x3DD0,0x3E34,0x30F6,0x17B2,0x0357, + 0xF46C,0xEDCA,0xF043,0xFABB,0x0603,0x077C,0xFA50,0xDD97, + 0xC249,0xBEF8,0xBF87,0xBF52,0xBF5A,0xD0B7,0xE8AF,0xF8F5, + 0x07DE,0x101E,0x16D0,0x1B7F,0x1D34,0x1EC9,0x219B,0x24FC, + 0x29BB,0x3052,0x3967,0x3F31,0x3EFF,0x3F39,0x3E88,0x3F36, + 0x323B,0x1576,0xFC8F,0xEC99,0xE737,0xE933,0xEDE2,0xF091, + 0xEFFE,0xEB42,0xE293,0xD83D,0xCF50,0xC907,0xC61E,0xC76B, + 0xCD54,0xD703,0xE2F2,0xF038,0xFE91,0x0D4F,0x1A07,0x22DD, + 0x2663,0x245D,0x1E2B,0x1912,0x1914,0x1EC7,0x28D0,0x321A, + 0x36E5,0x3591,0x2F6A,0x256B,0x186C,0x0ACE,0xFDCE,0xF251, + 0xE9AB,0xE53D,0xE419,0xE3D8,0xE33E,0xE234,0xE125,0xE02C, + 0xDDCE,0xDC65,0xDA41,0xD8BD,0xD91A,0xDD86,0xE6DB,0xF3AC, + 0x0184,0x0E19,0x168A,0x1A76,0x1B57,0x1A6E,0x18CF,0x170B, + 0x1615,0x1722,0x18BA,0x19D2,0x1B12,0x1AA8,0x1767,0x1214, + 0x0B20,0x022C,0xF90A,0xF11F,0xE9C0,0xE3B7,0xE0CA,0xE0AB, + 0xE27B,0xE4E7,0xE718,0xE8BF,0xE99E,0xE8EF,0xE821,0xE7CC, + 0xE993,0xED1E,0xF339,0xFC3E,0x0473,0x0C46,0x1176,0x13F5, + 0x14F1,0x1577,0x1686,0x16BD,0x153C,0x129C,0x0F90,0x0D78, + 0x0D8F,0x0DCA,0x0DBF,0x0B82,0x06AA,0x0035,0xF8B0,0xF250, + 0xEE03,0xEA90,0xE842,0xE77C,0xE8BF,0xEB5F,0xEE52,0xF0A7, + 0xF1A3,0xF20B,0xF28A,0xF438,0xF784,0xFB1C,0xFDAC,0xFF80, + 0x0313,0x0823,0x0DAB,0x1244,0x158A,0x1695,0x14A2,0x1146, + 0x0E46,0x0C74,0x0B25,0x098A,0x081E,0x06CF,0x0626,0x0477, + 0x014E,0xFDAA,0xF9B5,0xF61E,0xF2B7,0xF026,0xEE7E,0xEDD7, + 0xEE19,0xEF0B,0xF103,0xF469,0xF780,0xF91C,0xFA30,0xFBC2, + 0xFE36,0xFF9A,0x006F,0x01F2,0x0465,0x083D,0x0CD0,0x1099, + 0x1037,0x112D,0x101C,0x0C97,0x0AE5,0x09F6,0x0864,0x0629, + 0x02B6,0x00BF,0xFDE4,0xF7B7,0xEC08,0xD859,0xC354,0xBF4B, + 0xBF8B,0xBF3F,0xBF6B,0xC142,0xBF4F,0xD8F4,0x0D71,0x2841, + 0x2882,0x1478,0xFC8A,0xF0D8,0xF854,0x0E76,0x2DE9,0x3EDA, + 0x3ECE,0x3F39,0x3F45,0x3F4E,0x3F51,0x3F23,0x3E96,0x3E63, + 0x2ED4,0x1587,0x0019,0xF103,0xED2A,0xF408,0xFFD7,0x07A4, + 0x041B,0xF13B,0xD0EE,0xBED9,0xBFB9,0xBF61,0xBFCF,0xBFB0, + 0xD193,0xE991,0xFA97,0x06EE,0x0FF8,0x16CB,0x1C9F,0x1EAA, + 0x20CE,0x24B9,0x29D0,0x2ED1,0x3560,0x3DBA,0x4011,0x3FD7, + 0x3FAE,0x3F3D,0x3EBC,0x2CFC,0x107E,0xFA29,0xED2D,0xE915, + 0xEAE4,0xEE3E,0xF0DD,0xEEF2,0xE764,0xDDA3,0xD450,0xCB41, + 0xC534,0xC365,0xC69D,0xCD53,0xD6DD,0xE2BD,0xF0C1,0x003D, + 0x0EFC,0x1B30,0x21E9,0x22A4,0x1F61,0x1B0E,0x1858,0x198F, + 0x1FB8,0x29E1,0x31C6,0x34F6,0x3446,0x2D4F,0x212A,0x12F6, + 0x04A9,0xF810,0xEF1F,0xE8C7,0xE43F,0xE169,0xDFC2,0xDE7D, + 0xDD61,0xDC65,0xDBCE,0xDB9D,0xDA30,0xD7FC,0xD65B,0xD728, + 0xDC95,0xE725,0xF4F0,0x02E7,0x0E50,0x1623,0x191C,0x18DC, + 0x17A6,0x1650,0x15BA,0x15E4,0x16B3,0x18E7,0x1B45,0x1BB2, + 0x19E1,0x14EA,0x0EA8,0x0787,0xFF3D,0xF739,0xEF1D,0xE7AD, + 0xE188,0xDE30,0xDDFA,0xE14D,0xE510,0xE740,0xE75E,0xE682, + 0xE55C,0xE4BA,0xE54A,0xE7EC,0xED1C,0xF3FA,0xFB83,0x0389, + 0x0B00,0x106E,0x1325,0x1478,0x149A,0x14BF,0x1478,0x12FF, + 0x118A,0x1022,0x0E2D,0x0CC2,0x0B9D,0x0A5F,0x0761,0x04D3, + 0xFF09,0xF646,0xF006,0xEA3C,0xE6E9,0xE62A,0xE72D,0xE8CF, + 0xEAB7,0xEC4A,0xED83,0xEE0C,0xEF15,0xF13B,0xF386,0xF668, + 0xF93B,0xFD4C,0x0164,0x058B,0x0931,0x0D87,0x115C,0x13B9, + 0x1456,0x137D,0x117E,0x0EE0,0x0C03,0x09C6,0x089F,0x07ED, + 0x06E9,0x04C2,0x01AB,0xFDFD,0xFA28,0xF69A,0xF3B6,0xF1CC, + 0xEF98,0xEDC6,0xEC42,0xEBE5,0xECE3,0xEF4A,0xF292,0xF5E5, + 0xF889,0xF975,0xFA30,0xFC4F,0xFE57,0x00C9,0x02F8,0x05E6, + 0x0996,0x0D39,0x0EFA,0x0EFC,0x0E91,0x0D8E,0x0B95,0x083E, + 0x0649,0x05D9,0x045F,0x01C5,0xFE75,0xFBE1,0xF830,0xF0AA, + 0xE394,0xCDF6,0xBF11,0xBF3E,0xBED9,0xBED4,0xBF73,0xC0C0, + 0xC033,0xE9C9,0x1A1A,0x2C9D,0x2617,0x0E1B,0xF67F,0xEFE2, + 0xFD97,0x19C0,0x3833,0x3FCB,0x3F3E,0x3FB8,0x3FD1,0x3FB3, + 0x3FC2,0x3F9A,0x3F79,0x3D76,0x2880,0x0EF7,0xFB07,0xEE98, + 0xEE17,0xF7AC,0x0557,0x0D3E,0x047C,0xEB1B,0xCA78,0xBF93, + 0xC099,0xC083,0xC05D,0xC515,0xDC3B,0xF0CC,0xFFE5,0x0B7F, + 0x13F1,0x1A2B,0x1E32,0x206F,0x22AB,0x25A0,0x2A38,0x2F5E, + 0x36B8,0x3F21,0x40C4,0x40AC,0x4046,0x4074,0x3C95,0x2337, + 0x065B,0xF1A3,0xE7EA,0xE845,0xEC5D,0xEF09,0xEDF1,0xE961, + 0xE210,0xD909,0xCF89,0xC8B4,0xC50C,0xC4BD,0xC79E,0xCE78, + 0xD95B,0xE6EF,0xF51F,0x0467,0x1316,0x1EBF,0x24E4,0x2477, + 0x1F05,0x198F,0x17EF,0x1B41,0x22DF,0x2C85,0x344E,0x3673, + 0x32B3,0x295D,0x1CE1,0x0EE2,0x0112,0xF58D,0xED14,0xE6E2, + 0xE268,0xDEEF,0xDDBE,0xDE8D,0xDF82,0xDFC8,0xE01A,0xDD7E, + 0xD9F5,0xD957,0xD6D2,0xD8FB,0xE1AC,0xEE26,0xFB55,0x0883, + 0x139C,0x1A23,0x1C7E,0x1B94,0x19FB,0x18B7,0x1810,0x1862, + 0x197F,0x1B41,0x1C95,0x1C11,0x192C,0x14A1,0x0EA0,0x079F, + 0xFF66,0xF66A,0xED6B,0xE5D3,0xE0D6,0xDEE3,0xDF37,0xE22A, + 0xE5A3,0xE7E0,0xE7FA,0xE6A0,0xE5FE,0xE652,0xE7D7,0xEAFB, + 0xF028,0xF6F7,0xFEF8,0x06A7,0x0D65,0x1282,0x1554,0x164F, + 0x1697,0x1622,0x14CC,0x12F1,0x10B3,0x0E21,0x0CB1,0x0BC8, + 0x0B08,0x0952,0x064E,0x017D,0xFB9A,0xF6E4,0xF18C,0xEBB5, + 0xE8DE,0xE782,0xE7A2,0xE8FA,0xEB39,0xED72,0xEEF6,0xF083, + 0xF17E,0xF28F,0xF448,0xF6D5,0xFA8B,0xFF11,0x03A3,0x07B2, + 0x0AFF,0x0E66,0x1293,0x14B5,0x145E,0x12A5,0x109D,0x0D5F, + 0x0B04,0x093B,0x07F8,0x06CA,0x051E,0x02F0,0x0006,0xFCCC, + 0xF980,0xF547,0xF153,0xEE36,0xEC2B,0xEBC4,0xECA7,0xEE14, + 0xF02A,0xF22B,0xF30A,0xF3D0,0xF73D,0xFA06,0xFBB7,0xFCFC, + 0xFECA,0x0243,0x05ED,0x08D9,0x0B48,0x0CDB,0x0DDD,0x0DD1, + 0x0CE5,0x0C04,0x0B8D,0x09CC,0x0788,0x0578,0x0332,0x011E, + 0xFF5F,0xFD11,0xF81B,0xEDCE,0xDDCC,0xC6C1,0xBD9A,0xBEA7, + 0xBE17,0xBE2F,0xBF27,0xBF37,0xC58E,0xF65D,0x2059,0x2C06, + 0x1F75,0x0652,0xF226,0xEF9E,0x0109,0x206D,0x3B4B,0x3E25, + 0x3E00,0x3E4F,0x3E8B,0x3E89,0x3E6F,0x3DC1,0x3E69,0x36BE, + 0x1DFD,0x06D1,0xF535,0xEBA6,0xEC40,0xF61C,0x0213,0x0681, + 0xFB70,0xDF69,0xC299,0xBE86,0xBF0D,0xBF74,0xBEAC,0xC687, + 0xDF68,0xF2BF,0x0089,0x0A4B,0x117C,0x15E6,0x1987,0x1E59, + 0x1F9A,0x2367,0x283A,0x2DC0,0x3633,0x3E63,0x3F13,0x3EF9, + 0x3EB0,0x3F29,0x35C7,0x19FF,0xFFE3,0xED11,0xE4ED,0xE568, + 0xEAAC,0xEE79,0xEDDE,0xE893,0xDFDC,0xD5E0,0xCC14,0xC50A, + 0xC154,0xC2CF,0xC817,0xD0CF,0xDC37,0xE9A7,0xF837,0x0748, + 0x1542,0x1FDA,0x24F3,0x2395,0x1E03,0x18A7,0x1809,0x1D4F, + 0x25DD,0x2EAB,0x345B,0x3529,0x309D,0x2707,0x1A02,0x0BB7, + 0xFD53,0xF16C,0xE8C7,0xE3B4,0xE1D4,0xE1A6,0xE070,0xDEB4, + 0xDDA0,0xDD9C,0xDCD2,0xDB65,0xD93E,0xD70C,0xD678,0xD7AC, + 0xE046,0xEDE8,0xFCAF,0x09D1,0x12B5,0x177A,0x1962,0x18FA, + 0x1799,0x1662,0x1611,0x16DF,0x180D,0x19AB,0x1AF4,0x1A6F, + 0x186F,0x12F5,0x0A4A,0x0267,0xFAAE,0xF243,0xEA40,0xE370, + 0xDF00,0xDDAA,0xDF3E,0xE1B4,0xE486,0xE68E,0xE73C,0xE657, + 0xE48A,0xE485,0xE6EB,0xEBBE,0xF233,0xF9EC,0x017B,0x08CB, + 0x0EEC,0x1396,0x1741,0x18BC,0x1758,0x1591,0x13C3,0x119D, + 0x0FAC,0x0EC5,0x0E70,0x0DC9,0x0C2E,0x09B4,0x0619,0x013B, + 0xFB2C,0xF47C,0xEE3C,0xE90D,0xE6A0,0xE650,0xE799,0xE9E5, + 0xEC1C,0xED57,0xEE72,0xEFE4,0xF173,0xF3DF,0xF656,0xF8E8, + 0xFC44,0xFFB6,0x03D7,0x096B,0x0ED4,0x12F9,0x14D0,0x14FA, + 0x1398,0x1199,0x0F75,0x0D5A,0x0BC6,0x0A3C,0x08CF,0x06CB, + 0x0524,0x033E,0x018B,0xFE47,0xF9A0,0xF50E,0xF124,0xEEC3, + 0xEDAD,0xED0F,0xED86,0xEEEE,0xF0A8,0xF308,0xF5EB,0xF812, + 0xFA1A,0xFBAE,0xFD33,0xFE9B,0x000D,0x0248,0x0571,0x08C3, + 0x0BAB,0x0EB8,0x106F,0x1037,0x0EAB,0x0D16,0x0BF0,0x0862, + 0x07CD,0x06DA,0x0408,0x0289,0xFFEE,0xF918,0xED51,0xDB6D, + 0xC524,0xBF26,0xBFD5,0xBF69,0xBF8B,0xC0F5,0xBF2A,0xCF0E, + 0x0499,0x25B6,0x2A67,0x18C8,0x0026,0xF0BC,0xF3DF,0x077C, + 0x269A,0x3DA0,0x3F08,0x3F49,0x3F68,0x3F5B,0x3F59,0x3F30, + 0x3EA2,0x3F48,0x331D,0x1993,0x0388,0xF2E0,0xEC9F,0xF249, + 0xFE5B,0x07E7,0x0795,0xF74F,0xD816,0xC0F0,0xBFBE,0xBF82, + 0xC008,0xBF3F,0xCB43,0xE42B,0xF654,0x0483,0x0E99,0x1471, + 0x187B,0x1B5F,0x1E0A,0x2179,0x26AE,0x2DBE,0x33B3,0x3C18, + 0x4055,0x4011,0x3FE1,0x3F24,0x4010,0x32B5,0x14C0,0xFBFB, + 0xEC34,0xE679,0xE8A5,0xEDB9,0xF047,0xEDF1,0xE6B6,0xDD4E, + 0xD30D,0xCA96,0xC4BE,0xC145,0xC292,0xC94E,0xD241,0xDD22, + 0xEABA,0xFABC,0x0ACC,0x1821,0x20CF,0x234C,0x1FE1,0x196F, + 0x14E2,0x158F,0x1C98,0x26E2,0x306C,0x3544,0x3476,0x2D4E, + 0x2157,0x12D4,0x040F,0xF8C0,0xF034,0xE8A4,0xE321,0xE000, + 0xDE7C,0xDD74,0xDCCF,0xDD75,0xDE2B,0xDD13,0xD993,0xD5D0, + 0xD387,0xD4BC,0xDA24,0xE41D,0xF1DB,0x0061,0x0C25,0x1409, + 0x1754,0x17CD,0x16C6,0x1540,0x1451,0x151B,0x16F8,0x1898, + 0x19AE,0x18BE,0x1656,0x1388,0x0FE0,0x0A35,0x0259,0xF87E, + 0xEE4F,0xE554,0xDF12,0xDC11,0xDCBB,0xDF20,0xE15A,0xE379, + 0xE3E3,0xE370,0xE272,0xE1A9,0xE24D,0xE564,0xEB1F,0xF1FF, + 0xF8A5,0xFF52,0x05E3,0x0BDF,0x10BB,0x13C1,0x14A8,0x142F, + 0x127B,0x1007,0x0E4E,0x0C4F,0x0AEA,0x09D6,0x097D,0x0937, + 0x077B,0x02A7,0xFC52,0xF59C,0xEF84,0xE901,0xE6D8,0xE580, + 0xE40A,0xE618,0xE72F,0xE89C,0xEAE3,0xED67,0xEEAE,0xF02E, + 0xF1D6,0xF4ED,0xF840,0xFB6D,0xFE92,0x02C1,0x07BD,0x0C68, + 0x10C8,0x13AC,0x14E4,0x13FE,0x11BD,0x0EB9,0x0CDC,0x0BB9, + 0x0A12,0x0816,0x0691,0x0503,0x0272,0x001D,0xFCCB,0xF956, + 0xF5AE,0xF225,0xEF3B,0xED7C,0xED03,0xED61,0xEE91,0xF08B, + 0xF35F,0xF5AD,0xF744,0xF8D5,0xFAB5,0xFC9E,0xFEAF,0x0150, + 0x045B,0x06DD,0x089C,0x0A0D,0x0BFF,0x0DF1,0x0ED7,0x0ED2, + 0x0DA9,0x0B7E,0x08F1,0x06B1,0x04AB,0x0308,0xFFA7,0xFC04, + 0xF881,0xF163,0xE5FA,0xD24F,0xC058,0xBEF4,0xBEF1,0xBEC9, + 0xBEF9,0xC098,0xBFB1,0xDD10,0x0FE4,0x27C4,0x2580,0x1148, + 0xFAB6,0xEFB0,0xF8AB,0x1159,0x314A,0x3F9A,0x3EC5,0x3F9A, + 0x3FB7,0x3FA0,0x3FD9,0x3F51,0x3F4B,0x3E46,0x2C52,0x1376, + 0xFE30,0xF029,0xECA5,0xF3FE,0x0073,0x08C1,0x03F7,0xEF57, + 0xCEC6,0xBFE5,0xC175,0xC083,0xC06F,0xC1A2,0xD47B,0xEAB6, + 0xFB30,0x0820,0x1151,0x177C,0x1B9B,0x1EA5,0x2058,0x234E, + 0x282A,0x2E44,0x3585,0x3E14,0x40ED,0x4082,0x4080,0x4034, + 0x3EA3,0x2932,0x0C1A,0xF5A6,0xE91D,0xE707,0xEB3C,0xEF80, + 0xEFA2,0xEAA1,0xE27F,0xDA05,0xD154,0xC9A8,0xC431,0xC2AE, + 0xC530,0xCC09,0xD654,0xE395,0xF2C3,0x024F,0x107F,0x1C0D, + 0x2386,0x24EA,0x2035,0x19F0,0x176E,0x1A83,0x22AD,0x2CB7, + 0x34CC,0x37D1,0x3449,0x2B39,0x1F08,0x11C3,0x0465,0xF883, + 0xEECC,0xE7BD,0xE40A,0xE1B7,0xDFD0,0xDEBF,0xDDCA,0xDDEC, + 0xDDF0,0xDE02,0xDBFF,0xD93D,0xD747,0xD909,0xDF21,0xE9C2, + 0xFA49,0x07BE,0x11AB,0x1830,0x1A27,0x19BE,0x1809,0x16D8, + 0x173C,0x18A7,0x1A21,0x1B72,0x1BFB,0x1B71,0x195B,0x1541, + 0x0F41,0x07D4,0xFF84,0xF72E,0xEF24,0xE770,0xE16D,0xDE3C, + 0xDDA6,0xE032,0xE3BD,0xE6B8,0xE724,0xE5BD,0xE3F6,0xE35E, + 0xE571,0xE959,0xEED5,0xF5ED,0xFDFA,0x04D1,0x0AED,0x10B0, + 0x14DE,0x1693,0x1698,0x1532,0x1337,0x11CD,0x1054,0x0F1A, + 0x0DE0,0x0CE1,0x0C1D,0x0A93,0x06A4,0x01B4,0xFB61,0xF555, + 0xEF45,0xE970,0xE603,0xE5A4,0xE96D,0xEAE1,0xEB42,0xEC39, + 0xEDDF,0xEF86,0xF077,0xF204,0xF496,0xF74A,0xF9AC,0xFC78, + 0x0106,0x06B7,0x0C2A,0x1027,0x125C,0x1374,0x13D0,0x1246, + 0x1087,0x0F24,0x0D4E,0x0AE6,0x0923,0x07EA,0x05DB,0x044C, + 0x011C,0xFD89,0xF9F9,0xF5DB,0xF1D3,0xEF5B,0xED8C,0xEC76, + 0xEBFA,0xEC55,0xEDD1,0xF00C,0xF2A7,0xF51B,0xF753,0xF935, + 0xFA7E,0xFABA,0xFC61,0x0079,0x03BD,0x0681,0x0910,0x0BFB, + 0x0DE5,0x0E83,0x0E9F,0x0DB7,0x0BE9,0x09A1,0x0764,0x04F4, + 0x02A3,0x011B,0xFF76,0xFD76,0xFAB0,0xF574,0xED3F,0xE255, + 0xD5B3,0xC7D8,0xBEB5,0xBEC2,0xBE5E,0xC367,0xDC44,0xF64D, + 0x086C,0x0E77,0x09DF,0xFF9A,0xF820,0xF8AE,0x0183,0x0F1C, + 0x1C4B,0x277B,0x2FF0,0x36AA,0x3AA7,0x3B0E,0x3764,0x3039, + 0x2654,0x1AB3,0x0E82,0x0386,0xFB1A,0xF649,0xF650,0xFA71, + 0xFEB9,0xFF7D,0xF922,0xEC42,0xDD46,0xD07F,0xCAB8,0xCC8A, + 0xD412,0xDFB3,0xEB93,0xF506,0xFBE2,0x01D3,0x068E,0x09A0, + 0x0ACD,0x0B5A,0x0D82,0x104F,0x12DA,0x15D9,0x1BCF,0x1FB3, + 0x25BC,0x2989,0x293A,0x249D,0x1B15,0x0D84,0x0068,0xF7DC, + 0xF455,0xF487,0xF584,0xF659,0xF588,0xF3E2,0xEFE7,0xEAF8, + 0xE6AE,0xE2F9,0xE08C,0xE08C,0xE32A,0xE820,0xEE33,0xF48D, + 0xFAE9,0x01BF,0x0969,0x0EF4,0x10D3,0x0FB7,0x0D26,0x0AD0, + 0x0AAD,0x0DEB,0x12F4,0x17A8,0x19A5,0x18D9,0x1698,0x12CC, + 0x0D7A,0x06E4,0xFFEE,0xF945,0xF45E,0xF1DC,0xF06F,0xEFB8, + 0xEF3D,0xEE80,0xEDF3,0xED97,0xED52,0xED16,0xEC15,0xEB48, + 0xEB03,0xEC50,0xF0AD,0xF718,0xFE27,0x036B,0x0547,0x07A8, + 0x093D,0x0978,0x096A,0x0909,0x095A,0x0A17,0x0A6C,0x0ACE, + 0x0B27,0x0ADE,0x0983,0x0781,0x0448,0x00A7,0xFCCB,0xF8D6, + 0xF4BD,0xF062,0xEE45,0xEE31,0xEE8F,0xEF42,0xF17F,0xF33B, + 0xF3A0,0xF286,0xF10E,0xF0D6,0xF2FD,0xF5C3,0xF8F3,0xFC79, + 0xFFA5,0x02B0,0x05B5,0x07F8,0x0A34,0x0BAB,0x0BCE,0x0A8F, + 0x0948,0x09AB,0x09AB,0x0834,0x0705,0x060D,0x04FE,0x03DF, + 0x02C6,0x0150,0xFF14,0xFC52,0xF9D4,0xF76C,0xF5B4,0xF571, + 0xF5C4,0xF537,0xF461,0xF3AD,0xF2F3,0xF1D8,0xF116,0xF12D, + 0xF1AB,0xF1F5,0xF2B6,0xF391,0xF595,0xF827,0xF9F0,0xFB0A, + 0xFB8B,0xFBEC,0xFC90,0xFC83,0xFC00,0xFB4C,0xFAB4,0xFA02, + 0xF988,0xF8F3,0xF854,0xF79F,0xF67C,0xF553,0xF44F,0xF398, + 0xF2C5,0xF1F6,0xF12D,0xF03C,0xEFC4,0xEF2E,0xEEB9,0xEE26, + 0xED81,0xECF0,0xECEB,0xEC7E,0xEC28,0xEBF7,0xEBCC,0xEB98, + 0xEB2B,0xEB2C,0xEB7E,0xEB4D,0xEB3E,0xEB35,0xEAC3,0xE9F5, + 0xE9A0,0xE9B8,0xE9AF,0xE97F,0xE938,0xE97B,0xE794,0xE88A, + 0xE929,0xE7AD,0xE81D,0xE84F,0xE82A,0xE867,0xE898,0xE854, + 0xE880,0xE8B7,0xE93C,0xE972,0xE97F,0xE9DB,0xEA1C,0xEA3A, + 0xEAAA,0xEB2F,0xEBCA,0xEBF3,0xEC3B,0xECBC,0xED6B,0xEDAF, + 0xEE13,0xEE8D,0xEF28,0xEF63,0xEF7F,0xEFAC,0xF027,0xF07F, + 0xF08F,0xF0A2,0xF0EA,0xF155,0xF20D,0xF1DA,0xF233,0xF2B8, + 0xF37E,0xF39C,0xF3E7,0xF468,0xF4CA,0xF55C,0xF5A9,0xF648, + 0xF6B2,0xF73C,0xF7A5,0xF827,0xF850,0xF91B,0xF983,0xF9FA, + 0xFA87,0xFAF9,0xFB25,0xFC5B,0xFF2F,0xFEAC,0xFEFB,0xFF42, + 0xFF11,0xFF3A,0xFF97,0xFFB7,0x0006,0x005C,0x00B5,0x0101, + 0x010D,0x0153,0x0211,0x0211,0x0244,0x02D2,0x02AB,0x01EF, + 0x02DC,0x03EE,0x03A3,0x0354,0x0410,0x0412,0x03FC,0x048C, + 0x04E6,0x053E,0x0575,0x056B,0x05C7,0x05FB,0x067D,0x06EA, + 0x06F4,0x0746,0x0726,0x0789,0x07CC,0x07B5,0x07BC,0x0826, + 0x0812,0x06F7,0x07CB,0x08C6,0x0944,0x0957,0x0935,0x090F, + 0x0944,0x09C0,0x09DD,0x098E,0x0947,0x08EA,0x08DE,0x088F, + 0x0875,0x0948,0x0934,0x0901,0x08E3,0x090E,0x0929,0x0971, + 0x09EE,0x0A5C,0x0AA9,0x0AAF,0x0AD4,0x0AFA,0x0B1C,0x0AF5, + 0x0B2C,0x0B3D,0x0B3B,0x0B18,0x0B70,0x0BAB,0x0BA7,0x0BC4, + 0x0C08,0x0BF4,0x0B9E,0x0B94,0x0B30,0x0B48,0x0B47,0x0B7C, + 0x0BC2,0x0BF4,0x0B92,0x0BC3,0x0BA3,0x0BCD,0x0BA0,0x0B9C, + 0x0BD2,0x0BE0,0x0BAD,0x0BD7,0x0C67,0x0CC0,0x0C30,0x0C0D, + 0x0C3B,0x0C87,0x0C3A,0x0C5F,0x0C82,0x0C4B,0x0C88,0x0D12, + 0x0CDC,0x0D09,0x0D38,0x0D16,0x0C25,0x0D5A,0x0D48,0x0C01, + 0x0D09,0x0CE3,0x0CA0,0x0CC5,0x0CEF,0x0C82,0x0CA7,0x0CB6, + 0x0CB2,0x0C8A,0x0C31,0x0C44,0x0C27,0x0C50,0x0C25,0x0C41, + 0x0C71,0x0CE3,0x0C83,0x0C6C,0x0C41,0x0C53,0x0BD0,0x0B99, + 0x0B87,0x0B53,0x0B64,0x0BB4,0x0C20,0x0BFA,0x0BC7,0x0B42, + 0x0B3C,0x0B17,0x0B0B,0x0B00,0x0A95,0x0A2E,0x0A28,0x0A3A, + 0x09E5,0x0A2C,0x09E1,0x09DE,0x09F8,0x09C5,0x0981,0x099C, + 0x09FB,0x09C1,0x09BF,0x0979,0x0943,0x0952,0x0953,0x0957, + 0x0940,0x08DC,0x0895,0x088F,0x0870,0x06A6,0x0575,0x0614, + 0x05FA,0x0621,0x062C,0x0677,0x068F,0x066A,0x05E3,0x05F0, + 0x062E,0x0605,0x05F3,0x0664,0x0653,0x0624,0x0654,0x065C, + 0x05E4,0x05C6,0x0680,0x0723,0x06A7,0x0652,0x0673,0x06BA, + 0x06C4,0x06AE,0x0623,0x0670,0x06D9,0x06DB,0x06C3,0x06BB, + 0x06E7,0x0733,0x06D8,0x0660,0x05EC,0x0634,0x068B,0x062D, + 0x065E,0x078D,0x069C,0x05BA,0x058B,0x05B9,0x05A8,0x057D, + 0x054A,0x053B,0x05CA,0x064F,0x06B9,0x06B7,0x06DE,0x0745, + 0x06F3,0x0698,0x0626,0x059A,0x0559,0x04EB,0x051F,0x057C, + 0x058E,0x05A0,0x0549,0x04EB,0x04C3,0x0501,0x051E,0x050D, + 0x04B9,0x04B6,0x04A4,0x04BA,0x0491,0x04B3,0x043A,0x0415, + 0x0403,0x0426,0x0418,0x03FE,0x03CB,0x0342,0x033B,0x037F, + 0x0362,0x0346,0x02F4,0x0268,0x0244,0x01C5,0x01B2,0x0233, + 0x0231,0x01C4,0x0191,0x017D,0x01D4,0x019D,0x01CD,0x01F8, + 0x01B4,0x0175,0x0180,0x016C,0x0168,0x011A,0x0082,0xFF63, + 0xFFDD,0xFFD6,0xFF94,0xFF9D,0xFF6C,0xFF25,0xFF18,0xFF1A, + 0xFF4D,0xFF7D,0xFF53,0xFF2B,0xFEA2,0xFE69,0xFE44,0xFE4E, + 0xFE7D,0xFE95,0xFE67,0xFE4E,0xFDED,0xFC7C,0xFD63,0xFEB9, + 0xFEE3,0xFF09,0xFF14,0xFE9B,0xFE89,0xFE31,0xFDE3,0xFDC1, + 0xFD59,0xFD4C,0xFD48,0xFCB3,0xFC5D,0xFC71,0xFC21,0xFC52, + 0xFC4A,0xFC51,0xFC7A,0xFC57,0xFC1B,0xFC0F,0xFBDD,0xFBDB, + 0xFC69,0xFCC1,0xFCE7,0xFCE5,0xFCF2,0xFCBA,0xFC77,0xFCCF, + 0xFD2F,0xFD64,0xFD54,0xFD36,0xFD3D,0xFCFF,0xFD1B,0xFD48, + 0xFD1E,0xFD58,0xFD68,0xFD95,0xFD86,0xFD1C,0xFD0F,0xFD51, + 0xFD65,0xFD4B,0xFDBA,0xFDF2,0xFDF8,0xFD61,0xFC9F,0xFD4A, + 0xFDBD,0xFE02,0xFEF1,0xFF98,0xFF81,0xFF9D,0xFF4E,0x0014, + 0x01D0,0x0402,0x05DC,0x06C0,0x06DA,0x0763,0x07AA,0x078A, + 0x06E2,0x08E1,0x0938,0x083A,0x0935,0x08AC,0x088A,0x08A2, + 0x08DA,0x09B8,0x0B71,0x0CEC,0x0D73,0x0C8D,0x0B50,0x0A4B, + 0x0A85,0x0C86,0x0E8B,0x1033,0x1075,0x1074,0x109B,0x1083, + 0x1063,0x0FDF,0x0ECC,0x0D69,0x0BD0,0x0951,0x066C,0x0409, + 0x0413,0x07A1,0x0FA3,0x1869,0x1F40,0x20E0,0x1CFD,0x1748, + 0x1346,0x12A4,0x1607,0x1BFF,0x2234,0x2646,0x279A,0x26FA, + 0x24E6,0x22CA,0x2049,0x1CEA,0x1AC3,0x1A48,0x19AD,0x17F7, + 0x1553,0x140E,0x1433,0x150B,0x15DC,0x160E,0x1435,0x0FBE, + 0x0A17,0x053F,0x0504,0x098B,0x0E3B,0x12B0,0x1541,0x1618, + 0x1534,0x12E4,0x10F0,0x1094,0x116A,0x122F,0x13E0,0x15C0, + 0x167C,0x1647,0x14BF,0x1435,0x132B,0x1292,0x111C,0x0DEC, + 0x0A64,0x07CA,0x0667,0x05E2,0x064D,0x083B,0x094E,0x08A7, + 0x067A,0x035A,0x00F7,0xFED6,0xFE0D,0xFFFE,0x0314,0x0597, + 0x07D0,0x0848,0x07B8,0x0735,0x0700,0x0707,0x05BA,0x057A, + 0x05CD,0x060B,0x0555,0x0514,0x0588,0x0586,0x0546,0x03E9, + 0x02AD,0x0107,0xFE78,0xFC35,0xFA26,0xF9FA,0xFB1D,0xFBBA, + 0xFC50,0xFC3F,0xFB26,0xF94D,0xF765,0xF658,0xF6A0,0xF7A2, + 0xF856,0xF8FF,0xFA5E,0xFB2E,0xFB98,0xFB6E,0xFB00,0xFAF0, + 0xFAC0,0xFA4A,0xFA5D,0xFA28,0xF9E8,0xF905,0xF84E,0xF899, + 0xF96E,0xF8C3,0xF796,0xF5F3,0xF430,0xF31A,0xF21C,0xF1D7, + 0xF1F6,0xF1AC,0xF143,0xF104,0xF0EC,0xF110,0xF099,0xF041, + 0xF016,0xF0DE,0xF165,0xF180,0xF213,0xF2AA,0xF348,0xF35C, + 0xF39E,0xF461,0xF45E,0xF39D,0xF33E,0xF2A6,0xF258,0xF250, + 0xF43D,0xF367,0xF2D2,0xF3E7,0xF1A4,0xF050,0xEFA4,0xEF34, + 0xEF13,0xEEDE,0xEF16,0xEF3F,0xEF12,0xEE2C,0xEDE0,0xEE76, + 0xEEEA,0xEF5F,0xEF4C,0xEF9A,0xF03B,0xF007,0xEFA5,0xEFAC, + 0xF188,0xF31B,0xF38E,0xF357,0xF2E4,0xF227,0xF1E6,0xF167, + 0xF122,0xF1BA,0xF286,0xF308,0xF31C,0xF290,0xF172,0xEFE7, + 0xEE92,0xEE59,0xEFC2,0xF0F4,0xF10C,0xF0A8,0xEFC4,0xEED6, + 0xEEB5,0xEF7F,0xF090,0xF258,0xF369,0xF2AE,0xF16A,0xF0BC, + 0xF098,0xF142,0xF305,0xF46E,0xF4BF,0xF438,0xF2E4,0xF49C, + 0xF4EA,0xF4AC,0xF4C8,0xF481,0xF458,0xF455,0xF42B,0xF2E4, + 0xF1A0,0xF0D9,0xF0C3,0xF16E,0xF2B7,0xF3BF,0xF3F2,0xF249, + 0xF0BF,0xF05A,0xF094,0xF0A8,0xEF34,0xE918,0xDD52,0xCBB4, + 0xBFBD,0xBF73,0xBF59,0xBF6F,0xC0A3,0xC0D4,0xDECF,0x0E65, + 0x270E,0x245C,0x0C6C,0xEF8A,0xDD9F,0xE0B3,0xF866,0x1B65, + 0x3917,0x3EA3,0x3E61,0x3E75,0x3E4F,0x3ACD,0x2979,0x18B8, + 0x0BC6,0x01DF,0xF9BD,0xF36E,0xEEF8,0xED14,0xEE90,0xF1FD, + 0xF31E,0xEC17,0xDA1E,0xC37C,0xBDD9,0xBEFE,0xBE44,0xC496, + 0xE10D,0xFD07,0x0E2A,0x1341,0x0F52,0x06FC,0xFF4C,0xFC95, + 0x0112,0x0D01,0x1C9C,0x2A16,0x3239,0x3435,0x3128,0x2A44, + 0x214C,0x1701,0x0AB8,0xFD12,0xEEED,0xE36C,0xDE1B,0xDFB4, + 0xE560,0xEB2D,0xED51,0xE9B8,0xDFF6,0xD2BD,0xC644,0xC019, + 0xC343,0xCF51,0xE01B,0xF1D6,0x009C,0x0968,0x0BED,0x0A6F, + 0x072C,0x062A,0x07B8,0x0B30,0x0FAA,0x1426,0x178A,0x1964, + 0x1AC9,0x1B79,0x193B,0x12DC,0x0872,0xFB7C,0xEF3E,0xE510, + 0xDFE4,0xE15C,0xE315,0xE859,0xEC15,0xEC29,0xE930,0xE3C5, + 0xDD76,0xD9CD,0xD9C0,0xDED2,0xE80B,0xF2F6,0xFD7C,0x059F, + 0x0B0B,0x0E0A,0x0EDF,0x0E87,0x0E48,0x0E7E,0x0ED4,0x0F57, + 0x0F3E,0x0FC2,0x10CB,0x1240,0x118E,0x0D39,0x065E,0xFE56, + 0xF659,0xEF0E,0xE9B1,0xE726,0xE75F,0xE95E,0xEC3F,0xEDFE, + 0xEE69,0xED23,0xEAF0,0xE958,0xE9F5,0xECDC,0xF11D,0xF6A0, + 0xFC91,0x0207,0x07F9,0x0D0D,0x1040,0x1178,0x1087,0x0E9A, + 0x0D0F,0x0C4D,0x0C10,0x0BDE,0x0BE5,0x0B19,0x094D,0x06DD, + 0x03B3,0xFDED,0xF8F4,0xF2E3,0xEE04,0xEBAE,0xEBBF,0xECF0, + 0xEE62,0xEFEB,0xF126,0xF222,0xF2C8,0xF379,0xF4C9,0xF59A, + 0xF781,0xFADD,0x002E,0x04CE,0x0762,0x0A53,0x0CDB,0x0DFF, + 0x0E63,0x0EB3,0x0DD4,0x0B9F,0x09B2,0x0787,0x0694,0x064C, + 0x0617,0x056A,0x0362,0x006F,0xFCF6,0xFA0E,0xF726,0xF4D6, + 0xF36B,0xF2C2,0xF368,0xF534,0xF8B5,0xFADD,0xFB2A,0xFB13, + 0xFAE7,0xFBE5,0xFDAB,0x0022,0x02A5,0x0558,0x07E1,0x0A57, + 0x0C6B,0x0DD2,0x0ED6,0x0F30,0x0E38,0x0C86,0x0A1C,0x0811, + 0x06B8,0x0517,0x03B5,0x0296,0x026B,0x01CB,0x0016,0xFDB6, + 0xFAAE,0xF7EA,0xF669,0xF62C,0xF754,0xF8B0,0xF842,0xF481, + 0xEAFC,0xD9EB,0xC4F3,0xC012,0xC088,0xC030,0xC10A,0xC192, + 0xC583,0xFA7B,0x333A,0x3DBE,0x3D81,0x219A,0xF8D7,0xE600, + 0xEF14,0x13B6,0x3B90,0x3FE4,0x3F72,0x3FDB,0x3FD1,0x3F62, + 0x3FC3,0x3B54,0x258E,0x13C9,0x07A2,0xFD8C,0xF506,0xF038, + 0xF017,0xF576,0xFAFA,0xFADB,0xEEC8,0xD3F6,0xC08D,0xC098, + 0xC19A,0xBEFA,0xCEF5,0xF97E,0x19B0,0x2CF3,0x3039,0x2767, + 0x1B29,0x11FF,0x1073,0x174A,0x26D1,0x3983,0x3FCD,0x3F4C, + 0x3F93,0x3F58,0x3ED9,0x3460,0x256C,0x1524,0x01A2,0xED66, + 0xDF11,0xDA78,0xDEFC,0xE927,0xF26A,0xF46A,0xEC8B,0xDD28, + 0xCB86,0xC100,0xBFF2,0xC296,0xD33D,0xEA6D,0x0176,0x143C, + 0x1ED4,0x20B7,0x1DC4,0x1974,0x1745,0x18E7,0x1DA0,0x22DD, + 0x26C8,0x291D,0x2AA5,0x2C26,0x2B74,0x26D3,0x1C48,0x0CE5, + 0xFAC5,0xEA28,0xDE65,0xD91C,0xDA6D,0xE005,0xE81C,0xEE5D, + 0xED86,0xE8D5,0xE0E2,0xD8A3,0xD3A1,0xD5F6,0xDFD2,0xEEA1, + 0xFDCB,0x09C7,0x1206,0x167A,0x18CD,0x1AD7,0x1C9A,0x1D1B, + 0x1B9A,0x1897,0x15E4,0x1640,0x1915,0x1AE5,0x1A41,0x17DC, + 0x11CA,0x085A,0xFCB3,0xF0DA,0xE71A,0xE0A9,0xDEA7,0xE0D5, + 0xE594,0xEA39,0xECCF,0xEBD0,0xE922,0xE63C,0xE567,0xE6E3, + 0xEB28,0xF1E8,0xFAA6,0x02B5,0x08CB,0x1058,0x15FC,0x17D6, + 0x174B,0x15D2,0x137B,0x114E,0x0F9B,0x0EAC,0x0DA5,0x0C9B, + 0x0B72,0x09CF,0x0673,0x014B,0xFB16,0xF2E7,0xEB4D,0xE534, + 0xE2A7,0xE3A6,0xE632,0xE8F4,0xEB58,0xED62,0xEECE,0xEFBC, + 0xF05D,0xF0B1,0xF254,0xF4E4,0xF8ED,0xFE4D,0x0546,0x0BC4, + 0x0FBF,0x118C,0x11E5,0x10C0,0x0F1F,0x0D11,0x0AD0,0x0870, + 0x067A,0x04DB,0x0407,0x03CF,0x0314,0xFFFA,0xFAEC,0xF580, + 0xF0CC,0xEDDC,0xEBCC,0xEA9E,0xEAA4,0xEC6A,0xEE5C,0xF0B8, + 0xF366,0xF5D4,0xF77D,0xF7CB,0xF8BD,0xFAF3,0xFE0B,0x0161, + 0x042D,0x06D9,0x0975,0x0BD2,0x0E2E,0x0FD5,0x0F66,0x0C3D, + 0x0A63,0x066F,0x02E0,0x02C3,0x01C2,0x0139,0x001C,0xFE00, + 0xFB31,0xF8D9,0xF691,0xF4DE,0xF30A,0xF1F9,0xF148,0xF1D4, + 0xF293,0xF379,0xF38D,0xF016,0xE74E,0xD578,0xC1E0,0xBF2B, + 0xBF6E,0xBF58,0xC0D0,0xBFE2,0xD035,0x11FC,0x3AF7,0x3CAE, + 0x3A84,0x179C,0xF11F,0xE3F7,0xF436,0x1E12,0x3E1D,0x3EA1, + 0x3F40,0x3F65,0x3F6A,0x3EAF,0x3F63,0x3283,0x1BF4,0x0C90, + 0x011B,0xF831,0xF193,0xEEAB,0xF002,0xF5DD,0xFCFD,0xFC18, + 0xECA0,0xCEB1,0xBFB9,0xC096,0xC10E,0xC0E5,0xD99B,0x04D4, + 0x214F,0x2E68,0x2C80,0x21E2,0x15C2,0x0DAE,0x0C9E,0x1588, + 0x2686,0x38DD,0x3EFA,0x3E8B,0x3EB8,0x3F08,0x3A76,0x2BBC, + 0x1C4A,0x0B44,0xF905,0xE687,0xDA6A,0xD89C,0xDFBD,0xEADF, + 0xF37F,0xF3F5,0xEAC5,0xDA90,0xC82F,0xC041,0xC06A,0xC5BD, + 0xDA25,0xF1F6,0x0847,0x1875,0x1FD0,0x1FEE,0x1BE3,0x182E, + 0x1653,0x182B,0x1C6D,0x22B3,0x2787,0x2982,0x2AD7,0x2ACA, + 0x28CC,0x22AD,0x1787,0x073A,0xF63C,0xE712,0xDD06,0xDA4A, + 0xDD99,0xE4B4,0xEC66,0xF058,0xEE0B,0xE7B2,0xDEF8,0xD7BA, + 0xD5DE,0xDAF4,0xE5A1,0xF37C,0x01A6,0x0D0A,0x152C,0x19C2, + 0x1C3B,0x1D06,0x1CE6,0x1C03,0x1A7A,0x17E5,0x1606,0x1636, + 0x186B,0x1B88,0x1BDF,0x17FC,0x1064,0x05AF,0xF92C,0xEE14, + 0xE615,0xE14E,0xE046,0xE2F3,0xE80D,0xED83,0xF007,0xEE6A, + 0xEA8E,0xE764,0xE78F,0xEB40,0xF12F,0xF7F9,0xFEF5,0x05D1, + 0x0C2D,0x1260,0x17E1,0x1B5D,0x1BD2,0x18E8,0x1458,0x10E2, + 0x0F40,0x0EC5,0x0E44,0x0DE3,0x0D9C,0x0C06,0x0883,0x03B4, + 0xFA85,0xF29B,0xEE41,0xE8BB,0xE669,0xE7C6,0xEAC8,0xEDB1, + 0xEF69,0xF08A,0xF271,0xF407,0xF4CC,0xF5DE,0xF7AE,0xFAAF, + 0xFECF,0x043D,0x0989,0x0EE9,0x1348,0x1602,0x15F5,0x141D, + 0x1132,0x0DF4,0x0B3D,0x0977,0x08C9,0x0885,0x078D,0x0573, + 0x024B,0xFF6A,0xFC01,0xF7B9,0xF37B,0xF023,0xEE08,0xED61, + 0xEE43,0xEFB6,0xF1EA,0xF491,0xF6CE,0xF8AB,0xF9D5,0xFBD3, + 0xFDC2,0xFECE,0x000A,0x02C1,0x0672,0x09F2,0x0D2C,0x0F7A, + 0x107A,0x0F94,0x0D1A,0x0ABC,0x08ED,0x07AB,0x0836,0x069A, + 0x0488,0x02A7,0xFFE7,0xFCFD,0xFB83,0xFAA3,0xF966,0xF6FC, + 0xF4AE,0xF2E4,0xF25A,0xF305,0xF54E,0xF793,0xF78A,0xF1DE, + 0xE56E,0xD001,0xC03F,0xC011,0xBF9C,0xBF49,0xC10A,0xBF74, + 0xDE50,0x238E,0x3D89,0x3CAB,0x33DC,0x0A49,0xEA24,0xE5BA, + 0xFDE7,0x2A21,0x3F99,0x3E0F,0x3ECA,0x3ED3,0x3EB8,0x3E53, + 0x3D8F,0x2D0A,0x184D,0x0927,0xFE84,0xF73F,0xF12E,0xEEFB, + 0xF29D,0xFA34,0xFF1A,0xF9C5,0xE5C9,0xC7DE,0xBE7B,0xBF92, + 0xBF69,0xC254,0xE414,0x0D9E,0x27A0,0x303D,0x29D6,0x1C20, + 0x0FBD,0x0A8C,0x0F02,0x1B78,0x2CA6,0x3BB7,0x3E1F,0x3DE5, + 0x3DE3,0x3E04,0x3587,0x266B,0x16EF,0x04DD,0xF243,0xE231, + 0xD7CC,0xD74D,0xDFD7,0xEC23,0xF3F8,0xF131,0xE430,0xD0E8, + 0xC147,0xBF42,0xBEE9,0xC835,0xDFCB,0xF640,0x0922,0x15CF, + 0x1B96,0x1BA9,0x1831,0x1437,0x132F,0x1623,0x1AEA,0x1FAA, + 0x23B7,0x25E2,0x2667,0x25F7,0x239F,0x1D77,0x1218,0x01DB, + 0xF028,0xE070,0xD6F3,0xD600,0xDC5C,0xE597,0xEAB5,0xEB07, + 0xE84B,0xDFB6,0xD9B0,0xD577,0xD524,0xDA1C,0xE48C,0xF156, + 0xFF40,0x0B9D,0x13CB,0x187E,0x1A53,0x1991,0x1805,0x16B6, + 0x158B,0x14D8,0x1375,0x139D,0x15BA,0x1850,0x18D9,0x14EF, + 0x0C67,0x0086,0xF3BE,0xE87E,0xE17C,0xDF50,0xE0AA,0xE465, + 0xE7D1,0xEAFB,0xECB0,0xEBA0,0xE93E,0xE6BC,0xE6D2,0xE9E6, + 0xEEC1,0xF5A7,0xFE1D,0x0625,0x0D8B,0x134D,0x16EC,0x18CB, + 0x18B2,0x1681,0x12D6,0x0EEF,0x0C81,0x0C2C,0x0C11,0x0CD5, + 0x0D10,0x0B96,0x07B2,0x0091,0xF7B7,0xEF66,0xE912,0xE4B0, + 0xE255,0xE52B,0xE9A3,0xED8B,0xEF13,0xEF59,0xEFDA,0xF098, + 0xF1D1,0xF312,0xF579,0xF9BA,0xFE6B,0x033E,0x0838,0x0D7A, + 0x11A3,0x1367,0x125B,0x0FEF,0x0EE7,0x0D76,0x0B08,0x07E1, + 0x05C3,0x0410,0x0346,0x0398,0x02EC,0x0046,0xFB8B,0xF506, + 0xEF36,0xEBDE,0xEAD0,0xEBC2,0xEDEA,0xEFFF,0xF26A,0xF530, + 0xF7C3,0xF961,0xFA04,0xFB75,0xFC06,0xFCD0,0x0010,0x04D1, + 0x08E2,0x0ADF,0x0B44,0x0BE2,0x0D2D,0x0E64,0x0ECB,0x0DB7, + 0x0AEA,0x0776,0x0448,0x01F9,0x0181,0x01A0,0x0178,0x005D, + 0xFDC1,0xFAED,0xF7B9,0xF489,0xF26F,0xF274,0xF402,0xF5ED, + 0xF708,0xF470,0xEC09,0xDCDA,0xC7DD,0xC02B,0xC0C9,0xC021, + 0xC0AB,0xC246,0xC2C5,0xEE7A,0x2F29,0x3E32,0x3E67,0x2C90, + 0x01BA,0xE8CD,0xEB2E,0x09EA,0x3505,0x407D,0x3F27,0x4013, + 0x3FD9,0x3F6B,0x3FC0,0x3C62,0x260D,0x125D,0x064E,0xFD86, + 0xF682,0xF130,0xEFE3,0xF334,0xF92E,0xFB9C,0xF3F4,0xDBFB, + 0xC2D1,0xBFF3,0xC0EF,0xC04D,0xC94D,0xF1C4,0x1716,0x2CBB, + 0x2FD5,0x2A28,0x1E3D,0x12F5,0x0FBD,0x148B,0x2183,0x341F, + 0x3F3D,0x3F3B,0x3F8C,0x3F75,0x3EA6,0x3374,0x2414,0x1407, + 0x01C6,0xEF29,0xDFE1,0xD81F,0xDA47,0xE43D,0xEF06,0xF37A, + 0xED75,0xDEBA,0xCD07,0xC114,0xC004,0xC0D3,0xCE5C,0xE5A0, + 0xFD22,0x1117,0x1D23,0x2115,0x1ECB,0x19C6,0x15B9,0x1610, + 0x1A3B,0x1FF9,0x2505,0x292C,0x2B84,0x2B98,0x298F,0x24C3, + 0x1C6A,0x0F1F,0xFD71,0xEBCF,0xDE76,0xD7CD,0xD886,0xDE8F, + 0xE5F9,0xEB23,0xEB1E,0xE623,0xDEC7,0xD8C2,0xD6E7,0xD767, + 0xDE31,0xEA53,0xF8F7,0x071C,0x1216,0x1872,0x1B50,0x1BE8, + 0x1A62,0x18AD,0x1784,0x167F,0x1639,0x165E,0x1723,0x181A, + 0x17F6,0x15AE,0x112A,0x08A7,0xFC24,0xEEF0,0xE509,0xDE71, + 0xDC17,0xDE4C,0xE234,0xE693,0xE993,0xEA19,0xE847,0xE4A6, + 0xE22D,0xE383,0xE7DC,0xEEAB,0xF678,0xFF0B,0x06CC,0x0CF3, + 0x1133,0x1415,0x14E0,0x13F2,0x1298,0x1004,0x0D7D,0x0BBC, + 0x09CF,0x091E,0x0915,0x094E,0x075C,0x0247,0xFA94,0xF241, + 0xEACC,0xE442,0xE0F1,0xE14A,0xE389,0xE697,0xE93A,0xEBA6, + 0xED79,0xEE78,0xEF0C,0xEFD2,0xF1B7,0xF50B,0xF8AE,0xFD0B, + 0x0225,0x0757,0x0C32,0x0EFC,0x10A4,0x10AB,0x0FBC,0x0D79, + 0x0A1D,0x0799,0x0531,0x0380,0x027B,0x0181,0x004D,0xFE19, + 0xFAA6,0xF660,0xF1F1,0xEE6D,0xEBC3,0xE9E1,0xE9A2,0xEBA9, + 0xEEB4,0xF1CD,0xF3F6,0xF4FA,0xF5ED,0xF788,0xF9C1,0xFC1E, + 0xFEA9,0x00CF,0x02BE,0x052A,0x0809,0x0B60,0x0DF7,0x0EA6, + 0x0D12,0x0B35,0x0845,0x05DC,0x0417,0x02E1,0x00DC,0x010D, + 0xFEFD,0xFC6D,0xFBF8,0xF9B0,0xF6B4,0xF3F6,0xF23C,0xF18A, + 0xF228,0xF2DB,0xF444,0xF5F8,0xF661,0xF2EA,0xEA34,0xD990, + 0xC518,0xBF2C,0xBF6A,0xBF3E,0xC045,0xC04F,0xC87C,0x0371, + 0x3803,0x3CAE,0x3C90,0x20FE,0xF6A0,0xE39E,0xEE03,0x1416, + 0x3AC2,0x3F5C,0x3EF2,0x3F6A,0x3F7C,0x3ED0,0x3F6F,0x3734, + 0x202C,0x0F1E,0x03EC,0xFAA6,0xF36A,0xEF17,0xEFC5,0xF5FE, + 0xFD1C,0xFD66,0xF174,0xD5A7,0xC04B,0xC043,0xC11D,0xBFF3, + 0xD1BF,0xFDBD,0x1F16,0x2FD4,0x2FDF,0x24E0,0x1662,0x0BC1, + 0x0AA0,0x13D0,0x2298,0x34F1,0x3E9C,0x3E72,0x3E6E,0x3ED9, + 0x3C05,0x2EE9,0x1FCE,0x0EED,0xFBFC,0xEA63,0xDC63,0xD66F, + 0xDB14,0xE807,0xF2AF,0xF5C1,0xEE5C,0xDD74,0xC973,0xBFF8, + 0xC04D,0xC34D,0xD65D,0xEEED,0x0542,0x160F,0x1E2C,0x1FCE, + 0x1D64,0x1992,0x1754,0x1901,0x1D46,0x222B,0x26A7,0x2963, + 0x2B11,0x2B38,0x2A9E,0x262B,0x1BBF,0x0D8B,0xFBCE,0xEA4C, + 0xDD5D,0xD84C,0xDB66,0xE36D,0xEBCA,0xF010,0xEE42,0xE7CC, + 0xDF7D,0xD8D0,0xD6EF,0xDA6B,0xE406,0xF128,0xFE93,0x09FC, + 0x1265,0x179F,0x1AC7,0x1BB0,0x1C42,0x1BAA,0x199D,0x1759, + 0x15FF,0x16DE,0x180C,0x190C,0x193C,0x179C,0x1248,0x089F, + 0xFC30,0xF02B,0xE706,0xE107,0xDF69,0xE287,0xE7CD,0xEC06, + 0xECD8,0xEB6E,0xE9F7,0xE8D2,0xE83A,0xE8F3,0xEC72,0xF30B, + 0xFAC9,0x0207,0x0992,0x10D2,0x15F8,0x1864,0x1812,0x1666, + 0x141C,0x1110,0x0E4F,0x0CB0,0x0C9D,0x0D9E,0x0DE6,0x0C66, + 0x081F,0x01C8,0xFAA6,0xF30E,0xEC8B,0xE88B,0xE793,0xE6BF, + 0xE73E,0xEB8E,0xEDA1,0xEF75,0xF121,0xF1B8,0xF1F2,0xF291, + 0xF465,0xF738,0xFBE3,0x0149,0x05ED,0x0ACC,0x0EB1,0x11BD, + 0x132F,0x1292,0x0F66,0x0B45,0x0842,0x06B4,0x060B,0x05EF, + 0x0511,0x03D5,0x01BB,0xFE75,0xFA3B,0xF5A0,0xF17D,0xEDCB, + 0xEB26,0xEA9F,0xEB59,0xED4D,0xF055,0xF38F,0xF627,0xF7A0, + 0xF85B,0xF8AC,0xFA25,0xFC27,0xFDF1,0x001A,0x0378,0x078E, + 0x0B56,0x0E06,0x0F9C,0x0F7A,0x0D49,0x09A5,0x061B,0x040F, + 0x034D,0x0326,0x0213,0x006A,0xFEE4,0xFFA8,0xFD76,0xFAAD, + 0xF865,0xF622,0xF3C1,0xF152,0xF046,0xF19F,0xF3C4,0xF437, + 0xF02B,0xE589,0xD1C3,0xC0E5,0xBFE7,0xBF96,0xBFB6,0xC14E, + 0xBF77,0xD344,0x16E8,0x3C8D,0x3CA1,0x3794,0x116D,0xED0D, + 0xE3AD,0xF689,0x21F0,0x3EC6,0x3E07,0x3ECD,0x3F0D,0x3ECC, + 0x3E50,0x3EBE,0x3134,0x19E9,0x0A10,0xFE26,0xF464,0xED31, + 0xEB97,0xEEFD,0xF454,0xF84C,0xF655,0xE5C9,0xC94F,0xBEBE, + 0xBFDF,0xC031,0xC09D,0xDBE0,0x06A3,0x22A0,0x2E73,0x2AB4, + 0x1EB0,0x11CB,0x0C00,0x0F02,0x198E,0x29ED,0x3A03,0x3DF8, + 0x3DE2,0x3DC6,0x3E0F,0x387C,0x2983,0x1941,0x0740,0xF370, + 0xE2D6,0xD7DD,0xD60C,0xDDC3,0xE9E9,0xF18B,0xEF3F,0xE34F, + 0xD264,0xC323,0xBEFF,0xBEB8,0xC626,0xDB7D,0xF220,0x06CC, + 0x15A0,0x1D44,0x1E68,0x1B08,0x16BE,0x14E6,0x1706,0x1C05, + 0x2154,0x2566,0x27F4,0x2944,0x2895,0x2502,0x1E5B,0x1368, + 0x03B0,0xF162,0xE184,0xD866,0xD6FD,0xDAE8,0xE0D5,0xE674, + 0xE95D,0xE785,0xE1E1,0xDA7F,0xD53A,0xD361,0xD7CA,0xE285, + 0xEE65,0xFE4B,0x0B62,0x12A5,0x16C4,0x1943,0x1A9E,0x1AA5, + 0x18D0,0x1664,0x1467,0x137F,0x1425,0x165D,0x19AB,0x19B2, + 0x152D,0x0C32,0x0165,0xF5EC,0xEBA4,0xE416,0xDF87,0xDEB8, + 0xE10E,0xE537,0xE94F,0xEB7F,0xEB47,0xE937,0xE71F,0xE68A, + 0xE8BB,0xED84,0xF415,0xFB43,0x037B,0x0B08,0x1170,0x1611, + 0x18A2,0x18BA,0x16A3,0x132A,0x0FAA,0x0D6C,0x0C57,0x0B82, + 0x0B25,0x0AC9,0x097F,0x068A,0x00DA,0xF8EA,0xF061,0xE8CC, + 0xE4E0,0xE488,0xE694,0xE968,0xEB15,0xEC74,0xECA4,0xECA5, + 0xEF07,0xF1A9,0xF3A1,0xF55A,0xF724,0xFAE2,0x006C,0x06DC, + 0x0C34,0x0F49,0x114E,0x125E,0x11D9,0x0FA2,0x0CD1,0x0927, + 0x06F6,0x0508,0x0386,0x03F0,0x03A9,0x0131,0xFD76,0xF923, + 0xF492,0xF0CC,0xEE7B,0xECD7,0xEBBD,0xEBEA,0xEDB1,0xF0F9, + 0xF469,0xF6C5,0xF8BF,0xFA29,0xFA26,0xFAF6,0xFCF7,0x009B, + 0x0462,0x0791,0x0B4C,0x0D3B,0x0DFF,0x0F34,0x0EDE,0x0D57, + 0x0AFD,0x085B,0x0605,0x041D,0x0321,0x0269,0x01A9,0xFFD5, + 0xFD9C,0xFBC6,0xF9CC,0xF78B,0xF554,0xF321,0xF1F7,0xF220, + 0xF448,0xF692,0xF938,0xFA46,0xF77C,0xEF99,0xE4F0,0xD8E7, + 0xCBAE,0xC1F1,0xC0F2,0xC3AB,0xD8D0,0xF8D8,0x1799,0x2BA2, + 0x2D16,0x1E46,0x08EE,0xF955,0xF76B,0x045F,0x18AC,0x2C67, + 0x3AF1,0x3F78,0x3F97,0x3985,0x2D28,0x1F3A,0x10B7,0x04F5, + 0xFDC4,0xF9CD,0xF797,0xF5FA,0xF5CB,0xF805,0xFBF1,0xFEF4, + 0xFC73,0xF311,0xE3B9,0xD4E1,0xCDC9,0xD35D,0xE3F6,0xF954, + 0x0C49,0x1898,0x1C75,0x19AA,0x1330,0x0DA0,0x09B2,0x073B, + 0x0CDF,0x14D0,0x1CB3,0x23B6,0x2705,0x24CF,0x1EC7,0x16E8, + 0x0EA2,0x06C3,0xFE5D,0xF549,0xED31,0xE8AF,0xE9E7,0xEF91, + 0xF639,0xFA0A,0xF928,0xF334,0xEB54,0xE3DB,0xE050,0xE1A4, + 0xE768,0xF19D,0xFD86,0x08B1,0x10AE,0x1390,0x124C,0x0EE6, + 0x0B0C,0x092E,0x093F,0x0BC7,0x0F92,0x1245,0x12BF,0x11F8, + 0x1068,0x0DF6,0x0AA5,0x0461,0xFCED,0xF582,0xEE82,0xEA30, + 0xE9A7,0xEC4B,0xF103,0xF557,0xF75D,0xF602,0xF29A,0xEE85, + 0xEB83,0xEB52,0xEEBE,0xF54F,0xFE50,0x0604,0x09D6,0x0C67, + 0x0DEB,0x0DD0,0x0DBE,0x0C11,0x0A87,0x09F7,0x09AE,0x095B, + 0x0943,0x094F,0x095C,0x0912,0x0787,0x0439,0xFF14,0xF85C, + 0xF215,0xEF0A,0xEE6A,0xEEC0,0xF126,0xF53E,0xF760,0xF77C, + 0xF5EE,0xF402,0xF371,0xF3AF,0xF516,0xF7F6,0xFBF0,0x0019, + 0x03CF,0x063B,0x0854,0x091C,0x0893,0x077F,0x06F8,0x075D, + 0x0724,0x04A8,0x0105,0x00D0,0x01E4,0x0278,0x020D,0x0073, + 0xFD62,0xF984,0xF553,0xF1C7,0xEFCA,0xF03E,0xF251,0xF46C, + 0xF5C6,0xF651,0xF632,0xF589,0xF576,0xF625,0xF770,0xF95A, + 0xFB7F,0xFD8A,0x00A4,0x033A,0x0482,0x0518,0x0515,0x04A0, + 0x043A,0x040B,0x0386,0x023B,0x0090,0xFE84,0xFDDA,0xFE24, + 0xFDFA,0xFD14,0xFAF2,0xF8DF,0xF728,0xF573,0xF3FD,0xF315, + 0xF23C,0xF13F,0xF07D,0xEFB7,0xEF2E,0xEEE2,0xEE8B,0xEDB6, + 0xECE0,0xED60,0xEF45,0xF0C0,0xF16F,0xF22B,0xF307,0xF3C3, + 0xF46B,0xF4B7,0xF562,0xF52C,0xF3EB,0xF2EE,0xF20A,0xF1C2, + 0xF19F,0xF0F0,0xEFF3,0xEFAB,0xEF39,0xEDDA,0xEF44,0xED8D, + 0xEC23,0xEC9A,0xEB71,0xEB06,0xEB00,0xEAEB,0xEAB1,0xEAEF, + 0xEAAB,0xEA7E,0xE9FE,0xEA3D,0xEA0C,0xE9CE,0xE9B7,0xE98F, + 0xE9B6,0xE9B7,0xE979,0xE97F,0xE9B8,0xE902,0xE94E,0xE8F3, + 0xE8B3,0xE89E,0xE873,0xE8C9,0xE8BE,0xE8B9,0xE915,0xE964, + 0xE969,0xE98F,0xEA1A,0xEA35,0xEA21,0xEA11,0xEA87,0xEAE5, + 0xEB26,0xEB3C,0xEBC7,0xEC6E,0xED05,0xED74,0xEDAE,0xEDCE, + 0xEE46,0xEE84,0xEF04,0xEFDE,0xF03A,0xF089,0xF10F,0xF17C, + 0xF1E6,0xF262,0xF27D,0xF2AA,0xF2F2,0xF30C,0xF190,0xF0F8, + 0xF203,0xF29B,0xF2EC,0xF350,0xF3CD,0xF44F,0xF51E,0xF584, + 0xF5B1,0xF649,0xF699,0xF732,0xF7ED,0xF8C1,0xF9A1,0xFA6E, + 0xFADE,0xFA68,0xFAB1,0xFC42,0xFD2F,0xFD5C,0xFDA1,0xFE44, + 0xFEB1,0xFF29,0xFFC7,0xFFDF,0x0014,0x004B,0x00BC,0x012D, + 0x0174,0x01C5,0x0269,0x02B7,0x02B0,0x02FD,0x0330,0x0384, + 0x03BC,0x0470,0x0574,0x049B,0x0485,0x04E8,0x05BE,0x066E, + 0x06AC,0x06C2,0x06F4,0x0745,0x07C5,0x08F2,0x09DF,0x0A07, + 0x0A90,0x0B1B,0x0B00,0x0B00,0x0B0D,0x0B72,0x0B9F,0x0B51, + 0x0B6A,0x0B9D,0x0B92,0x0B32,0x0B6D,0x0BD6,0x0C63,0x0C78, + 0x0C5F,0x0C00,0x0C0F,0x0C58,0x0C73,0x0C8E,0x0CE6,0x0D3F, + 0x0D4B,0x0D42,0x0D3D,0x0D5B,0x0D54,0x0D34,0x0D45,0x0D3C, + 0x0D89,0x0DC6,0x0DE0,0x0DCA,0x0DDE,0x0DC2,0x0D9F,0x0DAD, + 0x0D8F,0x0DB6,0x0DF7,0x0DDA,0x0D53,0x0D60,0x0D94,0x0D95, + 0x0DDF,0x0E22,0x0E2C,0x0DEF,0x0DB9,0x0DCE,0x0DD3,0x0DA4, + 0x0D24,0x0D96,0x0E3F,0x0E32,0x0E18,0x0ED7,0x0D00,0x0D00, + 0x0EE1,0x0DF3,0x0DAD,0x0DEB,0x0D5A,0x0DA5,0x0D6D,0x0D53, + 0x0D92,0x0DDA,0x0D99,0x0D42,0x0CEF,0x0CD7,0x0D0A,0x0D32, + 0x0D27,0x0CD2,0x0CE1,0x0CE0,0x0CB0,0x0C65,0x0CAB,0x0C4C, + 0x0C6B,0x0CA8,0x0CCC,0x0CC2,0x0C2A,0x0C19,0x0C03,0x0C38, + 0x0C42,0x0BE0,0x0BBF,0x0B9E,0x0B7E,0x0B1E,0x0B38,0x0B7E, + 0x0B87,0x0B3C,0x0B4D,0x0B61,0x0B2A,0x0ADD,0x0A97,0x0AB9, + 0x0AE2,0x0AAF,0x0ACD,0x0AEF,0x0B05,0x0A73,0x09F8,0x099E, + 0x095D,0x096D,0x09BF,0x09D6,0x0BCC,0x0BA2,0x0ACB,0x0AB8, + 0x0AA7,0x0A9A,0x0A9D,0x0A41,0x09DA,0x09FD,0x09FF,0x09D5, + 0x09B5,0x0987,0x096D,0x0944,0x08D9,0x08A8,0x08C3,0x0849, + 0x0844,0x08F3,0x0870,0x077E,0x07E0,0x082F,0x077C,0x0727, + 0x0720,0x0733,0x06EE,0x06A4,0x0657,0x064E,0x05E2,0x05C9, + 0x0612,0x0610,0x05F9,0x05DF,0x05CC,0x056B,0x057A,0x0556, + 0x0589,0x043C,0x0445,0x0577,0x0600,0x05F4,0x05D9,0x058E, + 0x052D,0x053B,0x0527,0x0546,0x049C,0x036F,0x0349,0x0306, + 0x025E,0x0279,0x02B1,0x0278,0x0274,0x0232,0x023E,0x0259, + 0x0236,0x0249,0x021B,0x020F,0x0286,0x029B,0x0251,0x020D, + 0x0293,0x0274,0x029D,0x02BF,0x02EA,0x029F,0x0295,0x0273, + 0x01D6,0x01FA,0x0189,0x019F,0x01BB,0x01DA,0x017C,0x015F, + 0x017F,0x0108,0x00FE,0x010A,0x01A0,0x017C,0x0127,0x00EE, + 0x00FF,0x00F9,0x00DD,0x011D,0x013D,0x013B,0x0115,0x00B6, + 0x0116,0x00FA,0x00E6,0x00EE,0x00E3,0x00B3,0x012F,0x0201, + 0x01E1,0x0174,0x0182,0x01B9,0x0123,0x019B,0x02CB,0x010A, + 0x0222,0x0210,0x01EC,0x0203,0x01E4,0x0184,0x01E7,0x01EB, + 0x0183,0x0190,0x015A,0x0196,0x014C,0x0169,0x017A,0x01A4, + 0x016D,0x014F,0x00E5,0x00F9,0x00F3,0x010C,0x00AF,0x009A, + 0x0104,0x014F,0x0118,0x010E,0x0136,0x012C,0x010E,0x00B2, + 0x0094,0x00A3,0x008B,0x0077,0xFF6A,0xFF4D,0xFF8E,0xFF52, + 0xFF91,0xFFB6,0xFFE0,0xFF9A,0xFF5F,0xFF99,0xFF57,0xFF5E, + 0xFF76,0xFFB0,0xFFDB,0xFF87,0xFF05,0xFF00,0xFED4,0xFEA9, + 0xFF25,0xFF78,0xFFB3,0xFF83,0xFF49,0xFEE0,0xFEF0,0xFF0F, + 0xFF19,0xFF0D,0xFF5C,0xFF6C,0xFF5B,0xFF53,0xFF51,0xFFA9, + 0x003E,0x0113,0x0171,0x01A8,0x011B,0x0112,0x011E,0x0177, + 0x010C,0x01F8,0x0390,0x0474,0x060F,0x0765,0x0818,0x081D, + 0x0879,0x08AE,0x091D,0x0941,0x0957,0x095A,0x08FB,0x086B, + 0x0829,0x0966,0x0B4B,0x0B8D,0x0BC3,0x0C05,0x0BF2,0x0C30, + 0x0D64,0x0E6A,0x0F19,0x1007,0x1089,0x0FA0,0x0D4E,0x0A1A, + 0x0673,0x02C5,0x0035,0x007E,0x05A2,0x0DDB,0x1706,0x1F2D, + 0x23AB,0x22D4,0x1DB2,0x1927,0x17AA,0x17C6,0x1B0B,0x1FEB, + 0x2488,0x2805,0x2933,0x27A3,0x242E,0x2002,0x1BA0,0x17B1, + 0x1400,0x119F,0x11A1,0x1263,0x12F0,0x13FE,0x1502,0x1561, + 0x15BC,0x14E0,0x128C,0x1077,0x0F67,0x0FDC,0x121A,0x1632, + 0x1B60,0x2018,0x2279,0x223F,0x1FAD,0x1C5A,0x195D,0x16EC, + 0x1505,0x1402,0x1485,0x143C,0x13E6,0x135F,0x131E,0x1171, + 0x0DDC,0x097D,0x05A0,0x0323,0x0281,0x0321,0x0462,0x0649, + 0x081C,0x09F4,0x0B56,0x0BF4,0x0C08,0x0B1A,0x09E7,0x0962, + 0x0969,0x0A67,0x0BA7,0x0D6C,0x0E4E,0x0EDF,0x0DE3,0x0BDC, + 0x08B1,0x04D9,0x015F,0xFFC7,0xFEA2,0xFE3C,0xFE05,0xFE59, + 0xFCB3,0xFBD8,0xFD1F,0xFBC1,0xFB8A,0xFB23,0xFA25,0xF971, + 0xFA03,0xFB9D,0xFD7F,0xFEEE,0x0096,0x01E9,0x01A9,0x0121, + 0xFFED,0xFEE4,0xFDDF,0xFC64,0xFB4D,0xFAC3,0xFACE,0xFB4C, + 0xFAEC,0xF9DB,0xF7C4,0xF539,0xF3AF,0xF27B,0xF1B7,0xF13E, + 0xF0FD,0xF17E,0xF2DE,0xF43F,0xF57C,0xF5EF,0xF59B,0xF524, + 0xF48D,0xF43D,0xF4C9,0xF5C0,0xF6DF,0xF835,0xF866,0xF7A4, + 0xF708,0xF65D,0xF566,0xF4C6,0xF36E,0xF1D6,0xF06B,0xEF06, + 0xEF18,0xEF24,0xEFF9,0xF02B,0xEF9E,0xF011,0xF2CA,0xF1DE, + 0xF017,0xEFBF,0xEF88,0xEFE5,0xF0CF,0xF2DA,0xF4AC,0xF50C, + 0xF3F2,0xF35F,0xF3A6,0xF3BE,0xF33A,0xF27B,0xF221,0xF1FA, + 0xF15C,0xF0D3,0xF0F7,0xF13A,0xEFF5,0xEE3D,0xEDBE,0xEDD1, + 0xED2F,0xEC7F,0xEBDF,0xEBBB,0xEC4D,0xEC8B,0xEC8B,0xED78, + 0xEE77,0xEF82,0xEFC9,0xEFDE,0xEF7E,0xEEF6,0xEF13,0xEFFA, + 0xF097,0xF13F,0xF1E0,0xF09D,0xEFA9,0xF0B2,0xF118,0xF10E, + 0xF0AC,0xEFFA,0xEF43,0xEEBE,0xEDF6,0xED40,0xED37,0xED12, + 0xEDAD,0xEE04,0xECF3,0xED34,0xECF7,0xECEC,0xECFB,0xEDD5, + 0xEEEE,0xEF83,0xEFD9,0xF019,0xF13A,0xF1F1,0xF201,0xF162, + 0xF125,0xF114,0xF0A6,0xF0B3,0xF114,0xF1D7,0xF1F8,0xF149, + 0xF0D6,0xF0BC,0xF0CE,0xF07E,0xEFD8,0xEFA6,0xEECD,0xED11, + 0xE903,0xE14E,0xD4A0,0xC38C,0xBE25,0xBEA4,0xBE7C,0xBFB9, + 0xBECC,0xCEA8,0x03EF,0x2FA2,0x3D4D,0x3786,0x19E3,0xFA3D, + 0xEA9F,0xF263,0x0BB3,0x2C27,0x3E00,0x3DC7,0x3DE7,0x3E62, + 0x3035,0x1689,0xFF7F,0xEB99,0xDC37,0xD1E2,0xCACF,0xC8F2, + 0xCCD8,0xD1A4,0xDD03,0xE912,0xEF89,0xEC13,0xDF68,0xCF4B, + 0xC583,0xC9D4,0xDEA7,0xFECF,0x2035,0x390C,0x3E67,0x3ED3, + 0x3592,0x2255,0x1358,0x09AA,0x063E,0x091C,0x0E24,0x1155, + 0x101E,0x08B0,0xFE77,0xF2DD,0xE77B,0xDC79,0xD28D,0xC97D, + 0xC2DD,0xC0A9,0xC7A4,0xD7A1,0xEBCA,0xFE31,0x08A5,0x0A7C, + 0x05A8,0xFEA8,0xF9D8,0xFB31,0x033D,0x1008,0x1DFB,0x28E0, + 0x2E44,0x2C75,0x22FF,0x1530,0x068A,0xFA2C,0xF19E,0xEC3C, + 0xE8E9,0xE6E1,0xE5F1,0xE5E8,0xE670,0xE71B,0xE725,0xE4A6, + 0xDFDD,0xDD2B,0xDBAC,0xDE35,0xE5BF,0xF177,0xFFEF,0x0EC1, + 0x1905,0x1CCE,0x1AEB,0x1534,0x0EB7,0x0A3F,0x0858,0x09AF, + 0x0C25,0x0E94,0x0DA4,0x08D8,0x0305,0xFC4D,0xF4FD,0xED56, + 0xE6DC,0xE23E,0xDEF6,0xDDA5,0xDF22,0xE3BD,0xEB1C,0xF2B8, + 0xF8AA,0xFC61,0xFD48,0xFC2F,0xFBC6,0xFD20,0x0116,0x06D2, + 0x0E6B,0x15A4,0x19D9,0x1BC0,0x18E9,0x123D,0x0B65,0x0497, + 0xFF3E,0xFB62,0xF8F9,0xF734,0xF63A,0xF51F,0xF407,0xF2E2, + 0xF168,0xF06F,0xF043,0xEEED,0xED8D,0xECC6,0xEF1E,0xF528, + 0xFCC9,0x052A,0x0BDB,0x0FB4,0x101A,0x0E1F,0x0C62,0x0B47, + 0x0B53,0x0C00,0x0C46,0x0C6D,0x0C8D,0x0B66,0x0883,0x0456, + 0xFF77,0xFADE,0xF6C6,0xF320,0xF0BC,0xEF59,0xEF5A,0xF08C, + 0xF230,0xF449,0xF76C,0xFA7B,0xFC40,0xFC02,0xFBAD,0xFC8E, + 0xFF2A,0x0252,0x06A5,0x0B1C,0x0ED1,0x1061,0x0EFB,0x0CD8, + 0x0AA1,0x07F2,0x04F8,0x023A,0x0104,0xFFFA,0xFE36,0xFBC4, + 0xFA41,0xF919,0xF7B1,0xF5A6,0xF402,0xF384,0xF3C1,0xF3DC, + 0xF391,0xF83A,0xFC32,0xFEF1,0x0273,0x0513,0x06A7,0x06F8, + 0x0752,0x0835,0x085B,0x0818,0x0875,0x092B,0x0934,0x089B, + 0x075A,0x050F,0x0249,0xFFB3,0xFD1B,0xFAC1,0xF8CC,0xF738, + 0xF61F,0xF65C,0xF734,0xF5F6,0xF0B1,0xE58A,0xD173,0xC0FA, + 0xBFBB,0xBF76,0xBF78,0xC169,0xC0CC,0xE682,0x2B40,0x3ED0, + 0x3C33,0x3EA2,0x2905,0x03FB,0xF7C2,0x05EF,0x2992,0x3F65, + 0x3E67,0x3F0D,0x3EBB,0x3E95,0x3B06,0x1F11,0x0093,0xE933, + 0xD837,0xCD72,0xC77C,0xC67C,0xCB7F,0xD8AA,0xEA45,0xF95B, + 0x0030,0xF95F,0xE634,0xD0E2,0xC6CD,0xD29A,0xF257,0x1E7F, + 0x3CF7,0x3F5B,0x3F7C,0x3F4A,0x3FE9,0x3437,0x202A,0x14EE, + 0x11BF,0x1407,0x1A34,0x1D86,0x1980,0x0EEB,0x0181,0xF3BD, + 0xE769,0xDBBF,0xCF5D,0xC394,0xBFBA,0xBF86,0xC83B,0xDF63, + 0xFA0B,0x103C,0x1A7C,0x195C,0x111B,0x0895,0x0417,0x0679, + 0x1094,0x1FF9,0x2F4C,0x397B,0x3DDB,0x39C3,0x2D71,0x1BD0, + 0x0907,0xF948,0xEE89,0xE82D,0xE41B,0xE200,0xE106,0xE240, + 0xE5A2,0xE78F,0xE742,0xE48E,0xDFA2,0xDB5D,0xDAD8,0xE03F, + 0xEBE0,0xFC17,0x0D40,0x1BA3,0x25A3,0x28ED,0x255F,0x1E18, + 0x163C,0x101A,0x0C5E,0x0B54,0x0CEE,0x0F06,0x0F4F,0x0BE6, + 0x04A4,0xFB29,0xF0F3,0xE66B,0xDDE8,0xD897,0xD624,0xD700, + 0xDB1D,0xE283,0xEBD7,0xF47E,0xFA27,0xFDAB,0xFEF5,0xFE96, + 0xFE7D,0x00F4,0x05DF,0x0C81,0x1442,0x1B02,0x1F22,0x1F2F, + 0x1B80,0x14CA,0x0C78,0x03CF,0xFB94,0xF5E1,0xF250,0xF04D, + 0xEF3C,0xEFE5,0xF0FF,0xF0A2,0xEE0E,0xE9EB,0xE631,0xE77B, + 0xE7B7,0xEA22,0xF0AA,0xF802,0xFFF2,0x0733,0x0D87,0x1290, + 0x14FD,0x12EF,0x0FCF,0x0C88,0x0B4A,0x0BB6,0x0C7B,0x0D30, + 0x0CFD,0x0AF2,0x0788,0x02B5,0xFD1A,0xF780,0xF1D5,0xED59, + 0xEA2B,0xE93B,0xEA9A,0xEDE0,0xF111,0xF43C,0xF767,0xF99F, + 0xFB77,0xFC8C,0xFE28,0x001E,0x02FE,0x0690,0x0AA1,0x0E55, + 0x1118,0x1304,0x130C,0x1091,0x0C9C,0x084F,0x0471,0x0100, + 0xFD8E,0xFB9C,0xFA22,0xF924,0xF85E,0xF6D3,0xF4F4,0xF2E7, + 0xF0C3,0xEFB5,0xF031,0xF193,0xF41D,0xF747,0xFA98,0xFC98, + 0xFF88,0x02A5,0x0562,0x0766,0x0783,0x062C,0x05C7,0x06CC, + 0x07BB,0x07F6,0x0758,0x0668,0x051A,0x0328,0xFFE2,0xFC00, + 0xF93C,0xF721,0xF35C,0xF187,0xF21F,0xF2BA,0xF135,0xEB2A, + 0xDE27,0xC94E,0xBF5C,0xC042,0xBFC1,0xC087,0xC153,0xC458, + 0xFA35,0x36B0,0x3E97,0x3DA6,0x3E22,0x1F80,0xFF77,0xFC6A, + 0x1296,0x3637,0x413A,0x3F61,0x3FD6,0x3F04,0x4000,0x36AC, + 0x16CD,0xF9C7,0xE230,0xD24A,0xC981,0xC5D2,0xC6ED,0xCD67, + 0xDA76,0xEB76,0xF9B1,0xFCB0,0xF25F,0xDEFB,0xCD4C,0xC990, + 0xDAFF,0xFE1C,0x2A37,0x4002,0x3FDA,0x4055,0x4065,0x3F42, + 0x2F11,0x1D30,0x142B,0x12D9,0x169F,0x1ACD,0x1ADE,0x1583, + 0x0A85,0xFC96,0xEDD6,0xE106,0xD5D2,0xC9D6,0xC10D,0xC0E4, + 0xC161,0xCE39,0xE653,0xFF32,0x127E,0x1B2E,0x196D,0x1087, + 0x0783,0x04A7,0x0A6B,0x16E5,0x2689,0x35AD,0x3E3C,0x3FB8, + 0x3844,0x27AC,0x1562,0x03B2,0xF584,0xEC90,0xE7C7,0xE407, + 0xE214,0xE15B,0xE28C,0xE500,0xE773,0xE7A0,0xE57B,0xDEB1, + 0xDABC,0xDD92,0xE45D,0xF1D5,0x02AE,0x13D0,0x21BD,0x29B8, + 0x2B39,0x26CE,0x1E7B,0x1545,0x0E6B,0x0C61,0x0E95,0x1197, + 0x12B4,0x107B,0x0A3D,0x01A3,0xF721,0xED7C,0xE59F,0xDECE, + 0xDA22,0xD810,0xD9CD,0xDFC1,0xE7CE,0xEFAE,0xF78B,0xFE53, + 0x02C9,0x03D9,0x02ED,0x027C,0x045D,0x0900,0x1051,0x193C, + 0x20B5,0x2466,0x2340,0x1DAE,0x1547,0x0B74,0x0196,0xFA5B, + 0xF6FA,0xF4DF,0xF3F4,0xF302,0xF186,0xF05B,0xEE19,0xEB91, + 0xEA01,0xE956,0xE96F,0xEA56,0xED73,0xF535,0xFD77,0x0568, + 0x0CCD,0x12B1,0x1640,0x170C,0x1533,0x122A,0x0F64,0x0DD8, + 0x0D8B,0x0E5D,0x0F84,0x1010,0x0DA7,0x083F,0x0130,0xFA7C, + 0xF4A0,0xF09F,0xEE8C,0xECC3,0xEB6A,0xEBA8,0xEDB6,0xF101, + 0xF558,0xF906,0xFABF,0xFBB7,0xFCE2,0xFE6E,0x0080,0x0342, + 0x0735,0x0B38,0x0F4C,0x11B2,0x1357,0x134B,0x0FE8,0x09FF, + 0x0487,0xFF57,0xFD39,0xFD29,0xFCB2,0xFBAA,0xFA38,0xF6F8, + 0xF426,0xF260,0xF1BD,0xF12F,0xF018,0xEF6D,0xF086,0xF2FE, + 0xF69E,0xFA3E,0xFF18,0x03EA,0x0632,0x06A1,0x0679,0x06AC, + 0x05E8,0x053F,0x05CC,0x079D,0x09BD,0x0A29,0x0852,0x0509, + 0x0159,0xFD23,0xF8F7,0xF67E,0xF5C5,0xF594,0xF464,0xF2F5, + 0xF246,0xF1B1,0xEF73,0xE7A0,0xD904,0xC4D4,0xBE02,0xBEA2, + 0xBE48,0xBF9A,0xBF51,0xCC3E,0x0D56,0x3BE9,0x3C06,0x3D26, + 0x3851,0x1310,0xF6A6,0xF83E,0x1448,0x37FC,0x3EB6,0x3DC5, + 0x3E23,0x3D72,0x3D8F,0x28DE,0x08B5,0xEEB7,0xD9F9,0xCCAE, + 0xC645,0xC477,0xC612,0xCCEE,0xDABF,0xEB20,0xF82D,0xFAA9, + 0xED6F,0xDA5F,0xC8FB,0xC78A,0xDD4B,0x0564,0x3091,0x3F2B, + 0x3E4B,0x3EB7,0x3F26,0x39A2,0x247D,0x14CF,0x0EF3,0x0F70, + 0x14EB,0x1A09,0x1A34,0x1366,0x05B0,0xF5E6,0xE854,0xDCDF, + 0xD24B,0xC6E8,0xBFFC,0xBFFB,0xC1F2,0xD309,0xECBD,0x05A5, + 0x16F9,0x1CE3,0x1818,0x0DAD,0x04CF,0x02C2,0x09E0,0x185D, + 0x29A6,0x38D3,0x3EA9,0x3E7B,0x341F,0x21BD,0x0E2F,0xFCA7, + 0xF11D,0xEB7A,0xE8B7,0xE6A7,0xE499,0xE308,0xE375,0xE671, + 0xE957,0xEA59,0xE77D,0xE1CD,0xDD37,0xDDF0,0xE55E,0xF2CC, + 0x062C,0x17E6,0x24D7,0x2AE4,0x29C0,0x22F3,0x1A36,0x1235, + 0x0D71,0x0CD4,0x0FCA,0x12EA,0x133D,0x0F3E,0x0773,0xFEDE, + 0xF661,0xED34,0xE442,0xDDE9,0xDA45,0xD8A3,0xDA9F,0xE14D, + 0xEACB,0xF3FE,0xFB8D,0xFFC9,0x01A0,0x0201,0x01F5,0x028E, + 0x0503,0x0A96,0x12AC,0x1ADD,0x20B8,0x2301,0x205D,0x195F, + 0x0FED,0x06E3,0x012A,0xFC03,0xF705,0xF3A1,0xF1F4,0xF0A5, + 0xEF9C,0xEE64,0xED66,0xEBF4,0xEA02,0xE919,0xE918,0xEB20, + 0xEFBC,0xF562,0xFC0D,0x0479,0x0CB2,0x1215,0x144F,0x1443, + 0x120C,0x0F33,0x0D6E,0x0DA8,0x0F2D,0x0FD9,0x0EDD,0x0C73, + 0x0919,0x04E4,0xFFBD,0xF9F8,0xF499,0xF09C,0xED99,0xEACC, + 0xEA5F,0xEC13,0xEF8C,0xF330,0xF651,0xF8DE,0xFB35,0xFC8A, + 0xFD7A,0xFEBD,0x0142,0x0592,0x0A55,0x0DFB,0x10A4,0x1281, + 0x1249,0x106A,0x0DB1,0x0A2D,0x0685,0x0310,0x003C,0xFDE1, + 0xFBD7,0xF974,0xF786,0xF6B1,0xF605,0xF535,0xF3EA,0xF1FB, + 0xF039,0xF01C,0xF2A7,0xF646,0xFA57,0xFECE,0x0247,0x02D9, + 0x066B,0x07ED,0x0833,0x093B,0x0973,0x0988,0x0997,0x0997, + 0x0928,0x0880,0x06FF,0x04B5,0x01CD,0xFF27,0xFC84,0xF9C5, + 0xF66B,0xF34B,0xF195,0xF1AB,0xF2C2,0xF2A8,0xEF62,0xE67F, + 0xD4F6,0xC1C1,0xBF40,0xBF99,0xBF36,0xC106,0xBFAF,0xD9B7, + 0x2062,0x3F0F,0x3BF1,0x3EC8,0x3065,0x09A2,0xF6B6,0x0040, + 0x2274,0x3DCB,0x3EAB,0x3EFC,0x3EDB,0x3E8D,0x3BC2,0x2322, + 0x0482,0xEA9D,0xD622,0xC9B2,0xC3EE,0xC372,0xC804,0xD16A, + 0xE015,0xF064,0xFB32,0xF8B9,0xEA51,0xD649,0xC834,0xCE59, + 0xE9A9,0x1449,0x3997,0x3F9E,0x3F7A,0x3F44,0x3FD6,0x35CB, + 0x2243,0x154A,0x0FEE,0x10DF,0x156A,0x196A,0x1899,0x10F9, + 0x038A,0xF542,0xE73F,0xDA29,0xCE56,0xC479,0xBFE7,0xBFA0, + 0xC4C7,0xDAC6,0xF505,0x0BB8,0x18E9,0x1A83,0x13B4,0x09D5, + 0x0384,0x04A7,0x0DFB,0x1B58,0x29F2,0x367E,0x3D7C,0x3B8F, + 0x2F9C,0x1C20,0x06A4,0xF677,0xEC53,0xE6A2,0xE3BD,0xE21A, + 0xE0CE,0xE079,0xE1DC,0xE4EE,0xE6AC,0xE52E,0xE00B,0xDB27, + 0xD919,0xDC75,0xE6EB,0xF66A,0x079F,0x1796,0x22D7,0x27A2, + 0x25C9,0x1EC3,0x14EE,0x0C6F,0x0805,0x07DE,0x0ADF,0x0D95, + 0x0D80,0x098B,0x01C2,0xF889,0xEE3A,0xE480,0xDCDF,0xD7F1, + 0xD5DA,0xD63F,0xD948,0xDF29,0xE73E,0xEFD6,0xF6AE,0xFB5B, + 0xFDEE,0xFE6C,0xFDA2,0xFDE8,0x00D3,0x07A5,0x108C,0x1856, + 0x1D12,0x1E65,0x1ACE,0x1314,0x097F,0x00CF,0xF9CD,0xF4BB, + 0xF14F,0xEEF4,0xEE88,0xEE9C,0xEE56,0xEC59,0xEA2B,0xE7F6, + 0xE68E,0xE617,0xE6D2,0xEA1F,0xEF00,0xF3D4,0xFCD7,0x0488, + 0x0C26,0x120D,0x125C,0x102F,0x0D98,0x0B9F,0x0B0C,0x0B5C, + 0x0C36,0x0CEB,0x0BDF,0x094F,0x05C7,0x01F9,0xFD59,0xF796, + 0xF1CF,0xECA7,0xE967,0xE8A0,0xEA20,0xECAA,0xF036,0xF3C0, + 0xF69B,0xF88F,0xF96C,0xFADE,0xFC3C,0xFEAE,0x0190,0x055F, + 0x09CF,0x0E2A,0x10C0,0x118B,0x10B3,0x0E66,0x0BA2,0x07FB, + 0x0403,0x001B,0xFD5B,0xFB9A,0xF9D9,0xF7DA,0xF6E9,0xF67B, + 0xF58A,0xF39C,0xF12A,0xEF67,0xEEFF,0xF091,0xF343,0xF69B, + 0xFB72,0xFFCD,0x02B7,0x04DF,0x0694,0x072B,0x05B5,0x053C, + 0x05DF,0x0674,0x0722,0x0751,0x06F7,0x067C,0x0520,0x028C, + 0xFF3F,0xFC10,0xF91C,0xF6C1,0xF49F,0xF3A0,0xF3B2,0xF3D7, + 0xF1D9,0xEA1A,0xDE16,0xCC7E,0xBFF0,0xBF8F,0xBF72,0xBFC3, + 0xC179,0xC1D3,0xEBB7,0x2F88,0x3F31,0x3CD0,0x3F49,0x2856, + 0x0461,0xFB60,0x0CB6,0x2FF7,0x4096,0x3F16,0x3FB6,0x3F48, + 0x3F5F,0x39EC,0x1D7B,0xFE75,0xE666,0xD620,0xCC51,0xC6D1, + 0xC544,0xC922,0xD465,0xE4E6,0xF4CC,0xFBBC,0xF559,0xE384, + 0xD0BB,0xC8EB,0xD554,0xF539,0x214D,0x3E98,0x4017,0x4044, + 0x401E,0x4046,0x3257,0x1E9D,0x14DA,0x12F3,0x167C,0x1B3E, + 0x1C75,0x183E,0x0E16,0xFF14,0xEEED,0xE0C1,0xD615,0xCC1C, + 0xC325,0xC0BF,0xC0F8,0xCAA6,0xE099,0xF992,0x0EC7,0x1A59, + 0x1AE6,0x12FE,0x090E,0x04F5,0x0898,0x1382,0x22A2,0x3237, + 0x3CDE,0x3F9C,0x394E,0x2A61,0x1825,0x0619,0xF799,0xEE31, + 0xE8FA,0xE5E5,0xE2B9,0xE061,0xDFFD,0xE24E,0xE5A9,0xE6DE, + 0xE5AD,0xE249,0xDE4B,0xDCCE,0xE17E,0xED7B,0xFCA7,0x0E96, + 0x1FA7,0x28B2,0x2B8F,0x282B,0x1F90,0x1620,0x0F5D,0x0CFB, + 0x0D9E,0x0FAE,0x1056,0x0E34,0x096F,0x017F,0xF7F5,0xEEE9, + 0xE6A8,0xDF62,0xD9B8,0xD638,0xD62B,0xD9CA,0xE181,0xEB3D, + 0xF4BD,0xFC07,0xFFFE,0x0158,0x0094,0x0061,0x0204,0x05DB, + 0x0CC6,0x1568,0x1CFD,0x2113,0x20C3,0x1C73,0x14A2,0x0AD0, + 0x01AB,0xFB0F,0xF773,0xF4F3,0xF273,0xF02F,0xEE1A,0xECA5, + 0xEB94,0xEAD3,0xEA73,0xE9E9,0xE967,0xE925,0xEAC2,0xEEF7, + 0xF5C9,0xFE33,0x070E,0x0EE3,0x1667,0x18B2,0x16D1,0x121C, + 0x0DEF,0x0BCC,0x0C38,0x0DFC,0x0EFE,0x0E89,0x0BF3,0x06EB, + 0x00BA,0xFA92,0xF4D4,0xEFE6,0xECD5,0xEB74,0xEC18,0xEC06, + 0xECC1,0xEEB4,0xF10A,0xF4BD,0xF922,0xFC4F,0xFE06,0xFF1C, + 0xFF99,0x011C,0x0481,0x09BE,0x0EDA,0x1235,0x1260,0x117B, + 0x0F9B,0x0C20,0x073A,0x028A,0xFF25,0xFC8F,0xFAA3,0xFA58, + 0xF9DF,0xF7D4,0xF4D6,0xF2C9,0xF0CC,0xEFCA,0xF0B0,0xF181, + 0xF2B6,0xF4B5,0xF782,0xFA15,0xFD99,0x017E,0x052A,0x079E, + 0x07C9,0x077D,0x065B,0x0597,0x0578,0x0625,0x070D,0x074E, + 0x069A,0x03ED,0x0074,0xFC9A,0xF949,0xF654,0xF381,0xF1D6, + 0xF197,0xF208,0xF2E2,0xF247,0xEE93,0xE6C7,0xD9F4,0xC723, + 0xBE1A,0xBE89,0xBE22,0xBF2C,0xBF75,0xC4B0,0xFEDD,0x38AA, + 0x3C7E,0x3CB6,0x3A5D,0x1853,0xF95B,0xF66F,0x0DBA,0x31C4, + 0x3EDA,0x3DCC,0x3E72,0x3D7D,0x3E33,0x2E75,0x0D52,0xF255, + 0xDDB6,0xCFC3,0xC768,0xC309,0xC369,0xC9E1,0xD7C1,0xE934, + 0xF7A2,0xFAE1,0xEFFB,0xDB06,0xC7A6,0xC563,0xD972,0xFBBE, + 0x293D,0x3E85,0x3E1B,0x3E68,0x3F37,0x3AEB,0x26AD,0x16F2, + 0x1048,0x10A6,0x15CE,0x1A2E,0x1948,0x126D,0x0667,0xF8CC, + 0xEBC1,0xE094,0xD5CE,0xCA24,0xC10A,0xBFFB,0xC0AE,0xCEB6, + 0xE7D4,0x0140,0x1448,0x1C48,0x19C5,0x0F92,0x0577,0x0212, + 0x076B,0x147A,0x2522,0x34D3,0x3DF6,0x3E75,0x347E,0x2274, + 0x0F58,0xFF6E,0xF3CB,0xEC3C,0xE774,0xE3B7,0xE0DB,0xDF66, + 0xE058,0xE413,0xE7F7,0xE8E3,0xE5AE,0xE01C,0xDBC2,0xDBC6, + 0xE222,0xEFBB,0x01D1,0x13E5,0x21FE,0x2877,0x26FA,0x2202, + 0x18F1,0x102D,0x0AF1,0x09C3,0x0C90,0x1000,0x10D6,0x0D13, + 0x05C5,0xFCAE,0xF352,0xEB0A,0xE446,0xDEDD,0xDA55,0xD7B3, + 0xD6EC,0xDAD2,0xE494,0xEFA1,0xF895,0xFE99,0x01E6,0x01E4, + 0xFFEB,0xFFB5,0x0263,0x0849,0x108F,0x1893,0x1F28,0x2222, + 0x2095,0x1AA3,0x11D7,0x0844,0x005C,0xFA85,0xF68E,0xF4D3, + 0xF33A,0xF30F,0xF0AA,0xED71,0xEBEC,0xEAB8,0xE9D3,0xE8B8, + 0xE845,0xE92A,0xEBD6,0xF0E4,0xF956,0x032F,0x0BE3,0x123D, + 0x152F,0x146F,0x11E2,0x0EFB,0x0D07,0x0CB4,0x0D44,0x0DDD, + 0x0E45,0x0D50,0x0A99,0x06BD,0x0155,0xFAF0,0xF40F,0xEF0B, + 0xEBC7,0xEA8C,0xEB7E,0xED58,0xEFF9,0xF30B,0xF642,0xF941, + 0xFB51,0xFCF1,0xFDD5,0xFE71,0x0013,0x043F,0x0929,0x0DB5, + 0x1169,0x132B,0x1339,0x113C,0x0DC2,0x0A36,0x06EA,0x0388, + 0x0067,0xFD3B,0xFACA,0xF946,0xF823,0xF708,0xF5C5,0xF4B8, + 0xF36A,0xF155,0xEFB9,0xEF75,0xF10A,0xF469,0xF8A7,0xFCF8, + 0x019D,0x0532,0x06EE,0x0799,0x07BA,0x0779,0x058E,0x0745, + 0x08C1,0x0903,0x09BD,0x0878,0x060F,0x02E5,0x0019,0xFD60, + 0xFADB,0xF907,0xF715,0xF468,0xF245,0xF1B2,0xF269,0xF329, + 0xF377,0xF12F,0xEB27,0xE233,0xD6A3,0xCC02,0xC629,0xCA06, + 0xDA33,0xF500,0x1315,0x29F0,0x313E,0x282D,0x15DC,0x0579, + 0xFDD3,0x022A,0x0F69,0x1EED,0x2A73,0x2E03,0x2998,0x1FDC, + 0x1475,0x0821,0xFB9B,0xF154,0xEA1B,0xE5C5,0xE383,0xE26B, + 0xE414,0xE9E0,0xF222,0xF9E6,0xFDEC,0xFCFD,0xF780,0xEF64, + 0xEA06,0xED42,0xF98F,0x0CFD,0x2053,0x2BCD,0x2EDA,0x29D4, + 0x1F96,0x1449,0x0B5D,0x073A,0x05DD,0x05F6,0x06D6,0x0708, + 0x0660,0x02CF,0xFC59,0xF5CB,0xF164,0xEEB7,0xEB23,0xE6B4, + 0xE4D1,0xE528,0xE84D,0xF0B9,0xFCB8,0x07F0,0x0EAC,0x0F02, + 0x0A77,0x0593,0x0362,0x043C,0x078B,0x0C2D,0x1201,0x16A4, + 0x1812,0x1697,0x1102,0x08D6,0xFFAA,0xF81E,0xF408,0xF2AC, + 0xF137,0xF068,0xF0A4,0xF120,0xF2C6,0xF4EC,0xF6A0,0xF665, + 0xF4C7,0xF338,0xF298,0xF415,0xF7A2,0xFD5D,0x0553,0x0BAC, + 0x1020,0x115C,0x0F59,0x0B03,0x05E6,0x0253,0x0107,0x0124, + 0x0182,0x0214,0x01EA,0x0080,0xFDBA,0xF9E9,0xF559,0xF0EE, + 0xEDE0,0xEC46,0xEBF0,0xED7B,0xEF9F,0xF1E8,0xF4C0,0xF891, + 0xFCC3,0xFF18,0xFFDC,0xFF71,0xFEC1,0xFF81,0x015A,0x03B1, + 0x067A,0x088B,0x09B7,0x0AA9,0x08F0,0x05B4,0x020E,0xFE3A, + 0xFAEB,0xF861,0xF76B,0xF732,0xF722,0xF679,0xF55D,0xF463, + 0xF2F8,0xF230,0xF0F9,0xF089,0xEFAE,0xEEC8,0xEE69,0xEEC6, + 0xF006,0xF1E0,0xF39B,0xF4B1,0xF494,0xF687,0xF4D2,0xF2CC, + 0xF2FE,0xF2CA,0xF311,0xF2F3,0xF2B3,0xF1ED,0xF0D3,0xEF4F, + 0xEE5B,0xED05,0xEC45,0xEB69,0xEB1B,0xEAA0,0xE9EF,0xE9D5, + 0xE9E5,0xE95D,0xE8DD,0xE8B1,0xE874,0xE8AE,0xE8B9,0xE8A6, + 0xE88A,0xE83C,0xE83B,0xE86E,0xE871,0xE876,0xE8A9,0xE833, + 0xE7D8,0xE75A,0xE744,0xE779,0xE72C,0xE72E,0xE78B,0xE7C2, + 0xE77D,0xE770,0xE76F,0xE70E,0xE74B,0xE7C4,0xE7FF,0xE835, + 0xE8FE,0xE950,0xE9BD,0xE9EF,0xEA79,0xEAF1,0xEB60,0xEC1A, + 0xECB7,0xED44,0xEDAB,0xEDE3,0xED8E,0xEBFB,0xEB94,0xED12, + 0xED99,0xED99,0xEDD8,0xEE2A,0xEE48,0xEE83,0xEEE4,0xEF45, + 0xF050,0xF0D0,0xF159,0xF1F3,0xF27D,0xF31B,0xF3BC,0xF459, + 0xF407,0xF495,0xF618,0xF71A,0xF750,0xF821,0xF8DD,0xF934, + 0xF9DB,0xFA81,0xFAD0,0xFB94,0xFBFA,0xFC5C,0xFCE3,0xFD38, + 0xFD49,0xFDA0,0xFE33,0xFE72,0xFE81,0xFE8E,0xFF3E,0xFEEF, + 0x005C,0x00E1,0x004B,0x00CD,0x0115,0x012F,0x01C1,0x026A, + 0x02F4,0x037C,0x03B7,0x045F,0x0566,0x0647,0x068E,0x077E, + 0x07A7,0x07CE,0x07E1,0x082A,0x08A4,0x08C3,0x0904,0x08E8, + 0x08F0,0x08BD,0x08B9,0x0923,0x098D,0x09AE,0x09C3,0x099F, + 0x0A12,0x0A4B,0x0A3F,0x0A60,0x0AC1,0x0ABD,0x0AC6,0x0B55, + 0x0BBD,0x0BAC,0x0C30,0x0C5F,0x0C50,0x0C95,0x0CAC,0x0C8F, + 0x0C74,0x0CBC,0x0CE4,0x0C99,0x0C64,0x0CAE,0x0CDD,0x0C8B, + 0x0C61,0x0C54,0x0CC5,0x0CB4,0x0CDA,0x0D20,0x0CDB,0x0D03, + 0x0D1E,0x0D92,0x0D64,0x0D42,0x0DC0,0x0DF6,0x0D9B,0x0D29, + 0x0D43,0x0D6E,0x0DCE,0x0DCE,0x0EE0,0x0D6F,0x0D6E,0x0E9F, + 0x0D95,0x0DD1,0x0E5A,0x0DFC,0x0DFD,0x0DED,0x0DC7,0x0DC3, + 0x0DB4,0x0DC5,0x0DC8,0x0DDC,0x0DB6,0x0DB0,0x0DC4,0x0DCD, + 0x0DAC,0x0D6B,0x0D5F,0x0D6E,0x0D3A,0x0D1A,0x0D2F,0x0D10, + 0x0CA0,0x0CC7,0x0CEF,0x0CB6,0x0CC7,0x0C99,0x0C88,0x0C96, + 0x0C30,0x0C42,0x0CB9,0x0CB5,0x0C73,0x0C8A,0x0CEB,0x0CF9, + 0x0C9E,0x0C1D,0x0BB5,0x0BCE,0x0C0B,0x0BF8,0x0BF3,0x0C0F, + 0x0BCD,0x0BB2,0x0B9B,0x0B76,0x0B7C,0x0BB5,0x0B52,0x0B3F, + 0x0B29,0x0BAE,0x0C05,0x0DB5,0x0DA4,0x0DA9,0x0D9B,0x0CFA, + 0x0CC0,0x0C8D,0x0C3A,0x0BE9,0x0BB5,0x0B79,0x0B75,0x0B70, + 0x0B75,0x0B4E,0x0AFF,0x0AAC,0x0A4D,0x0A63,0x09ED,0x09E4, + 0x0A99,0x0A42,0x0931,0x08D0,0x097D,0x0919,0x08E0,0x08AE, + 0x08A3,0x0845,0x0809,0x080D,0x082C,0x07BB,0x07E0,0x07BE, + 0x07C4,0x079B,0x07ED,0x07CD,0x077B,0x077C,0x0714,0x073D, + 0x064F,0x05F0,0x06EF,0x0739,0x0706,0x0702,0x06C2,0x0663, + 0x05FE,0x0617,0x05E2,0x055E,0x04B4,0x047A,0x03DE,0x02E1, + 0x03A6,0x0402,0x041C,0x03EA,0x03FA,0x0353,0x038A,0x0358, + 0x030A,0x0304,0x02E8,0x02E6,0x02ED,0x02E0,0x02FC,0x0300, + 0x02C7,0x02DE,0x031F,0x0320,0x02F8,0x02BC,0x02DA,0x02B4, + 0x02D0,0x02AF,0x02F5,0x0282,0x025D,0x023A,0x02A2,0x029C, + 0x024C,0x0220,0x0220,0x02A9,0x028B,0x0232,0x020B,0x021E, + 0x01F3,0x0218,0x0218,0x01E9,0x01D7,0x018C,0x0162,0x0135, + 0x0133,0x0199,0x0147,0x0127,0x00E0,0x0107,0x0195,0x016A, + 0x0160,0x0196,0x01EA,0x0162,0x0208,0x0343,0x0117,0x018E, + 0x0162,0x0132,0x0183,0x019E,0x0179,0x0170,0x013F,0x0154, + 0x0168,0x0169,0x018A,0x0132,0x0120,0x00EB,0x0103,0x0121, + 0x0170,0x014D,0x0168,0x013B,0x013F,0x0140,0x0109,0x00A3, + 0x007B,0x00C5,0x00C3,0x00EB,0x00FC,0x0123,0x0104,0x00C9, + 0x00E6,0x0144,0x00D5,0x00A3,0x0092,0xFF9A,0xFFF5,0x0078, + 0x018E,0x0207,0x01FA,0x0121,0x00DC,0x012F,0x01A9,0x0358, + 0x0592,0x072D,0x082E,0x095C,0x09F5,0x0A7B,0x0AAD,0x0AB2, + 0x0ABD,0x0B1E,0x0B74,0x0BE0,0x0B7E,0x0ACE,0x0ADD,0x0C83, + 0x0C02,0x0CCD,0x0F2D,0x0DEA,0x0CBB,0x0C4B,0x0CF7,0x0E42, + 0x0FD1,0x10C7,0x1154,0x11F0,0x1226,0x1200,0x1259,0x12C6, + 0x1313,0x1397,0x14A5,0x1603,0x16D1,0x1654,0x15AE,0x154C, + 0x160C,0x16D3,0x1755,0x17CC,0x182B,0x1757,0x1663,0x161C, + 0x1663,0x168E,0x16BA,0x1659,0x1661,0x1699,0x1696,0x16A5, + 0x1675,0x1610,0x163E,0x165F,0x16F8,0x1799,0x1733,0x15C6, + 0x1515,0x14CE,0x14A7,0x1515,0x14DA,0x1485,0x13D9,0x12C0, + 0x126A,0x1294,0x123B,0x1282,0x1247,0x1219,0x136B,0x1213, + 0x10F6,0x10ED,0x10ED,0x10AA,0x1033,0x0FD3,0x0F3A,0x0E57, + 0x0DD6,0x0D9B,0x0D28,0x0CD3,0x0D28,0x0CBC,0x0BEF,0x0AD2, + 0x099B,0x08B7,0x0889,0x0912,0x088A,0x07DE,0x0811,0x06E9, + 0x055E,0x04CD,0x03DA,0x03D7,0x03CB,0x0414,0x03C4,0x036E, + 0x027A,0x0178,0x0031,0xFE7C,0xFB6E,0xF6FC,0xF0F6,0xE978, + 0xE0EE,0xD84D,0xD243,0xD21F,0xDD03,0xF29E,0x09DF,0x1B5E, + 0x2345,0x218B,0x19DD,0x10E4,0x0AF5,0x09BF,0x09E8,0x09F7, + 0x08BA,0x0738,0x05AC,0x0520,0x0413,0x0214,0xFECF,0xF99F, + 0xF225,0xE831,0xDD7B,0xD442,0xCF4F,0xD22A,0xDC7F,0xEAAB, + 0xF7FD,0x00F3,0x03A4,0x023D,0xFF43,0xFDBB,0xFE03,0xFEA3, + 0xFF49,0xFFFF,0x010E,0x01E4,0x026D,0x0246,0x01BD,0x0054, + 0xFD5D,0xF807,0xF09B,0xE724,0xDDA1,0xD640,0xD365,0xD5B3, + 0xDC53,0xE4B6,0xEBB2,0xEFDB,0xF11F,0xF0A6,0xF064,0xF0CF, + 0xF2CC,0xF533,0xF677,0xF75E,0xF881,0xFAAC,0xFD76,0xFF3F, + 0x003F,0xFFFC,0xFD06,0xF878,0xF246,0xEB1A,0xE334,0xDECE, + 0xDDCA,0xDD31,0xE1D5,0xE5CB,0xE883,0xE921,0xE90F,0xE8E9, + 0xEA0E,0xEC23,0xEEAB,0xF071,0xF144,0xF18C,0xF300,0xF70D, + 0xFB73,0xFE8E,0x003C,0x0036,0xFE69,0xFAA7,0xF5EC,0xEF89, + 0xEACF,0xE7A4,0xE6B7,0xE733,0xE8F8,0xEA67,0xE9C7,0xE82B, + 0xE6F8,0xE6FA,0xE8E6,0xEBD3,0xEDE5,0xEE8A,0xEE6B,0xEEF4, + 0xF12B,0xF50E,0xF934,0xFD44,0xFFDA,0xFFBA,0xFDBB,0xFA9C, + 0xF718,0xF4C4,0xF2B0,0xF089,0xEFC8,0xEFB5,0xEF70,0xEE5D, + 0xECF7,0xEB7E,0xEAEE,0xEB39,0xEBE1,0xECAD,0xED9C,0xECBB, + 0xEBC1,0xED13,0xEF45,0xF276,0xF627,0xF96E,0xFB67,0xFC6D, + 0xFC57,0xFA98,0xF7EA,0xF5AB,0xF44F,0xF438,0xF450,0xF4A3, + 0xF40D,0xF2C4,0xF0A5,0xEF27,0xEF63,0xEFC1,0xEF70,0xEE9D, + 0xEDAC,0xEDAC,0xEEB0,0xF015,0xF203,0xF461,0xF715,0xF986, + 0xFB19,0xFBAD,0xFBEF,0xFC00,0xFBED,0xFB13,0xFACB,0xFAC7, + 0xFA47,0xF972,0xF8A5,0xF946,0xF8E6,0xF70E,0xF5AA,0xF4A2, + 0xF365,0xF25B,0xF1CE,0xF1A1,0xF24D,0xF303,0xF4F3,0xF749, + 0xF98D,0xFB87,0xFD1B,0xFCFF,0xFD6C,0xFDD1,0xFDE9,0xFEAE, + 0xFE9D,0xFE45,0xFDD8,0xFDA2,0xFD4C,0xFD11,0xFD1E,0xFCCF, + 0xFBDD,0xFA7B,0xF88D,0xF75D,0xF6AC,0xF66C,0xF667,0xF707, + 0xF80B,0xF900,0xF9A0,0xF9C4,0xFA89,0xFB6B,0xFD0E,0xFE88, + 0xFEB3,0xFE93,0xFE95,0xFE97,0xFE80,0xFECB,0xFD80,0xF80E, + 0xEC73,0xDA39,0xC568,0xBFB4,0xC01F,0xBFCB,0xC019,0xC25D, + 0xC030,0xEACD,0x30C8,0x3FFD,0x3E61,0x3F5B,0x4049,0x3AF7, + 0x2E62,0x2D23,0x303E,0x3102,0x2EC5,0x2CBF,0x2D57,0x2E60, + 0x2A56,0x24B4,0x15F4,0xFF59,0xE37C,0xC6CC,0xBFB6,0xC03B, + 0xC010,0xC087,0xC31D,0xE4BE,0x0EBD,0x2776,0x2F62,0x2B3F, + 0x23DF,0x2079,0x2214,0x25D0,0x28D9,0x2A1F,0x2B4D,0x2E94, + 0x33DB,0x385F,0x387A,0x31E7,0x23A1,0x0E04,0xF2FA,0xD548, + 0xC10C,0xBFBB,0xC021,0xBF52,0xC581,0xDDDE,0xF1C5,0xFD37, + 0x0168,0x01DE,0x0347,0x079A,0x0D34,0x1250,0x1648,0x19CB, + 0x1F74,0x26EA,0x2FCE,0x37EE,0x3B3F,0x3680,0x2966,0x16F2, + 0x0124,0xEA8E,0xD673,0xC8DD,0xC510,0xCB72,0xD62E,0xDF39, + 0xE6E9,0xEBB9,0xED9B,0xEE7D,0xF0E6,0xF597,0xFA62,0xFEDE, + 0x03D9,0x0A02,0x1284,0x1D1A,0x27D3,0x3030,0x3475,0x3276, + 0x28D9,0x1A84,0x0AF9,0xFB9A,0xED48,0xE324,0xDEBD,0xDF3A, + 0xE1D1,0xE492,0xE59B,0xE5D0,0xE58D,0xE580,0xE614,0xE81F, + 0xEB25,0xEE87,0xF297,0xF95B,0x029D,0x0ED4,0x1A98,0x236C, + 0x2701,0x269B,0x20E2,0x1808,0x0FA7,0x066D,0xFE1D,0xF801, + 0xF3E0,0xF13D,0xEF7D,0xEE2C,0xEBA7,0xE92E,0xE708,0xE5A9, + 0xE4DC,0xE396,0xE317,0xE4DD,0xE8A9,0xEF67,0xF8D2,0x037C, + 0x0CD6,0x13AD,0x1778,0x18EC,0x1888,0x159A,0x1110,0x0BD9, + 0x0738,0x03B2,0x0077,0xFD52,0xFAEB,0xF925,0xF716,0xF40C, + 0xF03E,0xED28,0xEA3C,0xE741,0xE50E,0xE5DD,0xE8E3,0xEDA6, + 0xF474,0xFCD8,0x04EA,0x0AE4,0x0E17,0x0F75,0x103B,0x107D, + 0x0F8D,0x0DA5,0x0BF4,0x0AB6,0x0872,0x05B4,0x0385,0x01F4, + 0x009E,0xFDCE,0xF8BF,0xF43A,0xEFF4,0xED0E,0xEA19,0xE95D, + 0xEB67,0xEEFA,0xF2F4,0xF7B2,0xFD19,0x0216,0x0559,0x098F, + 0x0917,0x093D,0x0B4F,0x0B89,0x0B46,0x0B2F,0x0B36,0x0A7B, + 0x098B,0x07EE,0x0666,0x03DA,0x0066,0xFC1A,0xF7E2,0xF42C, + 0xF11E,0xEFA3,0xEEF1,0xF02A,0xF27E,0xF63B,0xF9CD,0xFC82, + 0xFE87,0xFFC1,0x010B,0x0388,0x05E6,0x0776,0x0885,0x08B9, + 0x086F,0x0625,0xFF87,0xF2DB,0xDFC2,0xC70F,0xBEE7,0xBFDD, + 0xBF31,0xC023,0xC14D,0xC2F2,0xFBFA,0x380F,0x3EEE,0x3E68, + 0x3EFC,0x3FBC,0x363F,0x2BA7,0x2DF6,0x32EB,0x352A,0x34B0, + 0x3423,0x35CB,0x3771,0x348D,0x2B2E,0x1B25,0x03A0,0xE377, + 0xC4DA,0xBE88,0xBF09,0xBF77,0xBF0E,0xC821,0xF02D,0x1500, + 0x29C4,0x2DD1,0x2803,0x20A2,0x1DD6,0x20A7,0x251E,0x2983, + 0x2C91,0x2F71,0x32F3,0x38E0,0x3DBD,0x3E4B,0x3672,0x2604, + 0x0F7C,0xF482,0xD762,0xC25C,0xBFF7,0xC0BB,0xBFE7,0xCD33, + 0xE5B9,0xF721,0x0041,0x026A,0x01DD,0x02B9,0x0684,0x0C49, + 0x117E,0x1503,0x1AE1,0x2219,0x2A3C,0x33CB,0x3B4B,0x3D73, + 0x376E,0x2A14,0x1764,0x01D1,0xEC04,0xD9A3,0xCE4B,0xCBFE, + 0xD1AA,0xDB90,0xE49F,0xEB1F,0xEE0D,0xEF94,0xF041,0xF2EA, + 0xF66B,0xFA20,0xFE7A,0x0374,0x0B56,0x1546,0x2044,0x2A71, + 0x3205,0x3549,0x32CE,0x2A4D,0x1D0C,0x0CCA,0xFCFE,0xF0AF, + 0xE8FD,0xE544,0xE5B5,0xE80E,0xE97F,0xE970,0xE96D,0xE928, + 0xE983,0xEA4F,0xEB17,0xEC8A,0xEF65,0xF575,0xFDE3,0x079A, + 0x1216,0x1C31,0x23BE,0x27D9,0x2806,0x23DD,0x1C79,0x12B5, + 0x0863,0xFFC6,0xFA8D,0xF82D,0xF66C,0xF48A,0xF219,0xEFA5, + 0xED9F,0xEBB0,0xEAB5,0xE946,0xE82F,0xE7D4,0xE9BC,0xEC6C, + 0xF351,0xFE77,0x06E0,0x0FD8,0x16FB,0x1AD7,0x1C4F,0x1B0E, + 0x1786,0x1305,0x0DDC,0x0906,0x0551,0x0324,0x01F6,0xFFD4, + 0xFCBE,0xF992,0xF621,0xF31B,0xF029,0xEC9A,0xE9C0,0xE874, + 0xE886,0xEA76,0xEF1E,0xF698,0xFEB3,0x055D,0x0ACA,0x0F27, + 0x1200,0x130A,0x11E8,0x0F9A,0x0E3D,0x0CCC,0x0B86,0x09EE, + 0x07FF,0x05F1,0x03E5,0x0134,0xFDF2,0xFA81,0xF6DE,0xF29F, + 0xEEC6,0xEC63,0xEC30,0xED78,0xEFE2,0xF335,0xF748,0xFC83, + 0x0177,0x057E,0x082F,0x0934,0x09BD,0x0C34,0x0C7B,0x0CC3, + 0x0DB6,0x0D2C,0x0B5B,0x098C,0x087F,0x0814,0x0644,0x0347, + 0xFF28,0xF9E0,0xF4A8,0xF16D,0xF072,0xF127,0xF27F,0xF3D9, + 0xF4DD,0xF81C,0xFC6A,0xFF91,0x0151,0x02BF,0x0333,0x033D, + 0x0506,0x070D,0x0901,0x09AE,0x0849,0x040B,0xFB0B,0xEC55, + 0xD734,0xC209,0xBEB8,0xBEED,0xBEBD,0xC068,0xBF88,0xCA44, + 0x0EC7,0x3C54,0x3CCB,0x3DA6,0x3EA4,0x3DF1,0x3190,0x2B4B, + 0x2E8B,0x32D3,0x3465,0x3380,0x3335,0x3346,0x32D4,0x2EFD, + 0x24AF,0x124C,0xF987,0xD8B9,0xC02B,0xBE58,0xBE43,0xBF0D, + 0xBE24,0xCE5E,0xFA19,0x1B59,0x2A7E,0x2A37,0x22B5,0x1C91, + 0x1BEF,0x200A,0x258A,0x2987,0x2C34,0x2EBF,0x32B3,0x3806, + 0x3BBD,0x3A6D,0x314A,0x201D,0x076F,0xE964,0xCAE3,0xBE77, + 0xBF2D,0xBF1A,0xBF46,0xD0AD,0xE711,0xF59D,0xFD38,0xFEDC, + 0xFEE9,0x00A6,0x04B5,0x09E5,0x0EB5,0x137D,0x1A6D,0x22CC, + 0x2C4E,0x3431,0x38FB,0x39BA,0x32E7,0x2490,0x0FDF,0xF851, + 0xE1AE,0xCFB3,0xC60C,0xC6E7,0xCFE4,0xDA74,0xE3A1,0xE87C, + 0xE778,0xE916,0xEBC4,0xEF34,0xF434,0xF8C8,0xFCC8,0x0185, + 0x0943,0x1484,0x2136,0x2C22,0x32AB,0x337C,0x2E77,0x2390, + 0x14ED,0x048E,0xF5A4,0xE9C7,0xE2A2,0xE13E,0xE382,0xE660, + 0xE742,0xE60D,0xE446,0xE38B,0xE54B,0xE7D5,0xE9F3,0xEB3F, + 0xED15,0xF227,0xFB11,0x0736,0x13FF,0x1F05,0x2601,0x279A, + 0x24F7,0x1F91,0x1786,0x0DB7,0x03D0,0xFC47,0xF7F3,0xF597, + 0xF3FA,0xF232,0xEFCD,0xED44,0xEAC5,0xE872,0xE6CC,0xE55D, + 0xE4D0,0xE4DD,0xE6C2,0xEB67,0xF380,0xFD00,0x05CB,0x0D3E, + 0x14AF,0x197B,0x1A1A,0x1745,0x1228,0x0D0F,0x0911,0x0621, + 0x03AB,0x014F,0xFE86,0xFAA1,0xF771,0xF4F1,0xF23F,0xEF90, + 0xEC56,0xE796,0xE384,0xE36B,0xE5F7,0xE99A,0xEE3B,0xF432, + 0xFC08,0x040B,0x0B23,0x0FB3,0x10A6,0x0F58,0x0DC6,0x0C59, + 0x0BCF,0x0BF1,0x0BC2,0x0A7A,0x07F4,0x051A,0x022B,0xFFC4, + 0xFCFA,0xF8F1,0xF5E5,0xF10C,0xEC43,0xE9DC,0xE99C,0xEBB3, + 0xEF50,0xF439,0xF8D9,0xFD96,0x02ED,0x06FE,0x099B,0x0ABA, + 0x0B2C,0x0C47,0x0CBB,0x0CB8,0x0D20,0x0E23,0x0D9C,0x0BC4, + 0x09DA,0x0801,0x05DE,0x0262,0xFD7D,0xF895,0xF52A,0xF285, + 0xF165,0xF1B6,0xF3BD,0xF64E,0xF8DC,0xFBAD,0xFEE8,0x0233, + 0x03DF,0x0437,0x051A,0x06E2,0x08D9,0x0A12,0x0A98,0x0B25, + 0x0AA2,0x05E2,0xFB3A,0xEAEE,0xD39B,0xC10E,0xC022,0xBFCB, + 0xBFD6,0xC1D8,0xBFC9,0xD95F,0x223D,0x3FF3,0x3E3A,0x3F4C, + 0x3FE5,0x3D7B,0x3128,0x2E60,0x31D5,0x3423,0x3436,0x33A1, + 0x33E2,0x35A2,0x35C7,0x2F6D,0x2282,0x0F11,0xF4D7,0xD177, + 0xBFF9,0xC0AE,0xBFCC,0xC0FC,0xC007,0xDA8E,0x05A9,0x20DC, + 0x2C15,0x2A3C,0x229D,0x1DB1,0x1E78,0x234C,0x27F0,0x2A79, + 0x2C58,0x304A,0x368F,0x3C46,0x3EE8,0x3B35,0x2F30,0x1B6B, + 0x0187,0xE412,0xC8C0,0xBF77,0xC061,0xBFCE,0xC41D,0xDA37, + 0xEEEA,0xFB03,0x00C1,0x0224,0x02BB,0x0514,0x092F,0x0DEE, + 0x12CF,0x1801,0x1EB7,0x26C8,0x3001,0x384B,0x3CB9,0x3B0A, + 0x31DA,0x213B,0x0B4A,0xF337,0xDDC7,0xCFA2,0xC9B9,0xCBDB, + 0xD2C6,0xDC65,0xE4A9,0xE9B1,0xED61,0xF072,0xF1EF,0xF460, + 0xF755,0xFAB5,0xFFE8,0x0703,0x1003,0x1B03,0x25D4,0x2EE7, + 0x34BB,0x3539,0x2F13,0x23C2,0x145E,0x03C8,0xF4FA,0xEA17, + 0xE47B,0xE4F9,0xE6D8,0xE778,0xE77F,0xE7DC,0xE7B9,0xE7CD, + 0xE814,0xE89B,0xEA14,0xEC5F,0xF0EC,0xF7CF,0x0162,0x0C3A, + 0x1767,0x2054,0x2606,0x2811,0x25E7,0x1F17,0x156A,0x0B05, + 0x024C,0xFAEC,0xF5CB,0xF4C1,0xF468,0xF267,0xEF8A,0xECD9, + 0xEAF6,0xE9A7,0xE811,0xE5E2,0xE473,0xE50A,0xE81C,0xEDF6, + 0xF5AC,0xFE50,0x0767,0x0F30,0x152D,0x189A,0x190E,0x16B2, + 0x11F9,0x0C4F,0x0755,0x0404,0x015F,0xFF30,0xFC9D,0xFA2B, + 0xF7CA,0xF49D,0xF12B,0xEDD2,0xEA30,0xE68E,0xE474,0xE4B1, + 0xE7BF,0xEBB4,0xEFCB,0xF531,0xFC39,0x03E7,0x0A2C,0x0DE8, + 0x0F99,0x0F93,0x0E34,0x0BCF,0x098B,0x0919,0x08A8,0x06C2, + 0x03E8,0x01AC,0xFFD7,0xFD69,0xF9D8,0xF4E8,0xF063,0xEC41, + 0xE9B5,0xE877,0xE92C,0xEB01,0xEE5A,0xF22A,0xF75B,0xFD63, + 0x026B,0x058C,0x06F3,0x07CA,0x089A,0x082B,0x09F4,0x08FD, + 0x082F,0x08F6,0x0861,0x07AD,0x06BD,0x050B,0x018D,0xFD0B, + 0xF813,0xF433,0xF196,0xF01C,0xEF56,0xEF3F,0xF04D,0xF24D, + 0xF591,0xF96C,0xFD5F,0xFF9A,0x00F8,0x01D8,0x0214,0x02C7, + 0x0548,0x074F,0x088F,0x0701,0x0082,0xF47F,0xE2E0,0xCAD9, + 0xBEFE,0xBFE6,0xBF24,0xBF9D,0xC193,0xC030,0xEB34,0x2EFC, + 0x3F2E,0x3E08,0x3EEB,0x3FCD,0x38D0,0x2C37,0x2AD8,0x2D8A, + 0x3050,0x3137,0x31C7,0x3342,0x347E,0x3260,0x2AF0,0x1BB0, + 0x063F,0xEBF3,0xCC0D,0xBF5D,0xC03D,0xBFE5,0xBF55,0xC213, + 0xE527,0x0CEC,0x231C,0x294A,0x24C4,0x1E48,0x1AE5,0x1BE4, + 0x1F19,0x224B,0x2547,0x2944,0x2EC0,0x349B,0x38CC,0x394E, + 0x3386,0x255F,0x1154,0xF7F0,0xD9AC,0xC2DD,0xBFE1,0xC093, + 0xBF93,0xC792,0xDFF1,0xF194,0xFB14,0xFDC0,0xFDEB,0xFEAD, + 0x0263,0x07DB,0x0DCC,0x12A6,0x16F5,0x1D8C,0x2699,0x308B, + 0x37B9,0x3B07,0x383C,0x2C07,0x1A0C,0x046E,0xEDC6,0xD972, + 0xCCD0,0xC921,0xCE3A,0xD7B7,0xE1AC,0xE88A,0xEB61,0xEBA5, + 0xECC1,0xEFBF,0xF416,0xF8CD,0xFCE6,0x0160,0x081A,0x11C3, + 0x1D1B,0x2818,0x303E,0x344A,0x32B3,0x2ACC,0x1E97,0x0F0C, + 0xFEAA,0xF05E,0xE749,0xE4F9,0xE651,0xE857,0xE8E0,0xE82A, + 0xE711,0xE67D,0xE6F3,0xE877,0xEACA,0xECBB,0xEE8A,0xF29C, + 0xF9FC,0x03B2,0x0E5D,0x1867,0x208D,0x25C5,0x2655,0x224C, + 0x1AB9,0x1183,0x0822,0xFFA0,0xF948,0xF61D,0xF4F0,0xF43A, + 0xF233,0xEF2C,0xEBD0,0xE9C6,0xE883,0xE7DB,0xE75C,0xE6BF, + 0xE761,0xEA7C,0xEFEC,0xF7F4,0x02BD,0x0E0E,0x143D,0x1841, + 0x1BFE,0x19DE,0x160B,0x1173,0x0C9B,0x0893,0x0536,0x0230, + 0x00B8,0xFF50,0xFC7B,0xF7B6,0xF379,0xF052,0xEE01,0xEC48, + 0xEA71,0xE898,0xE76F,0xE84A,0xEBE5,0xF1CA,0xF9F8,0x0273, + 0x08B2,0x0D32,0x0EF7,0x0E98,0x0DC0,0x0CF3,0x0B88,0x0A02, + 0x08C3,0x07CC,0x0666,0x0484,0x0154,0xFE0F,0xFA4A,0xF6CC, + 0xF2FC,0xF00F,0xED08,0xEA64,0xE863,0xE83F,0xEA2C,0xEE80, + 0xF420,0xF9C2,0xFEAD,0x0223,0x04BC,0x0660,0x068F,0x06E6, + 0x07F4,0x08E0,0x0997,0x0AA7,0x0C17,0x0A72,0x07B0,0x05A6, + 0x0317,0x007D,0xFD26,0xF96D,0xF520,0xF14D,0xEF15,0xEF40, + 0xF0F9,0xF2FF,0xF4D9,0xF805,0xFB94,0xFDD8,0xFF6F,0x000F, + 0x01FF,0x0464,0x054A,0x05D5,0x073C,0x08C1,0x084F,0x04AF, + 0xFC13,0xEEF1,0xDB2F,0xC3BE,0xBEB5,0xBF4F,0xBECB,0xBFC0, + 0xC087,0xC319,0xFCAF,0x37C5,0x3E1C,0x3D8B,0x3E4F,0x3E10, + 0x31F3,0x284F,0x2B85,0x3135,0x32B6,0x3169,0x3086,0x3204, + 0x3302,0x310F,0x28A1,0x17F1,0xFF70,0xDEB9,0xC1ED,0xBE86, + 0xBE57,0xBEF1,0xBE18,0xC702,0xF095,0x143B,0x268E,0x2930, + 0x2275,0x1B40,0x1A11,0x1EC3,0x24B4,0x2907,0x2AE5,0x2C6E, + 0x301A,0x3600,0x3B85,0x3CE9,0x35F1,0x257E,0x0CE4,0xEFA5, + 0xD087,0xBF77,0xBF17,0xBF3E,0xBEA8,0xCC89,0xE4A6,0xF4CD, + 0xFCE3,0xFE44,0xFDD2,0xFF16,0x03FF,0x0AAA,0x1065,0x1496, + 0x190D,0x1F76,0x2863,0x324E,0x39D2,0x3C06,0x36AE,0x290B, + 0x1450,0xFC36,0xE4FF,0xD2FC,0xC8EF,0xC78D,0xCE3C,0xD89C, + 0xE19A,0xE6C5,0xE846,0xE90B,0xE9C2,0xEE2C,0xF496,0xF76E, + 0xFC39,0x006E,0x0671,0x1154,0x1D82,0x2922,0x31A5,0x34C9, + 0x31BA,0x2821,0x1A42,0x0A62,0xFAA5,0xED45,0xE4C0,0xE277, + 0xE3EF,0xE6EC,0xE852,0xE77E,0xE5E3,0xE51D,0xE585,0xE782, + 0xEA4B,0xECEF,0xEF95,0xF3B6,0xFB19,0x062B,0x12AD,0x1DBC, + 0x258C,0x289D,0x272F,0x2279,0x1A88,0x116E,0x083C,0xFF9C, + 0xF96B,0xF61F,0xF535,0xF49F,0xF29C,0xEF5F,0xEBA7,0xE923, + 0xE855,0xE863,0xE7F1,0xE7E8,0xE87A,0xEB4B,0xF1FF,0xFBCB, + 0x076C,0x1132,0x1763,0x1A5C,0x1A62,0x17EB,0x13F1,0x108F, + 0x0B82,0x063B,0x0271,0x0001,0xFE42,0xFC3E,0xF98C,0xF69A, + 0xF2EC,0xEF99,0xECFB,0xEAB7,0xE76D,0xE4CE,0xE482,0xE864, + 0xEE6C,0xF599,0xFE6A,0x0550,0x09DC,0x0D29,0x0F70,0x10E2, + 0x110C,0x1008,0x0E27,0x0C7E,0x0B6C,0x0A61,0x091C,0x066F, + 0x0398,0x00BA,0xFDB0,0xFAF1,0xF775,0xF298,0xEDF4,0xEADC, + 0xEA22,0xEDB0,0xF142,0xF54F,0xFA51,0xFE2C,0x00F6,0x0428, + 0x072B,0x0985,0x0AF2,0x0BCE,0x0C76,0x0CCA,0x0CF5,0x0D7D, + 0x0DD1,0x0D13,0x0B40,0x08D6,0x055F,0x0229,0xFE0B,0xF9C9, + 0xF515,0xF20E,0xF095,0xF0F4,0xF2E3,0xF61E,0xF8F3,0xFB2B, + 0xFC20,0xFD5E,0xFF5B,0x0223,0x04F4,0x0737,0x0937,0x095D, + 0x08F7,0x098C,0x09EC,0x0776,0x0023,0xF2D1,0xDF9F,0xC89A, + 0xBFBA,0xC060,0xC005,0xC186,0xC041,0xD200,0x0D47,0x38FA, + 0x3EEE,0x3E95,0x4018,0x3631,0x26C6,0x2457,0x2789,0x2B01, + 0x2BDA,0x2AEC,0x2B04,0x2BFF,0x2CA8,0x29CE,0x21C4,0x11D3, + 0xFA9F,0xDE4D,0xC448,0xBFAC,0xC088,0xC101,0xBFA0,0xD859, + 0xFC66,0x13BB,0x2098,0x2233,0x1CF5,0x17D2,0x1731,0x1A87, + 0x1ECD,0x21FB,0x2420,0x2783,0x2C5B,0x3164,0x3404,0x321B, + 0x2A3C,0x1B2C,0x0586,0xECE9,0xD418,0xC287,0xC00D,0xBFB1, + 0xC6DF,0xDA5E,0xEBAF,0xF6E0,0xFC11,0xFD34,0xFE2D,0x00A0, + 0x03FE,0x076C,0x0A9B,0x0EA3,0x146D,0x1C14,0x2548,0x2D75, + 0x3150,0x2FFF,0x290E,0x1D10,0x0CEC,0xFA3F,0xE849,0xDA60, + 0xD23E,0xD18E,0xD79D,0xDFE0,0xE6CE,0xEA75,0xEB8B,0xECAD, + 0xEEF9,0xF225,0xF54A,0xF8B6,0xFCDB,0x011C,0x088A,0x12A0, + 0x1D07,0x25E6,0x2AFD,0x2B71,0x26E6,0x1F44,0x146A,0x06CC, + 0xF9D3,0xEFA2,0xEA25,0xE995,0xEA39,0xEAE1,0xEAC6,0xE9EF, + 0xEA52,0xEA46,0xE9FD,0xEB1D,0xECC2,0xEDC2,0xF013,0xF509, + 0xFCDE,0x05C3,0x0F4F,0x171A,0x1CD0,0x1F58,0x1E1B,0x1980, + 0x11FB,0x0A1F,0x028E,0xFCBA,0xF8B2,0xF5CD,0xF445,0xF312, + 0xF04D,0xED8E,0xEC7B,0xEC9C,0xEB80,0xE9CA,0xE81F,0xE7E4, + 0xEA3A,0xEED5,0xF52E,0xFC64,0x036B,0x09A3,0x0E9D,0x1185, + 0x1261,0x119A,0x0DBD,0x08F4,0x0502,0x0221,0x0004,0xFE44, + 0xFC2F,0xF976,0xF6B5,0xF43E,0xF2C3,0xF0D4,0xEDC9,0xEA4A, + 0xE806,0xE75B,0xE911,0xEC89,0xF062,0xF4FF,0xFA53,0xFFD9, + 0x0511,0x0974,0x0BE8,0x0C10,0x0A9B,0x08E6,0x07C2,0x06EC, + 0x0523,0x0357,0x0243,0x01C0,0x00BF,0xFE4B,0xFA6C,0xF636, + 0xF2A4,0xEFF0,0xEDE1,0xED05,0xECFA,0xED2A,0xEEBA,0xF13E, + 0xF580,0xFB2E,0xFF7A,0x021A,0x03B5,0x0590,0x06B6,0x06E3, + 0x065B,0x0671,0x069A,0x06A8,0x06A0,0x099B,0x0774,0x0310, + 0xFFF6,0xFC7E,0xFA4B,0xF930,0xF7F3,0xF578,0xF350,0xF140, + 0xF0C8,0xF256,0xF60C,0xFA25,0xFDC0,0xFFBF,0x0078,0x01D2, + 0x0291,0x035D,0x04AB,0x0631,0x07B0,0x08A6,0x0893,0x06D0, + 0x0375,0xFE38,0xF86A,0xF21A,0xECB3,0xE96D,0xE975,0xED3D, + 0xF491,0xFCA6,0x0333,0x079A,0x08BE,0x07BA,0x0651,0x053F, + 0x04F8,0x04F3,0x0587,0x0773,0x0988,0x0BAC,0x0D5A,0x0D84, + 0x0C6C,0x0A28,0x074C,0x03DA,0xFF0B,0xF936,0xF3FD,0xF0CF, + 0xF0B6,0xF315,0xF6F3,0xFAC0,0xFD81,0xFD96,0xFD38,0xFE22, + 0xFEBE,0xFF36,0xFED7,0xFEBB,0x0064,0x02E7,0x0520,0x0702, + 0x082A,0x08E8,0x09E8,0x093D,0x0738,0x0407,0x00E5,0xFD8A, + 0xF989,0xF773,0xF76D,0xF73A,0xF6FE,0xF747,0xF77E,0xF720, + 0xF663,0xF56F,0xF488,0xF41E,0xF315,0xF2DA,0xF393,0xF47D, + 0xF629,0xF86C,0xFA14,0xFAEE,0xFB7B,0xFB32,0xFABF,0xF8FC, + 0xF700,0xF5FA,0xF383,0xF160,0xF08D,0xF0DE,0xF0BB,0xF0F7, + 0xF0A7,0xEFEE,0xEF79,0xEF18,0xEEF3,0xEEA9,0xEE2A,0xEE61, + 0xEE31,0xED73,0xED76,0xECC4,0xEC8F,0xECA3,0xEC25,0xEC36, + 0xEC13,0xEB13,0xE9D4,0xE97F,0xE932,0xE8FD,0xE909,0xE8D8, + 0xE8DF,0xE8C0,0xE8A0,0xE841,0xE837,0xE79F,0xE75C,0xE733, + 0xE732,0xE784,0xE7BF,0xE7AF,0xE7F4,0xE871,0xE8CC,0xE916, + 0xE969,0xE9BD,0xEA3E,0xEA14,0xE9F5,0xEA15,0xEA0E,0xEA72, + 0xEA8E,0xEB09,0xEB53,0xEBA1,0xEBE9,0xEBFB,0xEC37,0xEC7F, + 0xED05,0xED80,0xEDD2,0xEDC8,0xEE99,0xEF15,0xEF48,0xEFCC, + 0xF07E,0xF124,0xF195,0xF1EA,0xF32E,0xF2C5,0xF2EA,0xF502, + 0xF491,0xF4D5,0xF5AE,0xF671,0xF6FC,0xF758,0xF719,0xF706, + 0xF770,0xF7BC,0xF7FD,0xF87F,0xF8A0,0xF95C,0xF9DB,0xFA07, + 0xFA79,0xFAD0,0xFAF3,0xFB70,0xFBF1,0xFC10,0xFC46,0xFCEE, + 0xFD7A,0xFDBE,0xFE05,0xFE9D,0xFEE8,0xFF23,0x000B,0x0027, + 0x00A2,0x0113,0x014D,0x0134,0x01A0,0x023D,0x02A9,0x02E3, + 0x036C,0x03B0,0x03CB,0x041B,0x049B,0x0469,0x0434,0x04FA, + 0x04F2,0x0587,0x05E0,0x065A,0x06B8,0x06D3,0x071C,0x0728, + 0x0778,0x0807,0x0909,0x0BBA,0x0BF4,0x0B85,0x0B47,0x0B76, + 0x0B5C,0x0B1C,0x0B25,0x0B4B,0x0B87,0x0C0E,0x0B9C,0x0BA3, + 0x0BD3,0x0C1D,0x0B97,0x0B6E,0x0BA8,0x0BDA,0x0B4B,0x0B5F, + 0x0C6F,0x0C32,0x0BBA,0x0BFE,0x0C27,0x0BD2,0x0C01,0x0C17, + 0x0BE9,0x0BDB,0x0BED,0x0BA6,0x0C07,0x0BFF,0x0C26,0x0BED, + 0x0C09,0x0C05,0x0BD7,0x0C8C,0x0CB0,0x0CAA,0x0CE9,0x0D1A, + 0x0BA8,0x0B14,0x0C40,0x0CC2,0x0CBD,0x0CAC,0x0C64,0x0C15, + 0x0BEE,0x0BDF,0x0BC9,0x0B91,0x0B41,0x0A8D,0x0A91,0x0A33, + 0x0A36,0x0A4E,0x0A36,0x0A10,0x099C,0x09F5,0x0A61,0x0AF6, + 0x0AC8,0x0A61,0x0A4D,0x0A58,0x0A86,0x0AA2,0x0AE2,0x0A8D, + 0x0A93,0x0A85,0x0A84,0x0A80,0x0A8C,0x0AD6,0x0B02,0x0AD3, + 0x0AFB,0x0B56,0x0B06,0x0AA7,0x0ABA,0x0B0B,0x0B56,0x0B58, + 0x0B4B,0x0ABB,0x0ACB,0x0AE0,0x0A64,0x0A60,0x0A3B,0x0A45, + 0x0A40,0x0A41,0x0A67,0x0A16,0x0A0D,0x09C8,0x0A26,0x09D8, + 0x09CE,0x0A0B,0x09EB,0x0993,0x08F2,0x0948,0x0A37,0x0A6B, + 0x0A5C,0x0A46,0x0A55,0x0988,0x09B6,0x0AFC,0x090B,0x09E3, + 0x09FE,0x0972,0x096A,0x09BB,0x0951,0x0969,0x09AC,0x0988, + 0x098A,0x0977,0x09AA,0x08FA,0x08FA,0x091D,0x0947,0x092A, + 0x0933,0x0956,0x0957,0x0901,0x0886,0x0883,0x0863,0x08D9, + 0x08E7,0x08AD,0x088F,0x0869,0x07FE,0x0828,0x0809,0x07AF, + 0x07BA,0x07B4,0x0754,0x0728,0x076C,0x0740,0x06FE,0x0716, + 0x071E,0x06A8,0x0694,0x0694,0x06A5,0x067A,0x06A5,0x0662, + 0x0665,0x0652,0x067D,0x067D,0x0635,0x05CD,0x057F,0x0599, + 0x05C7,0x05BA,0x05F3,0x05C5,0x0400,0x01E3,0x0237,0x0284, + 0x02D9,0x02E0,0x02C6,0x02EB,0x031F,0x0347,0x0323,0x02E8, + 0x030E,0x0303,0x0329,0x0328,0x0367,0x039A,0x03D7,0x03BF, + 0x0389,0x0419,0x0415,0x038C,0x0343,0x036A,0x038E,0x0375, + 0x036C,0x036F,0x0328,0x03A7,0x03BB,0x0394,0x0374,0x02F7, + 0x02E5,0x02F1,0x0311,0x031C,0x0302,0x0334,0x034C,0x0311, + 0x0488,0x043E,0x031A,0x02D5,0x02E1,0x02BE,0x02C7,0x02F8, + 0x02F6,0x032C,0x0358,0x03D9,0x040E,0x0417,0x0416,0x0456, + 0x043B,0x040E,0x03BF,0x0387,0x0337,0x0336,0x038A,0x038F, + 0x038E,0x0381,0x032A,0x033E,0x0302,0x02F7,0x034D,0x0313, + 0x029E,0x024F,0x0235,0x0279,0x0254,0x025B,0x0248,0x0212, + 0x0208,0x0204,0x01CF,0x01B6,0x01AB,0x015C,0x0132,0x0128, + 0x0104,0x0102,0x00A9,0x0081,0x0095,0x0090,0x00CB,0x01A1, + 0x02B4,0x03C6,0x0495,0x04DE,0x0558,0x05DC,0x0617,0x0625, + 0x065F,0x068E,0x065D,0x062E,0x0603,0x064F,0x06CE,0x070B, + 0x06F3,0x06ED,0x06BC,0x0715,0x0790,0x087E,0x0928,0x097B, + 0x09C5,0x0972,0x0A54,0x0BC6,0x0CDF,0x0D35,0x0D0F,0x0D11, + 0x0DA8,0x0E8F,0x0F59,0x1045,0x10E7,0x10B3,0x107F,0x1111, + 0x1244,0x1342,0x138D,0x136A,0x13D6,0x1487,0x151A,0x15BB, + 0x1631,0x16D0,0x16DF,0x16CB,0x15FC,0x1415,0x1401,0x1475, + 0x14D6,0x1511,0x1541,0x151A,0x14ED,0x14DB,0x14A9,0x150B, + 0x15A0,0x15E9,0x1536,0x148A,0x14D5,0x14E9,0x150C,0x1548, + 0x1491,0x14D7,0x14C6,0x13BA,0x1310,0x13B0,0x147C,0x1481, + 0x1489,0x140F,0x135F,0x12FE,0x127E,0x12AB,0x125C,0x1201, + 0x11C3,0x118E,0x1171,0x10BD,0x0FCD,0x0EB4,0x0E1C,0x0D09, + 0x0C7E,0x084C,0x022C,0xFD74,0xF860,0xF1F1,0xEA8C,0xE405, + 0xE22F,0xE73E,0xF1F3,0x0062,0x0EF4,0x1B37,0x24B0,0x2C64, + 0x33F2,0x3C46,0x406E,0x4087,0x3BCA,0x2F9D,0x216D,0x1266, + 0x0418,0xF819,0xEE9D,0xE749,0xE2B9,0xE1C0,0xE2D3,0xE549, + 0xE8EA,0xEE49,0xF56C,0xFD90,0x0550,0x0B90,0x0EED,0x0E93, + 0x0C33,0x0A73,0x0B16,0x0C86,0x0D94,0x0E09,0x0D7F,0x0CF8, + 0x0BD4,0x0B61,0x0B06,0x0A72,0x07C2,0x043E,0xFFC6,0xFA54, + 0xF2E2,0xEA30,0xE283,0xDDCE,0xDBD0,0xDBC5,0xDD73,0xE0D3, + 0xE4FB,0xE972,0xEFFD,0xF8E9,0x01EC,0x09F3,0x0F25,0x120A, + 0x1326,0x11A5,0x0E01,0x098E,0x0463,0xFD0A,0xF8CA,0xF37C, + 0xEC46,0xE7FF,0xE48B,0xE29C,0xE216,0xE1FA,0xE38E,0xE5E8, + 0xE7F4,0xE90B,0xE991,0xEA9C,0xEC27,0xEE83,0xF036,0xF1F9, + 0xF446,0xF630,0xF79A,0xF922,0xFB7C,0xFD7D,0xFEC1,0xFF6F, + 0xFFD0,0xFF62,0xFD06,0xF893,0xF381,0xEEC2,0xEA4F,0xE683, + 0xE2FE,0xDFDF,0xDDB3,0xDC53,0xDC81,0xDE32,0xE198,0xE5AD, + 0xE993,0xEDD1,0xF303,0xF71C,0xF9D4,0xFBE0,0xFD29,0xFD78, + 0xFD31,0xFC5E,0xFB4E,0xF989,0xF6F5,0xF41F,0xF21C,0xF029, + 0xEDFD,0xEC40,0xEC29,0xED69,0xEC74,0xEB47,0xEA82,0xEA0D, + 0xE9AD,0xE92D,0xE932,0xEA74,0xECA0,0xEEBD,0xF0BB,0xF2B6, + 0xF4A4,0xF689,0xF8A4,0xFA93,0xFCD6,0xFEAB,0xFE72,0xFDA8, + 0xFBDC,0xF912,0xF62D,0xF453,0xF1B9,0xEF5C,0xEC8B,0xE9A6, + 0xE7D9,0xE76C,0xE7EC,0xE83D,0xE8CE,0xEA05,0xECA7,0xEEE0, + 0xF12A,0xF2B7,0xF487,0xF674,0xF7DE,0xF872,0xF97B,0xF992, + 0xF8DD,0xF8E8,0xF8C9,0xF841,0xF7D5,0xF700,0xF5CC,0xF46A, + 0xF397,0xF2A0,0xF0B7,0xEEE6,0xEDDC,0xED7D,0xEC67,0xEB61, + 0xEBA8,0xEC96,0xEE06,0xEF0A,0xEF8C,0xF100,0xF2F6,0xF575, + 0xF744,0xF8AD,0xF9E2,0xFAC3,0xFAFB,0xFB40,0xFB0C,0xFA7C, + 0xF8D3,0xF74F,0xF607,0xF4B5,0xF3C3,0xF1D1,0xF06A,0xF01E, + 0xF014,0xF008,0xEFDC,0xEF94,0xF01F,0xF10A,0xF2BA,0xF3F4, + 0xF4F9,0xF577,0xF5D9,0xF67A,0xF7D7,0xF927,0xFA31,0xFA5E, + 0xF96D,0xF7E7,0xF428,0xEC4B,0xE12B,0xD680,0xCB9E,0xC061, + 0xBE38,0xBE98,0xBE76,0xBF02,0xBF3F,0xC213,0xE2AF,0x08DA, + 0x25F6,0x3ACF,0x3ED0,0x3E44,0x3F8C,0x3F1B,0x3E70,0x3E56, + 0x3EBF,0x37A4,0x154C,0xF1CB,0xD185,0xC05D,0xBF99,0xBF81, + 0xBF4B,0xBF69,0xBFD1,0xBF7F,0xC979,0xDD8D,0xF46F,0x0A57, + 0x19B2,0x1FCB,0x1E47,0x1A56,0x18B6,0x1B11,0x1FCB,0x23BC, + 0x26C2,0x28A4,0x29C5,0x2AA6,0x2A46,0x28CE,0x2591,0x2025, + 0x17F6,0x0CA9,0xFD22,0xEA6C,0xD5CC,0xC3E7,0xBFBE,0xC008, + 0xC00D,0xBFB4,0xC451,0xD120,0xDFE9,0xF223,0x07CA,0x1E6A, + 0x3316,0x3E5E,0x3F6D,0x3F52,0x3F86,0x3E8C,0x333C,0x24D6, + 0x1607,0x07BF,0xFAC3,0xEE0B,0xE229,0xD8D6,0xD453,0xD28B, + 0xD438,0xD898,0xDE37,0xE318,0xE628,0xE897,0xEA89,0xED72, + 0xF1AA,0xF6F6,0xFD52,0x03B3,0x095E,0x0EBD,0x1447,0x1949, + 0x1E2C,0x244A,0x286D,0x284E,0x249D,0x1D70,0x139F,0x087E, + 0xFC9B,0xF078,0xE65E,0xDD4D,0xD570,0xCFE0,0xCDFA,0xCF52, + 0xD348,0xDA13,0xE3FE,0xF011,0xFC91,0x0767,0x1096,0x1845, + 0x1EC9,0x20E6,0x20CA,0x1FA1,0x1DC5,0x1AB4,0x165D,0x1031, + 0x0996,0x02FC,0xFD0F,0xF938,0xF70B,0xF506,0xF396,0xF072, + 0xECED,0xEA30,0xE8B4,0xE8E5,0xE9C5,0xEB41,0xEDAD,0xF0DB, + 0xF549,0xFA3E,0xFFB0,0x05C3,0x0B9F,0x1134,0x1673,0x1B65, + 0x1EBA,0x1EFC,0x1C4B,0x16C0,0x10CB,0x0AC4,0x04BF,0xFE8A, + 0xF7BA,0xF0B2,0xEA88,0xE56E,0xE2E1,0xE36B,0xE5AE,0xE912, + 0xED4F,0xF1E2,0xF693,0xFAEA,0xFF8B,0x040E,0x084F,0x0C36, + 0x0EE2,0x0FE8,0x0F51,0x0EA5,0x0D6E,0x0C7A,0x0B90,0x0A6F, + 0x08CD,0x065C,0x02CF,0xFF3F,0xFC20,0xF8F7,0xF58F,0xF2B0, + 0xF0D0,0xEF6F,0xEE3C,0xEDEF,0xED28,0xEE15,0xF2FE,0xF656, + 0xFB2D,0x0077,0x04D7,0x0824,0x0B27,0x0E38,0x111B,0x12BE, + 0x12C7,0x10D6,0x0D9C,0x0999,0x05AF,0x0260,0xFF2D,0xFB35, + 0xF7CE,0xF513,0xF2DE,0xF1B5,0xF1B6,0xF263,0xF44B,0xF591, + 0xF6F6,0xF909,0xFBC5,0xFE7B,0x0077,0x0251,0x050F,0x074E, + 0x08A2,0x0963,0x0A58,0x0B13,0x0A91,0x0788,0xFFDD,0xF476, + 0xE6A5,0xD976,0xCA99,0xBF6B,0xBF5F,0xBF26,0xBF0A,0xBFD7, + 0xBFCF,0xC4D7,0xED8C,0x1857,0x37A7,0x3F23,0x3EAE,0x3F59, + 0x3F37,0x3FAB,0x404D,0x401E,0x3EFE,0x3E96,0x1F14,0xF362, + 0xCF93,0xC08C,0xC080,0xBFE4,0xBFDE,0xC00A,0xC08A,0xBFD6, + 0xC851,0xE2A7,0xFF72,0x17BF,0x25C7,0x2860,0x2522,0x225E, + 0x22B9,0x26D2,0x2DCC,0x33E5,0x361D,0x36D9,0x37C8,0x39AE, + 0x3B33,0x399A,0x3582,0x2E34,0x22DE,0x1284,0xFCEF,0xE45A, + 0xCAD2,0xBF04,0xBF93,0xBF0B,0xBEE4,0xBF60,0xBF53,0xC686, + 0xD933,0xF289,0x0F17,0x2C5D,0x3DD3,0x3EB3,0x3ED2,0x3EF2, + 0x3ECF,0x3EA3,0x3C80,0x2D36,0x1A91,0x0929,0xF8A8,0xEB22, + 0xDF7A,0xD55F,0xCED7,0xCC4E,0xCF2D,0xD616,0xDCA0,0xE143, + 0xE256,0xE212,0xE3BA,0xE8E6,0xF0CF,0xF91F,0xFFE6,0x0467, + 0x0950,0x102C,0x19D0,0x23B1,0x2BF4,0x3148,0x3365,0x3240, + 0x2DB7,0x2548,0x1A26,0x0BD0,0xFBFB,0xECDB,0xDFFE,0xD5C8, + 0xCCB8,0xC55F,0xC162,0xC1F8,0xC889,0xD3B2,0xE171,0xEF65, + 0xFCA6,0x07FE,0x123A,0x1B83,0x22CC,0x2793,0x28D8,0x2661, + 0x2218,0x1D3F,0x17B7,0x1158,0x0A47,0x0332,0xFDCF,0xF899, + 0xF4FE,0xF241,0xEE5D,0xEABE,0xE879,0xE386,0xE28D,0xE2C6, + 0xE3BB,0xE51B,0xE789,0xEAC2,0xEFC6,0xF69D,0xFE71,0x0709, + 0x0F35,0x1660,0x1C90,0x21BA,0x24F8,0x253B,0x229E,0x1D87, + 0x16CD,0x0E5F,0x05AE,0xFCF3,0xF4FE,0xED2B,0xE598,0xDFAD, + 0xDD84,0xDE43,0xE0A6,0xE3E4,0xE877,0xEE20,0xF443,0xFABD, + 0x0089,0x05C3,0x0A6D,0x0E2F,0x1134,0x135B,0x143B,0x13CA, + 0x1242,0x1088,0x0FB8,0x0E61,0x0C35,0x0871,0x04CE,0x00D7, + 0xFCAC,0xF89A,0xF503,0xF19C,0xEE02,0xEB76,0xEA14,0xE9F3, + 0xEB2B,0xED1F,0xEF6D,0xF2A6,0xF632,0xFC8D,0x0355,0x0918, + 0x0D61,0x1068,0x129B,0x1429,0x14AE,0x1357,0x10FB,0x0D4D, + 0x0836,0x032A,0xFF18,0xFAFE,0xF657,0xF315,0xF00D,0xEDBC, + 0xEE0A,0xEF71,0xF070,0xF0F9,0xF255,0xF4F7,0xF906,0xFD80, + 0x00B2,0x02A2,0x0454,0x0665,0x0910,0x0BDF,0x0E29,0x0E3E, + 0x0A7E,0x016E,0xF4DD,0xE7C6,0xDB3A,0xCB01,0xC01F,0xC098, + 0xC055,0xBFBE,0xC0E4,0xBFD2,0xCC4B,0xF88D,0x1F0E,0x3A83, + 0x3FC8,0x3FAF,0x4030,0x405C,0x407A,0x409B,0x3FE8,0x4038, + 0x3910,0x11C0,0xEAA8,0xCAC3,0xC0A0,0xC113,0xC095,0xC086, + 0xC0AE,0xC0F2,0xC1F7,0xD2A5,0xEC1D,0x05F0,0x1A82,0x25D8, + 0x26BB,0x2241,0x1F1B,0x20A3,0x25F0,0x2BC4,0x302C,0x32AE, + 0x33E8,0x361B,0x393A,0x3AD7,0x393D,0x3441,0x2BCC,0x2001, + 0x0F7C,0xFACB,0xE30E,0xCA6D,0xBFE3,0xC076,0xC021,0xC023, + 0xC022,0xC19E,0xCF2F,0xE39F,0xFBF9,0x1684,0x314C,0x3F7B, + 0x3F75,0x3FE3,0x3FE1,0x3FA7,0x3FF2,0x39AD,0x28BC,0x187C, + 0x07F1,0xF8C7,0xEC1A,0xE23E,0xD81E,0xD423,0xD421,0xD669, + 0xDBF7,0xE1BA,0xE5B7,0xE7CB,0xE93B,0xEAEF,0xEE25,0xF397, + 0xFA34,0x0131,0x0812,0x0EAF,0x15C6,0x1D9A,0x2584,0x2C74, + 0x31A0,0x334D,0x31CE,0x2CBE,0x245B,0x18A9,0x0A86,0xFB0D, + 0xEC1C,0xDF12,0xD4DF,0xCD53,0xC873,0xC649,0xC7CF,0xCE78, + 0xD8C2,0xE5AA,0xF3E7,0x019A,0x0D62,0x1725,0x1E45,0x23CF, + 0x26DA,0x27B4,0x262F,0x21BA,0x1C5B,0x15F7,0x0F29,0x0880, + 0x027C,0xFD20,0xF844,0xF3E8,0xF0A1,0xEDFC,0xEB3F,0xE8AB, + 0xE692,0xE593,0xE5E3,0xE5AC,0xE7EA,0xEB58,0xEEF3,0xF34F, + 0xF8F6,0x0070,0x08A3,0x10A1,0x1819,0x1E13,0x21F6,0x2344, + 0x22A9,0x2054,0x1B64,0x1445,0x0BA7,0x02BA,0xFA98,0xF2B0, + 0xEAC9,0xE500,0xE190,0xDFDD,0xDF7D,0xE0E7,0xE4F6,0xEA99, + 0xF09E,0xF65D,0xFBE9,0x0126,0x05A8,0x0A68,0x0E12,0x1070, + 0x11E9,0x127D,0x1191,0x106B,0x100E,0x0E2A,0x0A23,0x07EC, + 0x0569,0x0339,0xFFD1,0xFB04,0xF60A,0xF210,0xEEE1,0xECC5, + 0xEA7C,0xE8FE,0xE8C4,0xE9D2,0xEBF4,0xEF03,0xF309,0xF8E6, + 0xFE90,0x034B,0x0810,0x0CC0,0x10B6,0x12B8,0x1252,0x10E7, + 0x0F2F,0x0C95,0x08FC,0x054D,0x00DA,0xFBF0,0xF68A,0xF246, + 0xF019,0xEF60,0xEE70,0xEDA7,0xED7C,0xEE14,0xEFB2,0xF277, + 0xF5A9,0xF88E,0xFB25,0xFDD5,0x001B,0x02C0,0x057A,0x07E1, + 0x09D6,0x0B13,0x0B8B,0x09F5,0x04C2,0xFADD,0xED22,0xDE90, + 0xD01A,0xC1DC,0xBE59,0xBE85,0xBE2C,0xBE7E,0xBFD2,0xBE72, + 0xD11E,0x0139,0x26DE,0x3C4E,0x3E10,0x3E97,0x3F0E,0x3EC6, + 0x3ED5,0x3EB3,0x3D10,0x3F75,0x3102,0x0461,0xDE4F,0xC2DB, + 0xBF76,0xBF49,0xBF22,0xBF4D,0xBF83,0xBFA8,0xC11F,0xD458, + 0xEF8A,0x09A3,0x1D71,0x2664,0x25B7,0x213E,0x1E7A,0x217E, + 0x2831,0x2F7A,0x33AC,0x362A,0x3886,0x3B06,0x3C34,0x3BDD, + 0x391F,0x33C9,0x2AC8,0x1D2E,0x0B56,0xF4E1,0xDA6E,0xC3BE, + 0xBFA3,0xBFF3,0xBF95,0xBFCB,0xBFDE,0xC2C0,0xD1B0,0xE73C, + 0x017F,0x1E5B,0x37B6,0x3F76,0x3F23,0x3F94,0x3F7A,0x3EE5, + 0x3F87,0x36A8,0x2441,0x1358,0x0403,0xF618,0xE880,0xDCDF, + 0xD400,0xCF7B,0xD048,0xD40C,0xD9D2,0xDFD7,0xE277,0xE388, + 0xE45C,0xE7AC,0xECEE,0xF2FD,0xF956,0x0047,0x0814,0x0FCE, + 0x16C3,0x1DB2,0x2574,0x2C7D,0x321A,0x351C,0x332B,0x2CDA, + 0x222C,0x13CB,0x038F,0xF451,0xE79B,0xDBB3,0xD222,0xCAAD, + 0xC500,0xC304,0xC5B3,0xCDFA,0xDA58,0xE8B2,0xF788,0x04CD, + 0x1024,0x19C8,0x20B6,0x256C,0x282C,0x28D3,0x27EE,0x2270, + 0x1CA6,0x1670,0x0EBF,0x06DD,0x0015,0xFB7D,0xF898,0xF683, + 0xF380,0xEF46,0xEB14,0xE72F,0xE487,0xE4AF,0xE62B,0xE819, + 0xEA49,0xEC24,0xEF33,0xF447,0xFB94,0x03EF,0x0CAD,0x14F3, + 0x1C67,0x21F3,0x24D5,0x2517,0x232F,0x202F,0x1B17,0x141E, + 0x0BE5,0x027A,0xF953,0xF024,0xE7F7,0xE24A,0xDF87,0xDE9A, + 0xE000,0xE2A7,0xE682,0xEB26,0xF062,0xF5F3,0xFC56,0x030A, + 0x0906,0x0D74,0x100E,0x11AD,0x1268,0x1255,0x1177,0x10D4, + 0x1095,0x0FB0,0x0CE6,0x0922,0x0526,0x0178,0xFD95,0xF9D2, + 0xF634,0xF275,0xEF6C,0xEC20,0xE985,0xE83C,0xE8CF,0xEA50, + 0xECEA,0xF0B5,0xF78C,0xFD26,0x0180,0x07CB,0x0AC9,0x0F08, + 0x1399,0x1627,0x1730,0x1653,0x13A9,0x0ED1,0x093E,0x052F, + 0x0151,0xFD18,0xF83C,0xF48A,0xF1B8,0xEFD3,0xEE89,0xEE14, + 0xEED9,0xF0A0,0xF31E,0xF61A,0xF8CD,0xFBAC,0xFE53,0x00CC, + 0x02E6,0x054D,0x083F,0x0AFF,0x0CDD,0x0D57,0x0C82,0x0997, + 0x0301,0xF846,0xEB57,0xDE53,0xCFAC,0xC170,0xBF0E,0xBF13, + 0xBF01,0xBF42,0xC081,0xBFDD,0xDF27,0x0C98,0x2E92,0x3E5A, + 0x3E79,0x3F13,0x3F49,0x3F13,0x3EEF,0x3EC1,0x3DBA,0x3E56, + 0x274E,0xFCFA,0xD847,0xC1B4,0xC0B1,0xC028,0xC009,0xC004, + 0xC04E,0xC01F,0xC3BC,0xDA6E,0xF6DD,0x1102,0x219D,0x2663, + 0x230C,0x1EB0,0x1DE2,0x216D,0x291C,0x2FFA,0x3545,0x372C, + 0x36AB,0x380F,0x39FD,0x3981,0x3704,0x30FC,0x270E,0x187A, + 0x03B7,0xEAEE,0xD03E,0xC049,0xBF7D,0xBF63,0xBF0D,0xBF48, + 0xBF39,0xC2CE,0xD2E3,0xE8CC,0x0423,0x21CE,0x3932,0x3E41, + 0x3E97,0x3F1E,0x3EE0,0x3EDE,0x3D73,0x30BB,0x2075,0x1006, + 0xFEE5,0xEECB,0xE096,0xD608,0xCFA2,0xCC93,0xCEDD,0xD491, + 0xDA6C,0xDD98,0xDEB5,0xDFB8,0xE291,0xE77F,0xEDBE,0xF466, + 0xFA6E,0x0065,0x0666,0x0D32,0x14F7,0x1DFF,0x2699,0x2D28, + 0x313A,0x3202,0x2E87,0x269D,0x1A6C,0x0D36,0xFF38,0xF108, + 0xE3A5,0xD79A,0xCD99,0xC5C0,0xC07A,0xC031,0xC5C3,0xD037, + 0xDCEB,0xEA54,0xF809,0x0488,0x0FA3,0x1874,0x1FC1,0x2537, + 0x2830,0x27F7,0x24A4,0x1EA9,0x1767,0x1046,0x09AC,0x03CE, + 0xFEC5,0xFA4E,0xF59D,0xF135,0xED5C,0xE9E0,0xE724,0xE51D, + 0xE424,0xE32D,0xE41B,0xE655,0xE53A,0xE792,0xEC51,0xF298, + 0xFAF4,0x0442,0x0CB4,0x1414,0x1A06,0x1EB1,0x2166,0x22E3, + 0x227A,0x1F8B,0x19CA,0x1139,0x081B,0xFE70,0xF52F,0xECD9, + 0xE603,0xE1D3,0xDF36,0xDE3C,0xDECA,0xE1BE,0xE614,0xEB9B, + 0xF164,0xF79A,0xFE9C,0x0546,0x0A7F,0x0DE7,0x1025,0x11D4, + 0x1225,0x1206,0x126C,0x1282,0x1165,0x0EB8,0x0AB0,0x06D0, + 0x03C0,0x011F,0xFE04,0xFA3C,0xF602,0xF27F,0xEEA9,0xEB25, + 0xE9AA,0xE9B8,0xEAA0,0xEC73,0xEEB8,0xF30A,0xF80C,0xFD37, + 0x027B,0x0795,0x0B68,0x0EC0,0x129A,0x14A4,0x1456,0x12EB, + 0x0FBA,0x0C02,0x07F3,0x03F1,0xFFC8,0xFBAB,0xF685,0xF1AE, + 0xEE3B,0xECF0,0xED00,0xEDF9,0xEFEF,0xF170,0xF255,0xF48D, + 0xF755,0xFA6B,0xFE31,0x01EF,0x048E,0x05CD,0x0790,0x0981, + 0x0B08,0x0C79,0x0D12,0x0AE6,0x0364,0xF6CC,0xE877,0xDB36, + 0xCB97,0xBFEF,0xC019,0xBFCB,0xBFF5,0xC07C,0xC184,0xC52B, + 0xEB55,0x155E,0x3501,0x3FAE,0x3F5A,0x3FE8,0x400B,0x4038, + 0x3FEE,0x3FCF,0x3F64,0x3DC8,0x1F04,0xF4EA,0xD0D4,0xC120, + 0xC165,0xC0D3,0xC0AD,0xC0B6,0xC15F,0xC0B8,0xCA4E,0xE411, + 0xFE22,0x1545,0x2378,0x26E9,0x2435,0x20CC,0x20D8,0x24A7, + 0x2A66,0x3014,0x33B0,0x3579,0x37B5,0x3A28,0x3BBD,0x3AF8, + 0x36FE,0x2F2F,0x23A7,0x13B6,0xFF04,0xE713,0xCDDB,0xC0B4, + 0xC088,0xC04C,0xC01B,0xC07C,0xC02F,0xC80D,0xDB44,0xF328, + 0x0ED9,0x2B1A,0x3DAF,0x3FCE,0x3FB5,0x4031,0x3FD5,0x3FD4, + 0x3D6D,0x2E14,0x1B9E,0x0964,0xF93D,0xEBD5,0xE0DA,0xD7C9, + 0xD182,0xD019,0xD2E8,0xD623,0xDD26,0xE297,0xE3C5,0xE535, + 0xE780,0xEB77,0xF170,0xF7B5,0xFD4E,0x0377,0x0A1E,0x118B, + 0x1A9C,0x2389,0x2AE6,0x3024,0x3272,0x31E2,0x2E3D,0x270E, + 0x1BB9,0x0DE8,0xFE8F,0xEEC2,0xE01E,0xD542,0xCC69,0xC60A, + 0xC2A8,0xC32B,0xC8AA,0xD2DC,0xDFCB,0xEDD9,0xFBB3,0x088F, + 0x1349,0x1B74,0x2261,0x26C3,0x2821,0x266B,0x222F,0x1D41, + 0x172F,0x1076,0x08E0,0x020D,0xFCD2,0xF7F6,0xF2F2,0xEF9B, + 0xED78,0xEAEF,0xE72B,0xE387,0xE17B,0xE153,0xE290,0xE42F, + 0xE775,0xEC9B,0xF099,0xF5FF,0xFD8F,0x05EB,0x0E67,0x1644, + 0x1C7D,0x20C6,0x2391,0x24A4,0x2259,0x1D4C,0x163A,0x0EA4, + 0x0640,0xFD42,0xF47F,0xEC2A,0xE506,0xE0B5,0xDDD8,0xDCEA, + 0xDF3F,0xE436,0xE8E5,0xEE30,0xF3A1,0xF909,0xFF54,0x04ED, + 0x09F6,0x0D70,0x1017,0x114D,0x11BA,0x1105,0x0FC8,0x0E71, + 0x0D3B,0x0BA9,0x08E3,0x05FA,0x0324,0xFEDA,0xF94D,0xF558, + 0xF26A,0xEF81,0xEC9B,0xE9C7,0xE7AD,0xE718,0xE780,0xE949, + 0xEC2B,0xF070,0xF630,0xFC4A,0x018E,0x069D,0x0B64,0x0EF9, + 0x1157,0x120E,0x1207,0x10E5,0x0E94,0x0B69,0x06A7,0x00C6, + 0xFAC7,0xF58F,0xF1D1,0xF02D,0xEF67,0xEE24,0xEC8C,0xEBFE, + 0xECED,0xEEFD,0xF1EB,0xF58C,0xF8CF,0xFB8C,0xFD24,0xFED1, + 0x0179,0x0495,0x06E7,0x0772,0x084D,0x0961,0x07D2,0x00D0, + 0xF5AA,0xE9AB,0xDE88,0xD154,0xC16F,0xBE46,0xBEA7,0xBE7C, + 0xBF96,0xBE1B,0xCE29,0xF698,0x1541,0x2EDD,0x3D60,0x3DF5, + 0x3E74,0x3E86,0x3E87,0x3E96,0x3DC1,0x3EA3,0x30F9,0x0CAB, + 0xEC90,0xCF84,0xC088,0xBFB6,0xBEBD,0xBF2D,0xBF56,0xBF44, + 0xC737,0xD7BC,0xEC22,0x02B1,0x145E,0x1D88,0x1DFF,0x1966, + 0x15C8,0x16F1,0x1B98,0x21C4,0x26B4,0x28A1,0x2A11,0x2C52, + 0x2EC4,0x2FA8,0x2DFD,0x29AC,0x239B,0x1AE1,0x0E45,0xFD25, + 0xE835,0xD26C,0xC22A,0xBF9A,0xBFDC,0xBF86,0xC1EA,0xCB53, + 0xD62E,0xE518,0xF8DA,0x0F7B,0x25C9,0x388A,0x3F7B,0x3F37, + 0x3F4D,0x3FA3,0x3A81,0x2E27,0x20B5,0x12CA,0x05AA,0xFA3E, + 0xF04A,0xE705,0xDF93,0xDA61,0xD961,0xDC29,0xE16C,0xE758, + 0xEB83,0xEC72,0xE9B0,0xE8C7,0xEC31,0xF18E,0xF85F,0xFEEE, + 0x04BB,0x09A6,0x0E5A,0x13F9,0x1B68,0x221D,0x2718,0x29A7, + 0x2943,0x2544,0x1DE9,0x13BA,0x079D,0xF9EE,0xEDA1,0xE478, + 0xDCE1,0xD668,0xD1B2,0xCF9D,0xD04E,0xD5FA,0xDF66,0xEAAF, + 0xF6BE,0x01FC,0x0BB8,0x132D,0x1895,0x1C36,0x1F57,0x20C9, + 0x2049,0x1D08,0x1828,0x12B4,0x0C7F,0x0716,0x0358,0xFECC, + 0xFBD0,0xFA06,0xF799,0xF48A,0xF105,0xEDC6,0xEBBB,0xEAD1, + 0xEBB3,0xEE1A,0xF004,0xF117,0xF2CB,0xF64D,0xFBCE,0x02F2, + 0x0A14,0x10AF,0x168F,0x1B92,0x1E43,0x1F28,0x1EBA,0x1CBB, + 0x18DC,0x1369,0x0D2B,0x0681,0xFF26,0xF71F,0xEFC3,0xEABD, + 0xE7B6,0xE6E4,0xE7E4,0xEA36,0xED60,0xEFF1,0xF358,0xF882, + 0xFE74,0x036F,0x076C,0x0AB8,0x0D79,0x0F34,0x0F56,0x0EEC, + 0x0EBB,0x0F04,0x0EC6,0x0DB6,0x0B92,0x08AB,0x0501,0x01E0, + 0xFF11,0xFCEB,0xFAA1,0xF7A3,0xF3D4,0xF0C4,0xEDD1,0xECA8, + 0xED28,0xEF11,0xF0E4,0xF3E5,0xF743,0xFB23,0xFFA6,0x03DD, + 0x07CC,0x0BAC,0x0E0E,0x0FEE,0x1356,0x1257,0x0F52,0x0C19, + 0x07E8,0x0418,0x0129,0xFE6F,0xFB3A,0xF7E5,0xF515,0xF29B, + 0xF15C,0xF0E0,0xF1C2,0xF417,0xF5F1,0xF76E,0xF90C,0xFAE7, + 0xFCD3,0xFE86,0x0044,0x02D7,0x0563,0x072D,0x081B,0x0866, + 0x08D1,0x0846,0x05B0,0x01E1,0xFE11,0xF9AB,0xF495,0xED2A, + 0xE2AD,0xD75F,0xCE85,0xCB73,0xD074,0xDC85,0xEBFD,0xFA2A, + 0x04FE,0x0E91,0x1872,0x23FE,0x2F55,0x375C,0x39FF,0x364E, + 0x2CE7,0x2068,0x124F,0x053D,0xF9B0,0xEF9D,0xE866,0xE4DE, + 0xE591,0xE5DC,0xE563,0xE5D8,0xE949,0xF090,0xF9E0,0x01F3, + 0x0795,0x08CE,0x07A2,0x0585,0x0528,0x07EC,0x0C29,0x0F41, + 0x1057,0x1058,0x10F8,0x1219,0x13FD,0x16D9,0x16F4,0x14BC, + 0x12D9,0x0E8D,0x0718,0xFE82,0xF5A4,0xED60,0xE6BB,0xE2AE, + 0xE258,0xE3FB,0xE558,0xE6F7,0xEA5F,0xF106,0xFABA,0x055A, + 0x0E90,0x15BD,0x1973,0x1A16,0x1858,0x1532,0x1354,0x1252, + 0x0F3F,0x0ABF,0x0678,0x0296,0xFEFF,0xFBEE,0xF92F,0xF7BE, + 0xF6B6,0xF611,0xF548,0xF406,0xF220,0xF0F5,0xF01B,0xF03F, + 0xF261,0xF4FF,0xF646,0xF6A4,0xF734,0xF8CD,0xFB1D,0xFD78, + 0xFFFF,0x0298,0x041B,0x0423,0x03DE,0x032C,0x018A,0xFFB3, + 0xFDB0,0xFB9A,0xF9E9,0xF861,0xF734,0xF5AD,0xF3FC,0xF295, + 0xF1EE,0xF19C,0xF13E,0xF12E,0xF101,0xF08F,0xEFEB,0xEF52, + 0xEEC2,0xEDC1,0xED11,0xEC67,0xEBB7,0xEAD0,0xE9F7,0xE91F, + 0xE8A1,0xE816,0xE7FB,0xE78B,0xE6C6,0xE618,0xE5AA,0xE512, + 0xE3F6,0xE299,0xE220,0xE1CF,0xE1BC,0xE1C5,0xE224,0xE20D, + 0xE1C4,0xE263,0xE49E,0xE355,0xE446,0xE51B,0xE4C3,0xE489, + 0xE530,0xE587,0xE504,0xE4DC,0xE516,0xE555,0xE539,0xE552, + 0xE599,0xE5DC,0xE5BB,0xE632,0xE697,0xE6AE,0xE71C,0xE7F4, + 0xE831,0xE82A,0xE7E2,0xE7C6,0xE828,0xE88C,0xE980,0xEA93, + 0xEB63,0xEC6A,0xECE2,0xED5F,0xEE45,0xEF26,0xEFB4,0xF033, + 0xF046,0xF0DC,0xF0E7,0xF0E9,0xF16F,0xF22B,0xF25E,0xF2B9, + 0xF33E,0xF3CE,0xF45F,0xF4C4,0xF54C,0xF540,0xF54E,0xF600, + 0xF667,0xF6EC,0xF768,0xF7BD,0xF84B,0xF8EF,0xF990,0xFAB2, + 0xFB2D,0xFAE7,0xF9CF,0xFABE,0xFB3D,0xFB48,0xFC18,0xFC64, + 0xFCF4,0xFD6C,0xFD8A,0xFDBF,0xFE34,0xFEB0,0xFEED,0xFF9F, + 0x002B,0x0031,0x003C,0x0158,0x01BF,0x017B,0x0233,0x0366, + 0x03A6,0x0341,0x0413,0x04A3,0x04A8,0x054B,0x0609,0x0663, + 0x06F1,0x073A,0x07CA,0x0801,0x0803,0x080D,0x08A6,0x090D, + 0x0948,0x0933,0x09DB,0x0A20,0x0A41,0x0B92,0x0B71,0x0A4B, + 0x0A35,0x0A3B,0x0A74,0x0AD8,0x0B24,0x0B86,0x0B8B,0x0C1F, + 0x0CEF,0x0DAA,0x0DBE,0x0E00,0x0E45,0x0E4F,0x0E25,0x0E6E, + 0x0E52,0x0E7B,0x0E92,0x0EC4,0x0E9A,0x0EE4,0x0F0F,0x0F2C, + 0x0F22,0x0F2D,0x0EAD,0x0EDF,0x0EBA,0x0EB0,0x0E5E,0x0E4A, + 0x0E56,0x0E48,0x0F12,0x0F43,0x0EFE,0x0EC6,0x0EBC,0x0EEB, + 0x0F5B,0x0F43,0x0FB0,0x0F73,0x0F19,0x0FBB,0x0FB7,0x0F88, + 0x0F4A,0x0F61,0x0F48,0x0F46,0x0F4E,0x0F2F,0x0F14,0x0EC2, + 0x0E6E,0x0ED8,0x0F1C,0x0F12,0x0F06,0x0EC6,0x0EDD,0x0E8D, + 0x0EB4,0x0EDF,0x0EEC,0x0E92,0x0E0E,0x0E1F,0x0E4F,0x0E6B, + 0x0E7B,0x0EDC,0x0D49,0x0E6D,0x0F3C,0x0EAA,0x0E69,0x0E67, + 0x0E6C,0x0DF2,0x0DE4,0x0DC2,0x0D82,0x0DCB,0x0D97,0x0D60, + 0x0D0C,0x0D14,0x0D21,0x0CDA,0x0C70,0x0C48,0x0C02,0x0BD1, + 0x0BC5,0x0B58,0x0B46,0x0B8C,0x0B61,0x0B2F,0x0ADF,0x0B0B, + 0x0AF7,0x0A8E,0x0AB7,0x0A44,0x0A59,0x0A87,0x0A88,0x0A5D, + 0x0A69,0x0A6F,0x0A46,0x0A0A,0x0A3F,0x09EC,0x09D7,0x0994, + 0x093D,0x08B0,0x086E,0x087C,0x08C5,0x08B3,0x08A7,0x084A, + 0x082A,0x0884,0x0814,0x0814,0x0811,0x0825,0x07D1,0x0924, + 0x0B10,0x09D2,0x0979,0x098A,0x0975,0x0961,0x0978,0x0984, + 0x095A,0x08E4,0x0889,0x0840,0x086E,0x08B0,0x08A1,0x085B, + 0x086C,0x0836,0x0833,0x074F,0x07E2,0x0866,0x0790,0x06AB, + 0x06F0,0x06CD,0x0651,0x067C,0x063D,0x0634,0x0626,0x05DC, + 0x059E,0x0535,0x04F4,0x051D,0x04B8,0x04A4,0x0465,0x04A3, + 0x0486,0x046A,0x0493,0x0536,0x04F7,0x03CD,0x03D3,0x04A9, + 0x04BA,0x046D,0x045C,0x0445,0x042C,0x03B1,0x036B,0x0356, + 0x028C,0x024B,0x0220,0x0189,0x011F,0x0155,0x0147,0x0141, + 0x015E,0x0134,0x0110,0x012C,0x0144,0x016F,0x011B,0x0111, + 0x011E,0x0160,0x016A,0x0133,0x013E,0x01AE,0x01D1,0x0196, + 0x01B2,0x01F0,0x01AD,0x0171,0x0168,0x0169,0x0165,0x01CD, + 0x0215,0x0225,0x0226,0x01B8,0x0121,0x00F4,0x010B,0x0120, + 0x00F4,0x00C2,0x00EA,0x00D6,0x013B,0x013C,0x00FA,0x00B9, + 0x00C1,0x0083,0xFFF0,0xFFCB,0xFFCF,0xFF7C,0xFF9E,0xFF00, + 0xFED4,0xFF97,0xFF8C,0xFEC1,0xFED8,0xFF1D,0xFE9D,0xFE8A, + 0xFEB5,0xFEDA,0xFED4,0xFED8,0xFF0A,0xFF33,0xFEE9,0xFF0F, + 0xFF21,0xFEF7,0xFEF8,0xFE6C,0xFE88,0xFE3C,0xFDBE,0xFE52, + 0xFE7F,0xFD5E,0xFC6C,0xFD61,0xFE39,0xFE64,0xFE7E,0xFE75, + 0xFE90,0xFE5F,0xFE2E,0xFE4A,0xFD4B,0xFD00,0xFD19,0xFD19, + 0xFC55,0xFC84,0xFCE4,0xFCA4,0xFC6F,0xFC42,0xFC46,0xFC16, + 0xFC5E,0xFC68,0xFC74,0xFC72,0xFBE8,0xFBE7,0xFC5A,0xFCB0, + 0xFD14,0xFD77,0xFD94,0xFD22,0xFCCD,0xFCFC,0xFD2D,0xFD08, + 0xFCF4,0xFD4E,0xFD65,0xFD2C,0xFCD9,0xFC8D,0xFCAD,0xFCB0, + 0xFCA7,0xFCFE,0xFD27,0xFD5C,0xFD4F,0xFD0C,0xFCF8,0xFCBD, + 0xFD02,0xFD19,0xFD54,0xFD7A,0xFD70,0xFDFE,0xFDAB,0xFD9F, + 0xFD60,0xFD22,0xFDA9,0xFDA0,0xFD8D,0xFD0A,0xFD6B,0xFD7E, + 0xFD25,0xFD41,0xFDA0,0xFDBB,0xFD6C,0xFD76,0xFF4A,0xFD5A, + 0xFD92,0xFE2B,0xFDD2,0xFD9D,0xFE04,0xFE11,0xFE30,0xFE58, + 0xFDFE,0xFE06,0xFE1E,0xFE76,0xFE9A,0xFEBA,0xFECA,0xFF1D, + 0xFEDE,0xFF02,0xFED2,0xFEA4,0xFEE8,0xFF0E,0xFF27,0xFEF0, + 0xFF12,0xFF2D,0xFEDD,0xFEBC,0xFEF9,0xFF1A,0xFF4A,0xFF51, + 0xFF10,0xFEF7,0xFED5,0xFF08,0xFF62,0xFF66,0xFF36,0xFF41, + 0xFECB,0xFEBB,0xFE90,0xFE90,0xFF11,0xFF0A,0xFF1B,0xFEC7, + 0xFEF7,0xFF80,0xFFD2,0x0074,0x0155,0x022E,0x036A,0x041B, + 0x046A,0x03F2,0x0444,0x055E,0x0689,0x0794,0x06B5,0x072C, + 0x07FB,0x082B,0x0870,0x08A1,0x0906,0x0979,0x09C1,0x0A52, + 0x0A5E,0x09F3,0x0991,0x0962,0x0954,0x0A14,0x0B26,0x0CFD, + 0x0D42,0x0BA3,0x0BED,0x0DA3,0x0EBA,0x0F32,0x0FC7,0x104D, + 0x1095,0x1117,0x1137,0x1213,0x12A5,0x1259,0x120C,0x1266, + 0x1396,0x149A,0x153F,0x14C6,0x14EA,0x1553,0x1590,0x1554, + 0x15AD,0x1792,0x17D6,0x1677,0x162A,0x1684,0x16A8,0x167C, + 0x15E4,0x15B0,0x15F6,0x16B1,0x17BB,0x1878,0x17B3,0x1748, + 0x17B1,0x17E7,0x185F,0x182C,0x17B6,0x1740,0x173E,0x173D, + 0x16EF,0x16A5,0x1673,0x15C9,0x152C,0x14D3,0x1553,0x1669, + 0x15C6,0x143C,0x12BA,0x1203,0x124C,0x126E,0x1232,0x117C, + 0x1082,0x0FA3,0x0EDF,0x0F28,0x0EF4,0x0EF7,0x0E7D,0x0D8D, + 0x0CF6,0x0D64,0x0D89,0x0D67,0x0CA0,0x0BD4,0x0B03,0x0A11, + 0x0A07,0x0A47,0x0A5A,0x09AB,0x08B8,0x0766,0x06D8,0x06E9, + 0x06F4,0x06D1,0x0648,0x0513,0x0381,0x004A,0xFA42,0xF224, + 0xE9BC,0xE19B,0xD7CC,0xCC11,0xC2AC,0xC0A7,0xC2FF,0xD66C, + 0xF07D,0x0A57,0x2023,0x2EB6,0x3770,0x3D53,0x3F84,0x3F1B, + 0x3F99,0x3839,0x265B,0x12E0,0xFF0C,0xEE5F,0xE2F7,0xDCC6, + 0xDA36,0xDBBB,0xE02D,0xE6B8,0xEA41,0xEA36,0xE85A,0xE70B, + 0xE843,0xEB49,0xEEAA,0xF0B4,0xEFBE,0xEE87,0xF0E5,0xF923, + 0x061E,0x13BA,0x1EE2,0x2576,0x2759,0x2524,0x1FED,0x18B6, + 0x0E5E,0x01BA,0xF41D,0xE6F1,0xDB7A,0xD221,0xCAFA,0xC748, + 0xC6DE,0xCB07,0xD349,0xDE3F,0xE936,0xF0B2,0xF4B1,0xF6B6, + 0xF8C0,0xFB6D,0xFF27,0x033E,0x067D,0x04F8,0x0256,0x00CB, + 0x01EC,0x046A,0x0716,0x079B,0x055D,0x0176,0xFB80,0xF411, + 0xEBC7,0xE319,0xDB0D,0xD535,0xD1EF,0xD07C,0xD0B8,0xD234, + 0xD6DE,0xDD53,0xE4EF,0xEDA1,0xF7CA,0x0027,0x0582,0x076C, + 0x070E,0x05CD,0x03C0,0x0172,0xFF5F,0xFC92,0xF88D,0xF4D0, + 0xF11A,0xEDD1,0xEB37,0xE9E7,0xE8BF,0xE743,0xE588,0xE3C2, + 0xE088,0xDC44,0xDAAF,0xDB87,0xDDA1,0xE0D9,0xE511,0xE9EF, + 0xEF43,0xF476,0xF945,0xFDBE,0x0198,0x049B,0x0678,0x0654, + 0x042F,0x009D,0xFAA4,0xF41F,0xEF85,0xEC51,0xE9B4,0xE6F8, + 0xE463,0xE234,0xE158,0xE16C,0xE214,0xE36A,0xE593,0xE80D, + 0xEA4D,0xEBA3,0xEC64,0xED44,0xEEE6,0xF162,0xF4ED,0xF939, + 0xFCC1,0xFEB8,0xFFEE,0x0083,0x0116,0x0116,0xFF6E,0xFCE6, + 0xF9B0,0xF58B,0xF16A,0xECF8,0xE91D,0xE6A7,0xE54D,0xE444, + 0xE47C,0xE6A6,0xEA64,0xECFC,0xEE74,0xEFF4,0xF34C,0xF784, + 0xFAA1,0xFC83,0xFD0D,0xFDF1,0xFD6B,0xFCE7,0xFDBF,0xFF4A, + 0x0078,0x0017,0xFE2F,0xFC8F,0xFA2B,0xFA14,0xF805,0xF3FF, + 0xF28A,0xF034,0xEDFA,0xEBEE,0xEB4C,0xEB6D,0xEC38,0xECF3, + 0xEF61,0xF28E,0xF60C,0xF928,0xFBC8,0xFE2A,0xFFBD,0x01AC, + 0x0244,0x0260,0x0256,0x0140,0x0003,0xFEA6,0xFCE1,0xFB48, + 0xFA02,0xF8D8,0xF7EE,0xF651,0xF519,0xF49B,0xF463,0xF374, + 0xF29A,0xF1D4,0xF1E7,0xF246,0xF390,0xF585,0xF77E,0xF8F7, + 0xFA6C,0xFC5C,0xFE26,0x0007,0x01B8,0x02F5,0x02B0,0x00DB, + 0xFBC7,0xF1C3,0xE3C8,0xD27A,0xC25B,0xBF91,0xBFC4,0xBF53, + 0xBF8D,0xBFC3,0xC19F,0xBFA4,0xE05B,0x2161,0x3D81,0x3D50, + 0x3E7A,0x3EF6,0x3ECB,0x3EC0,0x3EAD,0x3D77,0x3EBC,0x2BDC, + 0xFFA4,0xDE0B,0xC664,0xBF74,0xBFE3,0xC031,0xCC36,0xD73F, + 0xD9E1,0xD6EE,0xD322,0xD1AD,0xD548,0xDD51,0xE424,0xE6A4, + 0xE5DC,0xE79E,0xF2C6,0x0A07,0x2BA6,0x3F35,0x3F60,0x3FDE, + 0x4005,0x4009,0x3F8D,0x3F96,0x3B56,0x1FAD,0x010D,0xE439, + 0xCA5A,0xC0D6,0xC0C5,0xC013,0xC05E,0xC066,0xC2C8,0xD80A, + 0xEEC9,0xFE38,0x0798,0x0D65,0x12E2,0x19F9,0x21CC,0x27F9, + 0x2A7A,0x29EF,0x2941,0x2B1A,0x2EEC,0x3355,0x36E6,0x3750, + 0x33AA,0x2B29,0x1C78,0x0883,0xF20C,0xDC45,0xC902,0xC0E7, + 0xC0DB,0xC08F,0xC095,0xC082,0xC379,0xD3E7,0xE8EC,0xFF87, + 0x14F2,0x266E,0x3222,0x36F3,0x370B,0x343A,0x2F4F,0x28DD, + 0x21E4,0x1B8C,0x14DD,0x0D91,0x05C7,0xFE5A,0xF90E,0xF522, + 0xF18C,0xED83,0xE86A,0xE234,0xDADD,0xD38E,0xCE5D,0xCD54, + 0xD0C4,0xD75E,0xE155,0xED27,0xFAC3,0x0834,0x14B9,0x2019, + 0x2A8A,0x32CB,0x36A0,0x3553,0x3050,0x2602,0x19D0,0x0EF8, + 0x01C7,0xF789,0xEFEF,0xE985,0xE48F,0xE119,0xDF7D,0xDEEC, + 0xE027,0xE2B7,0xE625,0xE9DE,0xEDC3,0xF0F0,0xF36D,0xF649, + 0xFB09,0x0123,0x0860,0x0F87,0x1749,0x1D8A,0x20E2,0x229A, + 0x2270,0x2065,0x1C75,0x15EC,0x0DFF,0x0514,0xFAE0,0xF0CB, + 0xE779,0xE0C3,0xDC7C,0xDB4B,0xDCC0,0xE0A2,0xE58E,0xEAC0, + 0xEF94,0xF4E8,0xFAF5,0x00EE,0x068F,0x0A8E,0x0DA6,0x0F20, + 0x1037,0x1143,0x11A4,0x11F9,0x127B,0x11A6,0x0F74,0x0CBD, + 0x0918,0x049F,0xFF2D,0xFAD3,0xF56B,0xF002,0xEC7E,0xE912, + 0xE66A,0xE541,0xE65A,0xE9D8,0xEE77,0xF491,0xFAB9,0x00F6, + 0x06A0,0x0BB1,0x0FE1,0x127C,0x13B9,0x13FA,0x128E,0x11A4, + 0x10F3,0x0DC7,0x0904,0x04BD,0x0137,0xFE3C,0xFBCD,0xF954, + 0xF697,0xF407,0xF161,0xEEF6,0xEDAA,0xEDA7,0xEE76,0xEFE7, + 0xF205,0xF4F6,0xF915,0xFCF4,0x008D,0x04DB,0x0982,0x0D87, + 0x0F5A,0x10DF,0x112B,0x0BBD,0xFEA7,0xECD9,0xD8A6,0xC472, + 0xBEAE,0xBF1D,0xBE86,0xBE7E,0xBEEB,0xC020,0xC142,0xEF86, + 0x2DB0,0x3DC4,0x3CD0,0x3DDF,0x3E09,0x3DF4,0x3DE4,0x3DA7, + 0x3CAF,0x3DC9,0x2554,0xFC57,0xE052,0xCDFD,0xC46C,0xC42E, + 0xCCA8,0xD90C,0xE230,0xE349,0xDD94,0xD717,0xD49C,0xD7AC, + 0xDE2C,0xE317,0xE2E7,0xE10D,0xE403,0xF306,0x0E9D,0x310B, + 0x3EA3,0x3DCD,0x3E70,0x3E85,0x3E84,0x3DDA,0x3E8E,0x3863, + 0x1AE6,0xFCE2,0xE095,0xC757,0xBE62,0xBEFF,0xBEA2,0xBEFC, + 0xBE6A,0xC6DB,0xDEAC,0xF15A,0xFC6F,0x0309,0x080C,0x0E48, + 0x1546,0x1C3C,0x2107,0x21DB,0x2242,0x24B1,0x2649,0x2D47, + 0x3396,0x3738,0x37A7,0x3357,0x28C9,0x189B,0x03BB,0xED31, + 0xD8D1,0xC7BE,0xC00D,0xBF73,0xBF71,0xBFE7,0xBF56,0xC4C2, + 0xD797,0xED3A,0x038F,0x177C,0x2663,0x2FFA,0x33DB,0x339A, + 0x30D6,0x2C66,0x26B0,0x215C,0x1B24,0x14B9,0x0DD2,0x0739, + 0x0118,0xFC6A,0xF872,0xF48D,0xF05D,0xEB07,0xE3D7,0xDA78, + 0xD162,0xCCD5,0xCD35,0xD1A2,0xDA0C,0xE43B,0xEFA0,0xFBD5, + 0x078C,0x144C,0x2159,0x2CDF,0x3426,0x35C2,0x332F,0x2C3E, + 0x22B0,0x1751,0x0C2E,0x01E6,0xF81E,0xED9C,0xE6B1,0xE312, + 0xE156,0xE059,0xDF7A,0xE023,0xE2AF,0xE607,0xE93B,0xEC43, + 0xEEC4,0xF167,0xF4D8,0xF98D,0x00B2,0x0989,0x1214,0x189E, + 0x1CBF,0x2052,0x22C6,0x230C,0x2117,0x1CF7,0x1619,0x0D6F, + 0x0445,0xFA2A,0xF0E2,0xE95D,0xE2F0,0xDF7F,0xDEFE,0xE041, + 0xE367,0xE885,0xED71,0xF314,0xF89A,0xFDF5,0x03E8,0x08A9, + 0x0D8D,0x1043,0x1137,0x123A,0x134D,0x1448,0x149A,0x1428, + 0x1368,0x12AB,0x106D,0x0CB8,0x07D2,0x01F7,0xFC9D,0xF7DF, + 0xF285,0xEE3C,0xEB0B,0xE8B7,0xE7EC,0xE99F,0xED9A,0xF28C, + 0xF861,0xFE5D,0x03E1,0x09FD,0x0F46,0x135A,0x1660,0x1803, + 0x1828,0x166A,0x13F6,0x116C,0x0EAD,0x0C4F,0x095F,0x05D9, + 0x021E,0xFE5F,0xFB72,0xF932,0xF767,0xF55A,0xF37C,0xF22F, + 0xF1C3,0xF236,0xF32E,0xF4E6,0xF782,0xFAF9,0x0062,0x0597, + 0x09DF,0x0D26,0x0F7E,0x110A,0x121A,0x12E2,0x10F8,0x09C4, + 0xFBA3,0xE7F1,0xD15D,0xC131,0xBFEF,0xBFB0,0xBF46,0xBF75, + 0xC0ED,0xC065,0xC95F,0x03A6,0x3765,0x3EDD,0x3EF8,0x3FFA, + 0x3F70,0x3FC1,0x3F9F,0x3F10,0x3E4F,0x3DA9,0x1F79,0xF8B8, + 0xDE0A,0xCCC1,0xC544,0xC7A0,0xD0D3,0xDBB4,0xE22E,0xE171, + 0xDBEA,0xD6B3,0xD5F8,0xDA29,0xDFBF,0xE2E4,0xE26E,0xE270, + 0xEA84,0xFDC9,0x1BCF,0x39AD,0x3F78,0x3EF4,0x3F79,0x3F7C, + 0x3F5F,0x3E75,0x3F97,0x3482,0x14A6,0xF7E4,0xDC7A,0xC50A, + 0xBF4E,0xBFC2,0xBF8A,0xC01E,0xBF89,0xCD50,0xE40F,0xF3BD, + 0xFEC2,0x060C,0x0C61,0x135C,0x1A55,0x1FA7,0x22C6,0x243E, + 0x25E8,0x2919,0x2E5F,0x3551,0x39B9,0x3C60,0x3ABC,0x344D, + 0x27FA,0x16B0,0x018C,0xEADA,0xD612,0xC5E1,0xC053,0xC052, + 0xC003,0xC059,0xC07D,0xCC07,0xDECC,0xF303,0x089D,0x1CF5, + 0x2B30,0x327E,0x3506,0x3463,0x3050,0x2B40,0x25C1,0x1FDF, + 0x1979,0x12B5,0x0B62,0x04EB,0xFFE7,0xFB4A,0xF75E,0xF2A5, + 0xECCA,0xE587,0xDD8A,0xD531,0xCEA1,0xCB15,0xCBB8,0xCFFF, + 0xD711,0xE20A,0xF01C,0xFDD5,0x0B4D,0x181C,0x2345,0x2CCB, + 0x331E,0x347A,0x30A3,0x282A,0x1D29,0x1151,0x04CB,0xFA02, + 0xF1C8,0xEA9D,0xE44F,0xDF43,0xDCB0,0xDC29,0xDCDA,0xDDF1, + 0xDFB9,0xE2B6,0xE5A9,0xE83E,0xEB53,0xEEFC,0xF332,0xF7A2, + 0xFD68,0x05A5,0x0EC6,0x167F,0x1BA1,0x1E94,0x2070,0x1FB7, + 0x1C74,0x1706,0x104A,0x0838,0xFDE1,0xF335,0xEA11,0xE2FD, + 0xDE05,0xD9F0,0xD8BE,0xDAE0,0xDEF9,0xE46D,0xEA57,0xEFD4, + 0xF4F2,0xF9F4,0xFF99,0x04FF,0x0936,0x0B7F,0x0CE5,0x0D8D, + 0x0F09,0x1047,0x112D,0x107E,0x0FA8,0x0E80,0x0C3C,0x07D1, + 0x0213,0xFC31,0xF567,0xEEBE,0xEBD8,0xE868,0xE4CF,0xE4C0, + 0xE41A,0xE521,0xE855,0xED24,0xF47B,0xFC6C,0x034D,0x0903, + 0x0CD0,0x0FEA,0x11DA,0x12F0,0x1392,0x12A0,0x1149,0x0EAB, + 0x0B11,0x07C3,0x0462,0x00C0,0xFD6B,0xFA61,0xF7F7,0xF60F, + 0xF47A,0xF277,0xEF95,0xEDCD,0xECF6,0xEE3C,0xF0B4,0xF3E7, + 0xF6FA,0xF9C3,0xFD66,0x01D1,0x068D,0x0AF6,0x0E4F,0x1038, + 0x113C,0x10EA,0x0D7A,0x047E,0xF46A,0xE09B,0xCAD8,0xBFCE, + 0xBFD3,0xBF75,0xBF66,0xBF9B,0xC166,0xBF5C,0xD1A3,0x13EE, + 0x3BCE,0x3EA9,0x3F36,0x3F76,0x3E98,0x3DEC,0x3E64,0x3D9F, + 0x3E16,0x37F2,0x11E6,0xEF7D,0xD72D,0xC753,0xC1F1,0xC699, + 0xD118,0xDBBF,0xE0FD,0xDF63,0xD898,0xD36B,0xD414,0xD8FE, + 0xDF93,0xE3C5,0xE39D,0xE3C8,0xECF6,0x01BD,0x22B8,0x3D98, + 0x3F69,0x3F7F,0x3FE6,0x3FEA,0x3FBC,0x3F0D,0x3F88,0x2DF7, + 0x0D34,0xF022,0xD3D2,0xC183,0xC084,0xC061,0xC03D,0xC0E9, + 0xC1A5,0xD31F,0xE8C9,0xF80C,0x0239,0x0833,0x0D91,0x1425, + 0x1B8F,0x2152,0x24A7,0x2674,0x2841,0x2BA9,0x3104,0x36BD, + 0x3B3F,0x3D0D,0x3AAB,0x3325,0x2656,0x13E7,0xFD0A,0xE561, + 0xD0EF,0xC374,0xC0CA,0xC0D2,0xC0D7,0xC10B,0xC1B5,0xCF20, + 0xE46A,0xFAE3,0x10D6,0x21EE,0x2CE4,0x32F4,0x3568,0x358F, + 0x323E,0x2C48,0x24C5,0x1D5F,0x1817,0x130D,0x0D5C,0x067E, + 0x0008,0xFA62,0xF638,0xF2DE,0xEE61,0xE74D,0xDDF2,0xD414, + 0xCD12,0xCB49,0xCEA6,0xD55B,0xDDC7,0xE78E,0xF30E,0x00D5, + 0x0FA0,0x1DD7,0x2939,0x30D7,0x343F,0x33FD,0x2FD9,0x28EC, + 0x1EA2,0x129E,0x06FB,0xFD16,0xF33E,0xEC07,0xE9D2,0xE510, + 0xE170,0xE068,0xE10B,0xE334,0xE58B,0xE7C6,0xE9F4,0xEC50, + 0xEF45,0xF1F3,0xF687,0xFD37,0x049F,0x0BB0,0x127A,0x1933, + 0x1F80,0x2318,0x23E5,0x227B,0x1F11,0x1911,0x112C,0x0885, + 0xFEEB,0xF4DE,0xEB42,0xE3C5,0xDF45,0xDDB4,0xDE0D,0xDFB9, + 0xE30A,0xE8A2,0xEEDE,0xF4C4,0xFA9C,0xFFFB,0x04C1,0x089B, + 0x0BD9,0x0EEF,0x1141,0x12E1,0x1388,0x13C5,0x13D1,0x1378, + 0x126F,0x105D,0x0DA6,0x096F,0x03A2,0xFD02,0xF5F1,0xF08A, + 0xECE9,0xE9E7,0xE8E5,0xE7C7,0xE6E4,0xE8F6,0xED0C,0xF29D, + 0xF958,0xFF9D,0x05A2,0x0B46,0x1084,0x143B,0x154C,0x14C3, + 0x1424,0x12EF,0x119C,0x0F9E,0x0CB7,0x07DD,0x032E,0xFFD7, + 0xFCD3,0xFAB1,0xF943,0xF708,0xF35D,0xF082,0xEF56,0xEECD, + 0xEEDD,0xEF60,0xF060,0xF30D,0xF6FD,0xFB7E,0xFFCF,0x03AD, + 0x0685,0x0983,0x0D0A,0x106D,0x10E6,0x0C5C,0x00E6,0xEEE8, + 0xDAE5,0xC78A,0xBEFA,0xBF3C,0xBEDB,0xBEEB,0xBF31,0xC0EC, + 0xBEE7,0xE22F,0x2270,0x3D32,0x3D21,0x3E28,0x3DFF,0x3DE6, + 0x3DF7,0x3DDA,0x3CA2,0x3DEB,0x2CDE,0x0322,0xE352,0xCD12, + 0xC1E2,0xC163,0xC9FC,0xD68D,0xDFF8,0xE226,0xDDF2,0xD781, + 0xD3E5,0xD640,0xDC56,0xE108,0xE0CB,0xDE50,0xE0EC,0xEDF1, + 0x0660,0x2811,0x3DAB,0x3DE8,0x3E48,0x3E92,0x3E69,0x3DF9, + 0x3E25,0x3A47,0x1F39,0x00BA,0xE5E0,0xCBFF,0xBEDD,0xBF17, + 0xBEB4,0xBF34,0xBE9E,0xC3C2,0xDACD,0xEF04,0xFB52,0x018D, + 0x064D,0x0C0B,0x13B7,0x1A1B,0x1E93,0x2092,0x2189,0x22ED, + 0x2677,0x2C15,0x3150,0x356A,0x37BC,0x3298,0x2A98,0x1DA9, + 0x097E,0xF178,0xDA93,0xC7D3,0xBF96,0xBF87,0xBF49,0xBFA9, + 0xBF73,0xC229,0xD23C,0xE7A5,0xFF0A,0x142F,0x2294,0x2B6B, + 0x3050,0x31A0,0x301A,0x2C09,0x25AF,0x1EB8,0x1811,0x11FD, + 0x0CF3,0x0791,0x01FF,0xFC06,0xF6E0,0xF322,0xF039,0xEBE8, + 0xE452,0xDB25,0xD23B,0xCCC5,0xCBD1,0xCFC3,0xD792,0xE16A, + 0xEB7D,0xF6CD,0x040E,0x11FA,0x1F78,0x29CD,0x303C,0x3235, + 0x3043,0x2AFF,0x2369,0x190D,0x0CBC,0x0107,0xF7AF,0xF053, + 0xEAC6,0xE719,0xE3ED,0xE0E3,0xDD81,0xDDEB,0xE0CB,0xE4CB, + 0xE7D0,0xE9C7,0xEB9F,0xED91,0xF120,0xF5F5,0xFCC0,0x04C0, + 0x0C45,0x12CC,0x1837,0x1CEA,0x2036,0x2198,0x1ED1,0x1965, + 0x1361,0x0C99,0x0433,0xFA7E,0xF153,0xE8D7,0xE274,0xDECA, + 0xDDB0,0xDF0B,0xE1C3,0xE5A3,0xEA4C,0xF055,0xF68D,0xFB9A, + 0x00A3,0x053B,0x0A31,0x0DC9,0x0F74,0x104B,0x112A,0x13C1, + 0x14E7,0x13C6,0x132F,0x128E,0x1008,0x0B70,0x0670,0x01DB, + 0xFD39,0xF767,0xF1A9,0xED9C,0xEB54,0xE99D,0xE8DF,0xE8F6, + 0xEBC1,0xF00A,0xF57E,0xFC01,0x02A6,0x086C,0x0CFE,0x1086, + 0x1343,0x158A,0x167E,0x156F,0x1355,0x10A5,0x0E26,0x0AFC, + 0x0752,0x0438,0x00E6,0xFDE5,0xFB65,0xF8F1,0xF6A1,0xF481, + 0xF1E5,0xEFE0,0xEF40,0xF062,0xF1FC,0xF3C2,0xF5C2,0xF8D5, + 0xFCAD,0x00C9,0x04FD,0x094A,0x0D35,0x0FCF,0x10BB,0x105D, + 0x0E72,0x0837,0xFBB4,0xE9E6,0xD521,0xC373,0xBFFB,0xC015, + 0xBFD8,0xBFEF,0xC09F,0xC1B3,0xC291,0xF50E,0x30E7,0x3FA5, + 0x3ECC,0x3FB1,0x400C,0x403C,0x3F28,0x3F88,0x3E8F,0x3F8D, + 0x28C3,0xFDFC,0xE038,0xCCDB,0xC425,0xC545,0xCDF0,0xD972, + 0xE18B,0xE190,0xDB2A,0xD464,0xD38C,0xD8D9,0xE01C,0xE48B, + 0xE425,0xE2A5,0xE72B,0xF6C6,0x134B,0x3574,0x3FEF,0x3EDC, + 0x3F90,0x3FAE,0x3F7A,0x3EFF,0x3F7D,0x3770,0x19F5,0xFBED, + 0xE02B,0xC727,0xBF7C,0xBFDB,0xBF92,0xC02E,0xBF31,0xC88B, + 0xE0E6,0xF245,0xFD15,0x0352,0x088E,0x1014,0x1810,0x1F0E, + 0x227E,0x22C6,0x2318,0x253B,0x29FB,0x300E,0x35A8,0x3874, + 0x37F6,0x3454,0x2BE6,0x1B25,0x05A4,0xED7C,0xD725,0xC5F0, + 0xC04C,0xC06A,0xBFF7,0xC03B,0xC029,0xC55F,0xD7D1,0xEED7, + 0x068B,0x1AAF,0x2862,0x3029,0x33D4,0x3364,0x3267,0x2E96, + 0x281C,0x20B6,0x19C6,0x1334,0x0CB6,0x06B6,0x00D8,0xFB20, + 0xF67F,0xF1E0,0xECF7,0xE732,0xE026,0xD808,0xCFBC,0xCA75, + 0xC96F,0xCEB0,0xD820,0xE2D8,0xEDDF,0xFAC2,0x07B1,0x1461, + 0x217C,0x2C6A,0x330D,0x34BA,0x3127,0x2A47,0x216B,0x1694, + 0x0A5E,0xFDBE,0xF2CB,0xEBDB,0xE7A5,0xE3AD,0xDF4F,0xDC2B, + 0xDB10,0xDC51,0xDF69,0xE304,0xE6A8,0xE98C,0xEAE2,0xECCA, + 0xF026,0xF6A4,0xFE83,0x0640,0x0D9A,0x1490,0x1A8A,0x1EAA, + 0x2068,0x2043,0x1E0C,0x18AC,0x11B2,0x094B,0xFFF6,0xF6FC, + 0xECFA,0xE409,0xDDF4,0xDB50,0xDB6A,0xDD40,0xE03C,0xE48E, + 0xE9BD,0xEF86,0xF58C,0xFB85,0x015E,0x05BA,0x0903,0x0BF3, + 0x0E60,0x0FFA,0x10A8,0x1168,0x11C7,0x11B8,0x10C3,0x0F3F, + 0x0C9C,0x08BC,0x0292,0xFC40,0xF6CE,0xF1B3,0xECDD,0xE833, + 0xE470,0xE277,0xE19F,0xE4BE,0xE7D4,0xEC2F,0xF45A,0xFA78, + 0xFFD1,0x05AC,0x0AF8,0x0E53,0x112A,0x12FE,0x13BD,0x12E4, + 0x104B,0x0C94,0x0997,0x0701,0x047D,0x01B8,0xFDFD,0xFA5C, + 0xF706,0xF44F,0xF28E,0xF161,0xEFDD,0xEE4C,0xED09,0xED39, + 0xEF19,0xF22A,0xF5BE,0xF9B7,0xFD53,0x00E6,0x0567,0x0A71, + 0x0EA4,0x1183,0x11EA,0x1155,0x0EE4,0x0888,0xFDB1,0xEF24, + 0xDEEE,0xCC86,0xC00F,0xBF93,0xBF7F,0xBF73,0xC0A9,0xBF8D, + 0xD0F1,0x0062,0x27AB,0x3D3C,0x3EFB,0x3F56,0x3FA6,0x3F9C, + 0x3F81,0x3E9B,0x3FD8,0x340A,0x12E0,0xFA41,0xE748,0xDB6A, + 0xD763,0xDA25,0xE09B,0xE6A2,0xE9B2,0xE7E1,0xE313,0xDE8E, + 0xDD62,0xDFA9,0xE364,0xE592,0xE59A,0xE6BB,0xEBF3,0xF9AD, + 0x104C,0x2A1A,0x3D26,0x3F6C,0x3F69,0x3FA0,0x3F31,0x3FEB, + 0x3953,0x2478,0x0EE7,0xF9BD,0xE781,0xD737,0xC855,0xC0C7, + 0xC0E0,0xC0DE,0xCBD7,0xDCBD,0xEC16,0xF804,0xFF6E,0x02A7, + 0x045D,0x0887,0x0EB1,0x138E,0x16AA,0x18F1,0x1AF1,0x1D35, + 0x20A0,0x24EB,0x2966,0x2BCE,0x2B3B,0x278A,0x1F98,0x1291, + 0x02BB,0xF1B3,0xE2C5,0xD750,0xCFC7,0xCBD9,0xCAAD,0xCC97, + 0xD242,0xDB64,0xE7D0,0xF689,0x05BF,0x1382,0x1DB9,0x236D, + 0x2557,0x248A,0x21F6,0x1F10,0x1B85,0x183F,0x14B0,0x0FB8, + 0x0AF3,0x0693,0x030D,0xFF78,0xFB90,0xF7EA,0xF3C6,0xEED0, + 0xE89F,0xE247,0xDD46,0xDA12,0xDA36,0xDD15,0xE27D,0xEB31, + 0xF52F,0xFEBD,0x0780,0x0FF3,0x1809,0x1F05,0x23BD,0x25B7, + 0x238D,0x1E15,0x16C4,0x0E5D,0x0658,0xFF5F,0xF918,0xF3B8, + 0xF023,0xED8E,0xEC35,0xE909,0xE6FE,0xEA26,0xEB85,0xED22, + 0xEEDC,0xF005,0xF193,0xF3BA,0xF641,0xFAA2,0x00E7,0x074B, + 0x0BD4,0x1035,0x144C,0x17FC,0x19DE,0x19AB,0x1732,0x1395, + 0x0E5E,0x07C5,0x001E,0xF9B2,0xF3B6,0xEE01,0xE8B7,0xE67B, + 0xE69F,0xE803,0xEA46,0xECE9,0xF03C,0xF43D,0xF7FF,0xFC73, + 0x00DF,0x0401,0x05C7,0x0700,0x08A5,0x0A9B,0x0C8A,0x0DE4, + 0x0DDB,0x0CE4,0x0BF5,0x0AA2,0x088C,0x0647,0x02D1,0xFEA7, + 0xF9D7,0xF4DF,0xF142,0xEEBC,0xEC8F,0xEB05,0xEA5E,0xEB95, + 0xEEDA,0xF504,0xFA3E,0xFE3E,0x0260,0x05B6,0x087A,0x0ADE, + 0x0D80,0x0F1A,0x0F20,0x0E22,0x0C56,0x0AEE,0x097E,0x0761, + 0x04B7,0x0237,0x0048,0xFEB3,0xFC38,0xFA16,0xF86D,0xF64B, + 0xF407,0xF356,0xF394,0xF390,0xF3D9,0xF4E3,0xF73C,0xFA41, + 0xFD7D,0x002E,0x0289,0x05A2,0x09E0,0x0C30,0x0C32,0x0B94, + 0x090E,0x05A7,0x00A0,0xFC32,0xF8D3,0xF421,0xEC53,0xE624, + 0xE42F,0xE5D9,0xEABF,0xF1B2,0xF98E,0x00E9,0x062C,0x0941, + 0x0B09,0x0CA3,0x0E6E,0x0F75,0x0E7E,0x0A73,0x0668,0x0343, + 0xFFB4,0xFD13,0xFC26,0xFCBC,0xFDFF,0xFEDF,0xFF37,0xFEE6, + 0xFD36,0xFA6C,0xF7C0,0xF5A4,0xF4E2,0xF480,0xF423,0xF3A7, + 0xF3BB,0xF55D,0xF833,0xFC9A,0x022E,0x080F,0x0BE3,0x0DCD, + 0x0E7A,0x0E79,0x0D28,0x0AA6,0x07CC,0x0492,0x0171,0xFE60, + 0xFC0B,0xFA2B,0xF86B,0xF76F,0xF61D,0xF5E2,0xF6A2,0xF63C, + 0xF59D,0xF4D1,0xF3E1,0xF2A2,0xF1C4,0xF0D0,0xF02B,0xEF92, + 0xEF2E,0xEEF4,0xF005,0xF2DF,0xF5B9,0xF780,0xF7DC,0xF7D8, + 0xF7B2,0xF6BB,0xF60D,0xF6BA,0xF308,0xF1C4,0xF0B5,0xEF52, + 0xEE9E,0xEDDC,0xED18,0xEC28,0xEC3D,0xEBEA,0xEBD2,0xEBE2, + 0xEB9B,0xEB43,0xEAEF,0xEA16,0xE975,0xE8A6,0xE89B,0xE85E, + 0xE877,0xE8CC,0xE930,0xE8EC,0xE833,0xE7EB,0xE83C,0xE832, + 0xE7EF,0xE79E,0xE71E,0xE6FF,0xE680,0xE5DF,0xE629,0xE645, + 0xE67F,0xE6F7,0xE767,0xE7BC,0xE832,0xE847,0xE8C8,0xE8FE, + 0xE92C,0xE9D6,0xEA4C,0xEA6C,0xEA92,0xEAD6,0xEB3C,0xEBA4, + 0xEBA4,0xEBCE,0xEC7A,0xED01,0xECF3,0xECD9,0xED10,0xED08, + 0xED1D,0xED45,0xECAF,0xEB37,0xEC03,0xECC6,0xED07,0xED70, + 0xEE21,0xEF39,0xF002,0xF08C,0xF13E,0xF1C1,0xF280,0xF2B4, + 0xF360,0xF3C0,0xF453,0xF50F,0xF60F,0xF679,0xF65E,0xF75B, + 0xF8A4,0xF88C,0xF89C,0xF968,0xF9D6,0xFA5D,0xFB36,0xFB8F, + 0xFB3B,0xFB69,0xFC10,0xFD22,0xFDA5,0xFE21,0xFEC5,0xFF4B, + 0xFFCF,0x000B,0x0053,0x00DD,0x017F,0x025A,0x03EF,0x040B, + 0x0386,0x03BC,0x03F5,0x0458,0x04BE,0x058D,0x0591,0x05DB, + 0x0609,0x0688,0x0752,0x075F,0x0830,0x08DD,0x08F6,0x08F4, + 0x089F,0x0893,0x091E,0x0969,0x09B6,0x0A20,0x0A17,0x0A5D, + 0x0A8A,0x0A7C,0x0AA5,0x0ADB,0x0B81,0x0BB2,0x0BAE,0x0C20, + 0x0C96,0x0C2F,0x0BEC,0x0C19,0x0C06,0x0C86,0x0C96,0x0C61, + 0x0C41,0x0C78,0x0C74,0x0C2D,0x0C20,0x0C45,0x0CD7,0x0CC8, + 0x0CBB,0x0C8F,0x0CE3,0x0CFF,0x0CDE,0x0D2F,0x0D0B,0x0D88, + 0x0E14,0x0DFD,0x0DBE,0x0E0E,0x0E38,0x0E5C,0x0E78,0x0E80, + 0x0EA0,0x0E97,0x0E6C,0x0E44,0x0E2B,0x0E24,0x0E3E,0x0E79, + 0x0EB7,0x0EC9,0x0ED4,0x0CB4,0x0DA1,0x0EBC,0x0DB6,0x0E28, + 0x0E7E,0x0E69,0x0DFE,0x0E07,0x0E3D,0x0E34,0x0E70,0x0E9B, + 0x0EAF,0x0E89,0x0E54,0x0E06,0x0E2F,0x0E55,0x0E58,0x0E8C, + 0x0E73,0x0DF2,0x0D8D,0x0D4C,0x0D2A,0x0D14,0x0DBA,0x0D5E, + 0x0CED,0x0D0F,0x0CEE,0x0D2E,0x0CA2,0x0CBF,0x0D2A,0x0D25, + 0x0CEE,0x0CFF,0x0CBD,0x0C3C,0x0C21,0x0C22,0x0C20,0x0C39, + 0x0C77,0x0CB0,0x0C99,0x0BF5,0x0B9B,0x0BB4,0x0BCB,0x0BCE, + 0x0BB9,0x0B6B,0x0B53,0x0B55,0x0B06,0x0AD2,0x0AD7,0x0AD1, + 0x0BFE,0x0DBA,0x0CE9,0x0C92,0x0C77,0x0C05,0x0BC5,0x0BDA, + 0x0BE7,0x0BF6,0x0BD5,0x0B5D,0x0B82,0x0B96,0x0B65,0x0B9F, + 0x0B75,0x0B3B,0x0B48,0x0AD9,0x0A54,0x0A9F,0x0AE6,0x09FF, + 0x0977,0x099A,0x0997,0x0947,0x093E,0x08FA,0x0915,0x08F5, + 0x0903,0x0946,0x08DB,0x0851,0x0853,0x08B2,0x083D,0x07E5, + 0x07FE,0x07B2,0x07A1,0x07ED,0x083B,0x07F4,0x0666,0x06B0, + 0x077D,0x0787,0x06F9,0x06CF,0x0693,0x06CD,0x071F,0x0686, + 0x061F,0x0593,0x051A,0x04BB,0x042E,0x03AB,0x0432,0x0420, + 0x03C2,0x03DE,0x03AB,0x036E,0x039E,0x03B6,0x03E6,0x03BB, + 0x03B2,0x0389,0x036A,0x0374,0x037C,0x036D,0x0365,0x03C8, + 0x03E5,0x038B,0x0370,0x0356,0x0332,0x039C,0x035B,0x030E, + 0x02F0,0x02E9,0x02C8,0x0314,0x02FA,0x02D9,0x02C1,0x02F6, + 0x02BC,0x027E,0x0286,0x0295,0x021B,0x024E,0x0240,0x01EF, + 0x01B0,0x0196,0x01E8,0x01AF,0x016A,0x00D2,0x00BD,0x00CC, + 0x00DE,0x00A7,0x00C0,0x0129,0x01A8,0x0180,0x017A,0x01B2, + 0x018C,0x00B9,0x0254,0x0244,0x008E,0x0159,0x0124,0x0118, + 0x0167,0x01C5,0x0186,0x012D,0x00D7,0x00A5,0x006F,0x0109, + 0x00E8,0x00D9,0x00FF,0x011D,0x0144,0x00E8,0x0098,0x00A1, + 0x00B6,0x0095,0x00AE,0xFFAC,0xFFB3,0xFFB7,0x0056,0x0087, + 0x002B,0x0077,0x0091,0x0092,0x0109,0x010F,0x0183,0x0284, + 0x025A,0x01AD,0x0157,0x016C,0x013D,0x010D,0x014F,0x015B, + 0x01AF,0x0148,0x014E,0x01AE,0x01A1,0x01B8,0x00F0,0x0127, + 0x0105,0x0111,0x0107,0x00E7,0x010A,0x012A,0x00CC,0x00C2, + 0x009C,0x00D9,0x00DE,0x00BE,0x00C1,0x00BF,0x00E0,0x014E, + 0x01A4,0x0296,0x0353,0x03AC,0x0356,0x03B1,0x04FE,0x0621, + 0x0780,0x08D1,0x0A0F,0x0A86,0x0B4C,0x0B92,0x0BB7,0x0BC3, + 0x0C0B,0x0C8E,0x0C96,0x0C29,0x0C3C,0x0C57,0x0C4C,0x0C56, + 0x0CBA,0x0CCE,0x0CF8,0x0E6A,0x1038,0x0EAD,0x0F59,0x0FE9, + 0x0EED,0x0F94,0x1105,0x1247,0x1348,0x136B,0x126E,0x11B7, + 0x11DB,0x129E,0x139B,0x1435,0x14BB,0x14C5,0x14C1,0x1458, + 0x150A,0x159A,0x15D0,0x15BA,0x15FD,0x169C,0x1766,0x173C, + 0x1684,0x1638,0x15F0,0x15F8,0x16E0,0x177D,0x17D1,0x1807, + 0x1728,0x15F0,0x156F,0x159A,0x1623,0x163D,0x15F7,0x158A, + 0x14A6,0x1415,0x1380,0x12FA,0x1311,0x1320,0x12B5,0x1283, + 0x1291,0x122A,0x10FA,0x0FD7,0x0F9F,0x1080,0x112F,0x102C, + 0x0E7D,0x0BC1,0x0897,0x05E1,0x01F7,0xFF01,0xFC6E,0xF7DD, + 0xF188,0xEBF7,0xE973,0xEADA,0xF13D,0xFB08,0x0603,0x106C, + 0x190F,0x20C9,0x2893,0x3038,0x36DA,0x3B95,0x3C11,0x3972, + 0x3403,0x29C8,0x1DDA,0x11B0,0x050C,0xF940,0xEFA1,0xE7A3, + 0xE26D,0xDF64,0xDD7C,0xDCDF,0xDDE6,0xE2A6,0xEBC1,0xF5F1, + 0xFF89,0x06B7,0x0BC3,0x0EC8,0x1143,0x13BB,0x15FE,0x164B, + 0x139C,0x1249,0x1019,0x0BFC,0x07BB,0x046B,0x00F9,0xFE03, + 0xFC0D,0xFAC1,0xFA3B,0xF94D,0xF5F7,0xF1A0,0xED32,0xE9D7, + 0xE7FA,0xE6BF,0xE608,0xE564,0xE40F,0xE280,0xE21E,0xE4D1, + 0xE8A3,0xECDB,0xF18C,0xF75A,0xFE17,0x038F,0x06ED,0x08C3, + 0x09B3,0x0A0C,0x090C,0x078E,0x0536,0x01A2,0xFB54,0xF364, + 0xEBB3,0xE5C2,0xE1BB,0xDF05,0xDD59,0xDBFC,0xDACB,0xDAEB, + 0xDCB6,0xDFE5,0xE440,0xE904,0xECAF,0xEFE7,0xF342,0xF6F7, + 0xFA85,0xFC40,0xFC46,0xFB68,0xFAA0,0xF9DF,0xF934,0xF881, + 0xF772,0xF59B,0xF2BC,0xF033,0xEF08,0xEED5,0xEDD0,0xEBCB, + 0xE978,0xE829,0xE717,0xE53B,0xE5C1,0xE519,0xE384,0xE384, + 0xE31F,0xE458,0xE6AA,0xE978,0xEBD8,0xEDB3,0xEF54,0xF27A, + 0xF57F,0xF901,0xFB90,0xFD88,0xFD94,0xFC70,0xFAA0,0xF938, + 0xF7CF,0xF59C,0xF311,0xEFE0,0xECFA,0xEA02,0xE7C3,0xE5FC, + 0xE46B,0xE441,0xE4F6,0xE61A,0xE776,0xE927,0xEB9B,0xEDEF, + 0xEFEF,0xF1C0,0xF39B,0xF56F,0xF7B3,0xF9B1,0xFA89,0xFA65, + 0xF9B2,0xF8D5,0xF84C,0xF855,0xF8F3,0xF8E0,0xF7AB,0xF569, + 0xF359,0xF292,0xF1A3,0xF0B8,0xEFFA,0xEF02,0xEE44,0xED33, + 0xECD7,0xED30,0xEE00,0xEE16,0xEC6A,0xEBBC,0xEE8A,0xF14D, + 0xF347,0xF50F,0xF654,0xF719,0xF82C,0xF9B1,0xFB72,0xFD5C, + 0xFD68,0xFC13,0xFA25,0xF8BE,0xF79C,0xF660,0xF584,0xF392, + 0xF1DC,0xF116,0xF01A,0xEEEF,0xEEB2,0xEED1,0xEEF1,0xEF8C, + 0xF0E5,0xF25E,0xF401,0xF517,0xF5A0,0xF704,0xF8F2,0xFA79, + 0xFB87,0xFBF1,0xFC21,0xFC52,0xFC28,0xFC25,0xFC4F,0xFC9C, + 0xFD42,0xFC05,0xFA6E,0xF945,0xF7D9,0xF717,0xF728,0xF7BF, + 0xF7C9,0xF760,0xF612,0xF46E,0xF155,0xEC72,0xE6DA,0xE01D, + 0xD986,0xD2FB,0xC752,0xC06F,0xC0E5,0xC08B,0xC114,0xC115, + 0xC431,0xDE70,0xFA37,0x10E0,0x25E9,0x3AED,0x409E,0x4020, + 0x4073,0x406E,0x403B,0x4028,0x3F69,0x3FE4,0x2ED1,0x0CA8, + 0xEDB8,0xCFE6,0xC0C3,0xC0AE,0xC038,0xC007,0xC02D,0xC060, + 0xC0F2,0xC083,0xD087,0xEE38,0x05DF,0x17AD,0x239F,0x2D9B, + 0x3782,0x3EE1,0x3FB1,0x3FCC,0x3F00,0x36B7,0x2C91,0x238E, + 0x1ABA,0x127C,0x0AE0,0x0594,0x02B1,0x0131,0xFF13,0xFA34, + 0xF24A,0xE95E,0xE1D7,0xDDAD,0xDAB9,0xD7AD,0xD670,0xD118, + 0xCC6B,0xCC49,0xD144,0xDACF,0xE7E4,0xF68A,0x04CA,0x12AB, + 0x2018,0x2C04,0x370B,0x3E7F,0x3F71,0x3F4E,0x3EF6,0x3866, + 0x2D39,0x1E9E,0x0CED,0xFAC7,0xEA2D,0xDB9C,0xCFE8,0xC7C1, + 0xC29B,0xC031,0xBFBA,0xC2B9,0xCA7F,0xD60A,0xE2B6,0xEF4F, + 0xFB6F,0x06BE,0x1069,0x17D4,0x1D3F,0x2163,0x23A4,0x2359, + 0x217C,0x1E97,0x1AF3,0x1653,0x1036,0x09C6,0x0491,0x0077, + 0xFCF4,0xF977,0xF585,0xF13A,0xECBE,0xE83C,0xE474,0xE1D2, + 0xE0F9,0xE02A,0xE0FC,0xE1CA,0xE304,0xE69D,0xEB8B,0xF138, + 0xF7C7,0xFF7F,0x0781,0x0FC5,0x1718,0x1D33,0x20C1,0x21CB, + 0x219F,0x207E,0x1EA2,0x19BE,0x11BF,0x087A,0xFF08,0xF6A3, + 0xEE25,0xE65D,0xE0F7,0xDD51,0xDA44,0xD9E0,0xDB94,0xDE68, + 0xE286,0xE7BF,0xEDD1,0xF529,0xFC1C,0x0323,0x098B,0x0E1C, + 0x10F9,0x120E,0x1299,0x1315,0x12C0,0x121F,0x10DB,0x0D5F, + 0x0872,0x053B,0x01A8,0xFE75,0xFC2D,0xFA15,0xF7BB,0xF489, + 0xF0E9,0xEE4B,0xEC76,0xEB1A,0xEA1E,0xEA4B,0xEB1B,0xEC34, + 0xEE22,0xF140,0xF4D7,0xF8E7,0xFD68,0x01A4,0x05E6,0x0AE6, + 0x0F04,0x11F6,0x131F,0x136E,0x12BC,0x1083,0x0E06,0x0B10, + 0x07A6,0x0319,0xFD7B,0xF783,0xF282,0xEF72,0xED27,0xEB2C, + 0xEA51,0xEA86,0xEB73,0xED58,0xF012,0xF3BD,0xF7A3,0xFBC5, + 0xFFF3,0x03BA,0x0721,0x09B8,0x0BBD,0x0D49,0x0DD3,0x0D78, + 0x0CB7,0x0BC8,0x0A07,0x0831,0x05F8,0x045C,0x01FF,0xFE87, + 0xFC68,0xFAFE,0xFA0B,0xF878,0xF6D0,0xF4FC,0xF406,0xF250, + 0xEEE9,0xE805,0xDF7A,0xD7BC,0xD2CB,0xC89E,0xBFC2,0xBF28, + 0xBEF1,0xBEE0,0xBFE2,0xBED7,0xC94A,0xED81,0x0BCE,0x270D, + 0x3BFF,0x3F14,0x3F17,0x3F5E,0x3F38,0x3F1F,0x3F28,0x3F0F, + 0x3E0F,0x3ECE,0x2DB0,0x0574,0xDED5,0xC321,0xBFCE,0xBFAC, + 0xBF50,0xBF5B,0xBF5B,0xBFC7,0xC06E,0xC11D,0xD807,0xFB8A, + 0x16DF,0x2B7B,0x3A86,0x3F46,0x3F4D,0x3F8D,0x3FA0,0x3F8D, + 0x3F37,0x3FB5,0x3ADE,0x2D6D,0x21A5,0x168A,0x0DF8,0x0809, + 0x04AF,0x0299,0xFF11,0xF87A,0xEF22,0xE5BE,0xDDFE,0xD8F0, + 0xD621,0xD37A,0xCFCD,0xCB8C,0xC7FE,0xCA75,0xD1D2,0xDDB5, + 0xED92,0xFF5F,0x114C,0x2233,0x3318,0x3DFB,0x3EC8,0x3EEE, + 0x3F31,0x3F42,0x3E7E,0x3F21,0x35A0,0x2288,0x0CF4,0xF508, + 0xDFFC,0xCFD7,0xC3F8,0xBF9D,0xBFE3,0xC002,0xC018,0xC030, + 0xC8F7,0xD812,0xE868,0xF900,0x082F,0x1566,0x2002,0x2845, + 0x2E72,0x3213,0x3271,0x3067,0x2D18,0x298A,0x24D6,0x1F55, + 0x17D1,0x0EB9,0x07CA,0x0205,0xFD6E,0xF93E,0xF58F,0xF141, + 0xEC7F,0xE804,0xE3F3,0xE0DF,0xDF13,0xDED6,0xE0A2,0xE292, + 0xE542,0xE9AB,0xEF88,0xF6D5,0xFF6D,0x0913,0x130D,0x1C3F, + 0x2430,0x2A96,0x2EEE,0x3116,0x2FD8,0x2B86,0x253E,0x1E1D, + 0x15A7,0x0C10,0x0180,0xF694,0xEBC2,0xE200,0xDB0C,0xD754, + 0xD613,0xD6F4,0xD952,0xDDB3,0xE396,0xEAB5,0xF2A6,0xFB5C, + 0x0457,0x0CAC,0x127D,0x1693,0x19D3,0x1BF8,0x1D81,0x1D9A, + 0x1C42,0x190D,0x14AD,0x105A,0x0C4E,0x089A,0x051E,0x012A, + 0xFC53,0xF7A5,0xF3E2,0xF0EF,0xEE6C,0xEC71,0xEAA7,0xE9AC, + 0xE96B,0xEA37,0xEBED,0xEEBC,0xEFDC,0xF404,0xF886,0xFCC4, + 0x0405,0x0A8B,0x0F20,0x1273,0x14EA,0x1743,0x18D6,0x1976, + 0x18A9,0x16E1,0x12E1,0x0CED,0x0702,0x015D,0xFBF6,0xF6B0, + 0xF19C,0xED71,0xEA58,0xE832,0xE78A,0xE7D5,0xE9D8,0xECEF, + 0xF09C,0xF4C9,0xF958,0xFE00,0x0299,0x06D1,0x0A2A,0x0CD7, + 0x0F2F,0x1098,0x1106,0x1086,0x1074,0x0F4E,0x0CB5,0x092E, + 0x05C5,0x03D5,0x014E,0xFEA0,0xFBD9,0xF954,0xF67E,0xF444, + 0xF204,0xF0D7,0xEEF2,0xE999,0xE063,0xD722,0xD084,0xCBAB, + 0xC3BC,0xBF64,0xC0EF,0xC051,0xC059,0xC130,0xC03F,0xD512, + 0xFA5B,0x15ED,0x2F4C,0x3F07,0x3F9E,0x3FCF,0x3FFA,0x3FEF, + 0x3FB4,0x3F75,0x3F38,0x3E75,0x3D3F,0x21A6,0xF794,0xD127, + 0xBF59,0xBFF1,0xBF74,0xBF43,0xBF37,0xBF72,0xBFA7,0xBFBD, + 0xC33F,0xE19F,0x04CC,0x1D5E,0x2E9E,0x3B44,0x3EE3,0x3EAC, + 0x3EF6,0x3F07,0x3EDF,0x3ECA,0x3EC6,0x35B3,0x288C,0x1CC7, + 0x1215,0x0A54,0x04C0,0x0196,0xFF47,0xFA86,0xF255,0xE731, + 0xDCD6,0xD5B4,0xD281,0xD149,0xCF5A,0xCAEF,0xC5E7,0xC3F0, + 0xC7C3,0xD244,0xE1BB,0xF352,0x0514,0x1614,0x2668,0x363C, + 0x3E09,0x3DF7,0x3E17,0x3E5D,0x3E26,0x3E0E,0x3C85,0x2E42, + 0x18FC,0x014E,0xE977,0xD592,0xC657,0xBEF6,0xBEBF,0xBE88, + 0xBE93,0xBEE6,0xBE89,0xC5FB,0xD6C4,0xE7C3,0xF889,0x07A8, + 0x14B2,0x1F8D,0x2748,0x2C57,0x2E4C,0x2DE9,0x2C65,0x295C, + 0x24C4,0x1F5C,0x1885,0x10B8,0x07E0,0x0028,0xFA07,0xF6DC, + 0xF3A3,0xEF9F,0xEA81,0xE44F,0xDF69,0xDBE9,0xDA15,0xD97E, + 0xDA3B,0xDB63,0xDC13,0xE06D,0xE6A3,0xECD8,0xF6FC,0xFF44, + 0x07DE,0x1179,0x1B4C,0x24C6,0x2BC7,0x2E87,0x2E87,0x2BA3, + 0x273F,0x21D0,0x1AC1,0x11EE,0x06A9,0xFA81,0xEEF6,0xE596, + 0xDDF1,0xD7E4,0xD41C,0xD281,0xD398,0xD74B,0xDD1A,0xE404, + 0xEBBA,0xF3C3,0xFC49,0x04D2,0x0D24,0x13D1,0x1969,0x1C33, + 0x1DC6,0x1D98,0x1CD0,0x1B61,0x190B,0x161A,0x1203,0x0D30, + 0x080C,0x0350,0xFF9A,0xFBFF,0xF80B,0xF428,0xF068,0xED9B, + 0xEBB2,0xEAC8,0xEA1A,0xEA69,0xEADC,0xEC28,0xEE99,0xF265, + 0xF793,0xFCBF,0x0185,0x04B0,0x08FD,0x0EEB,0x13E9,0x1815, + 0x1A3D,0x1ACB,0x19FE,0x17D0,0x14B3,0x1081,0x0B8C,0x05D0, + 0xFF5D,0xF977,0xF3F2,0xEED3,0xEAAF,0xE7E7,0xE58B,0xE53F, + 0xE721,0xEA16,0xEDAA,0xF1F3,0xF607,0xFA64,0xFF30,0x04BB, + 0x0978,0x0D07,0x1043,0x125E,0x1391,0x1377,0x127A,0x11F6, + 0x1073,0x0E33,0x0B76,0x0838,0x0578,0x0218,0xFEE2,0xFD25, + 0xFA26,0xF765,0xF503,0xF290,0xF14E,0xF05C,0xEE42,0xE92C, + 0xE15E,0xD934,0xD379,0xCE53,0xC4C3,0xC071,0xC10F,0xC0C5, + 0xC12D,0xC17C,0xC3CE,0xE25D,0x056D,0x20E6,0x3949,0x40CA, + 0x4021,0x40D3,0x40A4,0x4083,0x405A,0x407A,0x3FB2,0x3FE3, + 0x3A79,0x16C8,0xEE2A,0xCB66,0xC03B,0xC0C9,0xC04F,0xC02F, + 0xC047,0xC04C,0xC143,0xC04E,0xCC70,0xF103,0x103B,0x26C6, + 0x37BC,0x3FA8,0x3FBD,0x4011,0x400B,0x4018,0x3FB7,0x3FDB, + 0x3E55,0x325B,0x25C7,0x1AE1,0x1127,0x099B,0x04CF,0x0273, + 0x002B,0xFB05,0xF23C,0xE747,0xDE19,0xD7E1,0xD5CC,0xD4B8, + 0xD2AD,0xCECE,0xCB71,0xC933,0xCD33,0xDA70,0xE914,0xFA80, + 0x0C1E,0x1D14,0x2D59,0x3B43,0x3F9D,0x3F6C,0x3FB2,0x3F9B, + 0x3F36,0x3F87,0x3A5F,0x2890,0x138B,0xFCCE,0xE6D8,0xD402, + 0xC56F,0xBFD3,0xBFEC,0xBF99,0xBFD3,0xBF6E,0xC21B,0xCF66, + 0xDEED,0xEF28,0xFEC9,0x0D2D,0x196D,0x2314,0x29F9,0x2DE1, + 0x2F0B,0x2DD9,0x2B6E,0x283A,0x23A4,0x1D1C,0x154D,0x0DAA, + 0x06EB,0x000E,0xFA80,0xF62F,0xF272,0xEE49,0xE916,0xE419, + 0xE016,0xDCFC,0xDAFF,0xD9F2,0xDA03,0xDB95,0xDEDC,0xE2F9, + 0xE8A8,0xF17D,0xF9DB,0x01D7,0x0AF2,0x1526,0x1EBF,0x26CB, + 0x2B85,0x2CA9,0x2B98,0x2929,0x256E,0x1F11,0x16AE,0x0D06, + 0x0292,0xF6D7,0xEB0B,0xE139,0xDA23,0xD54B,0xD2B6,0xD168, + 0xD307,0xD7C1,0xDE0C,0xE3DB,0xEB0D,0xF3B0,0xFC4A,0x0454, + 0x0BD7,0x1273,0x172E,0x1946,0x1993,0x1903,0x17CB,0x160E, + 0x12F1,0x0FC3,0x0BF5,0x06E8,0x01E1,0xFCF1,0xF759,0xF455, + 0xF1D7,0xEF89,0xED48,0xEAC9,0xE89A,0xE6E4,0xE5D3,0xE67F, + 0xE81E,0xEA7C,0xED3B,0xF0BC,0xF460,0xF7B7,0xFC90,0x022F, + 0x0761,0x0C69,0x1052,0x1365,0x14A9,0x14E0,0x13F6,0x1287, + 0x1010,0x0B81,0x0600,0x006E,0xFAB3,0xF4AC,0xEF73,0xEB27, + 0xE7E6,0xE57E,0xE3AB,0xE393,0xE507,0xE7B2,0xEB49,0xEF1B, + 0xF3C8,0xF900,0xFDD4,0x027F,0x06A7,0x0A48,0x0CB9,0x0E16, + 0x0ED3,0x0F62,0x0F24,0x0D41,0x0ABD,0x08EC,0x069A,0x03D2, + 0x0091,0xFD47,0xFA9D,0xF7F6,0xF550,0xF36C,0xF135,0xF007, + 0xEF58,0xEE52,0xEB2B,0xE5AE,0xDE37,0xD6CD,0xD099,0xCA28, + 0xC0B4,0xBEA6,0xBECF,0xBFAD,0xBF66,0xBF31,0xC610,0xE6A7, + 0x0802,0x231D,0x39C7,0x3F40,0x3EE4,0x3F7D,0x3F59,0x3F17, + 0x3F3A,0x3F1C,0x3E3A,0x3F2C,0x3343,0x0B69,0xE3B5,0xC48C, + 0xBFA3,0xBFB5,0xBF55,0xBF77,0xBF60,0xBF82,0xC075,0xBFDA, + 0xD2BD,0xF78F,0x14AF,0x29CA,0x3904,0x3F32,0x3F54,0x3F7D, + 0x3F88,0x3FA5,0x3F40,0x3FD7,0x3C08,0x2ED9,0x2291,0x1770, + 0x0E6E,0x0792,0x03BA,0x0194,0xFEAF,0xF89D,0xEFF6,0xE570, + 0xDCEB,0xD7F6,0xD604,0xD474,0xD1A9,0xCE8B,0xCBD6,0xCC50, + 0xD1C8,0xDCE7,0xEB83,0xFB54,0x0D86,0x1EF0,0x2F5F,0x3C3C, + 0x3EEC,0x3EDB,0x3F04,0x3F12,0x3E88,0x3EFD,0x3766,0x2488, + 0x0F39,0xF802,0xE236,0xD0B8,0xC526,0xC01C,0xBF4F,0xBF69, + 0xC012,0xBF9B,0xC4FB,0xD3EB,0xE398,0xF438,0x044C,0x1261, + 0x1DD4,0x2749,0x2D4E,0x301D,0x3087,0x2F85,0x2DAB,0x2A97, + 0x25DE,0x1F3A,0x1720,0x0E77,0x0696,0x0204,0xFCD1,0xF876, + 0xF523,0xF057,0xEB1F,0xE5D2,0xE12F,0xDE89,0xDD6E,0xDDE3, + 0xDF41,0xE0EE,0xE375,0xE751,0xED13,0xF4BF,0xFCD3,0x065B, + 0x10AC,0x1A5A,0x2242,0x27FE,0x2C2D,0x2E5E,0x2D46,0x29A1, + 0x253F,0x1FB7,0x175B,0x0CD4,0x0141,0xF5B4,0xEAF8,0xE1C8, + 0xDB38,0xD70C,0xD576,0xD56D,0xD691,0xDA31,0xE087,0xE81A, + 0xF064,0xF896,0x00D7,0x092B,0x1061,0x163B,0x1A81,0x1C8A, + 0x1CA9,0x1C20,0x1A78,0x18FB,0x16A1,0x12EA,0x0DE9,0x084B, + 0x032D,0xFF60,0xFB8A,0xF7A4,0xF431,0xF1AF,0xEF72,0xED02, + 0xEABC,0xE9D5,0xE9D4,0xEAEA,0xEC38,0xEE11,0xF164,0xF61C, + 0xFA73,0xFF15,0x04CC,0x07FF,0x0E26,0x1399,0x15F6,0x18E5, + 0x1B11,0x1A7D,0x18F5,0x167D,0x1322,0x0DFD,0x07D0,0x01F5, + 0xFC01,0xF67C,0xF132,0xECB0,0xE942,0xE6BB,0xE50B,0xE5D1, + 0xE870,0xEC1C,0xF029,0xF419,0xF80B,0xFC0C,0x0034,0x055C, + 0x0A09,0x0DA0,0x0F11,0x0F90,0x1038,0x104D,0x0FE8,0x0E3C, + 0x0BB4,0x0805,0x04A3,0x01F3,0x003F,0xFE00,0xFB1C,0xF7C4, + 0xF3BE,0xF167,0xF06F,0xEFF0,0xEEAF,0xEA10,0xE14F,0xD7D1, + 0xD026,0xCBB5,0xC444,0xBEDF,0xBF46,0xBF05,0xBF35,0xC038, + 0xBFB2,0xCEEB,0xF3C6,0x10A7,0x2A36,0x3DD4,0x3FAE,0x3FDF, + 0x401B,0x3FE3,0x3FCF,0x3FB0,0x3F74,0x3E82,0x3F3C,0x28E3, + 0xFDED,0xD5B5,0xC003,0xC040,0xBF4B,0xBF85,0xBFD3,0xBF70, + 0xBF79,0xC068,0xC096,0xD90D,0xFCFE,0x1721,0x29DA,0x383C, + 0x3EAF,0x3EE4,0x3F06,0x3EEC,0x3EDA,0x3EAF,0x3EA8,0x3571, + 0x285F,0x1CB1,0x117E,0x087B,0x027F,0xFE93,0xFB7A,0xF89D, + 0xF1FE,0xE8B9,0xDF17,0xD7B5,0xD2DD,0xD0D7,0xCF07,0xCBF4, + 0xC7B3,0xC501,0xC6F8,0xCF0C,0xDBC1,0xEBA6,0xFE39,0x10F4, + 0x2240,0x31CA,0x3C98,0x3DC6,0x3DF7,0x3E1F,0x3DE8,0x3DB0, + 0x3D26,0x300D,0x1AC5,0x0431,0xEE42,0xDAA1,0xCA33,0xBFDD, + 0xBE99,0xBE91,0xBE62,0xBEF0,0xBE51,0xC3D2,0xD427,0xE5AC, + 0xF6D0,0x057F,0x1217,0x1C5E,0x24E6,0x2B30,0x2E9B,0x2F8A, + 0x2E44,0x2AF9,0x2574,0x1F6D,0x184B,0x110D,0x08E8,0x0210, + 0xFCDF,0xF8FF,0xF4FC,0xEF34,0xE99F,0xE4E0,0xE113,0xDDFA, + 0xDC66,0xDB5B,0xDB2E,0xDBCA,0xDD5D,0xE10A,0xE668,0xEC8B, + 0xF3D6,0xFBFA,0x07B7,0x1255,0x19E6,0x2203,0x2735,0x2A99, + 0x2BFD,0x2B5C,0x2861,0x243B,0x1C9C,0x12B5,0x073E,0xFB63, + 0xF07F,0xE725,0xDF91,0xDA0B,0xD61A,0xD39B,0xD3B0,0xD62D, + 0xDB1A,0xE259,0xEAFC,0xF330,0xFB70,0x0368,0x0AFD,0x11E5, + 0x1679,0x19B6,0x1BB2,0x1C22,0x1B69,0x1A6A,0x1877,0x14B3, + 0x0F45,0x0A1E,0x0605,0x0254,0xFEF8,0xFB0A,0xF6EC,0xF2CB, + 0xEF48,0xECB4,0xEB26,0xEAF8,0xEA7B,0xE9DD,0xEA0C,0xEBB8, + 0xEEDF,0xF298,0xF680,0xFAB2,0xFF96,0x049B,0x096B,0x0E69, + 0x1319,0x165C,0x16D4,0x1707,0x1803,0x16FB,0x13E2,0x0F9F, + 0x0B0B,0x0601,0x0073,0xFAB7,0xF4D3,0xF00C,0xEBE0,0xE894, + 0xE69F,0xE658,0xE787,0xEA06,0xEE28,0xF144,0xF4E5,0xF99F, + 0xFE88,0x0308,0x07A3,0x0C7B,0x106D,0x1216,0x127E,0x1250, + 0x121D,0x1166,0x0FC5,0x0DC6,0x0B66,0x085C,0x04E4,0x019B, + 0xFEAE,0xFBC6,0xF8E6,0xF6F0,0xF5E6,0xF5A8,0xF593,0xF3D1, + 0xF0E0,0xEC66,0xE5FF,0xDF47,0xDABE,0xD79C,0xD1A9,0xC5D1, + 0xBFFE,0xC0CB,0xC12B,0xC0EC,0xC605,0xE2B9,0x00A6,0x195A, + 0x2E52,0x3EF6,0x4070,0x4068,0x40D3,0x408D,0x409D,0x406C, + 0x3FC7,0x404A,0x3778,0x164F,0xF4E9,0xD647,0xC270,0xC0AB, + 0xC08D,0xC067,0xC03E,0xC06A,0xC143,0xC060,0xCEA3,0xEEB8, + 0x09B1,0x1E95,0x2D2B,0x378C,0x3EF0,0x4016,0x3FF5,0x3FF2, + 0x3FBB,0x3F04,0x35BF,0x2AE9,0x2054,0x1556,0x0BEB,0x05B9, + 0x0213,0xFFB7,0xFCC8,0xF904,0xF363,0xEC26,0xE470,0xDEF2, + 0xDD08,0xDBF5,0xD990,0xD66C,0xD43B,0xD473,0xD841,0xDF4D, + 0xEA9F,0xF90E,0x0729,0x147F,0x2461,0x3073,0x3A5A,0x3F90, + 0x3FA6,0x3F71,0x3F8A,0x3B77,0x3098,0x2288,0x1157,0xFEE1, + 0xECBC,0xDCA2,0xD098,0xC809,0xC2D3,0xC06D,0xC03B,0xC386, + 0xCAEA,0xD4F8,0xE152,0xEEB6,0xFBDB,0x086A,0x139F,0x1CB7, + 0x22F3,0x262D,0x26EC,0x25E1,0x23E5,0x21D2,0x1F02,0x19AD, + 0x1341,0x0BAF,0x04A1,0xFF03,0xFA61,0xF6F4,0xF457,0xF103, + 0xED12,0xE8CB,0xE538,0xE2FD,0xE15F,0xE05A,0xE064,0xE24A, + 0xE539,0xE8BA,0xECF4,0xF229,0xF863,0xFF37,0x069F,0x0E99, + 0x18A1,0x2073,0x23C2,0x250C,0x24A3,0x22A7,0x1F24,0x19AC, + 0x1303,0x0BDF,0x0351,0xF979,0xEFC6,0xE7AD,0xE1C1,0xDDB3, + 0xDAA5,0xD9F8,0xDC03,0xDF30,0xE386,0xE9C5,0xEFAE,0xF59A, + 0xFBF7,0x031B,0x09D7,0x1023,0x1440,0x15C4,0x158E,0x143B, + 0x12E9,0x1166,0x0F24,0x0CF8,0x0A6E,0x0617,0x009F,0xFC49, + 0xF8F6,0xF5B1,0xF370,0xF1D5,0xF0C1,0xEE72,0xEC0D,0xEB8E, + 0xEB18,0xEB6D,0xEC6E,0xEDD8,0xF048,0xF41E,0xF813,0xFB39, + 0xFE79,0x01D6,0x05E7,0x0933,0x0B8B,0x0EF5,0x11A8,0x12EE, + 0x1181,0x0EDC,0x0BF5,0x0813,0x0334,0xFEDD,0xFAEF,0xF727, + 0xF2F3,0xEE54,0xEA41,0xE77D,0xE663,0xE6A2,0xE82D,0xEBB4, + 0xF001,0xF3BF,0xF6D6,0xF97C,0xFCC5,0x0080,0x049F,0x082A, + 0x0A87,0x0C38,0x0C57,0x0BC1,0x0A72,0x0978,0x078A,0x04FF, + 0x0291,0x016A,0x008B,0xFE50,0xFB59,0xF7FD,0xF5C3,0xF432, + 0xF328,0xF29B,0xF2FE,0xF347,0xF1FC,0xEF45,0xECCE,0xEBAA, + 0xEBDB,0xEB33,0xE977,0xE5BF,0xE191,0xDE9D,0xDFDB,0xE698, + 0xF0A9,0xFB91,0x078A,0x0F01,0x179A,0x20A8,0x2892,0x3060, + 0x35BF,0x36CB,0x340E,0x2DD4,0x2491,0x1996,0x0CDF,0xFF51, + 0xF196,0xE5B3,0xDCD3,0xD7EF,0xD5D8,0xD4A0,0xD505,0xD777, + 0xDD60,0xE6A2,0xF255,0xFE44,0x089C,0x1066,0x15DF,0x1A23, + 0x1E3D,0x210C,0x213E,0x1F3E,0x1C13,0x1815,0x13D4,0x0F78, + 0x0B1A,0x066F,0x0213,0xFE7A,0xFC0D,0xFB27,0xFAE0,0xFA02, + 0xF7F9,0xF553,0xF326,0xF183,0xF0F4,0xF123,0xF18D,0xF203, + 0xF1E9,0xF27E,0xF472,0xF8C3,0xFE23,0x042F,0x08EA,0x0DB6, + 0x1268,0x162B,0x17C7,0x1A3F,0x1B4B,0x19D5,0x16A7,0x123C, + 0x0DCB,0x08CD,0x02AB,0xFB7E,0xF4CD,0xF023,0xECD2,0xEA2A, + 0xE899,0xE80A,0xE7BA,0xE819,0xE878,0xE94D,0xEBA0,0xED8B, + 0xEDED,0xEE21,0xEE6D,0xEEFF,0xEF43,0xEED6,0xEDB6,0xEBA7, + 0xE923,0xE791,0xE625,0xE403,0xE225,0xE0ED,0xDF72,0xDDE7, + 0xDCE1,0xDC71,0xDC52,0xDB82,0xDACC,0xDB87,0xDC04,0xDAEC, + 0xDAF1,0xDB05,0xDB14,0xDB44,0xDBF6,0xDCEC,0xDE1B,0xDEDD, + 0xDFDB,0xE11C,0xE17A,0xE1EE,0xE359,0xE495,0xE503,0xE584, + 0xE601,0xE633,0xE646,0xE6AE,0xE711,0xE745,0xE7D9,0xE816, + 0xE89A,0xE8CF,0xE947,0xE9D0,0xE9F8,0xEA68,0xEB15,0xEBC2, + 0xECC3,0xEE19,0xEF07,0xEFC5,0xF075,0xF114,0xF160,0xF251, + 0xF344,0xF44B,0xF518,0xF58A,0xF5C3,0xF67D,0xF709,0xF7A9, + 0xF82A,0xF881,0xF8E9,0xF91E,0xF9A0,0xFA15,0xFA5B,0xFAB3, + 0xFB15,0xFB6A,0xFBEB,0xFC7E,0xFCEC,0xFD7E,0xFE79,0xFED2, + 0xFF39,0xFFA4,0x0017,0x00B0,0x0100,0x01E2,0x0299,0x034D, + 0x041A,0x050B,0x032A,0x04A9,0x062E,0x058B,0x0637,0x0655, + 0x0671,0x0668,0x0687,0x06A9,0x0735,0x0729,0x072F,0x0725, + 0x075A,0x07CA,0x0836,0x0886,0x0894,0x08E7,0x096B,0x0A20, + 0x0A66,0x0AC2,0x0AFC,0x0ADB,0x0B22,0x0BD2,0x0C21,0x0C65, + 0x0C7C,0x0CC9,0x0CA2,0x0CB8,0x0CE6,0x0CF9,0x0D82,0x0D94, + 0x0DA2,0x0D52,0x0D8D,0x0DCB,0x0DC9,0x0DF2,0x0DD2,0x0DA1, + 0x0D74,0x0D8A,0x0D7E,0x0DA6,0x0E0A,0x0E4D,0x0EA3,0x0E87, + 0x0E7E,0x0EB5,0x0E9B,0x0F17,0x0F0D,0x0EE1,0x0F17,0x102A, + 0x1290,0x11A1,0x10C4,0x1092,0x10EA,0x10AB,0x10C8,0x10E0, + 0x10D9,0x10C9,0x1091,0x1052,0x1032,0x0FCE,0x0FA3,0x0F65, + 0x0F7F,0x0F36,0x0EC1,0x0E58,0x0F05,0x0F6E,0x0F16,0x0EC2, + 0x0EA4,0x0E8B,0x0E5E,0x0EA4,0x0E53,0x0E3B,0x0E53,0x0E0F, + 0x0E24,0x0E2D,0x0E0A,0x0E57,0x0E0D,0x0DEE,0x0DC3,0x0D3F, + 0x0D30,0x0D4F,0x0D4E,0x0D83,0x0D3F,0x0BB5,0x0C87,0x0D46, + 0x0CF4,0x0CF3,0x0CB4,0x0BFB,0x0BE1,0x0BC9,0x0B81,0x0AF1, + 0x0A94,0x0A02,0x09BE,0x09B2,0x0997,0x09B5,0x09C2,0x098C, + 0x09B4,0x09B5,0x0961,0x093C,0x0947,0x093E,0x0941,0x0928, + 0x0904,0x0954,0x0947,0x0951,0x0944,0x0922,0x08F0,0x08A4, + 0x0875,0x0857,0x084E,0x083C,0x07F0,0x07E3,0x081C,0x0840, + 0x082B,0x07D2,0x07B9,0x07A9,0x07A0,0x07BC,0x07A1,0x0782, + 0x0718,0x075F,0x078E,0x07B4,0x07B9,0x07B8,0x07A4,0x075B, + 0x06F9,0x072D,0x0748,0x0739,0x0655,0x064A,0x065D,0x06AC, + 0x06A2,0x067F,0x068E,0x06B7,0x06B2,0x066B,0x0700,0x074B, + 0x062A,0x0710,0x06FF,0x053A,0x06BA,0x06B3,0x06BC,0x068E, + 0x06AB,0x066A,0x0630,0x062F,0x05FE,0x0609,0x0607,0x061F, + 0x05BA,0x05C3,0x058C,0x0622,0x05F9,0x0590,0x05C4,0x0623, + 0x05F9,0x05AD,0x05AC,0x0574,0x0538,0x057B,0x05B4,0x05CF, + 0x05AC,0x055A,0x04F7,0x04BF,0x0500,0x0509,0x04CC,0x04DD, + 0x04E9,0x04AE,0x0482,0x04E4,0x04ED,0x04FB,0x050E,0x04E3, + 0x04DF,0x050D,0x04DC,0x04A6,0x0452,0x0462,0x0464,0x04AE, + 0x049C,0x0434,0x03B0,0x0396,0x040C,0x0475,0x04B9,0x043D, + 0x038C,0x01AE,0x0079,0x0152,0x0198,0x01CC,0x01EA,0x0214, + 0x01F5,0x01D7,0x01C0,0x01B3,0x018F,0x017F,0x01C7,0x0202, + 0x0218,0x0209,0x0158,0x0232,0x01B9,0x01C6,0x02EF,0x034E, + 0x0252,0x01C3,0x0198,0x01D5,0x0216,0x01F9,0x01E9,0x0238, + 0x0234,0x0257,0x027A,0x02A2,0x0238,0x0248,0x0226,0x022A, + 0x0249,0x0280,0x02BF,0x0265,0x02C2,0x03D4,0x02AB,0x0252, + 0x01EB,0x015C,0x01B4,0x020E,0x0240,0x022D,0x0296,0x02EE, + 0x0322,0x0320,0x0359,0x0404,0x0428,0x03F0,0x03AD,0x0350, + 0x0331,0x0381,0x02F9,0x02E0,0x02E7,0x0303,0x02F0,0x02B9, + 0x026C,0x0239,0x023B,0x0270,0x0245,0x0268,0x0271,0x0249, + 0x01C3,0x0187,0x0172,0x019B,0x0169,0x0144,0x0125,0x00F6, + 0x00F2,0x00DE,0x00D5,0x00D8,0x0095,0x0085,0x00A4,0xFEF1, + 0xFF08,0xFF85,0xFF5E,0xFF50,0xFF01,0xFEFF,0xFF4D,0xFF5C, + 0xFEE4,0xFECA,0xFEF9,0xFF3A,0xFEE7,0xFF1E,0xFF3A,0xFF54, + 0xFF83,0xFF3D,0xFEDA,0xFEDF,0xFF27,0xFDED,0xFDB9,0xFF14, + 0xFFA5,0xFF6B,0xFF7F,0xFF5C,0xFE9C,0xFE4F,0xFE79,0xFE99, + 0xFD4A,0xFD65,0xFD91,0xFD37,0xFC5D,0xFC92,0xFCAC,0xFC78, + 0xFCA0,0xFC8D,0xFC94,0xFC84,0xFCBF,0xFCAC,0xFCB9,0xFCF9, + 0xFCD0,0xFCDC,0xFD0B,0xFD36,0xFD8D,0xFD5B,0xFD25,0xFCE5, + 0xFCFB,0xFD2D,0xFD06,0xFCD5,0xFC9F,0xFD20,0xFD45,0xFCF6, + 0xFCA7,0xFCF5,0xFD68,0xFDC7,0xFE2A,0xFEAC,0xFEE1,0xFF56, + 0xFF82,0x0048,0x0137,0x021B,0x02B3,0x03A7,0x04B9,0x051C, + 0x052D,0x050A,0x0514,0x0502,0x048B,0x046E,0x0497,0x04A8, + 0x049C,0x04A2,0x0530,0x059A,0x060F,0x05E2,0x0620,0x06C1, + 0x06A4,0x07C2,0x0929,0x085B,0x0A94,0x0B02,0x0A8E,0x0B21, + 0x0C9E,0x0D65,0x0D5F,0x0DB5,0x0E72,0x0EEA,0x0F09,0x0FE4, + 0x1086,0x10E6,0x10C6,0x1115,0x1142,0x117A,0x11C9,0x12E6, + 0x144A,0x1463,0x1375,0x12A5,0x136C,0x14E9,0x15DB,0x159D, + 0x15E3,0x1585,0x14FE,0x14CE,0x1566,0x161D,0x16B1,0x1633, + 0x152F,0x1534,0x155D,0x15B1,0x1596,0x1582,0x1531,0x1580, + 0x1592,0x15B1,0x155E,0x1543,0x1508,0x147B,0x1438,0x14DD, + 0x14F1,0x13FE,0x12B5,0x11E1,0x1190,0x114D,0x11FC,0x11CC, + 0x10FA,0x0E94,0x0C55,0x0C66,0x0BFD,0x0AF2,0x090E,0x0756, + 0x0668,0x0599,0x039B,0xFF1B,0xF99F,0xF4AF,0xF13F,0xF15E, + 0xF354,0xF52E,0xF660,0xF7D9,0xF8F1,0xFBDB,0x020F,0x0958, + 0x1092,0x174E,0x1CB7,0x20A1,0x23AB,0x2645,0x27FC,0x2821, + 0x2712,0x2535,0x2312,0x1F59,0x1A49,0x13BA,0x0D1F,0x068B, + 0x00F1,0xFCFB,0xFA0F,0xF6F6,0xF2E9,0xF035,0xEDD2,0xEC52, + 0xED76,0xEFF5,0xF18F,0xF236,0xF2D5,0xF3FE,0xF59E,0xF7BF, + 0xF952,0xFA3A,0xFAF0,0xFCA1,0xFEB6,0xFF86,0x005F,0x0071, + 0x004D,0x00F9,0x02A3,0x05B4,0x07C5,0x08B6,0x08EB,0x088E, + 0x083F,0x0874,0x091F,0x099A,0x083B,0x04F3,0x0146,0xFE2E, + 0xFBD8,0xF92C,0xF57A,0xF1BC,0xEE63,0xEB1F,0xE84E,0xE6AB, + 0xE5C7,0xE5C2,0xE54C,0xE533,0xE660,0xE8B7,0xEB4B,0xED11, + 0xEE87,0xF05C,0xF32A,0xF61B,0xF8EB,0xFB5B,0xFCC5,0xFCA2, + 0xFC1A,0xFC45,0xFCD1,0xFDA5,0xFDAC,0xFD03,0xFB92,0xF9AE, + 0xF894,0xF7A1,0xF690,0xF53C,0xF49C,0xF4C0,0xF3FA,0xF234, + 0xF0E1,0xEF38,0xEBEB,0xECF5,0xEC7E,0xEB63,0xEB00,0xE982, + 0xE777,0xE608,0xE5FC,0xE68C,0xE6C0,0xE720,0xE81D,0xE994, + 0xEADD,0xEBBA,0xED43,0xEF65,0xF130,0xF2F5,0xF51E,0xF784, + 0xF878,0xF83E,0xF835,0xF8E3,0xF9DA,0xFA1D,0xF8E8,0xF701, + 0xF598,0xF496,0xF2FB,0xF142,0xEFEB,0xEEA7,0xED6F,0xEC0B, + 0xEB1B,0xEAA9,0xEA4B,0xE92B,0xE8BA,0xE923,0xE969,0xE9EB, + 0xEA2E,0xEAA9,0xEB75,0xEBEB,0xEC3D,0xEC7F,0xED70,0xEEA7, + 0xEFAD,0xF03B,0xF135,0xF1D2,0xF27F,0xF285,0xF31A,0xF5D4, + 0xF8D3,0xF9B6,0xF9CC,0xF8F9,0xF843,0xF82A,0xF871,0xF88B, + 0xF87C,0xF88C,0xF7F9,0xF631,0xF4A5,0xF3F4,0xF30C,0xF244, + 0xF163,0xEFF2,0xEEFE,0xEE51,0xEF2A,0xEF7B,0xEE4D,0xEDDE, + 0xEEE3,0xEFB1,0xF0E5,0xF1BD,0xF257,0xF37B,0xF448,0xF4C0, + 0xF5A9,0xF6E9,0xF7CD,0xF87D,0xF898,0xF8B8,0xF88D,0xF904, + 0xF918,0xF8EC,0xF8B9,0xF8C3,0xF84C,0xF6CA,0xF697,0xF714, + 0xF716,0xF672,0xF658,0xF5AF,0xF510,0xF488,0xF467,0xF41D, + 0xF334,0xF2A2,0xF29B,0xF1B6,0xF0F1,0xF115,0xF0F1,0xF0E2, + 0xEEF9,0xEAA0,0xE530,0xE0B4,0xDDDD,0xDB4C,0xD409,0xC55D, + 0xBDEF,0xBE54,0xBE2C,0xBE4C,0xBE42,0xBE54,0xBE9D,0xBE5C, + 0xC28F,0xD344,0xEAA8,0x0530,0x1F5F,0x361B,0x3E69,0x3DE2, + 0x3E68,0x3E70,0x3E33,0x3E65,0x3E77,0x3E72,0x3E4E,0x3DF0, + 0x3DF3,0x2E05,0x1453,0xFF3A,0xEFA9,0xE4EE,0xDAB8,0xCF61, + 0xC3E9,0xBEF4,0xBED1,0xBEAB,0xBE9A,0xC371,0xCAAD,0xD1AA, + 0xD881,0xDF14,0xE4C5,0xE970,0xED55,0xF1DE,0xF7B7,0xFDBB, + 0x02E4,0x08D2,0x0993,0x09C9,0x0D47,0x128C,0x1A80,0x22AF, + 0x2A10,0x2EF0,0x31B7,0x32DC,0x3416,0x35B4,0x3702,0x35B8, + 0x312B,0x289B,0x1E34,0x139C,0x0867,0xFC4B,0xEFF9,0xE45D, + 0xD99B,0xD0DD,0xC95E,0xC371,0xC039,0xBFB4,0xBF86,0xC10F, + 0xC8B5,0xD1D2,0xDB6C,0xE4AB,0xED95,0xF6E3,0x003F,0x0A47, + 0x1416,0x1C10,0x2183,0x24CC,0x26C8,0x278C,0x2731,0x2580, + 0x22D1,0x1FF6,0x1D8F,0x1B0A,0x17E3,0x1389,0x0E4C,0x08D7, + 0x04DC,0x0274,0x00BD,0xFE94,0xFBA3,0xF723,0xF18D,0xEC4A, + 0xE85F,0xE4A4,0xE262,0xE091,0xDDFE,0xDC42,0xDB50,0xDB08, + 0xDB88,0xDDA9,0xE151,0xE686,0xEC98,0xF24E,0xF86F,0xFE8B, + 0x045F,0x0A52,0x10F6,0x183A,0x1D5D,0x20BD,0x2298,0x2200, + 0x2032,0x1ED8,0x1CF7,0x1A5F,0x168D,0x11E4,0x0B9E,0x053A, + 0xFF38,0xF986,0xF52D,0xF180,0xEE97,0xEC18,0xE95E,0xE7D3, + 0xE71F,0xE6A0,0xE6EB,0xE800,0xEAF3,0xEE7A,0xEFC4,0xF1AD, + 0xF411,0xF668,0xF79B,0xF9A6,0xFD4A,0x01E3,0x0570,0x07A5, + 0x098F,0x0B83,0x0D2B,0x0FBE,0x12BD,0x14A7,0x15C4,0x15C6, + 0x15DB,0x15F0,0x1588,0x13CE,0x1077,0x0D58,0x0AC4,0x0878, + 0x05B2,0x0138,0xFC19,0xF788,0xF3B1,0xF149,0xF012,0xEF19, + 0xED8F,0xEBF2,0xEAD8,0xEB21,0xED2E,0xF04A,0xF34B,0xF5F1, + 0xF8E1,0xFC15,0xFEFC,0x01F7,0x0545,0x0875,0x0B7D,0x0D66, + 0x0E99,0x0F84,0x1038,0x10B1,0x1060,0x0FFB,0x0F67,0x0E74, + 0x0D4F,0x0BE3,0x0A96,0x0899,0x05CE,0x0395,0x020D,0x0103, + 0x000D,0xFDC8,0xFB48,0xF95E,0xF7FC,0xF6B5,0xF5E5,0xF5DF, + 0xF63D,0xF3C3,0xF13B,0xEF75,0xE989,0xE442,0xE0CA,0xDEB4, + 0xDAFA,0xD02D,0xC22E,0xBF5F,0xBF94,0xBF74,0xBF8A,0xBF58, + 0xBF98,0xBF68,0xC23A,0xCF75,0xE483,0x0085,0x2034,0x3AC2, + 0x3F35,0x3EDD,0x3F32,0x3F43,0x3F5E,0x3F53,0x3F2A,0x3F46, + 0x3F34,0x3F05,0x3E7E,0x3EDC,0x2E25,0x1078,0xF9BC,0xE920, + 0xDD77,0xD34F,0xC738,0xBF8E,0xBF98,0xBF6D,0xBF97,0xBF59, + 0xC3AF,0xCD39,0xD51B,0xDBD0,0xE312,0xEA8D,0xF120,0xF667, + 0xFC2B,0x029A,0x094A,0x0F3F,0x131C,0x14E6,0x162D,0x1B83, + 0x226A,0x2B98,0x34A0,0x3AA9,0x3D33,0x3E11,0x3EE8,0x3FA7, + 0x400A,0x4007,0x3E76,0x3652,0x2B83,0x1F60,0x1244,0x0447, + 0xF61D,0xE925,0xDC87,0xD1FA,0xC959,0xC175,0xBF90,0xBF86, + 0xBFAA,0xBFBB,0xC003,0xC901,0xD443,0xDEC3,0xE8D8,0xF303, + 0xFDB9,0x0835,0x13B6,0x1E04,0x26BA,0x2C04,0x2E79,0x2ED2, + 0x2E16,0x2C33,0x2A87,0x2860,0x243B,0x20EA,0x1CE1,0x170A, + 0x112C,0x0B71,0x074E,0x033B,0xFFCD,0xFD0A,0xF9D5,0xF53D, + 0xEF51,0xE988,0xE4A5,0xE06A,0xDE35,0xDCB6,0xDAD3,0xD868, + 0xD653,0xD559,0xD5C3,0xD820,0xDCA7,0xE1C5,0xE75F,0xEE1C, + 0xF578,0xFC7E,0x0338,0x0A2A,0x117B,0x18E9,0x1F51,0x244F, + 0x26A1,0x26FF,0x2629,0x243C,0x217F,0x1EBD,0x1B00,0x152D, + 0x0E08,0x06D3,0x0051,0xF9AE,0xF393,0xEE25,0xE9EA,0xE67B, + 0xE356,0xE160,0xE008,0xDF5B,0xE023,0xE1AA,0xE371,0xE642, + 0xE904,0xEB5C,0xEDDA,0xF058,0xF3FA,0xF770,0xFAFB,0xFE8C, + 0x01D4,0x0560,0x0848,0x0AA9,0x0CB9,0x0ECC,0x10EC,0x1287, + 0x155C,0x17D3,0x15A1,0x1586,0x1456,0x1238,0x10B2,0x0E8A, + 0x0B5F,0x07EF,0x0428,0xFF03,0xFA3F,0xF638,0xF34C,0xEFB6, + 0xEC44,0xE8FA,0xE7E0,0xE7C3,0xE7E8,0xE7F1,0xE83F,0xE9BA, + 0xECA6,0xF0C9,0xF4A9,0xF8ED,0xFD2F,0xFFDD,0x0216,0x0470, + 0x0810,0x0C2F,0x0F91,0x1193,0x11B3,0x109D,0x1018,0x1058, + 0x1091,0x1015,0x0F1D,0x0D21,0x0B46,0x08D1,0x06F7,0x04BC, + 0x0283,0x00C5,0xFF02,0xFD8C,0xFBCC,0xF9D3,0xF774,0xF5A3, + 0xF41E,0xF306,0xF2D6,0xF345,0xF361,0xF32A,0xF145,0xEC92, + 0xE579,0xDF78,0xDEC7,0xDECB,0xDB7E,0xCF3E,0xC098,0xBEAB, + 0xBEFE,0xBEBE,0xBEBF,0xBF18,0xBF32,0xC095,0xC863,0xD6A8, + 0xEDBB,0x09CA,0x292B,0x3DC1,0x3E6E,0x3EFB,0x3F95,0x3F79, + 0x3F5E,0x3F62,0x3F77,0x3F57,0x3F7D,0x3F3E,0x3F25,0x3CE3, + 0x256E,0x0B06,0xF76A,0xE8CE,0xDD11,0xD1B6,0xC5D1,0xC029, + 0xC03B,0xC057,0xC047,0xC19D,0xCBB8,0xD433,0xDB8E,0xE2FC, + 0xE9EE,0xEF79,0xF499,0xFABD,0x021E,0x09BC,0x0FAE,0x1349, + 0x154E,0x161F,0x18C2,0x1E54,0x2610,0x2E71,0x354D,0x395A, + 0x3B7B,0x3D4C,0x3EC1,0x4044,0x40C3,0x3F65,0x3A23,0x329D, + 0x2851,0x1C61,0x0F2F,0x014D,0xF32E,0xE652,0xDB00,0xD132, + 0xC7C1,0xC0BC,0xC0A3,0xC06F,0xC08A,0xC03C,0xC33A,0xCD9F, + 0xD738,0xE067,0xEAF3,0xF6A9,0x0273,0x0DA6,0x17BF,0x2060, + 0x272C,0x2BBB,0x2E14,0x2E8C,0x2E04,0x2C6F,0x294F,0x268A, + 0x232F,0x1F0A,0x19FC,0x1372,0x0D62,0x091E,0x0563,0x0227, + 0xFE97,0xFAD0,0xF6B0,0xF28F,0xEEB2,0xEAFA,0xE77E,0xE576, + 0xE335,0xDE20,0xDD9B,0xDCCA,0xDAFB,0xDB1A,0xDB97,0xDD96, + 0xE1A9,0xE758,0xEDAB,0xF365,0xF91C,0xFF01,0x05DA,0x0E34, + 0x164F,0x1CA4,0x2086,0x2314,0x24E2,0x26A5,0x2747,0x25D8, + 0x2234,0x1D7A,0x1886,0x130F,0x0D49,0x074A,0x004C,0xF903, + 0xF300,0xEE19,0xEB20,0xE832,0xE5E4,0xE35B,0xE165,0xE12D, + 0xE27D,0xE4D1,0xE722,0xE908,0xEB7F,0xEE87,0xF14B,0xF453, + 0xF73A,0xFA8B,0xFD4F,0xFFF8,0x02FD,0x0594,0x08A3,0x0AD6, + 0x0CDC,0x0EF4,0x1162,0x1376,0x1482,0x14FA,0x1656,0x174F, + 0x158D,0x148D,0x12AC,0x0F9B,0x0C01,0x086F,0x0443,0x0044, + 0xFBB5,0xF735,0xF35F,0xF077,0xEE3A,0xEC2D,0xEA40,0xE8E0, + 0xE86F,0xE8DB,0xEA71,0xEDF3,0xF197,0xF398,0xF58F,0xF8C2, + 0xFC91,0x00D8,0x04E0,0x07BC,0x0A34,0x0C20,0x0D5B,0x0E8C, + 0x0F38,0x0FC1,0x0FE0,0x0F3E,0x0E97,0x0D0C,0x0BD7,0x0AC9, + 0x093F,0x06C7,0x0475,0x01F6,0xFF80,0xFE88,0xFD8E,0xFB59, + 0xF999,0xF82F,0xF5E0,0xF455,0xF332,0xF33E,0xF2C9,0xF13B, + 0xF015,0xF041,0xEE24,0xEA65,0xE556,0xE109,0xDF3D,0xDD7A, + 0xD783,0xC95E,0xBE17,0xBE4A,0xBE00,0xBDFA,0xBE11,0xBE57, + 0xBE4C,0xC0A2,0xCA4E,0xD9F8,0xF25B,0x1080,0x2EDD,0x3DDB, + 0x3DB6,0x3E3F,0x3E5C,0x3E43,0x3E25,0x3E54,0x3E52,0x3E55, + 0x3E41,0x3DC1,0x3E29,0x37C1,0x1C7A,0x02B9,0xF010,0xE266, + 0xD777,0xCC2E,0xC1B3,0xBE9F,0xBEB5,0xBEE2,0xBE66,0xC0A3, + 0xCA73,0xD226,0xD8C3,0xDF2D,0xE6DC,0xEE8E,0xF552,0xF9FA, + 0xFF3D,0x0510,0x0B78,0x1020,0x1332,0x1539,0x170A,0x1A62, + 0x22AD,0x2AA2,0x32AC,0x390B,0x3A31,0x3A4B,0x3AD3,0x3C4E, + 0x3CAD,0x3B44,0x3663,0x2E78,0x22AE,0x15CD,0x08D7,0xFC67, + 0xEF75,0xE220,0xD5C8,0xCBCC,0xC408,0xBF76,0xBF86,0xBF84, + 0xBFD0,0xBF3B,0xC3DB,0xCF34,0xD8C2,0xE26D,0xECC4,0xF845, + 0x0427,0x0F36,0x1961,0x21FD,0x2826,0x2C35,0x2E4A,0x2FA8, + 0x2F76,0x2D9B,0x29D7,0x25B1,0x2291,0x1F74,0x1B44,0x15B1, + 0x0FEC,0x0AA2,0x061A,0x02A0,0xFFD0,0xFC8E,0xF8CA,0xF37C, + 0xEEDB,0xEB73,0xE812,0xE503,0xE289,0xDFAD,0xDD00,0xDB9D, + 0xD9B9,0xDA2E,0xDB8A,0xDD6C,0xE0EE,0xE696,0xED8A,0xF47D, + 0xFB36,0x01F4,0x08FD,0x0F85,0x1603,0x1C97,0x21B0,0x24CB, + 0x2681,0x2708,0x26C6,0x2428,0x20A1,0x1C6C,0x181D,0x129E, + 0x0C33,0x05FB,0xFF47,0xF8B7,0xF2E3,0xEE16,0xEA94,0xE812, + 0xE598,0xE40B,0xE36D,0xE357,0xE472,0xE5E8,0xE75C,0xE98B, + 0xEC99,0xEFCA,0xF330,0xF6D0,0xF9F6,0xFAF4,0xFD65,0x0059, + 0x0396,0x072B,0x0A88,0x0D3F,0x0ED0,0x1036,0x1260,0x147F, + 0x1639,0x16FD,0x178C,0x174F,0x153E,0x128F,0x0F6E,0x0CBD, + 0x0B07,0x07C7,0x02A6,0xFD70,0xF94D,0xF59A,0xF2A1,0xEF4B, + 0xEC33,0xEA01,0xE86E,0xE7DA,0xE897,0xEA0B,0xEB67,0xECD4, + 0xEF79,0xF32C,0xF733,0xFB2B,0xFE5F,0x014C,0x03D5,0x0705, + 0x09ED,0x0C9C,0x0ED8,0x100B,0x104B,0x0FD9,0x0F2D,0x0EAB, + 0x0E3D,0x0D94,0x0BBD,0x09A5,0x07A8,0x0604,0x046D,0x0288, + 0x00A1,0xFE72,0xFB9F,0xF9B3,0xF8DD,0xF840,0xF6BE,0xF4D5, + 0xF2A9,0xF11B,0xF0B5,0xF1D1,0xF20E,0xEF26,0xE99B,0xE3D4, + 0xDE95,0xDDFC,0xDE40,0xD51A,0xC4B9,0xBF4B,0xBFE8,0xBFA5, + 0xBF88,0xBF71,0xBFD5,0xBF8C,0xC33F,0xCEE2,0xE1FA,0xFC60, + 0x1B14,0x37F3,0x3F65,0x3ED9,0x3F6A,0x3F7A,0x3F66,0x3F6E, + 0x3F5B,0x3F3F,0x3F37,0x3F4E,0x3E70,0x3F60,0x32EF,0x1550, + 0xFDEF,0xEBCC,0xDF76,0xD52E,0xC95E,0xC086,0xBF62,0xBF69, + 0xBF85,0xBF2B,0xC2B6,0xCC4B,0xD3D5,0xDAED,0xE1DE,0xE8CD, + 0xEF55,0xF5A7,0xFC2E,0x0344,0x091F,0x0DBF,0x1192,0x1386, + 0x1532,0x1873,0x1E44,0x26CE,0x2F6E,0x35FD,0x3BF8,0x3D84, + 0x3E4E,0x3F68,0x3FD6,0x3F10,0x3B8D,0x351F,0x2C15,0x20CF, + 0x1346,0x04C0,0xF687,0xE90E,0xDD03,0xD29B,0xC9B2,0xC200, + 0xBF93,0xBF94,0xBF7D,0xC01A,0xC01A,0xC635,0xD083,0xDA3D, + 0xE44E,0xEF78,0xFAC1,0x0699,0x1218,0x1B21,0x21A8,0x27A7, + 0x2C5E,0x2EDD,0x2E31,0x2BCE,0x28AB,0x2654,0x243A,0x2105, + 0x1C2E,0x1652,0x1039,0x0985,0x03FF,0x01B6,0xFF0C,0xFBC3, + 0xF7E0,0xF2E6,0xEE50,0xEA3A,0xE692,0xE30A,0xDF83,0xDCA1, + 0xD9F0,0xD7A8,0xD53F,0xD502,0xD5CB,0xD763,0xDAAE,0xDEB1, + 0xE460,0xEAFD,0xF23B,0xF94D,0xFFE6,0x06F9,0x0E17,0x14C1, + 0x1B7D,0x20C0,0x23EE,0x251E,0x2438,0x2281,0x20E0,0x1E7F, + 0x1A20,0x1441,0x0DB0,0x06F4,0x002E,0xF95E,0xF37B,0xEE92, + 0xEA4F,0xE622,0xE2DF,0xE152,0xE034,0xDF86,0xDF71,0xE09C, + 0xE2DE,0xE5B7,0xE91D,0xEC33,0xEDE1,0xEFB5,0xF242,0xF57E, + 0xF992,0xFDE2,0x00E4,0x030B,0x056F,0x07DD,0x0A7D,0x0D09, + 0x0FE9,0x1178,0x1313,0x140A,0x14E3,0x14B4,0x125E,0x1106, + 0x102F,0x0BD5,0x0A60,0x0764,0x02DB,0xFDB0,0xF893,0xF41B, + 0xF1B8,0xEEB7,0xEB9C,0xE929,0xE700,0xE5A2,0xE540,0xE645, + 0xE896,0xEB5B,0xED95,0xEFD9,0xF2F6,0xF777,0xFB8E,0xFECE, + 0x01FA,0x057C,0x0863,0x0B3A,0x0DD5,0x0F68,0x109F,0x1006, + 0x0F23,0x0F6E,0x101F,0x0FBF,0x0E59,0x0BFE,0x0993,0x06F0, + 0x052C,0x046B,0x03D8,0x0214,0xFF15,0xFBBA,0xF9CC,0xF8C4, + 0xF7CC,0xF738,0xF65A,0xF50E,0xF395,0xF2A9,0xF2AF,0xF35D, + 0xF298,0xEF15,0xEA94,0xE681,0xE44F,0xE23A,0xDDBD,0xD25A, + 0xC15B,0xBE19,0xBEC5,0xBE6D,0xBE90,0xBEEF,0xBF11,0xBF0F, + 0xC585,0xD2E5,0xE802,0x03AD,0x2209,0x3B1B,0x3EEC,0x3EB7, + 0x3F3A,0x3F80,0x3F70,0x3EDD,0x3F1C,0x3F7A,0x3F79,0x3F13, + 0x3ED6,0x3E38,0x2C74,0x10F8,0xFB27,0xEA51,0xDE56,0xD417, + 0xC894,0xC079,0xC01B,0xC02F,0xC027,0xC08B,0xC7CC,0xD14E, + 0xD98F,0xE14E,0xE81A,0xEFAA,0xF5DD,0xFA0C,0xFF6D,0x066B, + 0x0D22,0x1241,0x14F9,0x1638,0x1821,0x1C81,0x2355,0x2C28, + 0x340F,0x39BF,0x3D3F,0x3E8D,0x4000,0x40D4,0x409C,0x406B, + 0x3C3E,0x352F,0x2BE3,0x209E,0x13DA,0x0594,0xF785,0xEA3E, + 0xDE35,0xD462,0xCC37,0xC47E,0xC070,0xC095,0xC0E3,0xC036, + 0xC3AF,0xCE0F,0xD6CD,0xE036,0xEA35,0xF5A8,0x01E6,0x0D56, + 0x171D,0x1F43,0x25E3,0x2B18,0x2EB2,0x3099,0x3010,0x2D23, + 0x2A05,0x2777,0x24FE,0x2114,0x1B49,0x154A,0x0F7C,0x0AA5, + 0x070C,0x0450,0x015B,0xFD10,0xF7E5,0xF30E,0xEFC2,0xECED, + 0xE9A0,0xE64C,0xE385,0xE0DF,0xDE5B,0xDC30,0xDBCA,0xDBA3, + 0xDAFD,0xDE92,0xE259,0xE660,0xEC28,0xF274,0xF8A9,0xFEE1, + 0x0541,0x0C8B,0x1473,0x1BA4,0x207F,0x23A9,0x2575,0x26B6, + 0x26C0,0x25C9,0x23B0,0x1FB1,0x1A68,0x145D,0x0DF8,0x07BA, + 0x01CD,0xFBA9,0xF57E,0xEFBD,0xEB93,0xE8BD,0xE6DB,0xE507, + 0xE336,0xE16D,0xE1C0,0xE3E0,0xE734,0xE9D7,0xEB66,0xED11, + 0xEF14,0xF1FD,0xF57D,0xF96C,0xFC9C,0xFF4D,0x0147,0x033A, + 0x066C,0x09D1,0x0C48,0x0E12,0x0F87,0x117C,0x12B4,0x1328, + 0x1389,0x12F6,0x1209,0x1046,0x0E53,0x0DDA,0x0C07,0x0705, + 0x0275,0xFDDF,0xF961,0xF516,0xF1A3,0xEEA4,0xEB9C,0xE925, + 0xE72E,0xE6AB,0xE6C6,0xE745,0xE847,0xEAED,0xEE46,0xF18E, + 0xF412,0xF6E3,0xFB07,0xFEF3,0x01DC,0x0525,0x0894,0x0A2A, + 0x0ACD,0x0C39,0x0D3D,0x0E48,0x0E9E,0x0E2B,0x0CE2,0x0AFD, + 0x0A11,0x0903,0x072A,0x049E,0x020F,0x008B,0xFE98,0xFC6B, + 0xFA4A,0xF94E,0xF78B,0xF413,0xF325,0xF295,0xF1BF,0xF0D7, + 0xF01B,0xEF5B,0xEF63,0xEFA3,0xEE93,0xEB77,0xE6BD,0xE2BA, + 0xDFF1,0xDDDD,0xDA89,0xD19A,0xC252,0xBDC3,0xBE1D,0xBDFA, + 0xBE30,0xBE00,0xC04B,0xC735,0xCDFB,0xDA20,0xED97,0x0646, + 0x219B,0x3864,0x3E2F,0x3DC8,0x3E3A,0x3E33,0x3E4D,0x3E4B, + 0x3E3C,0x3E3F,0x3E44,0x3DC0,0x3E6F,0x342F,0x1B70,0x0511, + 0xF28B,0xE4FA,0xDAC0,0xD18F,0xC8A1,0xBFEC,0xBE96,0xBEF5, + 0xBE71,0xC45C,0xCE12,0xD555,0xDBCC,0xE21A,0xE88D,0xEEA7, + 0xF439,0xF9B1,0xFDED,0x0277,0x072F,0x0BEE,0x0ED3,0x10A1, + 0x120D,0x1503,0x1A78,0x21D3,0x28E3,0x2D80,0x2EFB,0x3116, + 0x30E3,0x3157,0x338E,0x3236,0x2D85,0x2652,0x1CD3,0x12F7, + 0x08E4,0xFDD8,0xF22A,0xE687,0xDBBC,0xD2A9,0xCBC3,0xC693, + 0xC274,0xC033,0xBF21,0xC207,0xC99C,0xD2E2,0xDCA2,0xE591, + 0xEE25,0xF6A0,0xFF48,0x0A09,0x146A,0x1C9B,0x2290,0x24FC, + 0x25D3,0x2669,0x26B5,0x268F,0x24A4,0x20FA,0x1D6C,0x19B5, + 0x1550,0x112C,0x0C93,0x080F,0x040B,0x0112,0xFED4,0xFBFD, + 0xF91E,0xF513,0xF09E,0xEC95,0xEA1C,0xE8C7,0xE7D6,0xE5C9, + 0xE320,0xE0AB,0xDF9B,0xDFF5,0xE1B7,0xE3EE,0xE713,0xE97E, + 0xED77,0xF357,0xF8B0,0xFE89,0x0530,0x0BDA,0x1236,0x183A, + 0x1D07,0x1FCA,0x20B8,0x20F6,0x2137,0x2079,0x1E0A,0x1A8A, + 0x1699,0x1126,0x09C3,0x03D6,0xFFC2,0xFAF8,0xF600,0xF138, + 0xED92,0xEB00,0xE9AB,0xE86D,0xE767,0xE738,0xE78F,0xE8D7, + 0xEB86,0xEE88,0xF150,0xF369,0xF51C,0xF756,0xFA58,0xFD4A, + 0x00F7,0x0392,0x06A4,0x09A2,0x0AD2,0x0C77,0x0EB1,0x1147, + 0x12C8,0x1407,0x14BF,0x1558,0x15F2,0x1546,0x1451,0x1357, + 0x11B6,0x0F9F,0x0CA3,0x0902,0x0555,0x019F,0xFDC8,0xFA40, + 0xF759,0xF4CB,0xF1EB,0xEFE7,0xEF42,0xEEDC,0xEE8A,0xEECE, + 0xEFD3,0xF1E3,0xF436,0xF762,0xFA17,0xFCF8,0xFFD5,0x029B, + 0x05CD,0x088B,0x0A78,0x0C67,0x0DF5,0x0EF0,0x0F6E,0x0FB3, + 0x0F54,0x0E61,0x0D82,0x0D3B,0x0C65,0x0A86,0x083D,0x0609, + 0x0436,0x0272,0x014A,0xFFFE,0xFE49,0xFBA3,0xF98A,0xF83F, + 0xF78A,0xF6E8,0xF5C9,0xF53B,0xF506,0xF546,0xF50E,0xF3DA, + 0xF227,0xF098,0xEFD8,0xF094,0xF1C5,0xF0FB,0xED3B,0xE52B, + 0xDF74,0xDF48,0xE02D,0xE4C5,0xEA87,0xEEAF,0xF112,0xF3F9, + 0xF9C7,0x02FB,0x0DEE,0x1882,0x21E1,0x2996,0x2F0C,0x3235, + 0x3403,0x341F,0x32FD,0x3140,0x2E62,0x29F3,0x2321,0x1A6D, + 0x0F93,0x049C,0xFAF4,0xF468,0xF075,0xED96,0xEA3E,0xE631, + 0xE1CC,0xDF24,0xDF63,0xE339,0xE85A,0xED38,0xF16E,0xF4A8, + 0xF6E7,0xF890,0xFAF9,0xFE44,0x01CB,0x04F8,0x079B,0x0996, + 0x0A72,0x09A7,0x0966,0x0A5A,0x0CBC,0x103B,0x12F7,0x1417, + 0x1398,0x1388,0x133D,0x1306,0x12A0,0x149D,0x1406,0x10E0, + 0x0D32,0x088E,0x02FE,0xFDD2,0xF895,0xF3BF,0xF116,0xEEF1, + 0xEC69,0xE868,0xE521,0xE387,0xE38B,0xE56A,0xE8E4,0xECFC, + 0xF054,0xF2E1,0xF66E,0xFA56,0xFEE2,0x03A4,0x07BD,0x0AF4, + 0x0D5F,0x0EE3,0x0FD8,0x1052,0x0FD3,0x0E93,0x0DB2,0x0C81, + 0x0AE7,0x08D9,0x0607,0x0366,0x0157,0xFF3C,0xFD48,0xFC13, + 0xFB0A,0xF98A,0xF691,0xF434,0xF417,0xF33E,0xF223,0xF19A, + 0xF129,0xF082,0xF02E,0xEF0B,0xEE90,0xEEA4,0xEF7D,0xF0E2, + 0xF253,0xF363,0xF540,0xF6E3,0xF90C,0xFB48,0xFDDF,0x0118, + 0x0495,0x069C,0x07EF,0x0905,0x0972,0x093B,0x0971,0x08D0, + 0x0847,0x0777,0x0674,0x04AB,0x02D5,0x00E7,0xFF7D,0xFDEF, + 0xFC6E,0xFB10,0xFA2F,0xF932,0xF7D2,0xF769,0xF818,0xF890, + 0xF863,0xF8C5,0xF8E4,0xF96F,0xFA38,0xF9F4,0xF995,0xF94F, + 0xF97E,0xF94F,0xF8B6,0xF824,0xF7B5,0xF757,0xF6A7,0xF5E8, + 0xF543,0xF472,0xF37C,0xF290,0xF18F,0xF136,0xF024,0xEFA0, + 0xEE95,0xEDBE,0xECF5,0xEC0B,0xEB85,0xE9E7,0xE98E,0xE9E7, + 0xE72F,0xE798,0xE7C9,0xE6EE,0xE658,0xE642,0xE5D8,0xE50E, + 0xE48D,0xE4B8,0xE493,0xE469,0xE417,0xE40C,0xE41E,0xE43A, + 0xE48D,0xE4AC,0xE43E,0xE3C8,0xE2E6,0xE301,0xE3F5,0xE488, + 0xE4B7,0xE4FE,0xE4BB,0xE4CF,0xE513,0xE5A0,0xE653,0xE69B, + 0xE6BB,0xE68A,0xE6D1,0xE6C2,0xE706,0xE6F9,0xE72C,0xE76E, + 0xE7B1,0xE7F1,0xE888,0xE8B5,0xE91E,0xE98F,0xEA06,0xEAF9, + 0xEB97,0xEC80,0xECBB,0xECEA,0xED22,0xED98,0xEDEF,0xEE7A, + 0xEEDA,0xEF6B,0xF012,0xF02A,0xF092,0xF14A,0xF0C9,0xEF8A, + 0xF0ED,0xF1E2,0xF29B,0xF341,0xF3AC,0xF476,0xF4F8,0xF56B, + 0xF582,0xF5BD,0xF59B,0xF59B,0xF647,0xF73B,0xF801,0xF87D, + 0xF9A3,0xF9EE,0xF983,0xFA77,0xFB89,0xFC0B,0xFC40,0xFCD6, + 0xFD22,0xFDD1,0xFE6E,0xFE36,0xFEFE,0x0009,0x0073,0x00F1, + 0x01BA,0x028D,0x029F,0x02F0,0x037D,0x0428,0x04BD,0x0537, + 0x0594,0x05E2,0x06E8,0x06EB,0x05B0,0x0646,0x06E7,0x0765, + 0x07C1,0x07FE,0x0837,0x0848,0x08D2,0x09A0,0x0A57,0x0AA4, + 0x0AB2,0x0B49,0x0B51,0x0B77,0x0B49,0x0BA1,0x0C4C,0x0CAB, + 0x0CBD,0x0C88,0x0C99,0x0D36,0x0D57,0x0DE3,0x0DCA,0x0DB2, + 0x0DC2,0x0DF8,0x0E6B,0x0E93,0x0E55,0x0E22,0x0E0C,0x0E2B, + 0x0EBA,0x0F2D,0x0EEE,0x0E76,0x0E58,0x0E2C,0x0EE7,0x0F14, + 0x0EC4,0x0E99,0x0ECB,0x0EA2,0x0ED9,0x0F1D,0x0ED8,0x0EAE, + 0x0EBB,0x0EB0,0x0E9D,0x0F0F,0x0F55,0x0FAE,0x0FBF,0x0FD2, + 0x0F97,0x0F62,0x0F57,0x0F83,0x0F7A,0x0F81,0x0FA9,0x0F51, + 0x0F7A,0x0F64,0x0F4A,0x0F5D,0x0F79,0x0FF2,0x103C,0x0E52, + 0x0FB7,0x0F8C,0x0E91,0x0F4B,0x0FD6,0x0F9E,0x0FA7,0x0F9F, + 0x0F5C,0x0F3E,0x0F2D,0x0F6E,0x0F5F,0x0F43,0x0EEC,0x0F48, + 0x0F22,0x0EC7,0x0E9A,0x0E9D,0x0E95,0x0E64,0x0E99,0x0EBA, + 0x0E77,0x0E0E,0x0DAF,0x0CE8,0x0D41,0x0D8E,0x0DB5,0x0D72, + 0x0D73,0x0D1D,0x0D69,0x0D64,0x0D4F,0x0D96,0x0D46,0x0CE2, + 0x0C5D,0x0C13,0x0C26,0x0C78,0x0C16,0x0BDD,0x0BE6,0x0BD2, + 0x0BEE,0x0BB5,0x0B6F,0x0B26,0x0AF8,0x0AF2,0x0ADE,0x0A8C, + 0x0A7F,0x0A24,0x0A32,0x0A8C,0x0BF2,0x0E05,0x0CF2,0x0CAE, + 0x0C56,0x0C00,0x0BB1,0x0B8E,0x0B9E,0x0B41,0x0B5B,0x0B68, + 0x0B3A,0x0AFF,0x0AA2,0x0A33,0x0A46,0x0A81,0x0A99,0x0A1B, + 0x095F,0x098F,0x09BF,0x092D,0x0933,0x09D6,0x0979,0x08FF, + 0x08A5,0x084A,0x0854,0x0843,0x07F9,0x07DE,0x077D,0x075B, + 0x070C,0x06E9,0x0712,0x06B5,0x06A5,0x06B0,0x065A,0x0627, + 0x066D,0x0627,0x0477,0x04C5,0x05E3,0x057E,0x057C,0x0580, + 0x0546,0x0537,0x0568,0x0558,0x0500,0x043D,0x03F7,0x03B3, + 0x02F2,0x02B7,0x031E,0x02A3,0x0283,0x02D3,0x028C,0x023A, + 0x0262,0x0270,0x023A,0x021C,0x021D,0x0221,0x020F,0x0221, + 0x01FC,0x01CD,0x01C3,0x020B,0x0265,0x0259,0x0208,0x01B0, + 0x0187,0x01AB,0x0166,0x0146,0x01CB,0x0210,0x01C3,0x01B3, + 0x017C,0x0134,0x015D,0x0175,0x0126,0x010E,0x0176,0x0187, + 0x0168,0x013D,0x0136,0x0175,0x00FB,0x0084,0xFFF3,0xFFE4, + 0xFFDA,0xFF91,0xFF69,0xFF21,0xFEF3,0xFED4,0xFEF1,0xFEEA, + 0xFEEA,0xFED7,0xFE8F,0xFEBD,0xFEDB,0xFEB6,0xFEB0,0xFEF1, + 0xFE44,0xFD70,0xFE83,0xFF1E,0xFF15,0xFEC7,0xFED7,0xFEA0, + 0xFE54,0xFE2B,0xFE36,0xFDC7,0xFD8F,0xFD4D,0xFD44,0xFC93, + 0xFC88,0xFCDE,0xFC86,0xFC94,0xFC97,0xFD0C,0xFCD8,0xFC84, + 0xFC91,0xFCC6,0xFCA7,0xFC8D,0xFC62,0xFC1A,0xFC4D,0xFCAB, + 0xFC83,0xFC6F,0xFC4A,0xFC55,0xFC95,0xFC83,0xFCAC,0xFCAC, + 0xFC99,0xFCD5,0xFD1C,0xFCE1,0xFD15,0xFD70,0xFD73,0xFD2E, + 0xFD40,0xFD17,0xFCFD,0xFD01,0xFC52,0xFCAC,0xFD12,0xFCC8, + 0xFCFB,0xFD4E,0xFD43,0xFD47,0xFD59,0xFD9B,0xFD96,0xFD7E, + 0xFD8A,0xFDD7,0xFDD6,0xFE44,0xFDC8,0xFE17,0xFE3A,0xFE86, + 0xFE61,0xFEBA,0xFEB5,0xFE4B,0xFE07,0xFFA5,0xFD7A,0xFE5B, + 0xFEC0,0xFE5E,0xFE43,0xFE79,0xFE9C,0xFE95,0xFEAB,0xFE60, + 0xFED5,0xFECF,0xFEF9,0xFEAA,0xFF1C,0xFF71,0xFFDE,0xFFFC, + 0x007F,0x0153,0x01FF,0x01A3,0x015E,0x02ED,0x0510,0x067E, + 0x0728,0x0834,0x08C2,0x0862,0x0886,0x0915,0x0907,0x092D, + 0x08CC,0x08AB,0x091C,0x08EC,0x0934,0x0965,0x099A,0x0999, + 0x098F,0x09A2,0x09ED,0x0A6D,0x0B0B,0x0BA4,0x0BB5,0x0BFB, + 0x0CCA,0x0D90,0x0E33,0x0EDD,0x0FC4,0x1093,0x10F6,0x1124, + 0x11C2,0x12C0,0x1326,0x138E,0x12F7,0x111B,0x11EB,0x1297, + 0x12FE,0x1308,0x1371,0x1422,0x1486,0x149C,0x143E,0x14A8, + 0x1518,0x1593,0x1544,0x14C6,0x14C4,0x150F,0x15F3,0x1656, + 0x15A2,0x1598,0x159F,0x1573,0x14ED,0x1542,0x15C9,0x1651, + 0x16C3,0x1712,0x1660,0x1537,0x1478,0x14AB,0x14D9,0x14F3, + 0x153A,0x158E,0x145A,0x133C,0x12DB,0x12FB,0x137B,0x12D8, + 0x12F7,0x1293,0x1185,0x10B4,0x0FA0,0x0F03,0x0EA9,0x0EA8, + 0x0E54,0x0E7C,0x0E85,0x0E3D,0x0D9A,0x0D23,0x0CFF,0x0DCE, + 0x0DD0,0x0CF0,0x0C2E,0x0BF7,0x0BA1,0x0AFD,0x0AD0,0x0AF2, + 0x0AF5,0x09BE,0x0885,0x084A,0x07EA,0x0620,0x039C,0x00E2, + 0xFF1D,0xFD0F,0xF902,0xF3C9,0xEDAC,0xE7C3,0xE43E,0xE3B9, + 0xE53E,0xE6AD,0xE713,0xE756,0xE917,0xED82,0xF41B,0xFBC8, + 0x03FB,0x0B60,0x1176,0x16DB,0x1B89,0x1F90,0x223C,0x237E, + 0x2415,0x2436,0x23C7,0x2233,0x1DFE,0x185A,0x1297,0x0DCE, + 0x0A91,0x07FE,0x0501,0x01BA,0xFD62,0xF8F0,0xF62E,0xF4C3, + 0xF497,0xF4C6,0xF3FA,0xF246,0xF02D,0xECA4,0xECD4,0xECA0, + 0xE98C,0xE74A,0xE51D,0xE423,0xE3C0,0xE35C,0xE318,0xE2BE, + 0xE35D,0xE50F,0xE7EB,0xEB52,0xEEF6,0xF244,0xF58D,0xF93F, + 0xFCC2,0x00B7,0x04DC,0x0733,0x086B,0x0925,0x0984,0x0975, + 0x08A7,0x06ED,0x04DC,0x0225,0xFEB0,0xFB54,0xF7FF,0xF5A4, + 0xF379,0xF131,0xEE8E,0xEC38,0xEA4E,0xE964,0xE880,0xE7A7, + 0xE715,0xE603,0xE564,0xE50F,0xE48A,0xE3EB,0xE3C9,0xE3AD, + 0xE35E,0xE336,0xE391,0xE3F6,0xE45E,0xE54D,0xE6DB,0xE863, + 0xEA15,0xEC03,0xEF70,0xF3D7,0xF533,0xF694,0xF8F2,0xFB7D, + 0xFD18,0xFE17,0xFF11,0xFFB3,0xFF60,0xFEC2,0xFE54,0xFD68, + 0xFB70,0xF90A,0xF6E6,0xF59A,0xF3E7,0xF16E,0xEE68,0xED4F, + 0xEC1E,0xE9E8,0xE804,0xE7A3,0xE779,0xE65D,0xE5EC,0xE538, + 0xE573,0xE58B,0xE5BE,0xE5A0,0xE653,0xE6CF,0xE8A5,0xE8EA, + 0xE900,0xE91E,0xEA4D,0xEBC6,0xED34,0xEDF5,0xEFAE,0xF0DA, + 0xF093,0xF266,0xF448,0xF5CE,0xF792,0xF8E4,0xF9A4,0xFA63, + 0xFA6D,0xFA13,0xF9C0,0xF8C6,0xF802,0xF6FE,0xF564,0xF395, + 0xF35D,0xF2E7,0xF1C4,0xEFCB,0xEE48,0xECDF,0xEB91,0xEBE5, + 0xEC54,0xECA9,0xEC0F,0xEADD,0xEA48,0xEABB,0xEB8B,0xEC50, + 0xEC5E,0xECA6,0xED86,0xEE4A,0xEEA3,0xEF8B,0xF094,0xF11C, + 0xF150,0xF18D,0xF310,0xF48C,0xF5BB,0xF5EE,0xF619,0xF698, + 0xF7E4,0xF885,0xF8BF,0xF9C8,0xFA3C,0xFA53,0xFA8A,0xFAE2, + 0xFABD,0xF9FC,0xF93D,0xF91F,0xF976,0xF93D,0xF7CD,0xF627, + 0xF5D9,0xF54A,0xF44F,0xF38E,0xF409,0xF481,0xF431,0xF376, + 0xF302,0xF340,0xF36D,0xF288,0xF457,0xF52F,0xF49F,0xF65E, + 0xF670,0xF71B,0xF7F7,0xF853,0xF833,0xF8FD,0xFA3B,0xFADE, + 0xF88C,0xF3A3,0xEE69,0xEB32,0xE969,0xE4EF,0xDB9E,0xCBEE, + 0xBFEA,0xBF6D,0xBF5A,0xBF2E,0xBF73,0xBF61,0xBF87,0xBFB4, + 0xC01B,0xCCEA,0xE19D,0xF6C6,0x0BA1,0x1E1E,0x2F18,0x3C72, + 0x3F30,0x3F43,0x3F6E,0x3F61,0x3F99,0x3F62,0x3F5C,0x3F62, + 0x3F19,0x3F2E,0x3892,0x2BC8,0x2341,0x1DE0,0x193E,0x1269, + 0x089D,0xFEB5,0xF7D0,0xF5A2,0xF656,0xF649,0xF451,0xF0F0, + 0xECE8,0xE80B,0xE428,0xE029,0xDA76,0xD52F,0xD229,0xD0A4, + 0xD033,0xCF8B,0xCE29,0xCD47,0xCF71,0xD6F4,0xE163,0xECF8, + 0xF73B,0x009F,0x08D3,0x1154,0x1B81,0x26A6,0x319C,0x3889, + 0x3B9A,0x3CE8,0x3D0A,0x3B5C,0x3831,0x3416,0x2E72,0x27A9, + 0x20B3,0x1910,0x10EC,0x096E,0x01E7,0xFB1E,0xF537,0xF199, + 0xEFFF,0xEE70,0xEB7E,0xE7E2,0xE4F0,0xE2F2,0xE28A,0xE336, + 0xE525,0xE43A,0xE1C1,0xDF76,0xDE06,0xDE47,0xE076,0xE2AD, + 0xE4FC,0xE742,0xEA5A,0xEF47,0xF499,0xF9FF,0xFFFC,0x067E, + 0x0C87,0x1287,0x18AE,0x1E6B,0x22D2,0x2560,0x260F,0x2606, + 0x269E,0x269D,0x24FD,0x20E6,0x1BA5,0x1672,0x112C,0x0B2D, + 0x05AB,0x0118,0xFD22,0xF861,0xF3DD,0xF005,0xED5F,0xEAEE, + 0xE8E7,0xE7D2,0xE7B0,0xE7F9,0xE86A,0xE8B2,0xE886,0xE8B7, + 0xE8F4,0xE9D9,0xEC4D,0xEE5A,0xF022,0xF16D,0xF23E,0xF401, + 0xF776,0xFB24,0xFEA9,0x0195,0x0478,0x081B,0x0BC1,0x0F10, + 0x11D2,0x135E,0x14FD,0x170B,0x1847,0x18BC,0x181D,0x15F0, + 0x1311,0x10A4,0x0E62,0x0D0B,0x0903,0x039E,0x00D5,0xFBEB, + 0xF8FE,0xF736,0xF4A0,0xF1D3,0xEFC4,0xEE56,0xEDD5,0xEDAA, + 0xED83,0xED31,0xED62,0xEE3A,0xEF54,0xF090,0xF1EC,0xF352, + 0xF436,0xF54C,0xF6F1,0xF8EE,0xFBE4,0xFD6B,0xFEC4,0x00B9, + 0x035C,0x057F,0x06CC,0x0885,0x0AA9,0x0C92,0x0DBA,0x0EB7, + 0x0FA5,0x1064,0x0F90,0x0E1C,0x0DC4,0x0D9C,0x0C2E,0x0A27, + 0x0813,0x0580,0x025A,0x001D,0xFE3E,0xFC59,0xFA84,0xF885, + 0xF66F,0xF484,0xF3EC,0xF388,0xF34B,0xF3B3,0xF37F,0xF35D, + 0xF489,0xF61B,0xF949,0xFAD5,0xFACD,0xFB4C,0xFC14,0xFD80, + 0xFF79,0x0128,0x01D3,0x0087,0xFCDC,0xF807,0xF478,0xF28A, + 0xF085,0xEA26,0xDCFC,0xC958,0xBFA1,0xBFD2,0xBF51,0xBFC9, + 0xBFC4,0xBF43,0xBF91,0xBFD3,0xC163,0xD10B,0xE83B,0x00A0, + 0x1715,0x2A88,0x3AB2,0x3F16,0x3ED2,0x3EEF,0x3EEC,0x3ED7, + 0x3EE4,0x3ED3,0x3EDB,0x3EC0,0x3E4C,0x3EF9,0x39A0,0x2D61, + 0x25D1,0x212E,0x1A57,0x116D,0x0803,0x002E,0xFAB6,0xF852, + 0xF7BF,0xF754,0xF62F,0xF334,0xEE4B,0xE91E,0xE2DD,0xDD4B, + 0xD929,0xD5B1,0xD27F,0xD052,0xCF12,0xCD10,0xCB69,0xCC1B, + 0xD038,0xD7A2,0xE201,0xEE0D,0xF9FE,0x0446,0x0DCD,0x17D9, + 0x21C8,0x2C2B,0x35B9,0x3D22,0x3E59,0x3E47,0x3E3A,0x3E2C, + 0x39EE,0x3447,0x2ED3,0x2810,0x20C0,0x1928,0x101C,0x0651, + 0xFD4D,0xF6A4,0xF2BA,0xF000,0xEDDF,0xEB8E,0xE891,0xE565, + 0xE2A6,0xE12D,0xE0CE,0xE161,0xE156,0xE0AD,0xDF45,0xDDC1, + 0xDD42,0xDD21,0xDDF6,0xDE9C,0xE200,0xE624,0xEAF3,0xEEC1, + 0xF2BA,0xF796,0xFD54,0x0469,0x0DBF,0x1457,0x1AF9,0x1FF4, + 0x2239,0x24BD,0x26F6,0x2851,0x2835,0x2728,0x2434,0x1F98, + 0x1A17,0x1493,0x0F3B,0x095B,0x0398,0xFE3A,0xF9A5,0xF5D7, + 0xF18F,0xED56,0xEA15,0xE7C6,0xE6B6,0xE651,0xE6D5,0xE71C, + 0xE71B,0xE72C,0xE6F1,0xE78F,0xE8EB,0xEA8E,0xEBCC,0xED03, + 0xEEAC,0xF152,0xF3B5,0xF50D,0xF6C9,0xF9D1,0xFDF9,0x0293, + 0x06D9,0x0A3E,0x0DA4,0x1078,0x12E6,0x150E,0x1813,0x1AA9, + 0x1B42,0x1A09,0x183B,0x1718,0x159B,0x1319,0x0F8A,0x0BA9, + 0x07EF,0x03CF,0x0015,0xFC4D,0xF785,0xF3D2,0xF0DF,0xEE10, + 0xEC9E,0xEC5E,0xEC86,0xEC20,0xEB4C,0xEA7B,0xEAD2,0xEC7B, + 0xEECE,0xF103,0xF24E,0xF319,0xF3D8,0xF5BF,0xF7CB,0xF9C3, + 0xFCA4,0xFF20,0x0068,0x01F7,0x049F,0x082F,0x0A54,0x0B4A, + 0x0C25,0x0D25,0x0F63,0x1051,0x1199,0x125E,0x1155,0x0F8A, + 0x0E23,0x0D7E,0x0CE7,0x0B15,0x07FE,0x0510,0x0259,0x00FA, + 0xFF08,0xFB8C,0xF94E,0xF75D,0xF52B,0xF395,0xF313,0xF2FD, + 0xF281,0xF1CA,0xF28A,0xF44A,0xF5E5,0xF72B,0xF80D,0xF86E, + 0xF992,0xFB00,0xFC85,0xFE1E,0xFFBB,0x0097,0xFF1D,0xFB29, + 0xF60E,0xF25B,0xF0E2,0xEEAF,0xE726,0xD7F9,0xC555,0xC02C, + 0xC0B5,0xC055,0xC059,0xC05B,0xC044,0xC0AC,0xC0A7,0xC7FD, + 0xDAF0,0xF164,0x090C,0x1EF9,0x32A7,0x3ED7,0x3FE7,0x3FD0, + 0x3FFA,0x3FFA,0x3FF3,0x3FF3,0x4003,0x3FE7,0x3F93,0x3FAB, + 0x3F06,0x350A,0x2A7A,0x24A3,0x1F5E,0x17B4,0x0D44,0x02AF, + 0xFB4E,0xF80F,0xF7D1,0xF7FB,0xF643,0xF3BA,0xF0C4,0xED69, + 0xE8C3,0xE33C,0xDE34,0xDA59,0xD4BF,0xD310,0xD33D,0xD13A, + 0xCFE8,0xCE07,0xCE8E,0xD436,0xDE69,0xEA40,0xF53E,0xFEB5, + 0x081A,0x1197,0x1BF8,0x2789,0x32FC,0x3B6C,0x3ED1,0x3F5D, + 0x3F6D,0x3F72,0x3F3C,0x3A11,0x329C,0x2BD7,0x24E2,0x1DB8, + 0x15DD,0x0D31,0x03EC,0xFB42,0xF44E,0xF07D,0xEEEC,0xECA7, + 0xE9A9,0xE616,0xE2E8,0xE118,0xE09F,0xE14A,0xE1EB,0xE13C, + 0xDF6A,0xDD90,0xDCAE,0xDD25,0xDD7D,0xDE5B,0xE027,0xE2D9, + 0xE60D,0xEA41,0xEEDE,0xF3B5,0xF911,0xFF39,0x0667,0x0E10, + 0x1520,0x1B6F,0x21A7,0x23F6,0x25C0,0x2794,0x28D3,0x286B, + 0x264E,0x21F2,0x1D0D,0x185E,0x1355,0x0E27,0x082B,0x026C, + 0xFD1C,0xF7CC,0xF332,0xF019,0xED57,0xEA51,0xE859,0xE782, + 0xE6C2,0xE642,0xE6F2,0xE711,0xE714,0xE71D,0xE740,0xE8F8, + 0xEA83,0xECA1,0xEDC4,0xEF38,0xF0B5,0xF313,0xF5C2,0xF90D, + 0xFBFD,0xFF72,0x02C3,0x067F,0x09F6,0x0DC8,0x10B4,0x1253, + 0x1435,0x16F0,0x1895,0x19FE,0x1990,0x172A,0x1428,0x1197, + 0x0F42,0x0D17,0x08D7,0x039C,0xFF2B,0xFB1F,0xF6CF,0xF3F6, + 0xF226,0xF05F,0xED50,0xEAA0,0xE9DA,0xEA74,0xEA95,0xEA76, + 0xEA15,0xEAC5,0xEC17,0xED94,0xEF54,0xF134,0xF20D,0xF2EF, + 0xF45F,0xF648,0xF8E5,0xFBAB,0xFE03,0xFEFD,0xFFB8,0x0123, + 0x03F4,0x070C,0x0949,0x0AFC,0x0BD6,0x0CA9,0x0D3E,0x0E1D, + 0x0ED2,0x0EF3,0x0E32,0x0C5F,0x09F2,0x08C9,0x07B6,0x05A2, + 0x0276,0xFF45,0xFC9B,0xFA60,0xF83B,0xF695,0xF4AA,0xF368, + 0xF1D0,0xF0B2,0xF082,0xF11B,0xF20F,0xF1E1,0xF267,0xF398, + 0xF54F,0xF64E,0xF6C2,0xF951,0xFAD1,0xFAA7,0xFD3B,0xFEC6, + 0x0085,0x0131,0xFF27,0xF9FC,0xF4EA,0xF1CE,0xF062,0xECE0, + 0xE3A8,0xD299,0xC1BF,0xBF20,0xBF6D,0xBF25,0xBF32,0xBF57, + 0xBF5D,0xBFB8,0xBFC9,0xC968,0xDE1B,0xF5A8,0x0D4A,0x21BF, + 0x3410,0x3E7D,0x3F2A,0x3F44,0x3F4C,0x3F5C,0x3F68,0x3F71, + 0x3F66,0x3F97,0x3F2B,0x3F52,0x3DC2,0x32E3,0x2991,0x2412, + 0x1E41,0x1627,0x0BE4,0x0220,0xFBC3,0xF92F,0xF867,0xF8D2, + 0xF85B,0xF622,0xF236,0xED46,0xE85F,0xE314,0xDE2D,0xD9E1, + 0xD6C7,0xD508,0xD3FB,0xCFFD,0xCBE9,0xCB44,0xCDC4,0xD4B5, + 0xDF00,0xEB84,0xF745,0x00C5,0x0884,0x11FA,0x1CEB,0x28E4, + 0x335E,0x3BA5,0x3ED5,0x3F37,0x3F43,0x3F6A,0x3ED7,0x390C, + 0x32FD,0x2CCE,0x2626,0x1F5E,0x1737,0x0DAC,0x03C8,0xFC35, + 0xF695,0xF3B0,0xF1F1,0xEFDD,0xECA8,0xE8E6,0xE63A,0xE5A5, + 0xE5BD,0xE5C8,0xE523,0xE450,0xE2FA,0xE195,0xE130,0xE1DB, + 0xE0B9,0xE0B8,0xE278,0xE546,0xE928,0xEE0B,0xF2D8,0xF7B8, + 0xFCEB,0x02FC,0x0AD9,0x1307,0x19AB,0x1FCF,0x24A7,0x279A, + 0x2944,0x2A6A,0x2ADB,0x2AB9,0x28BE,0x24A5,0x1F8B,0x1A56, + 0x14F6,0x0EB8,0x08B3,0x0389,0xFE9D,0xFA13,0xF569,0xF09D, + 0xED80,0xEAFE,0xE952,0xE7C5,0xE707,0xE751,0xE7DC,0xE7C7, + 0xE7A0,0xE7F6,0xE8B2,0xE93B,0xEA5F,0xEBDC,0xEDF9,0xEFFA, + 0xF109,0xF2E5,0xF5C9,0xF8F5,0xFC1D,0xFF5C,0x02E7,0x06FC, + 0x0AC3,0x0DDD,0x10F7,0x13F6,0x1688,0x1802,0x1881,0x18BD, + 0x1921,0x177F,0x15EF,0x1313,0x102A,0x0CAE,0x0877,0x04EB, + 0x012B,0xFDD7,0xFAEB,0xF640,0xF1BE,0xF1C0,0xEFB6,0xEDBE, + 0xECBB,0xEC19,0xEC34,0xEBA7,0xEC10,0xED5E,0xEEED,0xF055, + 0xF12E,0xF190,0xF2E8,0xF470,0xF612,0xF7CB,0xFA14,0xFC8C, + 0xFE70,0xFF84,0x0154,0x041D,0x05F1,0x0784,0x0936,0x0B19, + 0x0D4C,0x0E7B,0x0F4F,0x0F39,0x0EF7,0x0EB1,0x0E35,0x0D4B, + 0x0B87,0x09C9,0x0778,0x04E7,0x01C6,0xFF19,0xFCF5,0xFA6F, + 0xF7C9,0xF5DD,0xF43D,0xF2B1,0xF150,0xF01F,0xF002,0xEFED, + 0xF073,0xF14D,0xF1F1,0xF2B0,0xF36D,0xF462,0xF575,0xF70D, + 0xF8F4,0xFCE4,0xFE5A,0xFE72,0xFF01,0xFECC,0xFC92,0xF7E1, + 0xF2EE,0xEF85,0xED96,0xE95E,0xDF51,0xCC89,0xC007,0xC027, + 0xBFFD,0xBFDA,0xBFD7,0xBFB7,0xBF8D,0xC007,0xC001,0xCA33, + 0xE16B,0xFA19,0x10EF,0x23C3,0x35BC,0x3EBE,0x3EFE,0x3F31, + 0x3F21,0x3F2C,0x3F08,0x3EFD,0x3F0D,0x3F25,0x3E78,0x3F02, + 0x37E3,0x2AE2,0x242A,0x1F46,0x19B6,0x101B,0x0577,0xFCBE, + 0xF739,0xF63B,0xF757,0xF78C,0xF55C,0xF0FD,0xEC43,0xE869, + 0xE469,0xDF80,0xD998,0xD49C,0xD0E0,0xCEAE,0xCE01,0xCC7F, + 0xCAAA,0xCA7E,0xCD1F,0xD41B,0xDEA1,0xEA59,0xF617,0x0025, + 0x08F1,0x11B4,0x1C88,0x28AC,0x3396,0x3ACC,0x3DE1,0x3E6A, + 0x3E41,0x3E05,0x39EF,0x3469,0x2E1A,0x269A,0x1EF3,0x1704, + 0x0ED1,0x06B7,0xFE29,0xF662,0xF0D0,0xEDDC,0xEBC2,0xE959, + 0xE661,0xE3C5,0xE1D5,0xE0DC,0xE001,0xDFC1,0xDFD8,0xDF0F, + 0xDD94,0xDC95,0xDC67,0xDC5A,0xDC3D,0xDD06,0xDED8,0xE2B2, + 0xE6E8,0xEBB1,0xEFE9,0xF55F,0xFB2E,0x0276,0x09A5,0x110A, + 0x17A3,0x1C9F,0x1F70,0x23C8,0x2404,0x25D0,0x275C,0x2556, + 0x21B0,0x1D4C,0x18A7,0x1420,0x0F29,0x0923,0x0352,0xFD50, + 0xF7D1,0xF393,0xF05D,0xEDB3,0xEA66,0xE730,0xE4D7,0xE44D, + 0xE531,0xE669,0xE613,0xE57C,0xE53E,0xE5B3,0xE688,0xE82F, + 0xE9CC,0xEB5C,0xEC6B,0xECE0,0xEE5F,0xF12D,0xF519,0xF85E, + 0xFB5E,0xFEEA,0x0311,0x0691,0x0A40,0x0D6E,0x104E,0x1301, + 0x1526,0x1761,0x190B,0x1960,0x1775,0x1512,0x1322,0x1121, + 0x0F02,0x0BAD,0x079E,0x030A,0xFEFB,0xFB37,0xF7CD,0xF525, + 0xF343,0xF0F3,0xEDE2,0xEA75,0xEA3D,0xEA88,0xEA6F,0xEAC1, + 0xEB68,0xECC2,0xEEC3,0xF036,0xF0D7,0xF1C6,0xF347,0xF4FB, + 0xF6B8,0xF930,0xFBD5,0xFE50,0x004F,0x0169,0x0299,0x05D4, + 0x0910,0x0B06,0x0C0E,0x0D71,0x0EB6,0x1018,0x11DE,0x12F5, + 0x1279,0x1179,0x1058,0x0F9A,0x0E99,0x0CE1,0x0A06,0x06CF, + 0x036C,0x013B,0xFF2F,0xFD4A,0xFB0A,0xF97B,0xF7E0,0xF4EF, + 0xF35D,0xF2CD,0xF325,0xF402,0xF47A,0xF440,0xF44A,0xF580, + 0xF7BA,0xF99F,0xFB12,0xFC25,0xFD7F,0xFF5E,0x003E,0x0133, + 0x0153,0xFE15,0xF8CC,0xF430,0xF1A6,0xF004,0xEA46,0xDD40, + 0xC960,0xC061,0xC108,0xC07B,0xC09E,0xC072,0xC06A,0xC0B7, + 0xC0AA,0xC332,0xD4DB,0xED45,0x05C6,0x1B51,0x2E1A,0x3CFC, + 0x4045,0x4003,0x4048,0x4004,0x400F,0x401C,0x4008,0x3FF1, + 0x3FDD,0x3F72,0x4004,0x37EE,0x2C38,0x251C,0x1E7F,0x176C, + 0x0E48,0x04B5,0xFCD5,0xF87E,0xF6D8,0xF71D,0xF74B,0xF58C, + 0xF225,0xEDA5,0xE88F,0xE3A7,0xDE7D,0xDA32,0xD743,0xD552, + 0xD371,0xD123,0xCF1F,0xCC5F,0xCE7B,0xD4AC,0xDBF5,0xE670, + 0xF1AA,0xFC19,0x05F8,0x103E,0x1A76,0x252E,0x2FE2,0x3909, + 0x3F23,0x3F7C,0x3F71,0x3F75,0x3F66,0x3AD3,0x3543,0x2F47, + 0x281B,0x2049,0x17B8,0x0EE6,0x066F,0xFE37,0xF789,0xF2C8, + 0xEFAC,0xED8F,0xEB56,0xE8AA,0xE5B6,0xE2DE,0xE14F,0xE0DE, + 0xE161,0xE27A,0xE2A6,0xE099,0xDDE3,0xDC7A,0xDD06,0xDEA5, + 0xE0D4,0xE3BB,0xE6CE,0xEA4E,0xEE5E,0xF2CB,0xF873,0xFF25, + 0x057A,0x0BF1,0x1357,0x1A6B,0x1FD2,0x227E,0x2403,0x24EC, + 0x26EC,0x2931,0x279F,0x24E9,0x20A8,0x1AC7,0x1444,0x0DA7, + 0x0807,0x033D,0xFE4A,0xF8D4,0xF406,0xF082,0xECDF,0xE9EF, + 0xE757,0xE616,0xE591,0xE5C3,0xE595,0xE676,0xE752,0xE691, + 0xE5FC,0xE799,0xE951,0xEAD7,0xEC05,0xED3F,0xEF29,0xF10F, + 0xF3B2,0xF65F,0xF9AB,0xFCE1,0x00C1,0x045F,0x0877,0x0BCD, + 0x0E91,0x1184,0x13B4,0x15BB,0x178A,0x184C,0x16D5,0x154E, + 0x1371,0x113E,0x0F2D,0x0C9D,0x089E,0x0447,0xFFCE,0xFB1F, + 0xF719,0xF36C,0xF114,0xEF6E,0xED0C,0xEA4C,0xE86F,0xE7B1, + 0xE84E,0xE89F,0xE8D3,0xE9A1,0xEB16,0xECBC,0xEDC7,0xEEE8, + 0xF052,0xF1C1,0xF348,0xF4E2,0xF723,0xF9A0,0xFB6B,0xFCBB, + 0xFE57,0xFFFA,0x0278,0x0502,0x074F,0x0985,0x0AE8,0x0B52, + 0x0BB1,0x0C8C,0x0D22,0x0D01,0x0CEC,0x0BE9,0x0A5F,0x0871, + 0x06D9,0x04D8,0x01AE,0xFEE5,0xFC73,0xFA48,0xF853,0xF655, + 0xF46D,0xF245,0xF06F,0xEF91,0xEF6E,0xEF3D,0xEF73,0xEFDA, + 0xF0F5,0xF1A6,0xF25F,0xF3AC,0xF4C2,0xF65F,0xF7EE,0xF9B7, + 0xFB54,0xFB90,0xFD06,0xFDC9,0xFBD8,0xFB54,0xF7DB,0xF506, + 0xF38B,0xF0C1,0xEA34,0xDF4B,0xD0AB,0xC3DD,0xBF40,0xBF59, + 0xBF27,0xC27E,0xC4FE,0xC590,0xC8A9,0xD1AA,0xE07C,0xF23D, + 0x04E4,0x150E,0x2335,0x2F50,0x3AAC,0x3F6D,0x3F12,0x3F41, + 0x3F3F,0x3F61,0x3F76,0x3F0C,0x3F5C,0x3BCB,0x2F84,0x2591, + 0x1EA8,0x1ABF,0x163C,0x0FB0,0x083C,0x00A5,0xFAD4,0xF8EF, + 0xF980,0xFA50,0xF9E5,0xF714,0xF380,0xF088,0xEDB2,0xEA97, + 0xE709,0xE368,0xE0D4,0xDEF8,0xDD3A,0xDBB3,0xDA82,0xD9FC, + 0xDB2F,0xDEF5,0xE462,0xEBA6,0xF4ED,0xFC20,0x02D4,0x0AFA, + 0x13D4,0x1CA8,0x248D,0x2B02,0x2EDB,0x3116,0x3238,0x3182, + 0x2FBC,0x2C9D,0x2743,0x2103,0x1B7B,0x1585,0x101F,0x0A9C, + 0x04B7,0xFE0F,0xF859,0xF55E,0xF3EF,0xF2D4,0xF0E8,0xEEFC, + 0xECC6,0xEAD9,0xEA2B,0xEA65,0xEA3B,0xE99D,0xE88F,0xE805, + 0xE852,0xE81F,0xE77A,0xE78B,0xE84B,0xEA6E,0xEE9C,0xF156, + 0xF46C,0xF84A,0xFC3E,0x0096,0x05D6,0x0BAB,0x10F1,0x153C, + 0x18AF,0x1BE5,0x1ED0,0x203E,0x207E,0x1FA8,0x1D87,0x1B46, + 0x1811,0x147D,0x1088,0x0C00,0x0746,0x022F,0xFD96,0xFA86, + 0xF86E,0xF5D9,0xF2D9,0xF02F,0xEEAE,0xEDC8,0xEE01,0xEE29, + 0xEDA6,0xED51,0xED69,0xED9D,0xEEB2,0xEFDC,0xF0B6,0xF143, + 0xF195,0xF1F6,0xF372,0xF60F,0xF91E,0xFB6A,0xFCF9,0xFE73, + 0x003F,0x039C,0x0731,0x0A84,0x0CF7,0x0EFF,0x103D,0x10FF, + 0x1243,0x13BF,0x145F,0x12C7,0x0FF2,0x0DA1,0x0C02,0x0AE3, + 0x08D8,0x05ED,0x01BF,0xFDB0,0xFA8A,0xF87D,0xF74E,0xF631, + 0xF4B5,0xF31C,0xF083,0xEEA7,0xF181,0xF23E,0xF27A,0xF309, + 0xF31E,0xF3AA,0xF498,0xF5A0,0xF71F,0xF86B,0xF9A3,0xFA85, + 0xFC12,0xFD8C,0xFEEB,0x0032,0x0172,0x031E,0x0512,0x070E, + 0x08AC,0x0926,0x09FB,0x0B42,0x0C58,0x0CB1,0x0C9C,0x0BF5, + 0x0B28,0x0A11,0x084F,0x0707,0x065C,0x0545,0x0247,0xFF90, + 0xFD91,0xFC0E,0xFA1E,0xF89D,0xF74D,0xF65A,0xF566,0xF4B4, + 0xF472,0xF4C6,0xF43F,0xF3E9,0xF462,0xF5D4,0xF728,0xF760, + 0xF839,0xF918,0xFA56,0xFAB5,0xFB58,0xFC88,0xFEC6,0x0076, + 0x0212,0x0115,0xFE94,0xFE41,0xFEDB,0xFE0D,0xFB9C,0xF741, + 0xF251,0xEE58,0xEC7E,0xED4E,0xEEF8,0xEFAC,0xEF4D,0xEF5D, + 0xF152,0xF52F,0xFA85,0xFF4A,0x0399,0x0872,0x0BD5,0x0F29, + 0x1304,0x16D6,0x1751,0x16B9,0x1628,0x15C9,0x15D4,0x14CD, + 0x126D,0x0E83,0x09FF,0x06D7,0x0516,0x044B,0x02E1,0x00E1, + 0xFF33,0xFD4C,0xFBE3,0xFC5D,0xFD78,0xFD3A,0xFB85,0xFB78, + 0xFBAF,0xFB56,0xFA85,0xF962,0xF80A,0xF6C4,0xF515,0xF399, + 0xF2E0,0xF2D0,0xF308,0xF2EC,0xF1D4,0xF26C,0xF4ED,0xF839, + 0xFB5D,0xFD54,0xFF54,0x01C9,0x0491,0x06DC,0x087B,0x0A70, + 0x0B9E,0x0B75,0x0ACE,0x0AC7,0x0A67,0x093A,0x0728,0x04CC, + 0x02D2,0x0171,0xFFCF,0xFDC7,0xFC2E,0xFA9F,0xF9AE,0xF921, + 0xF8AF,0xF899,0xF8CE,0xF841,0xF700,0xF6DA,0xF766,0xF878, + 0xF84E,0xF791,0xF6E6,0xF6F7,0xF719,0xF752,0xF7D2,0xF80F, + 0xF7E7,0xF7F7,0xF8B2,0xF9BD,0xFB87,0xFCBF,0xFE1B,0xFF68, + 0x00EE,0x01FD,0x03B9,0x04B4,0x0587,0x0637,0x0677,0x06B7, + 0x067E,0x05C5,0x0689,0x03FA,0x02DB,0x0284,0x00DB,0xFFF6, + 0xFEF0,0xFDD6,0xFC94,0xFB08,0xF89E,0xF69E,0xF53F,0xF573, + 0xF628,0xF687,0xF63A,0xF4F2,0xF3D9,0xF38E,0xF3E8,0xF475, + 0xF453,0xF3D1,0xF36F,0xF37E,0xF315,0xF2AE,0xF2C5,0xF216, + 0xF168,0xF165,0xF166,0xF0DA,0xF02D,0xEFA8,0xEF24,0xEEC2, + 0xEE87,0xEE29,0xEDF6,0xED2E,0xECD0,0xEC4C,0xEBC3,0xEB4B, + 0xEB60,0xEB19,0xEA8F,0xEA12,0xE980,0xE967,0xE8E0,0xE8E4, + 0xE84D,0xE812,0xE7EF,0xE7AB,0xE7AD,0xE7BD,0xE778,0xE766, + 0xE74A,0xE6BA,0xE51A,0xE4FC,0xE537,0xE562,0xE565,0xE618, + 0xE6A3,0xE6BF,0xE72E,0xE788,0xE723,0xE78F,0xE7EB,0xE842, + 0xE904,0xE99A,0xEA52,0xEB31,0xEB52,0xEA71,0xEB24,0xEC0D, + 0xEC3B,0xEC6F,0xED0F,0xED30,0xED5E,0xEDE6,0xEE1E,0xEE3C, + 0xEEE5,0xEF72,0xF08D,0xF0B0,0xF0F9,0xF17A,0xF1F8,0xF1E1, + 0xF230,0xF2CA,0xF374,0xF3E6,0xF431,0xF5C8,0xF640,0xF50F, + 0xF557,0xF5F9,0xF6A1,0xF759,0xF801,0xF894,0xF91F,0xF968, + 0xFA71,0xFB37,0xFBE4,0xFC21,0xFCBE,0xFD38,0xFD98,0xFDD9, + 0xFE43,0xFF0A,0xFFA6,0x0028,0x0086,0x00C4,0x015D,0x01A3, + 0x0222,0x02A4,0x024A,0x0282,0x02A5,0x02A0,0x0326,0x0333, + 0x0361,0x03D3,0x0455,0x04AF,0x051C,0x056E,0x059B,0x0564, + 0x05AA,0x05C5,0x05B8,0x0637,0x0687,0x06D1,0x0721,0x0738, + 0x074C,0x0798,0x07FE,0x085D,0x08E4,0x0934,0x0907,0x0947, + 0x09AA,0x0A2F,0x0A7A,0x0ABF,0x0B36,0x0B44,0x0B58,0x0B46, + 0x0AE6,0x0B21,0x0A98,0x0A9F,0x0AE5,0x0B3A,0x0BCD,0x0C14, + 0x0C0F,0x0CAD,0x0AA5,0x0B6E,0x0CF6,0x0BCD,0x0C41,0x0CDA, + 0x0CF6,0x0D27,0x0CE0,0x0CF9,0x0D1F,0x0D1A,0x0D3E,0x0D61, + 0x0D68,0x0D7B,0x0D90,0x0D7B,0x0DA3,0x0E03,0x0E02,0x0E20, + 0x0E0E,0x0DA3,0x0D56,0x0D20,0x0D7B,0x0D5D,0x0D79,0x0D8E, + 0x0D7C,0x0D34,0x0CFD,0x0CFC,0x0D13,0x0D61,0x0D66,0x0D57, + 0x0D33,0x0D31,0x0CF6,0x0D10,0x0CF4,0x0CDA,0x0D1C,0x0D6E, + 0x0D6F,0x0D0D,0x0C86,0x0C88,0x0C6E,0x0CFE,0x0D22,0x0D40, + 0x0D5B,0x0D45,0x0D23,0x0CAE,0x0C7B,0x0C8C,0x0D30,0x0E13, + 0x0FD5,0x0F36,0x0E84,0x0E22,0x0DF6,0x0DDB,0x0E2A,0x0E65, + 0x0E88,0x0E71,0x0E1B,0x0DA3,0x0D7D,0x0D32,0x0D37,0x0D34, + 0x0CD9,0x0CC5,0x0C99,0x0BB9,0x0C20,0x0C91,0x0C02,0x0B8F, + 0x0C41,0x0C08,0x0B94,0x0B24,0x0AD5,0x0AC5,0x0AE9,0x0B43, + 0x0AFE,0x0A86,0x0A67,0x0A71,0x09D9,0x098E,0x0987,0x09D1, + 0x09B7,0x0934,0x086A,0x0863,0x0852,0x0767,0x07E1,0x08F4, + 0x091B,0x08AB,0x0842,0x07F0,0x07FC,0x07A4,0x0777,0x071F, + 0x069A,0x0661,0x067C,0x05CD,0x050D,0x0536,0x04DD,0x0511, + 0x050B,0x0563,0x0507,0x04BC,0x0491,0x04BF,0x0497,0x0502, + 0x04F0,0x04F1,0x04DC,0x04A3,0x0498,0x0487,0x0469,0x0490, + 0x04FD,0x04BB,0x04A1,0x045F,0x047C,0x04AA,0x0438,0x043A, + 0x04A8,0x0485,0x047F,0x0447,0x0426,0x045C,0x040B,0x03C7, + 0x03B7,0x03C5,0x042C,0x0421,0x043C,0x043C,0x03FB,0x0412, + 0x03A5,0x0330,0x0334,0x031B,0x0298,0x02CC,0x0276,0x02E7, + 0x02DD,0x02E5,0x034D,0x0310,0x034A,0x02ED,0x02BB,0x02DC, + 0x021C,0x0344,0x03D1,0x02A2,0x039C,0x02FB,0x02F9,0x034F, + 0x035D,0x0322,0x030A,0x034C,0x033B,0x0315,0x0300,0x02F9, + 0x02EC,0x0333,0x02EE,0x032E,0x0334,0x0335,0x02E5,0x02AB, + 0x02C1,0x02B2,0x02D1,0x0342,0x0391,0x036D,0x031C,0x0297, + 0x029B,0x02A6,0x0268,0x02F2,0x0307,0x02F9,0x0327,0x030A, + 0x02D8,0x02BA,0x02C7,0x028C,0x02A5,0x02CA,0x0309,0x02F9, + 0x02DA,0x0284,0x0255,0x028D,0x02D8,0x02CC,0x0299,0x028A, + 0x021C,0x01CF,0x01D3,0x01FA,0x021E,0x0274,0x023B,0x0205, + 0x01CE,0xFFEA,0x00B1,0x01C7,0x022C,0x0332,0x04A0,0x04EC, + 0x05BE,0x065E,0x06DC,0x0726,0x07EE,0x08A7,0x095A,0x0A82, + 0x0B45,0x0B48,0x0B6A,0x0B4A,0x0B54,0x0B56,0x0B30,0x0BAF, + 0x0BE7,0x0CA4,0x0C74,0x0BEE,0x0BEF,0x0C40,0x0CDF,0x0D64, + 0x0D66,0x0D5F,0x0D35,0x0E00,0x0F30,0x102E,0x1045,0x102A, + 0x1070,0x1158,0x1268,0x130F,0x13CD,0x1425,0x1461,0x13D7, + 0x13CC,0x14B6,0x159D,0x15E7,0x1550,0x1509,0x1587,0x168C, + 0x172D,0x1788,0x17A5,0x17C9,0x1744,0x1722,0x17FC,0x18AB, + 0x18A4,0x1811,0x1812,0x189C,0x16AA,0x171D,0x18E5,0x17B5, + 0x1799,0x1764,0x16A8,0x16D6,0x16E8,0x16BE,0x165A,0x1610, + 0x160E,0x158C,0x1514,0x1497,0x144D,0x140F,0x1390,0x12DC, + 0x11CE,0x1012,0x0DF7,0x0B88,0x085E,0x0524,0x01D8,0xFD63, + 0xF832,0xF49D,0xF255,0xF328,0xF5E9,0xF94E,0xFDC9,0x0313, + 0x0884,0x0E22,0x13BB,0x1A05,0x2059,0x25AE,0x28D8,0x2A36, + 0x2A2C,0x286E,0x2576,0x20C6,0x1BE6,0x17CE,0x13A3,0x0FA2, + 0x0B74,0x07B5,0x040F,0x00E7,0xFE35,0xFCA5,0xFCA7,0xFD53, + 0xFCF8,0xFC7B,0xFCBE,0xF9EC,0xF7EE,0xF6AD,0xF5EA,0xF4E4, + 0xF4AE,0xF45F,0xF493,0xF60C,0xF7BA,0xFA2E,0xFCCA,0xFF95, + 0x0357,0x0703,0x0AE2,0x0EC1,0x1088,0x106F,0x1059,0x103A, + 0x0E8A,0x0C7F,0x0A58,0x0749,0x02C5,0xFE1B,0xF959,0xF5CB, + 0xF34F,0xF14D,0xEF14,0xED88,0xEC78,0xEC11,0xEB82,0xEB1A, + 0xEADA,0xEB62,0xEBFD,0xEC36,0xED10,0xEE49,0xEE7E,0xED2D, + 0xED4D,0xEEFF,0xF051,0xF1C7,0xF3E5,0xF5F6,0xF873,0xFA2B, + 0xFB11,0xFC02,0xFC9E,0xFD7B,0xFE2D,0xFDAA,0xFC8B,0xFBD5, + 0xFA36,0xF6E9,0xF41E,0xF22A,0xEFEA,0xED4E,0xEA7D,0xE868, + 0xE6DE,0xE5C8,0xE478,0xE3D1,0xE427,0xE536,0xE650,0xE68E, + 0xE761,0xE932,0xEA2F,0xEA68,0xEB71,0xECB6,0xEDB7,0xEE81, + 0xEF4C,0xF075,0xF12F,0xF1BC,0xF2A7,0xF393,0xF48C,0xF518, + 0xF50A,0xF4F4,0xF532,0xF5B7,0xF58A,0xF4F8,0xF3A9,0xF214, + 0xF022,0xEE78,0xEDB3,0xEC84,0xEAE7,0xE97E,0xE7C0,0xE696, + 0xE61D,0xE619,0xE63F,0xE72C,0xE89D,0xE959,0xE9C6,0xEA6B, + 0xEBAC,0xED1C,0xEDC4,0xEFB7,0xF175,0xF110,0xF2D9,0xF336, + 0xF37A,0xF427,0xF47F,0xF406,0xF429,0xF4D7,0xF67C,0xF6A0, + 0xF59D,0xF54E,0xF4A1,0xF416,0xF362,0xF32C,0xF2BC,0xF24F, + 0xF11E,0xEFA6,0xEE8E,0xEE04,0xED4C,0xEC4A,0xEC58,0xED36, + 0xEE26,0xEE61,0xEEC7,0xEED2,0xEFDC,0xF119,0xF259,0xF388, + 0xF46B,0xF5B7,0xF68D,0xF74D,0xF7C4,0xF7C5,0xF7FD,0xF8DC, + 0xF988,0xFA65,0xFA42,0xF9AB,0xF8F6,0xF87C,0xF888,0xF810, + 0xF7C0,0xF7CC,0xF7CB,0xF6C9,0xF5BE,0xF48B,0xF452,0xF456, + 0xF423,0xF38A,0xF30A,0xF13E,0xEFC9,0xEFCE,0xF026,0xF1B5, + 0xF2A2,0xF30E,0xF38D,0xF3AF,0xF49A,0xF604,0xF6CB,0xF7B3, + 0xF85B,0xF914,0xF94C,0xF708,0xF1F0,0xEBD1,0xE3C8,0xDC5E, + 0xD5D5,0xCA56,0xC02F,0xBF6E,0xBFA0,0xBF9E,0xBFAA,0xC053, + 0xBFA7,0xC5AE,0xD6FA,0xE7D4,0xFC05,0x14B2,0x3145,0x3FC1, + 0x3F7F,0x3FD7,0x3FDB,0x3FFD,0x3FFF,0x3FCD,0x3F96,0x3FC4, + 0x3409,0x2548,0x1A1C,0x0F70,0x0363,0xF6B8,0xEB45,0xE3E9, + 0xE2E0,0xE6FC,0xEBF8,0xEDC2,0xEA92,0xE490,0xDD98,0xD77D, + 0xD451,0xD2EA,0xD252,0xD170,0xD13C,0xD291,0xD635,0xDC7D, + 0xE626,0xF320,0x022F,0x12AD,0x2394,0x3379,0x3E1E,0x406F, + 0x405A,0x405E,0x4069,0x400A,0x3FF6,0x38D9,0x2BA2,0x1C33, + 0x0BAC,0xFD16,0xF239,0xE9E1,0xE2E6,0xDDC9,0xDA2E,0xD7BE, + 0xD654,0xD69C,0xD82A,0xD9FD,0xDC24,0xDE5A,0xE1C8,0xE4B4, + 0xE70B,0xE786,0xE78F,0xE901,0xECAD,0xF231,0xF917,0x00BD, + 0x085B,0x0EA0,0x154D,0x1BC7,0x2201,0x27DA,0x2C19,0x2E65, + 0x2EE6,0x2CF6,0x28F1,0x21E2,0x1770,0x0F4A,0x0515,0xFBAE, + 0xF430,0xECE2,0xE587,0xDEE5,0xD967,0xD692,0xD602,0xD7F8, + 0xDB36,0xDED1,0xE2C6,0xE68E,0xEA14,0xED96,0xF11E,0xF4BC, + 0xF884,0xFBB2,0xFF49,0x0258,0x0599,0x081B,0x0A1E,0x0CB5, + 0x100B,0x134F,0x16B8,0x19A3,0x1B15,0x1B04,0x1980,0x174F, + 0x14DD,0x1150,0x0C98,0x076B,0x015F,0xFAFD,0xF3DA,0xEDCC, + 0xE8A1,0xE455,0xE0F9,0xDE20,0xDD8D,0xDE82,0xE0DA,0xE3FE, + 0xE748,0xEB08,0xEF1E,0xF325,0xF779,0xFB57,0xFF86,0x0357, + 0x0640,0x0A43,0x0CAF,0x0D6B,0x0DE0,0x0F41,0x102C,0x10E0, + 0x10D5,0x104C,0x103B,0x102B,0x0EDC,0x0CB2,0x0A15,0x07A1, + 0x0522,0x01DC,0xFE04,0xFA58,0xF623,0xF124,0xEEBD,0xECA0, + 0xEAA0,0xE98C,0xE9A4,0xE975,0xEA07,0xEBB4,0xEE2A,0xF18B, + 0xF5F1,0xFA43,0xFE20,0x0177,0x0421,0x0695,0x08B1,0x0AAA, + 0x0BCF,0x0CF1,0x0DDE,0x0E59,0x0E2B,0x0D3C,0x0ACA,0x0907, + 0x08EF,0x0820,0x06A9,0x058D,0x047A,0x02AA,0xFFBE,0xFCD9, + 0xFA4B,0xF7BB,0xF5CF,0xF412,0xF337,0xF1D3,0xF070,0xEF50, + 0xEE6C,0xEF23,0xF0B7,0xF26B,0xF456,0xF6BE,0xF9A5,0xFBF6, + 0xFE17,0x0013,0x028C,0x04EB,0x0712,0x0887,0x0919,0x06CD, + 0x009E,0xF748,0xED40,0xE466,0xDA77,0xCA3C,0xBE92,0xBE80, + 0xBE51,0xBE5F,0xBE63,0xBF07,0xBE40,0xC4C6,0xD828,0xEAF9, + 0x02A8,0x218D,0x3B3E,0x3E3F,0x3E35,0x3E6C,0x3E7D,0x3E68, + 0x3E5F,0x3E69,0x3DFB,0x3E6B,0x3AEB,0x2C50,0x1FD2,0x14C2, + 0x07F2,0xFAE9,0xEF9D,0xEA96,0xEB9E,0xF092,0xF44B,0xF404, + 0xEEB1,0xE5D6,0xDD09,0xD964,0xD4F0,0xD2A9,0xD067,0xCCC9, + 0xCB82,0xCDCC,0xD3FC,0xDCD1,0xE880,0xF655,0x070A,0x18F8, + 0x2CB9,0x3C1D,0x3F37,0x3EF7,0x3F5B,0x3F45,0x3F6D,0x3F49, + 0x3EFD,0x3ED5,0x33CC,0x21AB,0x1046,0x0190,0xF64F,0xEDD6, + 0xE6C9,0xE08C,0xDC52,0xDA1E,0xD930,0xD925,0xDA44,0xDC19, + 0xDF21,0xE1C3,0xE3CC,0xE620,0xE726,0xE666,0xE64C,0xE827, + 0xEC98,0xF356,0xFAAA,0x0231,0x09CD,0x1197,0x1974,0x20EE, + 0x28FB,0x3069,0x35F7,0x384D,0x37ED,0x3462,0x2E87,0x2668, + 0x1DB8,0x13D2,0x087B,0xFBFE,0xF1AB,0xE94F,0xE14F,0xDAD1, + 0xD628,0xD3B6,0xD2E6,0xD3E7,0xD6C2,0xDB1D,0xDFCE,0xE36A, + 0xE6E7,0xEA54,0xEE42,0xF259,0xF747,0xFC03,0xFEE0,0x01A1, + 0x0457,0x0703,0x0A8A,0x0EEA,0x136E,0x175A,0x1B42,0x1E23, + 0x1FAC,0x2009,0x1F5A,0x1DFC,0x1B46,0x16F4,0x1159,0x0B69, + 0x0493,0xFD85,0xF5ED,0xEF00,0xE965,0xE4CC,0xE26D,0xE083, + 0xDF09,0xDFF4,0xE1A3,0xE3FF,0xE712,0xEBA9,0xF149,0xF681, + 0xFB23,0xFFB6,0x03F9,0x0798,0x0A4F,0x0D0A,0x0FA5,0x116A, + 0x12D9,0x138D,0x1406,0x14BB,0x1535,0x14ED,0x146A,0x1376, + 0x123A,0x1067,0x0E9A,0x0C13,0x08CF,0x04E9,0xFFF6,0xFB11, + 0xF765,0xF439,0xF13E,0xEE2F,0xEB60,0xE916,0xE799,0xE817, + 0xEA49,0xEDB3,0xF110,0xF3E4,0xF635,0xF984,0xFDA3,0x022B, + 0x05E0,0x098F,0x0C25,0x0D54,0x0E2B,0x0F38,0x102F,0x1032, + 0x0F68,0x0E59,0x0E03,0x0DA1,0x0C57,0x0A5C,0x0866,0x0680, + 0x0468,0x0222,0x0071,0xFE28,0xFB43,0xF872,0xF5DC,0xF446, + 0xF351,0xF24F,0xF15D,0xEE70,0xEF5E,0xF18C,0xF191,0xF316, + 0xF51A,0xF777,0xFA8C,0xFD5B,0x0002,0x037B,0x05DC,0x0734, + 0x089D,0x0A97,0x0B0A,0x07A8,0x0000,0xF672,0xED2F,0xE447, + 0xD97E,0xC8A7,0xBF34,0xBFD1,0xBF5B,0xBF56,0xBF85,0xC01C, + 0xBFA3,0xCCA1,0xDFC4,0xF22A,0x0A43,0x2A12,0x3E56,0x3E98, + 0x3F22,0x3F47,0x3F15,0x3F38,0x3F44,0x3F2D,0x3EA7,0x3F4E, + 0x38A0,0x2AAC,0x2007,0x1471,0x0710,0xF982,0xEF21,0xEA9C, + 0xECEA,0xF291,0xF5F6,0xF473,0xEE27,0xE584,0xDCF9,0xD687, + 0xD46A,0xD4AB,0xD2AE,0xD013,0xCEE8,0xD0E9,0xD68A,0xDF43, + 0xEB06,0xFA3C,0x0C83,0x1FA4,0x326D,0x3EA3,0x3FB4,0x3FBB, + 0x3FC4,0x3FD9,0x3FD8,0x3F71,0x3F3A,0x3D8E,0x2EC1,0x1CA3, + 0x0BB4,0xFDA6,0xF2B0,0xEA38,0xE470,0xDF76,0xDBD3,0xD9A9, + 0xD915,0xD978,0xDA59,0xDB81,0xDE2D,0xE0F8,0xE488,0xE633, + 0xE62D,0xE575,0xE559,0xE75C,0xEC95,0xF35E,0xF9F2,0x0230, + 0x0AEC,0x126E,0x1A70,0x22A2,0x2A35,0x30E1,0x3520,0x36A1, + 0x3545,0x318F,0x2B19,0x226B,0x17E1,0x0CC4,0x0220,0xF7E4, + 0xEF3D,0xE793,0xE094,0xD9D1,0xD3FD,0xD146,0xD1FC,0xD524, + 0xD948,0xDD19,0xE110,0xE467,0xE737,0xEB26,0xF050,0xF531, + 0xF8C4,0xFB73,0xFDC0,0x0061,0x03DF,0x0816,0x0BDD,0x0ED0, + 0x1232,0x160E,0x1977,0x1C4D,0x1E13,0x1E6B,0x1D0E,0x19A7, + 0x1627,0x125A,0x0D98,0x0742,0x0021,0xF88D,0xF140,0xEAAF, + 0xE54B,0xE1FF,0xDFAE,0xDDC8,0xDCB2,0xDC76,0xDE81,0xE27F, + 0xE74E,0xEBCC,0xF010,0xF474,0xF8A9,0xFCC0,0x0086,0x040D, + 0x06EA,0x07E8,0x0AF3,0x0D82,0x0D5C,0x0F47,0x0FE5,0x1058, + 0x1122,0x119C,0x11A6,0x115E,0x0F9F,0x0D72,0x0A68,0x06BF, + 0x03E9,0x00FF,0xFD90,0xF933,0xF4E8,0xF041,0xEC81,0xE90B, + 0xE759,0xE6AE,0xE796,0xE8C3,0xE9F2,0xEB99,0xEDE1,0xF15D, + 0xF57B,0xF9DE,0xFE18,0x021C,0x0575,0x07E8,0x09EC,0x0BCF, + 0x0CF0,0x0DEF,0x0EA4,0x0F36,0x0F06,0x0D95,0x0BFB,0x0B40, + 0x0AB6,0x09EB,0x078B,0x0531,0x035A,0x01A6,0xFFF4,0xFDBE, + 0xFB82,0xF8AC,0xF537,0xF29F,0xF18A,0xF09F,0xF039,0xEFEF, + 0xEFB1,0xF034,0xEFBE,0xEF90,0xF2BB,0xF5E5,0xF9CC,0xFCE9, + 0xFF71,0x01F0,0x049E,0x06E2,0x07E9,0x0721,0x02D0,0xFC05, + 0xF3AC,0xEBB7,0xE35F,0xD5CD,0xC450,0xBF12,0xBF31,0xBF45, + 0xBF80,0xBFB4,0xBFAB,0xC12A,0xD1CB,0xE3F6,0xF914,0x1480, + 0x3488,0x3FD8,0x3F1A,0x3FD5,0x3FD7,0x3FC1,0x3FBC,0x3FE5, + 0x3FB4,0x3F9A,0x3E88,0x331D,0x25F5,0x1B39,0x0FA2,0x01A7, + 0xF3DE,0xEB7D,0xE9F4,0xEECE,0xF522,0xF79F,0xF39F,0xEB08, + 0xE1E1,0xDBF4,0xD8BC,0xD6CE,0xD52B,0xD1CE,0xCEBB,0xCE54, + 0xD198,0xD8C9,0xE30B,0xF081,0x0039,0x1165,0x249F,0x379B, + 0x4055,0x4050,0x408B,0x407B,0x4086,0x408D,0x4011,0x4073, + 0x3A2C,0x279E,0x152D,0x046B,0xF837,0xEFAF,0xE8DA,0xE2D7, + 0xDDEA,0xDA0C,0xD86F,0xD8B3,0xDA06,0xDC33,0xDEEE,0xE149, + 0xE378,0xE5FB,0xE7FA,0xE822,0xE6F5,0xE72C,0xEA13,0xEFD1, + 0xF748,0xFF66,0x06B0,0x0DA9,0x148A,0x1C0F,0x23F6,0x2BF4, + 0x3228,0x35E9,0x3694,0x3493,0x3021,0x298F,0x20D8,0x16C3, + 0x0BB4,0x02B2,0xF912,0xEECE,0xE89F,0xE07D,0xD978,0xD5D8, + 0xD4F9,0xD70B,0xDA9D,0xDE2E,0xE0B3,0xE353,0xE7AF,0xEC3E, + 0xF069,0xF44F,0xF80D,0xFB1A,0xFD80,0xFFD2,0x0364,0x0708, + 0x0A60,0x0D81,0x10B1,0x144B,0x1822,0x1BA4,0x1E32,0x1F06, + 0x1D83,0x1BC1,0x19A4,0x16AF,0x1258,0x0CD4,0x05C8,0xFDF7, + 0xF5F6,0xEEFE,0xE97B,0xE4F1,0xE104,0xDDE7,0xDBEF,0xDC03, + 0xDDA8,0xE0D5,0xE4C6,0xE828,0xEC55,0xF0F2,0xF564,0xFA56, + 0xFED3,0x01FE,0x0450,0x061B,0x07C0,0x09C4,0x0BDD,0x0E27, + 0x1113,0x1260,0x117D,0x10F7,0x115B,0x1136,0x104D,0x0F1D, + 0x0D80,0x0ADE,0x0739,0x03A0,0x0035,0xFC8C,0xF85B,0xF3DA, + 0xF019,0xED13,0xEAD0,0xE886,0xE714,0xE89C,0xEA6A,0xEB83, + 0xECFF,0xF06E,0xF3BF,0xF838,0xFCC6,0x0060,0x0378,0x05AA, + 0x07D8,0x09F8,0x0C4D,0x0DAB,0x0D99,0x0D0D,0x0C7B,0x0C07, + 0x0C45,0x0C25,0x0AB5,0x089E,0x0712,0x04EB,0x028F,0x0294, + 0x017A,0xFFAC,0xFD25,0xF9DF,0xF736,0xF564,0xF48D,0xF338, + 0xF0E2,0xEEB1,0xEE29,0xEEBD,0xEF4C,0xF0C3,0xF2E2,0xF532, + 0xF749,0xFA02,0xFCDB,0x00AD,0x038B,0x05B0,0x070B,0x087D, + 0x0916,0x072E,0x025F,0xF9B1,0xEFEF,0xE6AF,0xDCE2,0xCDEB, + 0xBFA3,0xBE8D,0xBE69,0xBE35,0xBE68,0xBED4,0xBE28,0xC38D, + 0xD6DE,0xE8AE,0xFD72,0x194D,0x37A9,0x3EBB,0x3DE0,0x3E73, + 0x3E7F,0x3E63,0x3E5C,0x3E57,0x3E13,0x3E73,0x3C11,0x2F16, + 0x22C2,0x16F0,0x09EB,0xFC70,0xF0F9,0xE9FD,0xE9CB,0xEE26, + 0xF2EE,0xF387,0xEF33,0xE66B,0xDD29,0xD5F0,0xD1AA,0xCFB2, + 0xCE14,0xCC04,0xCCAE,0xCB70,0xCE68,0xD716,0xE162,0xEFE6, + 0x0123,0x1411,0x2779,0x397C,0x3F20,0x3EF5,0x3F0E,0x3F3C, + 0x3F3F,0x3F53,0x3EE9,0x3EE3,0x347B,0x21C7,0x1040,0x0113, + 0xF58B,0xEC9F,0xE587,0xDFFA,0xDC05,0xD972,0xD7C0,0xD736, + 0xD81F,0xD9B8,0xDBD9,0xDEAC,0xE111,0xE403,0xE59D,0xE542, + 0xE3E2,0xE40C,0xE7D2,0xEEB9,0xF6EF,0xFFA5,0x07E3,0x0F33, + 0x15F2,0x1DA8,0x25AB,0x2D69,0x33B9,0x36B1,0x36AA,0x3444, + 0x2F63,0x2843,0x1EE3,0x13FF,0x09AB,0xFFA1,0xF63E,0xEDA3, + 0xE5D9,0xDED5,0xD765,0xD313,0xD250,0xD465,0xD839,0xDCE4, + 0xE08F,0xE3C5,0xE740,0xEA7E,0xEE64,0xF23D,0xF635,0xFAC3, + 0xFE06,0x0099,0x036D,0x0731,0x0AC2,0x0D64,0x1123,0x1579, + 0x19A9,0x1CAE,0x1EFA,0x2046,0x1F28,0x1CC2,0x1974,0x15B8, + 0x11A4,0x0BC6,0x0548,0xFE1B,0xF6C0,0xEF33,0xE944,0xE4C7, + 0xE11E,0xDE90,0xDDD4,0xDED8,0xE018,0xE391,0xE734,0xE9CB, + 0xEDA3,0xF224,0xF702,0xFC2B,0x0071,0x036C,0x05A9,0x07A6, + 0x09FB,0x0CE3,0x0EE3,0x111B,0x1384,0x145F,0x13CB,0x12ED, + 0x12C6,0x12F0,0x12ED,0x1179,0x0F69,0x0C88,0x08ED,0x04A2, + 0x006E,0xFBC6,0xF74A,0xF353,0xEF67,0xEC96,0xEA28,0xE8E4, + 0xE828,0xE7BE,0xE89F,0xEB1D,0xEEEE,0xF2D2,0xF637,0xF99F, + 0xFCE3,0x00B0,0x0474,0x0710,0x09AF,0x0BD5,0x0CFD,0x0D8C, + 0x0DAC,0x0DCA,0x0E39,0x0DC9,0x0C63,0x0AA2,0x097E,0x0900, + 0x087C,0x06D6,0x045B,0x01FB,0x0040,0xFE06,0xFC23,0xF9C0, + 0xF6EB,0xF539,0xF2F6,0xF0A7,0xEF4B,0xEEC4,0xEEC9,0xEF30, + 0xF084,0xF258,0xF24C,0xF55F,0xF917,0xFB4E,0xFEF4,0x0209, + 0x03FC,0x060F,0x080E,0x093A,0x0953,0x0715,0x014C,0xF7F4, + 0xEDD8,0xE54A,0xDB52,0xCAB6,0xBF8E,0xBFBE,0xBF5C,0xBF34, + 0xBF6B,0xC01B,0xBF3B,0xC754,0xDAAF,0xECE1,0x0456,0x234D, + 0x3D32,0x3EDC,0x3F04,0x3F62,0x3F3A,0x3F1C,0x3F38,0x3F22, + 0x3EE9,0x3F45,0x3917,0x2B1E,0x201A,0x1451,0x0759,0xF9B4, + 0xEEC6,0xE966,0xEAA4,0xF014,0xF418,0xF3B8,0xEE32,0xE522, + 0xDC17,0xD5A7,0xD285,0xD06E,0xCE1D,0xCB71,0xCAB9,0xCD12, + 0xD444,0xDC39,0xE6BB,0xF4A9,0x05B7,0x189C,0x2C55,0x3C4C, + 0x3FCF,0x3FC3,0x3FE1,0x3FD8,0x3FDF,0x3F9A,0x3F8D,0x3DD7, + 0x2FE3,0x1DF9,0x0C4D,0xFD40,0xF2EF,0xEB79,0xE495,0xDE5A, + 0xDA8D,0xD8D2,0xD851,0xD8E1,0xD97F,0xDAA7,0xDC93,0xDF65, + 0xE25E,0xE4C5,0xE5BF,0xE5AE,0xE4A1,0xE4D5,0xE894,0xEFF2, + 0xF94D,0x01B9,0x0927,0x0F9A,0x168E,0x1D64,0x25FF,0x2F03, + 0x3503,0x3707,0x35AE,0x31E0,0x2C1B,0x24B8,0x1B75,0x10FC, + 0x0562,0xFA85,0xF14F,0xE8F6,0xE0EE,0xDA1D,0xD3F6,0xD054, + 0xD0D9,0xD3C9,0xD815,0xDBB3,0xDEB2,0xE186,0xE47C,0xE829, + 0xED2A,0xF205,0xF678,0xF9AD,0xFBC2,0xFDBF,0x0104,0x051D, + 0x094D,0x0D5C,0x1025,0x132C,0x16C3,0x1A04,0x1BF2,0x1C02, + 0x1AFA,0x188C,0x14E3,0x1113,0x0D3A,0x07C1,0x00BF,0xF831, + 0xEFBD,0xE92E,0xE450,0xE0F6,0xDEEB,0xDCC3,0xDB8C,0xDB90, + 0xDCF0,0xE057,0xE47F,0xE9E1,0xEE7D,0xF283,0xF705,0xFBC8, + 0xFFDD,0x039D,0x0662,0x0814,0x0998,0x0AF1,0x0D61,0x0FD9, + 0x0FFA,0x1184,0x1100,0x0E39,0x0F50,0x0FB9,0x0F8A,0x0E75, + 0x0C58,0x08A5,0x043C,0xFF95,0xFCB1,0xF97C,0xF592,0xF16B, + 0xEE0B,0xEB61,0xE937,0xE80E,0xE7A2,0xE867,0xE98B,0xEBB5, + 0xEEEE,0xF312,0xF6E2,0xFA3D,0xFDDE,0x0168,0x0478,0x07BF, + 0x0A66,0x0C62,0x0DFF,0x0E4C,0x0EBB,0x0EA7,0x0E55,0x0DDC, + 0x0D0F,0x0B55,0x0A1B,0x09CB,0x08FB,0x0765,0x0477,0x0159, + 0xFF7C,0xFE1C,0xFBF9,0xFA49,0xF89A,0xF696,0xF417,0xF17E, + 0xF007,0xF055,0xF1D0,0xF2F7,0xF431,0xF550,0xF755,0xF902, + 0xFAA5,0xFCC8,0xFF5F,0x0315,0x05C1,0x0766,0x08D0,0x08DF, + 0x055C,0xFEC7,0xF6A0,0xEEC8,0xE686,0xDB8F,0xC9AD,0xBF0C, + 0xBF65,0xBF45,0xBF28,0xBFCC,0xBF56,0xC253,0xD3AE,0xE43D, + 0xF689,0x0E63,0x2CDB,0x3FA9,0x3EFC,0x3F93,0x3F98,0x3F9A, + 0x3FDF,0x3FB1,0x3F50,0x3FCE,0x3CD0,0x2F3A,0x23DB,0x19F0, + 0x0F27,0x0263,0xF5D4,0xECDC,0xEA46,0xEF65,0xF471,0xF708, + 0xF4F3,0xEE89,0xE59B,0xDE1D,0xD9CE,0xD77C,0xD60F,0xD3C7, + 0xD21C,0xD1A3,0xD3D2,0xDA3B,0xE3C1,0xEEF3,0xFD01,0x0DC9, + 0x1F4D,0x30BA,0x3E37,0x40B6,0x4056,0x40A9,0x4099,0x408A, + 0x4026,0x404C,0x3850,0x27AC,0x16CB,0x0774,0xFB58,0xF288, + 0xEBB1,0xE61A,0xE116,0xDDF1,0xDC7D,0xDBD7,0xDCC6,0xDE52, + 0xE023,0xE235,0xE465,0xE6FC,0xE917,0xE9B5,0xE8FF,0xE861, + 0xE9F0,0xEE78,0xF569,0xFDC9,0x0536,0x0BA5,0x11E6,0x18C2, + 0x2027,0x27D1,0x2E31,0x3236,0x3330,0x30F8,0x2D0F,0x2721, + 0x1FAD,0x16D1,0x0C5B,0x0228,0xF893,0xF017,0xE8A9,0xE2DC, + 0xDF0F,0xDA23,0xD641,0xD8C3,0xDA87,0xDD9F,0xE203,0xE5C1, + 0xE99B,0xECF2,0xEFD1,0xF319,0xF69D,0xFA8F,0xFD37,0xFF09, + 0x019F,0x0589,0x0914,0x0C3D,0x0EE9,0x115C,0x143D,0x1751, + 0x1A2E,0x1BB2,0x1BF6,0x1AA5,0x174D,0x13CD,0x103D,0x0B2A, + 0x04E4,0xFDA9,0xF696,0xF012,0xEA60,0xE5D6,0xE223,0xDF7C, + 0xDE21,0xDD85,0xDE35,0xE15A,0xE5B0,0xE987,0xECF2,0xF07F, + 0xF48B,0xF87C,0xFCDF,0x0046,0x034D,0x0603,0x07F7,0x0893, + 0x09BF,0x0B52,0x0CA2,0x0D1E,0x0D3C,0x0D63,0x0D8B,0x0FBD, + 0x0FBA,0x0D43,0x0B7C,0x09B9,0x06EF,0x033B,0xFFDA,0xFBF3, + 0xF7E9,0xF3A7,0xF033,0xED7B,0xEAF8,0xE9CF,0xE936,0xE8B5, + 0xE927,0xEA80,0xEC6E,0xEFFA,0xF518,0xF8B1,0xFB23,0xFDF1, + 0x01B5,0x04C3,0x0741,0x095A,0x0ACD,0x0B54,0x0B90,0x0B8E, + 0x0B88,0x0B52,0x0AC7,0x0994,0x0853,0x0740,0x05B4,0x04C6, + 0x03AA,0x020B,0xFFC5,0xFD57,0xFA14,0xF79E,0xF73F,0xF6D3, + 0xF51E,0xF2B2,0xF08A,0xEEF7,0xEE98,0xEF3D,0xF11F,0xF228, + 0xF29D,0xF36C,0xF5F5,0xF8C2,0xFC47,0xFEC6,0x010A,0x02DE, + 0x04C3,0x067E,0x0818,0x0847,0x06C1,0x02B7,0xFE0B,0xFA45, + 0xF6B0,0xF251,0xEAEF,0xE067,0xD639,0xCFE7,0xD032,0xD4F0, + 0xDC74,0xE3CC,0xE982,0xEE72,0xF56F,0xFF4C,0x0B55,0x16D0, + 0x1F3D,0x23C1,0x2628,0x2727,0x25E9,0x238F,0x1F21,0x18E1, + 0x12E3,0x0E9F,0x0B60,0x08E0,0x063E,0x02C2,0xFEAE,0xFB9F, + 0xFB98,0xFD77,0xFFC3,0x0021,0xFDEF,0xFA74,0xF603,0xF2E7, + 0xF079,0xEF5E,0xEE3F,0xEC02,0xE98C,0xE80B,0xE953,0xECB4, + 0xF047,0xF6A8,0xF9F8,0xFFCE,0x06D4,0x0CD2,0x12F7,0x1801, + 0x1ADB,0x1B25,0x1B25,0x1AAA,0x1A07,0x17ED,0x13DB,0x0E22, + 0x0850,0x03D3,0x00CD,0xFDC2,0xFA91,0xF83B,0xF6AF,0xF54A, + 0xF437,0xF44C,0xF590,0xF5DD,0xF56C,0xF4AD,0xF504,0xF5F0, + 0xF5AC,0xF503,0xF4E2,0xF520,0xF539,0xF6DB,0xF94E,0xFC7C, + 0xFF9A,0x0197,0x0427,0x0881,0x0C58,0x0F8E,0x1126,0x12BB, + 0x1397,0x1333,0x11B6,0x1005,0x0E58,0x0B2C,0x0766,0x0300, + 0xFF9F,0xFD40,0xFADE,0xF89C,0xF694,0xF4B9,0xF3C1,0xF3C8, + 0xF437,0xF3C3,0xF4AA,0xF5AE,0xF638,0xF6DA,0xF82E,0xF9E4, + 0xFB64,0xFC59,0xFCFD,0xFD07,0xFDB9,0xFF1E,0x012D,0x02A9, + 0x03D5,0x04E3,0x06C7,0x0913,0x09CD,0x0A87,0x0B30,0x0AA7, + 0x09E6,0x08F3,0x07BA,0x06A2,0x049E,0x01E6,0xFE9D,0xFC6F, + 0xFA77,0xF8E5,0xF7A0,0xF623,0xF505,0xF461,0xF37C,0xF306, + 0xF2D8,0xF32F,0xF329,0xF278,0xF392,0xF358,0xF169,0xF03E, + 0xF011,0xF010,0xF052,0xF0C8,0xF14C,0xF2BA,0xF432,0xF49A, + 0xF512,0xF591,0xF5D9,0xF6AC,0xF690,0xF69D,0xF64A,0xF601, + 0xF50F,0xF4A6,0xF42F,0xF342,0xF2B4,0xF1FA,0xF17B,0xF0AD, + 0xF051,0xF00C,0xEF56,0xEEA0,0xEDEF,0xEDE6,0xED82,0xECDE, + 0xEC85,0xEC63,0xEC77,0xEC33,0xEBC6,0xEBF1,0xEBDC,0xEB8E, + 0xEB55,0xEB10,0xEAC3,0xEAAE,0xEACD,0xEAD6,0xEA9D,0xEA60, + 0xEA63,0xE9F2,0xE9FC,0xEA2C,0xEA11,0xEA0D,0xEA0E,0xEA00, + 0xEA1E,0xEA1F,0xEA76,0xEA7F,0xEA55,0xEAE5,0xEA82,0xEA7C, + 0xEB06,0xEB32,0xEB96,0xEB79,0xEB94,0xEC3D,0xEC6F,0xECB7, + 0xEE1E,0xECDC,0xEDFE,0xEF73,0xEE6A,0xEE94,0xEF61,0xF017, + 0xF0EF,0xF18D,0xF1FF,0xF294,0xF2B8,0xF306,0xF2D6,0xF2C9, + 0xF344,0xF396,0xF414,0xF4A0,0xF4D9,0xF4E7,0xF548,0xF5AA, + 0xF609,0xF6F0,0xF739,0xF751,0xF73F,0xF778,0xF78D,0xF818, + 0xF859,0xF8E2,0xF98D,0xFA06,0xFA9B,0xFB41,0xFBA7,0xFBF9, + 0xFC2E,0xFC88,0xFD7A,0xFDEE,0xFE2C,0xFEA1,0xFEC2,0xFF10, + 0xFF63,0xFF6E,0x005B,0x00A0,0x0112,0x0139,0x00E2,0x0129, + 0x01E9,0x0239,0x02A5,0x02BF,0x02FD,0x038E,0x046B,0x06D4, + 0x06AB,0x0601,0x068F,0x06E9,0x074E,0x0737,0x0762,0x079F, + 0x07F1,0x082E,0x0890,0x08FF,0x0944,0x0975,0x093A,0x095C, + 0x0998,0x099D,0x093F,0x0A04,0x0AF2,0x0A8E,0x0997,0x0A4E, + 0x0A70,0x0A2C,0x0A3A,0x0A87,0x0B00,0x0AF9,0x0AC9,0x0B00, + 0x0AD4,0x0AAA,0x0B42,0x0B1F,0x0B8E,0x0B6D,0x0B95,0x0BAE, + 0x0BB1,0x0B7B,0x0BC9,0x0B8C,0x0A73,0x0A7F,0x0BD2,0x0C42, + 0x0BFB,0x0C6A,0x0BFB,0x0C0E,0x0C3A,0x0C85,0x0CB5,0x0C16, + 0x0BD6,0x0C25,0x0B81,0x0A61,0x0AE1,0x0AD8,0x0AB0,0x0A88, + 0x0AF3,0x0AD2,0x0AC5,0x0AAF,0x0AF8,0x0B22,0x0B08,0x0AEC, + 0x0AFE,0x0B1B,0x0B78,0x0B34,0x0B17,0x0B97,0x0C0E,0x0BB8, + 0x0B6E,0x0BB3,0x0BA1,0x0B6E,0x0B43,0x0B46,0x0B55,0x0B71, + 0x0B3E,0x0B58,0x0B58,0x0B38,0x0B30,0x0B56,0x0B74,0x0BE4, + 0x0C2C,0x0BD0,0x0BD0,0x0B7A,0x0B9D,0x0BA0,0x0B92,0x0BC0, + 0x0B64,0x0AE8,0x0AEF,0x0AE3,0x0AFC,0x0ACC,0x0B12,0x0ACE, + 0x0A75,0x0AAD,0x0AEB,0x0AF7,0x0AF6,0x0B40,0x0B34,0x09F1, + 0x0BAF,0x0C00,0x0A1A,0x0B78,0x0B21,0x0AEC,0x0B06,0x0B5D, + 0x0B7E,0x0B5F,0x0ADF,0x0B04,0x0ABB,0x0A8D,0x0A9C,0x0A9A, + 0x0A83,0x0A9B,0x0AB4,0x0A52,0x0A7A,0x0A0E,0x09A7,0x0957, + 0x0938,0x097A,0x09B8,0x09AE,0x09CD,0x09A2,0x08F8,0x092E, + 0x092B,0x08E7,0x0908,0x08B4,0x0868,0x0875,0x0889,0x08A5, + 0x0866,0x086D,0x088F,0x088C,0x0877,0x0838,0x081C,0x080D, + 0x080F,0x07EB,0x07A7,0x080A,0x081E,0x07BA,0x07E6,0x07D6, + 0x0793,0x076D,0x0747,0x0757,0x0704,0x06C4,0x06AE,0x066C, + 0x04DC,0x0382,0x0432,0x03E4,0x0404,0x041B,0x041B,0x042D, + 0x043D,0x045F,0x0478,0x0472,0x0444,0x0487,0x043C,0x0443, + 0x0457,0x04C3,0x0586,0x04D5,0x03D0,0x0446,0x045F,0x042B, + 0x0418,0x04C0,0x04C2,0x046F,0x0454,0x0418,0x03FD,0x03F3, + 0x045E,0x048F,0x04A3,0x048D,0x0440,0x0462,0x044F,0x0499, + 0x0468,0x0419,0x043A,0x04C2,0x05FA,0x051D,0x03F6,0x03D6, + 0x040C,0x03FB,0x03EE,0x0428,0x03F6,0x03BE,0x046F,0x04EF, + 0x0544,0x051E,0x05FE,0x0611,0x05BB,0x055E,0x055D,0x051F, + 0x04E6,0x051F,0x0566,0x05A3,0x052E,0x049D,0x047C,0x0470, + 0x04A8,0x0444,0x0420,0x042B,0x0409,0x03DC,0x0357,0x0370, + 0x039C,0x0372,0x0366,0x0308,0x02A9,0x026C,0x02A2,0x024D, + 0x0226,0x0239,0x0265,0x0237,0x0238,0x024A,0x01F3,0x01A0, + 0x0169,0x0166,0x01C6,0x01C1,0x01BC,0x0201,0x01CA,0x0169, + 0x017E,0x01DD,0x01D3,0x01BC,0x01D7,0x0132,0x00A4,0x0116, + 0x0123,0x0070,0x0093,0x00D2,0x0136,0x0138,0x00ED,0x0102, + 0xFFCE,0xFF96,0xFF50,0xFFAE,0xFF7B,0xFF6C,0xFF0A,0xFEF2, + 0xFF61,0xFFC5,0xFF52,0xFEEB,0xFEA4,0xFDE9,0xFEB0,0xFF10, + 0xFED8,0xFE8B,0xFEA7,0xFE72,0xFE22,0xFE28,0xFDC3,0xFE01, + 0xFE29,0xFDD3,0xFDCC,0xFD97,0xFD97,0xFDF4,0xFE00,0xFE2B, + 0xFE05,0xFE0A,0xFE35,0xFE4E,0xFDFD,0xFEBA,0xFEB6,0xFD29, + 0xFD22,0xFE41,0xFE48,0xFE73,0xFE36,0xFE2A,0xFE1C,0xFDCD, + 0xFD8E,0xFD2D,0xFD1A,0xFD2B,0xFCFF,0xFCC4,0xFC2D,0xFC85, + 0xFC4A,0xFC58,0xFCE7,0xFCD7,0xFCC7,0xFC3E,0xFC3B,0xFC9F, + 0xFD0E,0xFD11,0xFCE7,0xFCF2,0xFD16,0xFD27,0xFD46,0xFC97, + 0xFC7F,0xFCB4,0xFD1E,0xFD39,0xFD14,0xFD2C,0xFD53,0xFCD9, + 0xFD18,0xFD7B,0xFD39,0xFD73,0xFD86,0xFD94,0xFD92,0xFD7F, + 0xFD71,0xFD54,0xFD2F,0xFD6B,0xFD7B,0xFDF1,0xFDEC,0xFDD3, + 0xFD57,0xFD59,0xFD9D,0xFD52,0xFD5E,0xFDA2,0xFD51,0xFD42, + 0xFD22,0xFD85,0xFD8A,0xFDF9,0xFF2A,0xFFFF,0x0029,0x006E, + 0x0152,0x0209,0x016B,0x02EB,0x04AE,0x0451,0x0658,0x0729, + 0x07A6,0x0873,0x087E,0x0815,0x0888,0x08D7,0x08CC,0x08CC, + 0x0857,0x089A,0x084D,0x0914,0x09B0,0x0A32,0x0AB3,0x0AC9, + 0x0A1B,0x0A87,0x0C17,0x0D43,0x0E2D,0x0E30,0x0ECB,0x0EC9, + 0x0E82,0x0E62,0x0E65,0x0DD7,0x0D38,0x0C08,0x0B84,0x0C3A, + 0x0DA2,0x0F3B,0x1113,0x12E4,0x138C,0x133A,0x12E1,0x141D, + 0x1511,0x1570,0x1542,0x1528,0x15D3,0x173E,0x18EB,0x1A98, + 0x1BAA,0x1CD3,0x1D72,0x1D5B,0x1DBF,0x1E5F,0x1F12,0x1E9C, + 0x1D60,0x1CB9,0x1CDE,0x1B74,0x1A1C,0x1AED,0x1BC8,0x1C8C, + 0x1C0D,0x1B72,0x1ABB,0x191E,0x177B,0x1599,0x1437,0x13D6, + 0x1415,0x13BB,0x12CD,0x1214,0x1172,0x10E1,0x0F24,0x0E83, + 0x0EBA,0x0D96,0x0BC0,0x0AA4,0x0A85,0x0A46,0x0999,0x096A, + 0x095E,0x0973,0x09FB,0x0A5B,0x0A0A,0x09BC,0x08D8,0x081C, + 0x081C,0x0839,0x08D1,0x0903,0x088C,0x07E2,0x084B,0x0AA1, + 0x09FF,0x0933,0x0933,0x089F,0x080C,0x0710,0x066F,0x05F6, + 0x060A,0x0695,0x0787,0x06F0,0x05D7,0x056E,0x04C2,0x0406, + 0x03BC,0x0321,0x02DE,0x0253,0x00BB,0xFF66,0xFDDA,0xFD2E, + 0xFD21,0xFCD2,0xFC18,0xFB7B,0xFAED,0xFA77,0xFA07,0xF933, + 0xF82D,0xF7B3,0xF78F,0xF785,0xF74D,0xF6C9,0xF694,0xF637, + 0xF5D9,0xF564,0xF5BB,0xF62C,0xF666,0xF6C4,0xF69D,0xF642, + 0xF599,0xF473,0xF40B,0xF51A,0xF561,0xF5AF,0xF62F,0xF706, + 0xF76E,0xF6D2,0xF5FB,0xF600,0xF637,0xF610,0xF603,0xF5CB, + 0xF5A6,0xF4A6,0xF4A1,0xF3CE,0xF489,0xF51D,0xF4BC,0xF3D1, + 0xF269,0xF1F2,0xF2AC,0xF259,0xF15A,0xF288,0xF0C5,0xEFA3, + 0xEF90,0xEFAC,0xEFE3,0xEFAA,0xEF32,0xEF12,0xEFA2,0xEFD3, + 0xEFC1,0xEFE6,0xEF7C,0xEEB1,0xEE70,0xEE76,0xEF3E,0xEFC0, + 0xF046,0xEF9A,0xEEF5,0xEF76,0xF0AE,0xF1A6,0xF205,0xF16B, + 0xF0B7,0xF08A,0xF0D1,0xF18D,0xF1DB,0xF259,0xF278,0xF1C4, + 0xF208,0xF2A8,0xF350,0xF2F7,0xF2BA,0xF277,0xF2D4,0xF2C4, + 0xF301,0xF2DE,0xF23D,0xF192,0xF10D,0xF165,0xF21C,0xF284, + 0xF252,0xF1E7,0xF12E,0xF03E,0xF03D,0xF116,0xF1BC,0xF186, + 0xF0AD,0xF18E,0xF257,0xF20D,0xF2D2,0xF309,0xF2EB,0xF324, + 0xF2FE,0xF28A,0xF2A0,0xF243,0xF21F,0xF25A,0xF2E5,0xF2EA, + 0xF355,0xF3DC,0xF3E2,0xF333,0xF265,0xF29E,0xF3FA,0xF3D6, + 0xF31F,0xF2E4,0xF29D,0xEF99,0xEABA,0xE436,0xDC7B,0xD32F, + 0xC78F,0xBF93,0xBF57,0xBF71,0xBF6B,0xC98B,0xD897,0xE29D, + 0xE629,0xE3EF,0xDF42,0xDB96,0xDA8B,0xDCAB,0xDF3D,0xE45A, + 0xEBFF,0xF32B,0xFB15,0x03CF,0x0CFF,0x1656,0x1E66,0x250B, + 0x291A,0x28F3,0x2466,0x1E99,0x196C,0x174D,0x1A73,0x2185, + 0x2970,0x2F6E,0x30D6,0x2E4C,0x285B,0x2273,0x1D72,0x1861, + 0x1294,0x0BCF,0x0500,0xFEBA,0xF95B,0xF5DD,0xF4F1,0xF517, + 0xF4DE,0xF3F2,0xF1A5,0xED9F,0xE7BA,0xE087,0xD88B,0xD242, + 0xD01B,0xD19F,0xD4B1,0xD8BE,0xDC52,0xDEE4,0xE0C6,0xE1AD, + 0xE3DD,0xE699,0xE904,0xEA9C,0xEB0B,0xEB6B,0xECDB,0xEF44, + 0xF306,0xF889,0xFF86,0x0604,0x0AD7,0x0E16,0x102F,0x1126, + 0x105C,0x0EC5,0x0CD7,0x0CC6,0x0DB5,0x0FC4,0x10C8,0x11EF, + 0x11E9,0x10C5,0x0F53,0x10B3,0x0E38,0x0BC2,0x07F2,0x022D, + 0xFD29,0xF993,0xF66C,0xF42B,0xF32F,0xF30B,0xF32B,0xF21E, + 0xF003,0xED1E,0xEACC,0xE83E,0xE611,0xE44E,0xE32D,0xE26E, + 0xE18D,0xE24C,0xE41A,0xE705,0xE991,0xEC5F,0xEE58,0xEFFD, + 0xF1F9,0xF349,0xF3DC,0xF495,0xF54A,0xF68C,0xF90D,0xFCB9, + 0x014D,0x0428,0x0656,0x0808,0x09DE,0x0B25,0x0C00,0x0CA0, + 0x0CAC,0x0BD7,0x0A2B,0x099A,0x0960,0x096D,0x0937,0x0984, + 0x0A3B,0x09B3,0x07C6,0x05FB,0x03F6,0x020E,0xFFAC,0xFCD9, + 0xFA06,0xF87C,0xF6BB,0xF3FF,0xF39E,0xF445,0xF44B,0xF2F4, + 0xF0A3,0xEF4E,0xEF31,0xEFE8,0xF02E,0xEE85,0xEE1D,0xEE59, + 0xEF13,0xF006,0xF20C,0xF477,0xF693,0xF7A0,0xF767,0xF906, + 0xFB96,0xFCF0,0xFDEA,0xFE77,0xFF36,0x00AB,0x02CC,0x0506, + 0x06D4,0x083C,0x08A2,0x08FA,0x0A1A,0x0AED,0x0BD7,0x0C0C, + 0x0B62,0x09F4,0x0896,0x088D,0x0866,0x07FD,0x0904,0x0883, + 0x06C8,0x0585,0x042E,0x0314,0x0190,0x0028,0xFE76,0xFDBE, + 0xFD36,0xFD00,0xFC82,0xFC15,0xFBD9,0xFBCE,0xFB9C,0xFB92, + 0xFBD1,0xFC24,0xFBC7,0xFA8E,0xF93D,0xF89A,0xF946,0xFACE, + 0xFC8C,0xFD8A,0xFE6C,0xFE48,0xFE49,0xFF12,0x0055,0x0210, + 0x0374,0x0410,0x03CC,0x03BD,0x049D,0x0529,0x03A7,0xFF8A, + 0xF89B,0xEEE3,0xE31D,0xD477,0xC482,0xBFEC,0xC095,0xC0CB, + 0xC07B,0xCFED,0xE3D4,0xEEE7,0xF100,0xEBD4,0xE3EC,0xDE6A, + 0xDDC3,0xE1AE,0xE80F,0xEF2D,0xF6CE,0xFF2A,0x0A1A,0x16F2, + 0x244E,0x3181,0x3C55,0x3FAF,0x3F65,0x3FA5,0x3EC0,0x37D7, + 0x3194,0x3052,0x35BD,0x3CC7,0x3F90,0x3FFA,0x3F98,0x3F81, + 0x3F90,0x3E62,0x371E,0x2F92,0x2760,0x1E3B,0x14A3,0x0C1F, + 0x05ED,0x02C0,0x01C2,0x0191,0x0170,0xFF94,0xFBC9,0xF554, + 0xECB9,0xE1FA,0xD731,0xCF2D,0xCCC8,0xCF43,0xD41E,0xD8DA, + 0xDC9E,0xDF5F,0xE1A5,0xE45C,0xE763,0xEABE,0xEC29,0xEC1C, + 0xEC29,0xED5F,0xF11E,0xF59F,0xFAF6,0x01B5,0x09BC,0x1290, + 0x1A2D,0x1FD2,0x2279,0x21B5,0x1E00,0x1AB3,0x19BB,0x1B1E, + 0x1D4C,0x1EC6,0x1EFC,0x1F0E,0x1F31,0x1F61,0x1F11,0x1D88, + 0x1A8A,0x16F8,0x1071,0x0A70,0x0523,0xFFB4,0xFA0F,0xF616, + 0xF3D9,0xF350,0xF3D5,0xF432,0xF313,0xEFCA,0xEAE8,0xE544, + 0xE159,0xDF8D,0xDEAB,0xDE56,0xDDA1,0xDEBA,0xE0AB,0xE2B7, + 0xE59A,0xE950,0xEC8F,0xEDCE,0xEF2C,0xF11C,0xF37C,0xF5B3, + 0xF6A9,0xF7B1,0xFA01,0xFD74,0x023B,0x07B8,0x0CB7,0x1008, + 0x1175,0x11C7,0x1206,0x1221,0x12EE,0x131F,0x112A,0x10A5, + 0x10C5,0x1047,0x0FFE,0x1008,0x1018,0x0FBC,0x0E47,0x0C1C, + 0x0941,0x059D,0x00F9,0xFC82,0xF8A8,0xF586,0xF4AE,0xF4C3, + 0xF45F,0xF30E,0xF0A3,0xEEE3,0xEE07,0xEDE6,0xEE04,0xED27, + 0xEB72,0xE942,0xE7DC,0xE867,0xEA5C,0xECFB,0xEF8B,0xF165, + 0xF279,0xF434,0xF648,0xF819,0xF949,0xFAA0,0xFBF1,0xFCC9, + 0xFDDA,0xFFBB,0x0271,0x04D4,0x06AD,0x0850,0x0A55,0x0C11, + 0x0D2D,0x0D54,0x0C7B,0x0B7B,0x0AB0,0x0A05,0x0988,0x0A4E, + 0x0A91,0x0941,0x076F,0x05BA,0x051D,0x04C1,0x0428,0x035B, + 0x013A,0xFD7E,0xF9F9,0xF886,0xF819,0xF797,0xF6D6,0xF6A6, + 0xF657,0xF4D3,0xF5AA,0xF5A3,0xF378,0xF360,0xF229,0xF265, + 0xF357,0xF498,0xF501,0xF519,0xF536,0xF604,0xF7D1,0xFA5C, + 0xFD2E,0xFED4,0xFEF8,0xFF00,0xFF97,0x00D6,0x0233,0x02DE, + 0x034D,0x01E6,0xFDB9,0xF672,0xEC66,0xDFC0,0xD0E4,0xC242, + 0xBF34,0xBFFE,0xBF1F,0xC4B1,0xD98A,0xEA68,0xF2C0,0xF248, + 0xEBCE,0xE4A4,0xE129,0xE2A7,0xE6F7,0xEC2F,0xF1DC,0xF914, + 0x0339,0x100D,0x1D8B,0x2A83,0x36B3,0x3E53,0x3F3E,0x3F4C, + 0x3F8F,0x3D2B,0x34E3,0x2F9A,0x308F,0x381C,0x3F3F,0x3F6F, + 0x3FA3,0x3F7A,0x3E87,0x3E09,0x3BDC,0x3475,0x2C95,0x23C7, + 0x19DB,0x10E0,0x09C9,0x048D,0x019F,0x00A3,0x00B2,0x017A, + 0x0042,0xFC57,0xF547,0xEB75,0xE05A,0xD596,0xCF09,0xCE7D, + 0xD28B,0xD82E,0xDCDC,0xE07A,0xE2CD,0xE4E0,0xE7A7,0xEAF2, + 0xEE2A,0xEFE5,0xEF91,0xEF6B,0xF03A,0xF32B,0xF851,0xFEFA, + 0x0676,0x0EFB,0x16E1,0x1E15,0x2200,0x22F5,0x228B,0x1F22, + 0x1B65,0x1A32,0x1B7F,0x1DE3,0x2083,0x2138,0x20DE,0x2045, + 0x2034,0x205B,0x1F47,0x1C64,0x1874,0x1269,0x0AB5,0x03AB, + 0xFE93,0xFB4F,0xF8E9,0xF839,0xF80E,0xF7CB,0xF657,0xF3CD, + 0xF068,0xEC38,0xE77F,0xE3D0,0xE24C,0xE1A9,0xE15A,0xE175, + 0xE22D,0xE34A,0xE58C,0xE962,0xEDAB,0xF19E,0xF423,0xF526, + 0xF513,0xF4C4,0xF517,0xF6EA,0xFA59,0xFE5A,0x02C4,0x0708, + 0x0B44,0x0ED9,0x10B0,0x11E3,0x1253,0x12B6,0x1319,0x128B, + 0x11B3,0x1076,0x0F40,0x0EA1,0x0E9A,0x0F1C,0x0F4E,0x0F98, + 0x0F15,0x0DB3,0x0A62,0x0648,0x020C,0xFDD8,0xFABF,0xF97C, + 0xF87F,0xF79A,0xF5B8,0xF2D4,0xF3AB,0xF2C3,0xF14D,0xF0BF, + 0xEFAC,0xEE3C,0xECB7,0xEB0A,0xE9C0,0xE92B,0xE9C3,0xEB14, + 0xED80,0xF075,0xF2FA,0xF466,0xF5D7,0xF71C,0xF845,0xF9CF, + 0xFB6E,0xFCB8,0xFE5E,0xFFF8,0x0162,0x02FC,0x04A4,0x0715, + 0x09B3,0x0BC2,0x0C98,0x0C8D,0x0C4D,0x0B19,0x0AA1,0x0AB3, + 0x0AA1,0x0A69,0x095B,0x0869,0x087F,0x08BA,0x0819,0x0733, + 0x0573,0x03A9,0x013E,0xFEC6,0xFD0F,0xFB80,0xFA06,0xF899, + 0xF704,0xF652,0xF644,0xF648,0xF5D4,0xF566,0xF4CC,0xF4CA, + 0xF604,0xF6AE,0xF5EE,0xF680,0xF67C,0xF5F3,0xF61E,0xF715, + 0xF8EA,0xFAB2,0xFCBA,0xFE2F,0xFF01,0xFEF0,0xFF35,0xFF1D, + 0x0098,0x01D7,0x02BD,0x02A5,0x0241,0x00B6,0xFB3C,0xF24C, + 0xE837,0xDC12,0xCBA1,0xC007,0xBF65,0xBFBF,0xBEE4,0xC56E, + 0xDA55,0xE95D,0xEF97,0xED16,0xE5AB,0xDE6A,0xDB7D,0xDD69, + 0xE1E5,0xE747,0xED8D,0xF5A1,0x00D2,0x0D03,0x19FD,0x27A4, + 0x33F5,0x3C43,0x3ECF,0x3E97,0x3E76,0x3765,0x2ECE,0x2B41, + 0x2D04,0x34BA,0x3CF4,0x3E78,0x3DFA,0x3DBC,0x3DF1,0x3DEF, + 0x377D,0x2FE2,0x28A3,0x1FD7,0x164A,0x0CFD,0x0538,0x00A4, + 0xFF39,0xFF7F,0xFFCF,0xFE78,0xFBC2,0xF730,0xEFEC,0xE573, + 0xD9F0,0xD028,0xCA9A,0xCAC2,0xCF10,0xD5A1,0xDB6B,0xDEA2, + 0xE03C,0xE1C4,0xE4A7,0xE7FE,0xEB2B,0xEC4C,0xEBDC,0xEB98, + 0xEC7B,0xEF3E,0xF4DC,0xFC5F,0x058C,0x0EAB,0x165F,0x1C11, + 0x1F65,0x1F81,0x1CE6,0x195C,0x1784,0x1765,0x18F9,0x1AE5, + 0x1CBA,0x1DC0,0x1ECB,0x1EB8,0x1E35,0x1D90,0x1C55,0x18D9, + 0x1345,0x0C3C,0x071C,0xFE98,0xF934,0xF683,0xF4F4,0xF52C, + 0xF504,0xF4D7,0xF441,0xF18D,0xECE5,0xE80F,0xE3A7,0xE111, + 0xDFC5,0xDF89,0xDF4E,0xDF56,0xE043,0xE1ED,0xE4F2,0xE985, + 0xEE26,0xF14C,0xF2E8,0xF331,0xF3EB,0xF4A3,0xF5C4,0xF80E, + 0xFAEB,0xFEE9,0x036E,0x0807,0x0C5E,0x100A,0x1272,0x13BF, + 0x139F,0x135C,0x1399,0x144B,0x1420,0x130E,0x1167,0x0FFA, + 0x1057,0x117C,0x12EF,0x13A6,0x1257,0x0EA8,0x0A23,0x0638, + 0x0328,0x0144,0xFEB8,0xFB7D,0xF89C,0xF686,0xF638,0xF64B, + 0xF62F,0xF478,0xF074,0xEE34,0xED52,0xECBF,0xED4D,0xECDB, + 0xEB05,0xE967,0xE9B4,0xEB7C,0xEE6E,0xF189,0xF47D,0xF6AF, + 0xF771,0xF7E3,0xF8A9,0xFB23,0xFD60,0xFDEA,0xFE94,0x00AF, + 0x032D,0x0598,0x07EB,0x09D2,0x0B78,0x0CDB,0x0E38,0x0EDA, + 0x0FB6,0x0F41,0x0E24,0x0C67,0x0A75,0x0A21,0x0B1E,0x0BB0, + 0x0B63,0x0A31,0x08FE,0x07CB,0x05BB,0x04D9,0x0403,0x014F, + 0xFE9A,0xFC5C,0xFABB,0xFA2A,0xF9A5,0xF8E1,0xF7FE,0xF781, + 0xF766,0xF715,0xF668,0xF6E2,0xF78D,0xF666,0xF501,0xF448, + 0xF4DF,0xF653,0xF774,0xF8A4,0xFA14,0xFBBE,0xFC5E,0xFCDD, + 0xFE0F,0xFFF0,0x012D,0x0165,0x01D0,0x02A0,0x03F6,0x0521, + 0x03CD,0x00C6,0xFB53,0xF23F,0xE6C0,0xD97A,0xC9BE,0xC045, + 0xC08E,0xC0E3,0xC00B,0xCCD8,0xE253,0xEFB6,0xF3A5,0xEF3A, + 0xE6CA,0xDF99,0xDDF4,0xE17E,0xE7A5,0xEE24,0xF417,0xFC1E, + 0x06C6,0x1373,0x20E3,0x2DC7,0x393D,0x3F91,0x3FA2,0x3FD2, + 0x3EFF,0x3810,0x3033,0x2D52,0x3059,0x3A86,0x3FF8,0x3F89, + 0x3FD4,0x400B,0x3F15,0x3EE3,0x38B1,0x2F8C,0x289B,0x20CC, + 0x1746,0x0DAF,0x063B,0x020B,0x009C,0x00AB,0x00A6,0x0049, + 0xFD8A,0xF83A,0xEFE2,0xE511,0xD9FF,0xD19E,0xCD11,0xCD49, + 0xD1B5,0xD7EB,0xDD0A,0xE078,0xE2B7,0xE4E5,0xE7F6,0xEA1F, + 0xEBDB,0xECBA,0xED0D,0xEDB9,0xEF6D,0xF2D5,0xF867,0xFF8B, + 0x074E,0x0F4D,0x16B8,0x1D0B,0x1FF1,0x1FA3,0x1D4E,0x1A8A, + 0x1893,0x1893,0x19F4,0x1B7B,0x1D1B,0x1E65,0x1EC6,0x1E44, + 0x1DD2,0x1C2A,0x197C,0x154F,0x104C,0x0B13,0x05C4,0xFFC5, + 0xFBB6,0xF719,0xF51C,0xF4B9,0xF4D1,0xF4AD,0xF3B3,0xF0FD, + 0xEC5B,0xE6C6,0xE221,0xDF69,0xDE6D,0xDE30,0xDEA2,0xDF84, + 0xE13A,0xE2E2,0xE55E,0xE858,0xEC2A,0xEF91,0xF103,0xF21C, + 0xF3D3,0xF465,0xF4B0,0xF609,0xF833,0xFBA6,0x0077,0x0635, + 0x0B55,0x0EBB,0x0F6E,0x0FAE,0x0F85,0x0F37,0x0FB1,0x10D7, + 0x1142,0x1054,0x0ED7,0x0DEE,0x0CC1,0x0CB0,0x0DF9,0x0DF0, + 0x0D68,0x0C05,0x0927,0x0573,0x00CB,0xFBA7,0xF7A0,0xF5CD, + 0xF53F,0xF47D,0xF3C2,0xF224,0xEFBB,0xEE23,0xECBF,0xEB7E, + 0xEA9E,0xE9AD,0xE90D,0xE8C1,0xE8D8,0xE862,0xE7DA,0xE88D, + 0xEAE1,0xEDF0,0xF0F0,0xF3AD,0xF5FB,0xF6EA,0xF6A3,0xF66D, + 0xF789,0xFA33,0xFD3C,0xFEF5,0x0038,0x0279,0x04B9,0x0669, + 0x0852,0x09C1,0x0A7A,0x09C4,0x0987,0x0A32,0x0AC0,0x0ACA, + 0x0964,0x077E,0x0634,0x067F,0x073B,0x0778,0x0742,0x0608, + 0x039D,0x00ED,0xFE69,0xFCBE,0xFB58,0xFAA9,0xF94D,0xF7A2, + 0xF5CD,0xF4BD,0xF4A6,0xF498,0xF40D,0xF36E,0xF301,0xF1F9, + 0xF0E3,0xF305,0xF3D5,0xF0D2,0xF12B,0xF1B6,0xF3C3,0xF692, + 0xF88D,0xF976,0xFA1E,0xFA70,0xFB02,0xFC56,0xFE22,0xFF74, + 0xFFE9,0x004D,0x0074,0xFFB7,0xFC8C,0xF650,0xED0E,0xE147, + 0xD2C2,0xC3C0,0xBF2F,0xBFAB,0xBFBF,0xC067,0xD20C,0xE53D, + 0xEFBE,0xF10E,0xEB93,0xE39C,0xDEC9,0xDF43,0xE358,0xE96F, + 0xF00A,0xF72B,0xFFF0,0x0B01,0x172F,0x2454,0x3190,0x3CC8, + 0x3F6C,0x3EFE,0x3FB7,0x3C69,0x342E,0x2F69,0x2F7A,0x3533, + 0x3DA8,0x3FBF,0x3F7A,0x3FA6,0x3F62,0x3F9D,0x3DCC,0x3663, + 0x2ED7,0x24F7,0x19DC,0x1116,0x0996,0x0398,0x0000,0xFF12, + 0xFFB4,0x0031,0xFEF3,0xFB82,0xF5DB,0xEC6E,0xE0CF,0xD62D, + 0xCFE4,0xCEC1,0xD161,0xD57B,0xD988,0xDD4D,0xE0D7,0xE364, + 0xE598,0xE909,0xED12,0xEE5B,0xEDB6,0xEDE2,0xEF08,0xF1BE, + 0xF5BD,0xFBAB,0x0443,0x0D07,0x1516,0x1BAD,0x1FDA,0x2125, + 0x2086,0x1D8C,0x1B38,0x1AF6,0x1CF7,0x1EF7,0x1EF1,0x1E73, + 0x1E79,0x1EED,0x1F63,0x1F91,0x1ECC,0x1C0C,0x170B,0x105B, + 0x09FA,0x0453,0xFF22,0xFB58,0xF847,0xF707,0xF72E,0xF6E9, + 0xF4DF,0xF16D,0xEE25,0xEB49,0xE832,0xE53C,0xE317,0xE181, + 0xE047,0xDF22,0xDF73,0xE27C,0xE633,0xEA06,0xECCB,0xEF65, + 0xF1CF,0xF3D5,0xF4C2,0xF537,0xF64D,0xF736,0xF97A,0xFCD7, + 0x0150,0x061D,0x09CA,0x0C82,0x0EB5,0x10C2,0x12F7,0x13FA, + 0x13A5,0x12B4,0x1144,0x0FF0,0x0EA8,0x0E49,0x0F67,0x1053, + 0x1039,0x0F27,0x0D7F,0x0C08,0x0AF1,0x082D,0x0470,0x006E, + 0xFCAB,0xF9BD,0xF808,0xF699,0xF56A,0xF40E,0xF220,0xF0C6, + 0xF0B8,0xF12E,0xEF63,0xEF19,0xEC2A,0xE9D9,0xE933,0xE971, + 0xEA4D,0xEC60,0xEDDD,0xEEC3,0xF05A,0xF27C,0xF575,0xF833, + 0xF976,0xF970,0xF964,0xFA6D,0xFC68,0xFE5A,0x00E5,0x031F, + 0x04D1,0x0607,0x073A,0x0993,0x0C04,0x0D39,0x0CE1,0x0B55, + 0x09E7,0x091D,0x08A0,0x0877,0x0870,0x07ED,0x06D6,0x05C1, + 0x0569,0x0540,0x042D,0x022D,0xFFDF,0xFD5A,0xFBE2,0xFAC7, + 0xF9C6,0xF83E,0xF656,0xF496,0xF348,0xF370,0xF45B,0xF4E6, + 0xF455,0xF2F6,0xF1A6,0xF065,0xEFC4,0xF0AF,0xF1F4,0xF4AF, + 0xF5EF,0xF5B7,0xF6B7,0xF8A3,0xF9B6,0xFAC1,0xFBC8,0xFD07, + 0xFE5D,0xFF0C,0x0050,0x01B8,0x025C,0x0227,0x0146,0xFFD3, + 0xFBFA,0xF583,0xEB35,0xDE80,0xCF8D,0xC19C,0xBF4E,0xBFC5, + 0xBF78,0xC2FB,0xD7C7,0xE8D9,0xF039,0xEEB7,0xE6D2,0xDE45, + 0xDAD2,0xDCEB,0xE278,0xE918,0xEF59,0xF641,0xFF7B,0x0B49, + 0x1882,0x25BF,0x3271,0x3CA2,0x3E76,0x3DD7,0x3EC3,0x39F8, + 0x30D1,0x2B94,0x2CA2,0x34DD,0x3E24,0x3ED9,0x3EB9,0x3E9D, + 0x3E29,0x3E2F,0x3872,0x306B,0x29A2,0x2278,0x1989,0x0FAA, + 0x0699,0x007F,0xFDC8,0xFDA7,0xFEE0,0xFF40,0xFE36,0xFA5C, + 0xF222,0xE752,0xDB96,0xD205,0xCC31,0xCAD4,0xCE3A,0xD497, + 0xDA58,0xDDD9,0xDFA9,0xE0EB,0xE2CA,0xE5EC,0xE92D,0xEBDF, + 0xED69,0xED5D,0xED1E,0xEDFA,0xF23E,0xFA29,0x0374,0x0C8E, + 0x1564,0x1C86,0x1FE1,0x1FA4,0x1D31,0x1A5D,0x187C,0x1867, + 0x195D,0x1B7A,0x1D51,0x1E4A,0x1DDC,0x1D8C,0x1CE0,0x1C77, + 0x1AC1,0x17F0,0x1356,0x0E2C,0x06B2,0xFEB6,0xF88B,0xF4C6, + 0xF3B1,0xF5D0,0xF4C6,0xF448,0xF3DB,0xF062,0xEC2B,0xE764, + 0xE3D3,0xE119,0xDEEF,0xDD75,0xDD06,0xDE07,0xDF8D,0xE183, + 0xE470,0xE7DE,0xEBAB,0xEF57,0xF18D,0xF31D,0xF387,0xF41B, + 0xF488,0xF610,0xF85A,0xFC6E,0x01BC,0x06F9,0x0B4C,0x0EA9, + 0x114B,0x12B4,0x12FE,0x12DF,0x1329,0x1330,0x12DD,0x11D3, + 0x1131,0x10BE,0x10DB,0x1071,0x1010,0x102B,0x0FF4,0x0EF6, + 0x0C65,0x08E3,0x04D8,0x0039,0xFC06,0xF98E,0xF8A6,0xF86A, + 0xF7B7,0xF6FA,0xF5D0,0xF45A,0xF23C,0xF0BF,0xEF3F,0xEDCD, + 0xEC24,0xE9C2,0xE924,0xE9C0,0xEA23,0xEAFA,0xEC51,0xEEF1, + 0xF16A,0xF45A,0xF735,0xF942,0xFA3D,0xFA0F,0xF992,0xF9CD, + 0xFB7E,0xFE81,0x01FD,0x0548,0x0701,0x08A1,0x096C,0x09DC, + 0x0A95,0x0C30,0x0DBC,0x0DAE,0x0D1B,0x0C30,0x0B28,0x0A47, + 0x08E1,0x0869,0x08EF,0x092F,0x08BE,0x0918,0x0811,0x05DD, + 0x0226,0xFE85,0xFC2E,0xFB32,0xFBF7,0xFCD4,0xFB32,0xF9CF, + 0xF7A7,0xF5F4,0xF536,0xF5EE,0xF6C0,0xF6C9,0xF5F5,0xF570, + 0xF59D,0xF592,0xF53D,0xF5E0,0xF6D8,0xF8C6,0xFAB9,0xFC67, + 0xFDBE,0xFE8E,0xFED2,0xFF3E,0x0002,0x0193,0x0345,0x0474, + 0x0530,0x0575,0x05BD,0x04FA,0x0306,0xFFDE,0xFB2C,0xF565, + 0xEE80,0xE78F,0xE345,0xE2B3,0xE63F,0xECDB,0xF4DD,0xFAE8, + 0xFDE1,0xFC2F,0xF821,0xF4EC,0xF308,0xF332,0xF430,0xF61B, + 0xF93C,0xFCD3,0x008A,0x04CC,0x0A1D,0x104C,0x15D4,0x1943, + 0x1A72,0x19D4,0x175E,0x143B,0x1132,0x1039,0x11DE,0x159B, + 0x19F0,0x1D0D,0x1F2A,0x1F78,0x1E24,0x1AB5,0x16A6,0x13B6, + 0x1142,0x0BD9,0x08DA,0x06AB,0x02CB,0x015A,0x0132,0x01E4, + 0x0303,0x032A,0x019D,0xFE49,0xFA81,0xF684,0xF25B,0xEEF0, + 0xECD2,0xECAD,0xEDFA,0xEF50,0xF083,0xF25C,0xF483,0xF61E, + 0xF6BB,0xF681,0xF656,0xF61B,0xF571,0xF4DD,0xF585,0xF72E, + 0xF978,0xFBDA,0xFF8A,0x038C,0x0716,0x08D8,0x0969,0x0927, + 0x08BD,0x084B,0x080E,0x075A,0x073B,0x076B,0x0777,0x08BB, + 0x0A71,0x0BC9,0x0BCF,0x0B28,0x08F1,0x0621,0x03C1,0x0212, + 0x00D6,0xFF4D,0xFCE3,0xFAAF,0xF9A6,0xF9A2,0xFA87,0xFCBF, + 0xFBEF,0xFADE,0xF947,0xF6B7,0xF571,0xF48F,0xF3C8,0xF2B7, + 0xF181,0xF161,0xF28A,0xF464,0xF5EB,0xF75F,0xF7DF,0xF83C, + 0xF7EB,0xF70B,0xF778,0xF9C7,0xFBD6,0xFBE9,0xFB3A,0xFC5B, + 0xFE3C,0xFF71,0x0159,0x03A0,0x0577,0x066F,0x0617,0x04DF, + 0x04A6,0x045A,0x0443,0x03C5,0x041E,0x0587,0x06A5,0x06BE, + 0x054C,0x0427,0x03A7,0x0308,0x01E5,0x0131,0x0174,0x0003, + 0xFDD6,0xFBF1,0xFAF1,0xFADF,0xFAC8,0xFA6B,0xF9E6,0xFA3B, + 0xFA42,0xF910,0xF6E3,0xF49F,0xF4BF,0xF546,0xF553,0xF55B, + 0xF591,0xF613,0xF5E8,0xF6AD,0xF80E,0xFA1B,0xFB2B,0xFAA8, + 0xF9A5,0xFA34,0xFBC3,0xFCDD,0xFD41,0xFDBE,0xFE0E,0xFE2D, + 0xFE9A,0xFFEC,0x01FC,0x0355,0x0386,0x0329,0x024A,0x0215, + 0x0241,0x024F,0x0233,0x0269,0x026E,0x01AE,0x0071,0xFF5A, + 0xFEA6,0xFE07,0xFD5A,0xFC64,0xFB4A,0xFA5F,0xF94B,0xF823, + 0xF6A9,0xF5AF,0xF4C2,0xF399,0xF375,0xF488,0xF5F0,0xF547, + 0xF3EE,0xF34C,0xF35D,0xF3EA,0xF4BD,0xF4B9,0xF47A,0xF31A, + 0xF3C8,0xF3CB,0xF19F,0xF293,0xF1DF,0xF133,0xF0AB,0xF095, + 0xF02A,0xEFC1,0xEEFA,0xEE97,0xEE5E,0xEDE8,0xED7A,0xECF6, + 0xECCE,0xEC33,0xEBCD,0xEB9A,0xEB02,0xEAA1,0xEA42,0xE9F1, + 0xE9D8,0xE99F,0xE910,0xE87A,0xE871,0xE80A,0xE81B,0xE7FA, + 0xE7AF,0xE768,0xE6DE,0xE6B5,0xE723,0xE749,0xE73C,0xE6F9, + 0xE73C,0xE722,0xE761,0xE7AD,0xE7AA,0xE792,0xE7F5,0xE85F, + 0xE903,0xE999,0xE9C3,0xE9E3,0xE9ED,0xE9F0,0xEA59,0xEB20, + 0xEB90,0xEB7B,0xEBC3,0xEC21,0xECE9,0xECD1,0xED8F,0xEDFE, + 0xEC94,0xEBCC,0xEC9C,0xED1C,0xEDC0,0xEE80,0xEF2B,0xEF7E, + 0xEFB9,0xF038,0xF0A8,0xF10D,0xF16B,0xF1D5,0xF2A2,0xF340, + 0xF38E,0xF3CC,0xF4E9,0xF4B7,0xF4AC,0xF5B4,0xF6D3,0xF6C4, + 0xF6E9,0xF7A3,0xF7D8,0xF845,0xF920,0xF954,0xF9AC,0xFA9D, + 0xFB0A,0xFB2C,0xFB8F,0xFC07,0xFC54,0xFCC6,0xFD78,0xFE69, + 0xFF23,0xFFD6,0xFFF9,0x0008,0x018A,0x017A,0x00F3,0x0178, + 0x01B6,0x01D0,0x0257,0x02FC,0x0389,0x03CE,0x0413,0x053D, + 0x0601,0x0666,0x0732,0x0777,0x07BF,0x0844,0x0810,0x082A, + 0x0894,0x08C7,0x08EA,0x08CD,0x095E,0x09BF,0x0996,0x09F8, + 0x0A41,0x0A41,0x0A50,0x0AA0,0x0A91,0x0ACD,0x0AE4,0x0AAF, + 0x0AF5,0x0B33,0x0B61,0x0B9D,0x0B61,0x0B8B,0x0B97,0x0B96, + 0x0BFB,0x0C50,0x0CA1,0x0C99,0x0C7A,0x0C91,0x0C82,0x0CD1, + 0x0CEC,0x0D5F,0x0DD0,0x0DB9,0x0DA9,0x0DC7,0x0DDD,0x0DA8, + 0x0DA6,0x0DCF,0x0E22,0x0E65,0x0E3F,0x0E44,0x0E16,0x0DE4, + 0x0DCD,0x0DAD,0x0DE5,0x0E0C,0x0E1F,0x0DEE,0x0D7F,0x0E73, + 0x0EBB,0x0D8F,0x0F9B,0x0EFA,0x0E24,0x0E1E,0x0E32,0x0E88, + 0x0EBA,0x0E62,0x0EB0,0x0ED4,0x0EEB,0x0EA1,0x0E7C,0x0E88, + 0x0E56,0x0E44,0x0E2E,0x0DDD,0x0DEB,0x0E36,0x0D9B,0x0CFC, + 0x0D0A,0x0D68,0x0D83,0x0D8C,0x0DDE,0x0D7F,0x0D4E,0x0D68, + 0x0D2C,0x0D2F,0x0D2A,0x0D2D,0x0D01,0x0CC0,0x0CD7,0x0C8C, + 0x0C3F,0x0C5A,0x0C2B,0x0C14,0x0C44,0x0C77,0x0BE4,0x0BAA, + 0x0B8C,0x0B5D,0x0B72,0x0B83,0x0B92,0x0B7A,0x0B24,0x0B44, + 0x0B0C,0x0AF5,0x0B00,0x0AE4,0x0B16,0x0B76,0x0D3E,0x0E1B, + 0x0D25,0x0CAF,0x0C36,0x0C19,0x0BCF,0x0BBC,0x0BB4,0x0B7D, + 0x0B49,0x0B3A,0x0B52,0x0AB6,0x0AB5,0x0A79,0x0A8B,0x0A4C, + 0x09AE,0x0960,0x0920,0x0A02,0x09D9,0x0952,0x09AD,0x0A1C, + 0x095F,0x0915,0x08D5,0x0863,0x08AF,0x08FD,0x08C2,0x08C3, + 0x08A8,0x08A6,0x0867,0x0810,0x0832,0x0832,0x0879,0x0835, + 0x0779,0x0740,0x0758,0x066D,0x0640,0x076E,0x07E3,0x07F9, + 0x0771,0x0738,0x0726,0x06B8,0x066F,0x0640,0x05EF,0x05AD, + 0x0575,0x054B,0x045F,0x0418,0x0471,0x0462,0x0483,0x048F, + 0x0482,0x03D7,0x036E,0x0394,0x0406,0x0432,0x0418,0x042C, + 0x03FD,0x03BA,0x0391,0x03C6,0x03F4,0x03B1,0x0393,0x03C1, + 0x03C8,0x0408,0x0431,0x03B0,0x03B9,0x039D,0x0337,0x033C, + 0x0367,0x0367,0x02F7,0x02C5,0x02F9,0x0290,0x027F,0x02D5, + 0x0287,0x0201,0x01A4,0x01A3,0x017D,0x017D,0x0172,0x017E, + 0x01FF,0x01C9,0x015B,0x013A,0x014A,0x0184,0x01A4,0x0109, + 0x00EF,0x011F,0x0182,0x0127,0x013C,0x016E,0x0129,0x008A, + 0x025A,0x00D7,0x00DB,0x01B9,0x0166,0x014E,0x0164,0x0118, + 0x00C0,0x00E8,0x00D7,0x00CF,0x00ED,0x015F,0x010A,0x0154, + 0x00CA,0x00F9,0x0118,0x012D,0x013F,0x00EB,0x0082,0x009A, + 0x0065,0x005A,0x00D7,0x0073,0x00A2,0x00E0,0x00CA,0x0043, + 0xFFEC,0xFFF5,0x003D,0x004A,0x0068,0x004C,0x0062,0x0003, + 0x0055,0x0083,0x0090,0x00F8,0x00DD,0x00B5,0x00B8,0xFED2, + 0xFDA2,0xFE5C,0xFE5A,0xFE76,0xFE9B,0xFE77,0xFE7B,0xFEAB, + 0xFE71,0xFE46,0xFE40,0xFE85,0xFEA6,0xFEAA,0xFED3,0xFED8, + 0xFEDC,0xFF6D,0xFE94,0xFDCD,0xFE62,0xFEBB,0xFE90,0xFE7A, + 0xFEDC,0xFEFF,0xFEDC,0xFF82,0xFFE7,0x0035,0x009B,0x00C9, + 0x0126,0x01C1,0x02DE,0x045C,0x054F,0x05A4,0x0676,0x0699, + 0x06D3,0x0794,0x08DF,0x0ADE,0x0A94,0x09F4,0x0979,0x09BC, + 0x0958,0x09A6,0x0A51,0x0ADA,0x0B3E,0x0B76,0x0C54,0x0C9A, + 0x0CAD,0x0D63,0x0E33,0x0EA7,0x0E5C,0x0E06,0x0E44,0x0EA2, + 0x0F7B,0x1051,0x1075,0x103A,0x10B4,0x11EE,0x133C,0x1393, + 0x1419,0x1414,0x1423,0x146F,0x14DE,0x155A,0x1580,0x1588, + 0x1564,0x15AE,0x16DD,0x17A2,0x176B,0x168E,0x15CC,0x161D, + 0x1700,0x17F4,0x1850,0x17EE,0x1716,0x15F7,0x15C9,0x164D, + 0x16F6,0x1776,0x1765,0x16A3,0x15ED,0x1563,0x1566,0x15C8, + 0x15D2,0x15DF,0x159D,0x152C,0x14F1,0x141A,0x13C5,0x13F2, + 0x13AF,0x12C6,0x128D,0x12DD,0x12FA,0x12E6,0x1309,0x11D1, + 0x0F6C,0x10A3,0x1027,0x0F53,0x1002,0x1000,0x0FA9,0x0EAB, + 0x0CF5,0x0C1D,0x0BDB,0x0C19,0x0C25,0x0C42,0x0C29,0x0B6D, + 0x0AA0,0x09F4,0x0974,0x09B7,0x0A01,0x093C,0x0811,0x0795, + 0x0739,0x0684,0x05AC,0x04D8,0x04C5,0x04C0,0x03E6,0x03A3, + 0x0395,0x0295,0x010E,0xFE81,0xFB60,0xF7DB,0xF3EA,0xEF06, + 0xE966,0xE3CE,0xDFD3,0xDEE1,0xE119,0xE5F5,0xEB56,0xF019, + 0xF3BD,0xF5EB,0xF776,0xF95D,0xFBF1,0xFE2A,0xFFB6,0x006E, + 0xFFDA,0xFF00,0xFEE6,0x0115,0x046A,0x0A1C,0x0F2F,0x1253, + 0x1581,0x177B,0x17B9,0x1692,0x14B3,0x1209,0x0F52,0x0C5A, + 0x0940,0x060A,0x024B,0xFECC,0xFC11,0xFB0B,0xFAA0,0xFAA7, + 0xF967,0xF7A6,0xF661,0xF433,0xF0C7,0xED7B,0xEA32,0xE6E3, + 0xE462,0xE277,0xE0AA,0xE06D,0xE13D,0xE1F7,0xE31C,0xE4F5, + 0xE7B1,0xEA87,0xECD5,0xEE61,0xEF0B,0xEF51,0xEF16,0xEF4C, + 0xF09C,0xF298,0xF3AA,0xF46A,0xF68C,0xF8C7,0xFA48,0xFC2A, + 0xFDE0,0xFF67,0x003F,0x0087,0xFFF1,0xFE51,0xFBB5,0xF94D, + 0xF7A2,0xF5F8,0xF4D0,0xF394,0xF240,0xF0F2,0xEFF4,0xEEB1, + 0xED6A,0xECCA,0xEC82,0xEB75,0xE9D1,0xE827,0xE600,0xE445, + 0xE282,0xE18F,0xE177,0xE210,0xE27B,0xE2CF,0xE3A4,0xE54A, + 0xE6B6,0xE7DC,0xE8DB,0xE992,0xEA79,0xEC05,0xED1C,0xEDD0, + 0xEE90,0xEECD,0xEF32,0xEFF2,0xF1A2,0xF3F8,0xF668,0xF874, + 0xF998,0xF9C3,0xF951,0xF957,0xF923,0xF866,0xF7CF,0xF696, + 0xF537,0xF497,0xF3DA,0xF30B,0xF18C,0xF0F8,0xF044,0xF0C4, + 0xF107,0xF108,0xF08C,0xEF5B,0xEDDC,0xEBB6,0xEA67,0xEBDB, + 0xEA47,0xE972,0xE9FA,0xE99B,0xE9FA,0xE9FD,0xEA92,0xEB5B, + 0xECC8,0xEDBE,0xEE92,0xEFDC,0xF0F4,0xF163,0xF1E9,0xF1E7, + 0xF1C6,0xF28C,0xF36C,0xF527,0xF6DE,0xF78C,0xF74F,0xF75C, + 0xF84A,0xF9C2,0xFB01,0xFB51,0xFB12,0xFAA0,0xF9AF,0xF920, + 0xF938,0xF95D,0xF891,0xF715,0xF666,0xF673,0xF74D,0xF818, + 0xF79D,0xF661,0xF50A,0xF47D,0xF441,0xF4AF,0xF4F3,0xF491, + 0xF398,0xF2A8,0xF1BD,0xF165,0xF213,0xF2D8,0xF37C,0xF3B2, + 0xF409,0xF51B,0xF614,0xF60E,0xF634,0xF6CC,0xF6FC,0xF5C6, + 0xF62A,0xF77C,0xF7D5,0xF81C,0xF7E4,0xF8B6,0xF9EA,0xFAB6, + 0xFBD0,0xFCE2,0xFC9B,0xFC31,0xFBE4,0xFC54,0xFCC2,0xFCEF, + 0xFD44,0xFD68,0xFC60,0xFBEE,0xFBD5,0xFAF4,0xFA71,0xFAAA, + 0xFB0B,0xFB69,0xFBAA,0xFB86,0xFA59,0xF77E,0xF2F0,0xEDD1, + 0xE728,0xDF0D,0xD4D1,0xC71F,0xBFF4,0xC02E,0xC01C,0xC05D, + 0xC03D,0xC20C,0xD129,0xDFA6,0xE782,0xED71,0xF2F8,0xF8D1, + 0x003F,0x0749,0x0CBA,0x0F7B,0x1047,0x10CE,0x12F8,0x1809, + 0x20CC,0x2DA5,0x3BCC,0x40E6,0x408D,0x40DB,0x4096,0x408C, + 0x40B2,0x4092,0x3FFC,0x3A37,0x32E0,0x2A98,0x2120,0x1744, + 0x1039,0x0C5E,0x0B01,0x0AD1,0x0AB6,0x08A2,0x038C,0xFBB8, + 0xF248,0xE81D,0xDEBB,0xD74B,0xD21E,0xCFB2,0xCF0F,0xCF48, + 0xCFA7,0xD113,0xD4F4,0xDB13,0xE35C,0xEC95,0xF3BA,0xF889, + 0xFAE8,0xFBE3,0xFCD1,0xFDE9,0x002A,0x03DB,0x08C5,0x0E40, + 0x1464,0x1A33,0x1F5D,0x2398,0x2717,0x2A2D,0x2D04,0x2DCB, + 0x2CD7,0x294B,0x240C,0x1D88,0x16F5,0x116B,0x0DFE,0x092F, + 0x06DE,0x0646,0x02C1,0x0043,0xFD2D,0xF94D,0xF55B,0xF126, + 0xED3F,0xE94B,0xE57D,0xE1A3,0xDD1B,0xD90E,0xD67C,0xD65A, + 0xD841,0xDB8F,0xDFAA,0xE3C7,0xE787,0xEA45,0xED70,0xF0F8, + 0xF423,0xF6C6,0xF88D,0xFB20,0xFDDF,0x007D,0x02F3,0x0639, + 0x093D,0x0C95,0x0FA2,0x12EF,0x16DA,0x19B9,0x1B1B,0x1AB2, + 0x1894,0x163A,0x1458,0x11EA,0x0F9E,0x0D32,0x0B02,0x080B, + 0x04B3,0x020D,0x0079,0xFF3F,0xFD9C,0xFBB4,0xF966,0xF71D, + 0xF4CE,0xF212,0xEE84,0xEB5D,0xE975,0xEADB,0xEA88,0xEA7F, + 0xEAF8,0xEC25,0xECEF,0xEDD4,0xEF43,0xF2B1,0xF642,0xF8C4, + 0xFA52,0xFB6A,0xFCD0,0xFE37,0xFFA1,0x016B,0x03B4,0x0608, + 0x07C9,0x0A17,0x0D80,0x0E9E,0x0F6A,0x1062,0x10FF,0x1106, + 0x111A,0x104B,0x0EEC,0x0D1D,0x0ACF,0x082A,0x05E1,0x03FA, + 0x029B,0x0165,0x00A3,0xFF2E,0xFD93,0xFC18,0xFA03,0xF7D1, + 0xF664,0xF4DC,0xF23F,0xF08B,0xF0D7,0xF06E,0xEFF0,0xEF47, + 0xEF1D,0xEFD8,0xF0D5,0xF260,0xF4B0,0xF57F,0xF57D,0xF6B5, + 0xF727,0xF81E,0xFA3F,0xFBD9,0xFD61,0xFE37,0xFEFA,0x0033, + 0x01BE,0x0492,0x065E,0x075C,0x0879,0x093F,0x09CF,0x0A1C, + 0x09C9,0x08EC,0x0888,0x0833,0x073E,0x059E,0x0448,0x0340, + 0x0243,0x0162,0x00B5,0x0039,0xFF23,0xFD9F,0xFBE2,0xFA35, + 0xF6F8,0xF156,0xE8E6,0xDF90,0xD598,0xC7FE,0xBF17,0xBED4, + 0xBEA3,0xBEBD,0xBED8,0xBF02,0xC01F,0xCE55,0xDC3B,0xE3F2, + 0xEA7F,0xF28B,0xFC66,0x06B0,0x0DFF,0x11D2,0x1238,0x12A0, + 0x15A4,0x1B4F,0x229F,0x2D83,0x3A5D,0x3ECC,0x3EB9,0x3F86, + 0x3E80,0x3EFA,0x3EF8,0x3EFF,0x3EF0,0x3EB8,0x3F1D,0x3A30, + 0x2DF2,0x21BC,0x1771,0x10AE,0x0E47,0x0DFC,0x0D88,0x0BB5, + 0x074A,0x0039,0xF6C2,0xEB5E,0xE04A,0xD578,0xCC7F,0xC71E, + 0xC491,0xC48C,0xC561,0xC670,0xC8DF,0xCEC6,0xD824,0xE2AE, + 0xECFC,0xF561,0xF984,0xFAF4,0xFBA7,0xFCAD,0xFF6B,0x0338, + 0x0858,0x0E46,0x14EC,0x1B82,0x2238,0x28A7,0x2EDD,0x3343, + 0x366B,0x3899,0x3906,0x3755,0x327E,0x2B5D,0x230E,0x1AF8, + 0x1487,0x10AF,0x0E85,0x0C2E,0x0908,0x043D,0xFED8,0xF926, + 0xF63D,0xF2FF,0xEF04,0xE9CF,0xE405,0xDE56,0xD984,0xD5A0, + 0xD29F,0xD092,0xD005,0xD29B,0xD782,0xDCFD,0xE23C,0xE5F3, + 0xE9B4,0xEC60,0xEE8C,0xF2CA,0xF729,0xFAE6,0xFDDD,0x0098, + 0x028B,0x0472,0x081D,0x0CF0,0x122F,0x1799,0x1BDC,0x1F25, + 0x20ED,0x20D1,0x1F45,0x1DD0,0x1C31,0x1A52,0x171E,0x1477, + 0x110B,0x0D97,0x0B49,0x078C,0x035F,0x0165,0xFFA6,0xFDA8, + 0xFBC6,0xF919,0xF57C,0xF102,0xECBF,0xE9DE,0xE7B4,0xE5E1, + 0xE644,0xE706,0xE6DE,0xE6C2,0xE795,0xE90E,0xEBDA,0xEF8F, + 0xF35D,0xF6AD,0xF839,0xF92B,0xFA2D,0xFC47,0xFEFB,0x013F, + 0x02FA,0x05BB,0x08B2,0x0B85,0x0E59,0x10EB,0x12C4,0x13F5, + 0x13E6,0x143D,0x15B7,0x16B9,0x1576,0x1259,0x0EAD,0x0C8A, + 0x0B10,0x09CF,0x0875,0x06AD,0x0445,0x021D,0xFFFB,0xFDFA, + 0xFBCC,0xFA0B,0xF7E9,0xF5C9,0xF3F2,0xF1F9,0xF01F,0xEEC9, + 0xECC7,0xEC3B,0xEC29,0xED3B,0xEE99,0xF099,0xF26D,0xF39E, + 0xF466,0xF5A8,0xF7C2,0xF9B8,0xFBD9,0xFE64,0xFFBA,0xFFBF, + 0x0366,0x04F7,0x05D4,0x0790,0x091B,0x0B13,0x0D94,0x0F61, + 0x0FAF,0x0F36,0x0E26,0x0D9A,0x0D46,0x0CB6,0x0B3A,0x0A36, + 0x08FE,0x0773,0x0624,0x053A,0x03F8,0x026C,0x009A,0xFF9D, + 0xFF6A,0xFE8C,0xFCA0,0xF94A,0xF444,0xED56,0xE45F,0xDB2B, + 0xD14D,0xC548,0xBF13,0xBF79,0xBF30,0xBF46,0xBFA4,0xBF22, + 0xC301,0xD4A5,0xE162,0xE81C,0xEDCA,0xF66F,0x016D,0x0B9A, + 0x11DD,0x14AA,0x15DC,0x1705,0x19FE,0x1FA1,0x2851,0x34D3, + 0x3E0B,0x3EF7,0x3F06,0x3F3E,0x4010,0x40A8,0x403A,0x4009, + 0x3FE6,0x3FA1,0x3FDD,0x3A91,0x2E47,0x221C,0x172D,0x1074, + 0x0EF2,0x0FFF,0x0F89,0x0C59,0x0589,0xFCD1,0xF36F,0xE8C8, + 0xDE01,0xD514,0xCD2C,0xC68A,0xC3A4,0xC40E,0xC5C1,0xC8C0, + 0xCC41,0xD159,0xD9CB,0xE45A,0xEEE7,0xF716,0xFB8E,0xFC94, + 0xFC89,0xFD49,0x00A5,0x0631,0x0D1C,0x138F,0x18BA,0x1E10, + 0x2416,0x2990,0x2EE3,0x34BB,0x3870,0x3A28,0x38FD,0x3549, + 0x2FA2,0x28C3,0x2155,0x19C8,0x134D,0x0E44,0x0B4B,0x093A, + 0x05D3,0x011B,0xFCE3,0xF8AA,0xF4A5,0xF0CC,0xED01,0xE91B, + 0xE400,0xDD7B,0xD6FB,0xD221,0xCF9D,0xCF7E,0xD144,0xD4A9, + 0xD897,0xDD1C,0xE141,0xE510,0xE927,0xECFB,0xF096,0xF4A5, + 0xF7FB,0xFB09,0xFD9B,0xFF7A,0x019B,0x0488,0x08D9,0x0D88, + 0x1273,0x1721,0x1B4F,0x1E33,0x2034,0x206E,0x1F54,0x1D1D, + 0x1A74,0x184F,0x157D,0x11A7,0x0CFF,0x0826,0x0438,0x015F, + 0xFF2D,0xFDA1,0xFC1F,0xF995,0xF685,0xF2FA,0xEFD9,0xEC60, + 0xE8CF,0xE559,0xE2F5,0xE149,0xE019,0xDFD9,0xE28E,0xE23A, + 0xE20D,0xE4AE,0xE7AF,0xEC21,0xF00C,0xF25E,0xF449,0xF666, + 0xF822,0xFA35,0xFC6F,0xFF0B,0x0189,0x03FB,0x0655,0x0958, + 0x0CED,0x0FAE,0x1133,0x11A5,0x1205,0x130C,0x1405,0x140A, + 0x1308,0x103E,0x0D4D,0x0A95,0x08F8,0x07E2,0x0671,0x0433, + 0x0235,0x0072,0xFF19,0xFD34,0xFA87,0xF831,0xF60F,0xF449, + 0xF217,0xF0A9,0xEFBE,0xEE70,0xECC7,0xEB90,0xEBE6,0xED7C, + 0xEF08,0xF08E,0xF212,0xF3AB,0xF4B8,0xF62C,0xF79D,0xF9D9, + 0xFC80,0xFE75,0xFFF3,0x0097,0x01A1,0x028B,0x0285,0x043C, + 0x06D9,0x090F,0x0B10,0x0C2D,0x0C31,0x0BBD,0x0BAF,0x0B59, + 0x0A00,0x088B,0x07D7,0x07E3,0x073C,0x054F,0x02D6,0x00D8, + 0xFF42,0xFD36,0xFCD1,0xFDB3,0xFD0B,0xFA6F,0xF778,0xF430, + 0xF01D,0xEA2F,0xE1F9,0xD7EB,0xCC4F,0xC1BE,0xBFC4,0xC006, + 0xBFB7,0xBFCD,0xC07C,0xBFB8,0xC517,0xD7BB,0xE405,0xEB52, + 0xF0BA,0xF909,0x0311,0x0BBE,0x1221,0x157A,0x166B,0x1763, + 0x1B14,0x2139,0x2B8F,0x3964,0x4053,0x406A,0x4089,0x40B2, + 0x4103,0x40D4,0x40B2,0x409A,0x4094,0x4086,0x3F41,0x3675, + 0x2AE2,0x1F06,0x15F3,0x106E,0x0F37,0x0F32,0x0E29,0x0A2B, + 0x03CE,0xFAFB,0xF08A,0xE593,0xDB01,0xD1BE,0xCA4E,0xC53E, + 0xC321,0xC43E,0xC68C,0xC96F,0xCE16,0xD4BA,0xDE60,0xE8A6, + 0xF2A6,0xF9B2,0xFD70,0xFEB4,0xFF02,0x0104,0x0489,0x093D, + 0x0E1C,0x13ED,0x1A13,0x2093,0x27CC,0x2E59,0x33DA,0x3781, + 0x39E2,0x3A8D,0x39A3,0x36D9,0x317B,0x2A8D,0x219E,0x18EA, + 0x1281,0x0E4F,0x0BE8,0x0A1B,0x0747,0x03E1,0xFDA9,0xF925, + 0xF6D2,0xF22B,0xEDBF,0xE8D6,0xE301,0xDD10,0xD76E,0xD348, + 0xD14D,0xD11A,0xD23A,0xD4C7,0xD904,0xDEDE,0xE542,0xE98B, + 0xEC89,0xEF5D,0xF23E,0xF591,0xF93E,0xFD0A,0x0069,0x0293, + 0x0385,0x05A9,0x0A35,0x1029,0x15C9,0x1A2B,0x1D03,0x1EC7, + 0x1F73,0x200A,0x1FE4,0x1E0E,0x1ABF,0x16AE,0x128E,0x0ECC, + 0x0BA8,0x08CC,0x0614,0x032B,0x001E,0xFD73,0xFB57,0xFA07, + 0xF7DB,0xF440,0xF041,0xEBEA,0xE815,0xE4A6,0xE27E,0xE119, + 0xDFB0,0xDEFF,0xDF3E,0xE107,0xE5DE,0xE968,0xEC7E,0xEF4A, + 0xF179,0xF3F6,0xF68A,0xF8C0,0xFABB,0xFCF2,0xFE75,0xFFA1, + 0x01BF,0x049E,0x085A,0x0AEB,0x0CF6,0x0EC2,0x1105,0x126C, + 0x13D4,0x159E,0x14AC,0x11D2,0x0FBC,0x0D6C,0x0B4E,0x09EA, + 0x0788,0x0456,0x016F,0xFFAC,0xFEE1,0xFDD0,0xFBCD,0xF998, + 0xF72B,0xF4F8,0xF326,0xF1C3,0xF013,0xEDD8,0xEBA9,0xE9F9, + 0xE92A,0xE8E2,0xEA43,0xEC08,0xED81,0xEE50,0xF00A,0xF231, + 0xF502,0xF790,0xF920,0xF9BD,0xF9F1,0xFAAE,0xFC93,0xFEBF, + 0x0020,0x01D5,0x02D9,0x03D4,0x058A,0x081E,0x09FC,0x0B05, + 0x0B03,0x0AE9,0x0AB4,0x0A7D,0x09FD,0x0976,0x07F7,0x058C, + 0x032C,0x0180,0x0160,0x0117,0xFFEF,0xFE7B,0xFC9C,0xFB20, + 0xF962,0xF75E,0xF4A0,0xEF98,0xE77A,0xDD64,0xD28C,0xC5A0, + 0xBE9E,0xBE88,0xBE49,0xBE67,0xBEA9,0xBF1F,0xBE75,0xC7AB, + 0xD821,0xE135,0xE7B0,0xEF91,0xF954,0x03AD,0x0BF5,0x1043, + 0x1122,0x118A,0x13B0,0x1912,0x2153,0x2BD2,0x38BF,0x3EB4, + 0x3E9F,0x3EE3,0x3ED9,0x3EEA,0x3E84,0x3F0A,0x3F63,0x3E25, + 0x3EFC,0x3A4F,0x2F1D,0x2344,0x1884,0x109F,0x0D10,0x0C98, + 0x0C91,0x0ABB,0x0618,0xFF0A,0xF59A,0xEB67,0xE01F,0xD4F7, + 0xCC17,0xC653,0xC2F6,0xC18F,0xC21B,0xC444,0xC7F8,0xCCFB, + 0xD445,0xDE80,0xE92D,0xF22B,0xF79F,0xF9B6,0xFA85,0xFC13, + 0xFF28,0x034A,0x0854,0x0E13,0x145B,0x1AA3,0x2180,0x2892, + 0x2EA8,0x333B,0x3614,0x382A,0x3949,0x384B,0x3484,0x2DD3, + 0x251D,0x1C6E,0x1535,0x109E,0x0E7D,0x0CB3,0x0A2E,0x0639, + 0x00AC,0xFB97,0xF819,0xF52F,0xF1E7,0xEC4F,0xE47B,0xDE55, + 0xD888,0xD32B,0xCFEF,0xCEE9,0xCFE1,0xD2F1,0xD687,0xDADB, + 0xDFCE,0xE3FD,0xE7AD,0xEB63,0xEFA5,0xF45D,0xF8A1,0xFC9B, + 0xFEBB,0x0009,0x020B,0x0416,0x0736,0x0CDC,0x13A3,0x19A3, + 0x1E25,0x20C0,0x2189,0x21CE,0x2137,0x205A,0x1F56,0x1D0A, + 0x198A,0x15B0,0x1143,0x0D5E,0x09D4,0x0668,0x0384,0x01A0, + 0x0010,0x001F,0xFDDD,0xF970,0xF50E,0xF007,0xEBC1,0xE8D9, + 0xE781,0xE681,0xE504,0xE32F,0xE1CC,0xE205,0xE3B1,0xE734, + 0xEB7E,0xEE82,0xF18E,0xF4D4,0xF743,0xF8E3,0xFA2A,0xFBE5, + 0xFD9B,0xFFE5,0x02CF,0x0621,0x0900,0x0B28,0x0D39,0x0F06, + 0x114F,0x1398,0x15A2,0x1759,0x1825,0x178A,0x1594,0x12AC, + 0x0FA4,0x0D51,0x0B40,0x09B5,0x08E7,0x078A,0x04B2,0x01B3, + 0xFF61,0xFD3E,0xFB69,0xF9A9,0xF82D,0xF695,0xF489,0xF179, + 0xEEBD,0xED03,0xEBC3,0xEB07,0xEB52,0xECAD,0xEE85,0xEFE1, + 0xF0F2,0xF22A,0xF416,0xF5CE,0xF77C,0xF9B5,0xFC13,0xFE3F, + 0xFF70,0x0058,0x00E4,0x01A4,0x0375,0x05C6,0x0723,0x0BE2, + 0x0D5B,0x0C38,0x0C9D,0x0C9B,0x0CA0,0x0C80,0x0CC6,0x0D15, + 0x0C5D,0x0A57,0x080D,0x05FA,0x03E5,0x02DF,0x01D4,0x012B, + 0x0086,0xFF39,0xFD51,0xFBB0,0xF9AB,0xF76F,0xF405,0xEDB0, + 0xE509,0xDBF6,0xD277,0xC5B7,0xBF68,0xBF92,0xBF2A,0xBF50, + 0xBF76,0xBF8C,0xC08D,0xCF00,0xDD1C,0xE3D7,0xEA67,0xF343, + 0xFE5E,0x0820,0x0F2B,0x12E5,0x1407,0x146F,0x16DE,0x1C99, + 0x254C,0x3060,0x3C11,0x3F41,0x3ED9,0x3F1A,0x3F3F,0x3F1E, + 0x3F0C,0x3F1E,0x3F44,0x3FC1,0x40B3,0x3ACB,0x2EB7,0x2224, + 0x16C3,0x0EFE,0x0C1A,0x0C73,0x0D64,0x0B6C,0x0557,0xFCCF, + 0xF2D7,0xE81D,0xDD19,0xD291,0xCA9E,0xC4CA,0xC16F,0xC0B4, + 0xC326,0xC63F,0xC8B5,0xCD12,0xD56D,0xDFE0,0xEADB,0xF3D1, + 0xF8F0,0xFABC,0xFADA,0xFAF8,0xFCFC,0x01A8,0x0834,0x0F0F, + 0x1570,0x1B49,0x20A3,0x2777,0x2DA6,0x3202,0x3565,0x3756, + 0x36AA,0x3391,0x2FDC,0x29B9,0x2125,0x1895,0x11A9,0x0CDB, + 0x0A5C,0x08A3,0x0644,0x0204,0xFCA2,0xF7AB,0xF3E1,0xF020, + 0xEC64,0xE78C,0xE145,0xDB08,0xD5A1,0xD155,0xCE6C,0xCD47, + 0xCDF7,0xCFFE,0xD44A,0xD9B6,0xDF88,0xE471,0xE80F,0xEA9E, + 0xED55,0xF17E,0xF593,0xF92E,0xFC4F,0xFE73,0xFFE5,0x021D, + 0x05A0,0x0A9A,0x1019,0x1540,0x19F3,0x1CD0,0x1DF5,0x1D87, + 0x1CD0,0x1B45,0x18B1,0x1577,0x129B,0x1040,0x0D43,0x0971, + 0x0557,0x015D,0xFE31,0xFC77,0xFB63,0xFA20,0xF845,0xF45E, + 0xEEE8,0xEA2C,0xE691,0xE47C,0xE158,0xDF9B,0xDF09,0xDF5B, + 0xDFEA,0xE046,0xE180,0xE324,0xE585,0xEB20,0xEDCC,0xF12A, + 0xF575,0xF6C0,0xF7F5,0xF923,0xFAF7,0xFDC5,0x009F,0x03E4, + 0x071B,0x09A0,0x0BBD,0x0DBC,0x0FEB,0x11F1,0x137E,0x14BE, + 0x1536,0x14D6,0x12FD,0x1089,0x0DF2,0x0BED,0x0A0C,0x0780, + 0x0531,0x03D8,0x02C7,0x0152,0xFF08,0xFC03,0xF9F1,0xF81E, + 0xF602,0xF466,0xF304,0xF196,0xEF15,0xECB3,0xEBC4,0xEC21, + 0xECE3,0xED9A,0xEE38,0xEF95,0xF18C,0xF33C,0xF518,0xF738, + 0xF8AB,0xFA03,0xFB3D,0xFC82,0xFEA7,0x00F7,0x0325,0x043C, + 0x0544,0x06EA,0x08F1,0x0A09,0x0B59,0x0B6C,0x0B9C,0x0C08, + 0x0B68,0x0AEC,0x0A75,0x0985,0x08B5,0x07FA,0x06A0,0x05BC, + 0x0487,0x0363,0x0219,0x0067,0xFE7A,0xFD02,0xFC4A,0xFB90, + 0xF998,0xF7AB,0xF4CB,0xEEC3,0xE69E,0xDE55,0xD631,0xCCED, + 0xC2A3,0xBF98,0xBFD3,0xBFF2,0xC048,0xC06A,0xCD6E,0xDC77, + 0xE620,0xEC8D,0xF1D7,0xF8F7,0x015C,0x08A9,0x0D96,0x0F6A, + 0x112C,0x140C,0x163C,0x1AFE,0x221F,0x2A88,0x3505,0x3E92, + 0x3FE6,0x3FC4,0x4003,0x4027,0x4056,0x406C,0x3FD3,0x3A9E, + 0x33A6,0x2B72,0x224F,0x1948,0x121A,0x0D35,0x0B15,0x0A42, + 0x08FE,0x0641,0x018B,0xFBB6,0xF48C,0xEBE4,0xE31E,0xDB2E, + 0xD57B,0xD169,0xCF95,0xCF73,0xD137,0xD3ED,0xD7C4,0xDCBA, + 0xE3C8,0xEBA6,0xF3A1,0xF93A,0xFC39,0xFD93,0xFE87,0x0061, + 0x0318,0x0669,0x0A9C,0x0F58,0x1407,0x1927,0x1E56,0x2373, + 0x2801,0x2ABD,0x2C9F,0x2DFE,0x2DC8,0x2B4C,0x26B6,0x2061, + 0x1A4D,0x14E0,0x1078,0x0CFA,0x0A4D,0x074B,0x039B,0x0032, + 0xFE0D,0xFBCB,0xF855,0xF4F2,0xF14E,0xEB83,0xE6F3,0xE445, + 0xDF1F,0xDC8C,0xDB26,0xDA6B,0xDAF6,0xDD6F,0xE128,0xE512, + 0xE888,0xEB9B,0xEF02,0xF1F4,0xF4F2,0xF7DA,0xFA97,0xFD74, + 0xFF2D,0x0091,0x0228,0x0566,0x0949,0x0D2A,0x10B0,0x13B3, + 0x163C,0x1863,0x1932,0x1947,0x1882,0x171C,0x14BF,0x1182, + 0x0E67,0x0BFC,0x09E6,0x0736,0x03D8,0x012B,0xFEDE,0xFDD0, + 0xFCE1,0xFB4D,0xF936,0xF5F8,0xF1E9,0xEE3E,0xEC92,0xEB34, + 0xE97A,0xE777,0xE5C9,0xE4DF,0xE55E,0xE73C,0xEA25,0xEC76, + 0xEED2,0xF137,0xF36C,0xF7AC,0xF9A6,0xFB1B,0xFCE3,0xFE2B, + 0xFEE4,0x00B8,0x0337,0x05C5,0x07E7,0x099D,0x0AAB,0x0BB6, + 0x0D79,0x1018,0x1260,0x12C6,0x11BA,0x0F00,0x0BCF,0x0A94, + 0x0B1C,0x0A2C,0x0873,0x06AD,0x03E7,0x013D,0xFF64,0xFE6D, + 0xFD9E,0xFCFE,0xFC2F,0xF9EC,0xF78A,0xF5AA,0xF456,0xF276, + 0xF0F3,0xEFA5,0xEF37,0xEFAA,0xF045,0xF134,0xF246,0xF279, + 0xF205,0xF354,0xF675,0xF91A,0xFBC2,0xFD4B,0xFDD7,0xFD9F, + 0xFE0A,0xFF97,0x00CD,0x01E8,0x02CC,0x03D2,0x0581,0x05E6, + 0x072B,0x07D9,0x0841,0x0832,0x07F9,0x0777,0x0766,0x06AC, + 0x055B,0x0368,0x020B,0x014C,0x0079,0xFF38,0xFE49,0xFD7E, + 0xFC8F,0xFB0B,0xF96F,0xF83F,0xF767,0xF5C9,0xF3B7,0xF11E, + 0xEE27,0xEAE4,0xE740,0xE36F,0xE0A3,0xDF34,0xE016,0xE3AB, + 0xE8F3,0xEDF5,0xF173,0xF417,0xF62F,0xF84D,0xFAF0,0xFE89, + 0x015A,0x02BE,0x02FF,0x039E,0x0430,0x0501,0x06A0,0x0991, + 0x0D7C,0x11B7,0x1600,0x18CB,0x1940,0x188F,0x1750,0x1637, + 0x14EA,0x13C2,0x11DB,0x0E6C,0x0BC0,0x0975,0x03F0,0x02E5, + 0x0219,0x01CB,0x00FE,0xFFE2,0xFE45,0xFCC4,0xF9C0,0xF70C, + 0xF4B1,0xF2BF,0xF156,0xEF68,0xEDFC,0xEDB0,0xEF1D,0xEFC0, + 0xF074,0xF10B,0xF2C3,0xF5AA,0xF90C,0xFB92,0xFD03,0xFE25, + 0xFE21,0xFE4D,0xFF29,0x01BE,0x044C,0x060D,0x0709,0x07CE, + 0x092B,0x0B2E,0x0D52,0x0EE8,0x0F7A,0x0F96,0x0FB6,0x0ED8, + 0x0DEE,0x0CD6,0x0AF4,0x0823,0x05EC,0x04BE,0x0423,0x03F8, + 0x0361,0x01C4,0xFF6C,0xFDB5,0xFCE0,0xFBBA,0xFB12,0xFAB7, + 0xF95F,0xF6E0,0xF4B7,0xF378,0xF204,0xF08C,0xF0FD,0xF1E0, + 0xF399,0xF566,0xF6BC,0xF7A2,0xF830,0xF895,0xF8D9,0xF91C, + 0xFA6B,0xFB3B,0xFBC0,0xFB8D,0xFB30,0xFABE,0xFAB7,0xF9EF, + 0xF91E,0xF93F,0xF927,0xF86E,0xF6C7,0xF5CE,0xF4F9,0xF4C9, + 0xF598,0xF545,0xF441,0xF35A,0xF2A2,0xF20B,0xF17C,0xF072, + 0xEFD7,0xEF47,0xEF28,0xEEC7,0xEEBA,0xEE6A,0xED41,0xEC2F, + 0xED05,0xEC17,0xEAE3,0xEA96,0xEA84,0xEA10,0xE97D,0xE8F5, + 0xE8A9,0xE8B7,0xE8C7,0xE93A,0xE9A1,0xE9B3,0xE9FC,0xEA91, + 0xEA52,0xE9E7,0xE9AB,0xE98C,0xE9DE,0xEA4A,0xEA6E,0xEA64, + 0xEA97,0xEACB,0xEAB2,0xEA8D,0xEA9E,0xEB06,0xEB3F,0xEB43, + 0xEB7E,0xEB96,0xEBDD,0xEBD6,0xEBD7,0xEC0D,0xEC39,0xEC1F, + 0xEBE1,0xEC03,0xEC69,0xEC89,0xECD7,0xED54,0xED82,0xEDCE, + 0xEE0D,0xEE3B,0xEE7B,0xEEE3,0xEF33,0xEF86,0xEFE1,0xF02A, + 0xF0AD,0xF119,0xF1AB,0xF257,0xF287,0xF301,0xF34D,0xF3B3, + 0xF41F,0xF4E0,0xF546,0xF5CE,0xF639,0xF64F,0xF656,0xF6DA, + 0xF7A8,0xF803,0xF859,0xF983,0xF9E0,0xF847,0xFA83,0xFB4E, + 0xFA6C,0xFB3A,0xFB8B,0xFB79,0xFC19,0xFC46,0xFC85,0xFCEA, + 0xFD55,0xFDAE,0xFDD6,0xFE3A,0xFE6E,0xFEBA,0xFEED,0xFF25, + 0xFF88,0xFFFF,0x0054,0x00B6,0x0142,0x016D,0x01A8,0x01FB, + 0x0280,0x02CF,0x034A,0x03B8,0x0488,0x04EF,0x04BD,0x050B, + 0x05FB,0x063F,0x0689,0x0692,0x06DD,0x070F,0x0702,0x0726, + 0x076A,0x07DA,0x07F2,0x0861,0x088B,0x08C8,0x091A,0x0963, + 0x098B,0x090B,0x08F3,0x08FB,0x0923,0x0957,0x096B,0x098A, + 0x0A24,0x0A9C,0x0BFE,0x0D31,0x0CAD,0x0CB9,0x0CB2,0x0C58, + 0x0C53,0x0C5A,0x0C76,0x0C86,0x0CBD,0x0D22,0x0CD5,0x0CBA, + 0x0CDA,0x0D1B,0x0D2C,0x0D72,0x0D77,0x0CC8,0x0C52,0x0D89, + 0x0DF5,0x0D5C,0x0D24,0x0D78,0x0D77,0x0D18,0x0D34,0x0D65, + 0x0D75,0x0D2B,0x0D72,0x0D78,0x0D44,0x0CED,0x0D21,0x0D0A, + 0x0CF8,0x0D04,0x0CC3,0x0CB5,0x0CAF,0x0CB7,0x0CCD,0x0CBE, + 0x0BB8,0x0C27,0x0C94,0x0CE3,0x0C98,0x0C37,0x0C17,0x0C6E, + 0x0CA5,0x0C4C,0x0C36,0x0B83,0x0B6A,0x0BB3,0x0AA8,0x0A1A, + 0x0A57,0x0AA3,0x0ADB,0x0AB5,0x0AB3,0x0B32,0x0AE5,0x0A99, + 0x0A7D,0x0A6C,0x0A69,0x0A87,0x0A77,0x0A74,0x0A24,0x0A46, + 0x0A4A,0x0A7F,0x0A46,0x0A42,0x0A75,0x09FB,0x0A1E,0x0A1E, + 0x0A68,0x0A85,0x0A53,0x0A20,0x0997,0x095C,0x091D,0x0946, + 0x0944,0x08F5,0x0903,0x08B6,0x08D9,0x0897,0x08E5,0x08C7, + 0x083B,0x0832,0x0808,0x081F,0x081A,0x0823,0x07C2,0x0751, + 0x0774,0x07A7,0x0851,0x080C,0x0821,0x0802,0x0818,0x07E9, + 0x07F4,0x086B,0x082E,0x07A4,0x0978,0x0808,0x0742,0x0811, + 0x07FC,0x080E,0x0836,0x0838,0x083A,0x0870,0x07F2,0x0832, + 0x07D4,0x07E3,0x076F,0x0780,0x0724,0x072E,0x0781,0x0711, + 0x06F9,0x06B7,0x0704,0x0718,0x0710,0x06D8,0x06E2,0x06FA, + 0x06BF,0x06FA,0x075C,0x0768,0x070A,0x06C2,0x0676,0x06AA, + 0x063E,0x0626,0x0622,0x0632,0x05E9,0x062F,0x0623,0x0623, + 0x0679,0x060A,0x05E1,0x05BF,0x0588,0x059E,0x05B6,0x057A, + 0x058A,0x05CA,0x05F2,0x0600,0x05D9,0x05BA,0x059B,0x055A, + 0x0589,0x05B4,0x059E,0x04C8,0x033E,0x02F7,0x0383,0x0336, + 0x0377,0x0379,0x0375,0x0391,0x0385,0x0389,0x0331,0x02A5, + 0x02C2,0x02D6,0x0349,0x039B,0x0392,0x0383,0x037E,0x02B3, + 0x02D3,0x0324,0x0355,0x0340,0x02E8,0x02EF,0x0355,0x0374, + 0x03AD,0x034C,0x034E,0x02CB,0x0329,0x0385,0x0397,0x036C, + 0x02DC,0x02B3,0x030C,0x0345,0x0349,0x03B0,0x0357,0x0352, + 0x0371,0x0250,0x0259,0x0280,0x02A4,0x02D9,0x02FD,0x02A8, + 0x02E2,0x02D0,0x033F,0x0396,0x0371,0x03BF,0x04B2,0x04EC, + 0x0495,0x0450,0x046A,0x048D,0x049E,0x040F,0x03C3,0x0368, + 0x0363,0x0361,0x0326,0x033C,0x02E5,0x02CD,0x02F2,0x02D9, + 0x0275,0x0243,0x01FB,0x01B7,0x01C1,0x01C5,0x01B4,0x01E6, + 0x01E9,0x01E7,0x01F7,0x01C5,0x01CF,0x01B9,0x0180,0x0177, + 0x019C,0x0156,0x0123,0x011F,0x014F,0x012B,0x00DE,0x00A7, + 0x00CC,0x0094,0x008F,0xFF5A,0xFF1F,0xFECB,0xFF55,0xFFB5, + 0xFF41,0xFF33,0xFED7,0xFECF,0xFEE6,0xFF16,0xFF01,0xFF50, + 0xFF41,0xFF3B,0xFFB9,0xFFB5,0xFFCF,0xFF7B,0xFFAC,0xFFC1, + 0xFFDD,0xFFFE,0x0034,0x0047,0x0048,0x002E,0x0082,0x00A8, + 0x00D3,0x01F4,0x0300,0x03E3,0x04B1,0x05D8,0x074A,0x08D4, + 0x09A8,0x09BC,0x09FC,0x0A86,0x0B03,0x0B40,0x0B50,0x0BCB, + 0x0BA0,0x0B66,0x0C63,0x0E19,0x0D38,0x0D23,0x0D21,0x0D16, + 0x0D44,0x0DBC,0x0DD7,0x0DFC,0x0E8D,0x0EC1,0x0F77,0x0FFE, + 0x105E,0x1131,0x11C4,0x12A1,0x134E,0x12C0,0x1263,0x13A5, + 0x1497,0x13D1,0x135C,0x1404,0x13F7,0x1428,0x148B,0x14C4, + 0x1544,0x1533,0x1498,0x1465,0x14E6,0x160C,0x174F,0x1723, + 0x16CA,0x1670,0x15D7,0x1578,0x14C0,0x14B7,0x148A,0x12AB, + 0x0FBA,0x0E9B,0x0DE4,0x0B8B,0x086F,0x05F7,0x0457,0x0380, + 0x0317,0x02FB,0x03E2,0x0520,0x063F,0x0715,0x079B,0x09B5, + 0x0D7F,0x10F9,0x13D6,0x15EA,0x17FC,0x19A5,0x19D6,0x19B6, + 0x19DE,0x1A4B,0x1A1C,0x19CF,0x19BD,0x194D,0x18A4,0x16FF, + 0x1575,0x145B,0x13E6,0x13AB,0x1354,0x1327,0x1353,0x1361, + 0x11FE,0x107B,0x0EBE,0x0CE3,0x0BB7,0x09E7,0x0802,0x05C2, + 0x03C1,0x0121,0xFE8A,0xFC1A,0xFA2C,0xF847,0xF5F2,0xF398, + 0xF2FA,0xF32F,0xF325,0xF34F,0xF3F2,0xF464,0xF4A6,0xF437, + 0xF4F3,0xF680,0xF850,0xF94C,0xF9C8,0xFA4F,0xFAAA,0xFA71, + 0xFA19,0xFA80,0xFAD2,0xFA57,0xFC24,0xFB95,0xFBC7,0xFD20, + 0xFC71,0xFC66,0xFD61,0xFDC8,0xFDE9,0xFEB7,0xFFB2,0x00DE, + 0x0085,0x0032,0xFF28,0xFE7D,0xFCF5,0xFBAE,0xFA94,0xFA22, + 0xF969,0xF765,0xF5D0,0xF466,0xF289,0xF0C4,0xEFA9,0xEEDA, + 0xEE7C,0xEE22,0xEE20,0xED71,0xECC8,0xEC17,0xEB8B,0xEB97, + 0xEBF4,0xEC97,0xECB6,0xECAB,0xECCF,0xEC47,0xEBE7,0xEBB4, + 0xEBC1,0xEC2F,0xECB5,0xED6C,0xEDD8,0xEE04,0xEE6E,0xEF48, + 0xEF94,0xF0B6,0xF1F8,0xF2D4,0xF342,0xF37A,0xF471,0xF5BF, + 0xF73B,0xF6A1,0xF595,0xF4F9,0xF31D,0xF272,0xF36A,0xF3B5, + 0xF395,0xF2EF,0xF1B1,0xF0D3,0xF0E5,0xF0C0,0xF069,0xF000, + 0xEFF9,0xF009,0xEFB9,0xEF43,0xEEF9,0xEF1F,0xEF70,0xEE9E, + 0xEE30,0xEE4C,0xEE54,0xEE2C,0xEE1F,0xED87,0xED3C,0xED8D, + 0xEDDC,0xEDBF,0xED6C,0xEDE8,0xEE73,0xEEF9,0xEEB3,0xEF0F, + 0xF0AD,0xF222,0xF23C,0xF275,0xF2E8,0xF3D0,0xF43F,0xF52C, + 0xF71E,0xF6FA,0xF6A0,0xF5F2,0xF60F,0xF635,0xF64B,0xF681, + 0xF6AA,0xF6FD,0xF757,0xF725,0xF7AB,0xF81C,0xF8B2,0xF87B, + 0xF7E9,0xF7C1,0xF785,0xF789,0xF7BD,0xF737,0xF733,0xF701, + 0xF631,0xF57A,0xF530,0xF4D9,0xF402,0xF397,0xF3AF,0xF3DC, + 0xF368,0xF31E,0xF2C7,0xF2C5,0xF296,0xF217,0xF2CC,0xF388, + 0xF3F3,0xF409,0xF43E,0xF466,0xF45D,0xF4A3,0xF57E,0xF6A9, + 0xF6FF,0xF6E9,0xF68D,0xF693,0xF727,0xF793,0xF796,0xF67E, + 0xF3E0,0xF031,0xEC71,0xE9A2,0xE62F,0xE11A,0xD90D,0xCD13, + 0xC1C3,0xBFDD,0xBFF5,0xBFEE,0xBFC6,0xBFC5,0xBFE1,0xBFB3, + 0xC30D,0xCAC9,0xD515,0xE3FE,0xF12A,0xFDC2,0x0BAF,0x1619, + 0x1FCA,0x2814,0x2E08,0x31FC,0x3418,0x3451,0x3423,0x3485, + 0x351C,0x3550,0x33D4,0x2FD5,0x2B45,0x2804,0x2686,0x26EB, + 0x28C9,0x2B0E,0x2C08,0x2AD0,0x27BA,0x2451,0x2164,0x1EA3, + 0x1A3A,0x149B,0x0EA3,0x07A3,0xFFBE,0xF750,0xEF2D,0xE723, + 0xDE1F,0xD576,0xCF20,0xCC35,0xCB41,0xCB76,0xCB78,0xCBF7, + 0xCD0A,0xCE7F,0xD223,0xD7DA,0xDE8C,0xE4F5,0xEA31,0xEEB6, + 0xF277,0xF5CF,0xF905,0xFC27,0xFF2C,0x00C2,0x0249,0x042F, + 0x06F1,0x0A2E,0x0EC4,0x1129,0x11A8,0x12DC,0x1548,0x1821, + 0x1BD2,0x1F73,0x21EF,0x2252,0x21D3,0x209A,0x1FC0,0x1E63, + 0x1C47,0x194B,0x156D,0x103D,0x0AAF,0x049A,0xFFBA,0xFBA2, + 0xF69E,0xF0AE,0xEB9B,0xE7FB,0xE59F,0xE456,0xE384,0xE2A9, + 0xE17B,0xE0D7,0xE0C0,0xE109,0xE201,0xE3F3,0xE522,0xE57E, + 0xE5DA,0xE6BE,0xE83B,0xE95F,0xEAD3,0xEC7E,0xEE4C,0xEF2E, + 0xF123,0xF480,0xF78D,0xFB46,0xFEEB,0x01CC,0x044A,0x0738, + 0x0A70,0x0DF7,0x1088,0x121D,0x1323,0x13B3,0x134B,0x138D, + 0x1334,0x125D,0x10C4,0x0E2A,0x0BAA,0x09A5,0x07F9,0x05D7, + 0x02C9,0xFFEB,0xFD74,0xFBBB,0xFA40,0xF920,0xF841,0xF6F5, + 0xF521,0xF31F,0xF1A9,0xF0F4,0xF0A6,0xEFAB,0xEE0A,0xEC9D, + 0xEBB9,0xEB86,0xEB2B,0xEAB6,0xEB2B,0xEB87,0xEB8E,0xEBC6, + 0xECB0,0xEEF6,0xF164,0xF3F3,0xF5B1,0xF77A,0xF9AE,0xFC2A, + 0xFE86,0x00EA,0x0394,0x058D,0x06CD,0x07E7,0x08BE,0x09E6, + 0x0B54,0x0BCD,0x0B8C,0x0B55,0x0B83,0x0B27,0x0AB8,0x0A0B, + 0x0910,0x07AC,0x0603,0x05F1,0x0761,0x0520,0x04CF,0x0375, + 0x016E,0xFFD2,0xFEAC,0xFD91,0xFCE9,0xFC1C,0xFA55,0xF866, + 0xF6A2,0xF588,0xF4DB,0xF455,0xF34A,0xF2A4,0xF1F6,0xF1AA, + 0xF1B8,0xF22A,0xF32C,0xF42B,0xF4AA,0xF576,0xF647,0xF80A, + 0xFA10,0xFB91,0xFCAF,0xFD4E,0xFE25,0xFEDA,0xFFDD,0x01AA, + 0x038C,0x049B,0x0404,0x01BC,0xFE80,0xFA91,0xF6BF,0xF330, + 0xEE82,0xE6FA,0xDBD4,0xCC99,0xC0CA,0xBFB3,0xBFA8,0xBF77, + 0xBFA6,0xBF83,0xBFBD,0xBFAE,0xC414,0xCDB9,0xD9BA,0xE904, + 0xF9E7,0x0AF4,0x1A3E,0x269B,0x2FDB,0x394D,0x3DED,0x3E64, + 0x3E81,0x3EA1,0x3ED1,0x3E93,0x3EC7,0x3EA3,0x3EBA,0x3E93, + 0x3A40,0x375A,0x36F1,0x38AF,0x3AF2,0x3DC6,0x3E84,0x3CBB, + 0x3A68,0x373B,0x331B,0x2E39,0x2927,0x22D5,0x1B6D,0x131B, + 0x0928,0xFE6B,0xF2F3,0xE7DC,0xDDE5,0xD5C7,0xCFEA,0xCBE6, + 0xC9DB,0xC8E8,0xC8DB,0xC989,0xCB9B,0xCEF8,0xD39A,0xDB2C, + 0xE174,0xE787,0xEE1B,0xF317,0xF6FF,0xFAF2,0xFEB5,0x0192, + 0x03C4,0x0658,0x09F7,0x0DDE,0x1030,0x1246,0x1504,0x1736, + 0x1968,0x1B85,0x1F24,0x2457,0x294C,0x2C63,0x2E04,0x2E6C, + 0x2E64,0x2D51,0x2BC9,0x2A26,0x27FB,0x2443,0x1E77,0x188A, + 0x1253,0x0BFB,0x04A0,0xFDE8,0xF889,0xF354,0xEE85,0xEA8F, + 0xE7CF,0xE603,0xE40D,0xE18F,0xDFE7,0xE05F,0xE15A,0xE269, + 0xE41A,0xE550,0xE5F5,0xE623,0xE643,0xE6C0,0xE820,0xEA08, + 0xEB60,0xECB9,0xEDF5,0xF09A,0xF3A6,0xF6BD,0xF9DE,0xFD10, + 0x0061,0x03DA,0x07BA,0x0C5C,0x1161,0x15A2,0x17DE,0x1949, + 0x1A07,0x1B13,0x1C81,0x1CEC,0x1AB8,0x1AE6,0x19CE,0x162B, + 0x12EF,0x0FE8,0x0D16,0x0A66,0x07BB,0x04A6,0x022E,0xFFF1, + 0xFD93,0xFB59,0xF939,0xF787,0xF5C4,0xF425,0xF2B1,0xF16F, + 0xF083,0xEF5A,0xEDB9,0xEC0E,0xEAA4,0xE9C2,0xE93B,0xE933, + 0xE95C,0xE9F4,0xEA81,0xEB0C,0xEC5B,0xEDD9,0xEFF1,0xF23F, + 0xF4EC,0xF730,0xFA44,0xFD66,0x0074,0x02D2,0x04FC,0x06DC, + 0x08A4,0x09BE,0x0AF2,0x0C16,0x0D8A,0x0EAA,0x0E4D,0x0D8D, + 0x0D11,0x0C19,0x0B47,0x0AB8,0x0A71,0x0AA1,0x0A20,0x08A7, + 0x071F,0x06D4,0x070E,0x05AB,0x0471,0x0356,0x01FC,0x0009, + 0xFE27,0xFC50,0xFAD3,0xF95E,0xF771,0xF590,0xF4D4,0xF4C8, + 0xF3A4,0xF29F,0xF1F9,0xF240,0xF22A,0xF246,0xF3A8,0xF4F1, + 0xF566,0xF629,0xF816,0xF930,0xFA1E,0xFB5E,0xFCC8,0xFE65, + 0xFFFA,0x0142,0x024B,0x0355,0x03CB,0x039B,0x01CB,0xFE5D, + 0xFAB7,0xF735,0xF351,0xEDA2,0xE51A,0xD98A,0xC9F4,0xBE8F, + 0xBEE8,0xBF19,0xBF15,0xBF08,0xBF1A,0xBF12,0xC053,0xC6A5, + 0xD0ED,0xDF36,0xEFBE,0x005D,0x0F4C,0x1B82,0x27A5,0x3294, + 0x3A8D,0x3DC9,0x3DB8,0x3DF5,0x3E10,0x3DF5,0x3E09,0x3DF8, + 0x3DEC,0x3E41,0x3AFB,0x358A,0x3386,0x33D8,0x367A,0x391C, + 0x3AD0,0x3A02,0x37CA,0x34B2,0x31C9,0x2E89,0x29FF,0x23EC, + 0x1C98,0x14A5,0x0BFD,0x02A2,0xF8D6,0xEE47,0xE34E,0xD943, + 0xD141,0xCBBF,0xC8CF,0xC7C0,0xC776,0xC76B,0xC88E,0xCB17, + 0xCEC4,0xD3F8,0xDA84,0xE202,0xE8B2,0xEE0A,0xF233,0xF675, + 0xFA88,0xFEB8,0x00D4,0x0306,0x04FA,0x076D,0x0A37,0x0D09, + 0x1003,0x11CE,0x130C,0x1730,0x1942,0x1BD6,0x214B,0x2533, + 0x2890,0x2A6D,0x2AE7,0x2A08,0x2969,0x282B,0x25FF,0x22CB, + 0x1EA3,0x193E,0x130F,0x0C9D,0x0616,0x0042,0xF9EC,0xF40B, + 0xEE08,0xE970,0xE648,0xE416,0xE1F5,0xE0C0,0xDFBA,0xDF05, + 0xDF01,0xDF8D,0xE106,0xE256,0xE38E,0xE429,0xE515,0xE598, + 0xE69A,0xE72C,0xE859,0xEA53,0xEC6F,0xEDBF,0xEFA1,0xF236, + 0xF575,0xF917,0xFC6C,0x001A,0x040C,0x07B8,0x0B6B,0x0F4B, + 0x1339,0x15BF,0x1756,0x184E,0x194B,0x1A09,0x1A3C,0x1966, + 0x1796,0x1555,0x1224,0x0DC0,0x0A2E,0x07D6,0x051C,0x0259, + 0xFF8D,0xFD8C,0xFBDA,0xF9C6,0xF7A9,0xF58C,0xF427,0xF2EE, + 0xF1EF,0xF0FF,0xEFED,0xEF2B,0xEDD1,0xECD5,0xEAEE,0xEA73, + 0xEB1F,0xEA8A,0xE9D3,0xE9CA,0xEA9B,0xEB60,0xECA1,0xEE23, + 0xEF7D,0xF206,0xF466,0xF7AD,0xFAF7,0xFDA9,0xFFDF,0x0264, + 0x048A,0x06E5,0x0934,0x0B71,0x0D82,0x0E6F,0x0FA5,0x1112, + 0x0FF9,0x0F3F,0x0EDF,0x0E88,0x0E84,0x0EB8,0x0E5D,0x0D3B, + 0x0C13,0x0BF6,0x0BE2,0x0A4C,0x092F,0x0898,0x07E2,0x0655, + 0x04CB,0x02FE,0x0197,0xFFF1,0xFE2F,0xFC61,0xFAEC,0xFA0D, + 0xF89A,0xF740,0xF5E9,0xF50C,0xF4F7,0xF4E1,0xF456,0xF465, + 0xF512,0xF5CD,0xF690,0xF7BA,0xF8F3,0xFA8B,0xFBF2,0xFD42, + 0xFEB8,0x003B,0x01BA,0x02DD,0x03AB,0x04AD,0x060E,0x0690, + 0x06F3,0x05D5,0x035F,0xFF97,0xFBE6,0xF7B2,0xF398,0xED87, + 0xE3E3,0xD656,0xC726,0xBFD8,0xC03B,0xBFE0,0xBFF0,0xBFF8, + 0xC019,0xBFF5,0xC19B,0xC90C,0xD400,0xE2C0,0xF37D,0x03F2, + 0x13A2,0x212B,0x2D2B,0x3529,0x3BFB,0x3FFD,0x3F72,0x3F9E, + 0x3FB5,0x3FD2,0x3F84,0x3F89,0x3F83,0x3F8B,0x3BE1,0x36FF, + 0x34F1,0x3558,0x381B,0x3B74,0x3D2B,0x3BC6,0x38BE,0x3548, + 0x31C7,0x2DC2,0x29BD,0x2466,0x1D2A,0x1485,0x0ADB,0x0150, + 0xF6FA,0xEC7A,0xE256,0xD883,0xD047,0xCB3E,0xC92B,0xC91A, + 0xC9DB,0xCAB5,0xCABD,0xCB93,0xCF0C,0xD574,0xDCE9,0xE516, + 0xEC5B,0xF12C,0xF455,0xF70F,0xFA8C,0xFE2B,0x01C0,0x04AB, + 0x070E,0x0918,0x0B67,0x0DC1,0x106B,0x1367,0x15B0,0x180B, + 0x1ACB,0x2070,0x2529,0x28E0,0x2C5E,0x2E16,0x2DC4,0x2B90, + 0x2945,0x27EB,0x2631,0x23B2,0x2035,0x1B09,0x1459,0x0C2A, + 0x04EC,0xFEC8,0xF981,0xF4A1,0xEF65,0xEBA2,0xE961,0xE66B, + 0xE359,0xE11D,0xE05E,0xDFBB,0xDFE1,0xE087,0xE1B1,0xE32A, + 0xE400,0xE4C4,0xE52D,0xE51F,0xE5BD,0xE67D,0xE810,0xEA34, + 0xECA4,0xEEA3,0xF03E,0xF231,0xF56A,0xF94C,0xFBEB,0xFF4B, + 0x0462,0x08AE,0x0D25,0x1115,0x1459,0x1695,0x17CB,0x184F, + 0x1888,0x18F5,0x1910,0x189B,0x16D9,0x13D1,0x10BE,0x0D6F, + 0x0ACB,0x0808,0x05E6,0x0383,0x008D,0xFDE5,0xFB33,0xF938, + 0xF7BB,0xF646,0xF4F6,0xF325,0xF1AB,0xEFF5,0xEE7F,0xED86, + 0xECC8,0xEBB3,0xEA96,0xE963,0xE85E,0xE7FC,0xE7CE,0xE7ED, + 0xE897,0xE955,0xE974,0xEA7E,0xECAC,0xEF6F,0xF230,0xF481, + 0xF6DF,0xF947,0xFBFA,0xFEBD,0x01A1,0x043B,0x0665,0x0774, + 0x089A,0x09DD,0x0AEE,0x0B83,0x0C4C,0x0C01,0x0BAA,0x0B0B, + 0x0AE9,0x0B17,0x0A03,0x0953,0x0826,0x0767,0x061A,0x0536, + 0x04AA,0x0358,0x02EA,0x0260,0xFDDA,0xFC8A,0xFBC2,0xFAAB, + 0xF9BF,0xF890,0xF64B,0xF3EC,0xF205,0xF081,0xF06A,0xF09B, + 0xF095,0xEF32,0xEF17,0xEF2E,0xF029,0xF159,0xF2FD,0xF431, + 0xF514,0xF62C,0xF6F8,0xF8A5,0xFB3A,0xFE19,0xFFA6,0xFFCB, + 0xFFE6,0x0096,0x01BD,0x0378,0x0450,0x0373,0x009F,0xFBCE, + 0xF6C3,0xF2BF,0xEF56,0xE9E8,0xDFD2,0xD0DE,0xC332,0xBF91, + 0xBFCF,0xBF58,0xBF83,0xBFA5,0xBFB2,0xBFA1,0xC0F2,0xC9B9, + 0xD68B,0xE5E0,0xF6D5,0x0716,0x15A6,0x22A8,0x2D8F,0x36B9, + 0x3D2E,0x3F2A,0x3EC1,0x3DE2,0x3E37,0x3E68,0x3E82,0x3E70, + 0x3EDC,0x3BFA,0x366B,0x3263,0x3117,0x3312,0x36E0,0x3A06, + 0x3AAC,0x38A8,0x3584,0x3237,0x2FBC,0x2BF9,0x2680,0x212B, + 0x1A92,0x1174,0x07F6,0xFE6C,0xF458,0xE9EF,0xDFAA,0xD5E5, + 0xCEE1,0xCB48,0xC9A8,0xC954,0xC9B2,0xCA21,0xCADC,0xCCE0, + 0xD0F5,0xD7D9,0xDF86,0xE6E7,0xED0B,0xF15F,0xF606,0xF960, + 0xFB8B,0xFF61,0x02D0,0x04F8,0x06D6,0x08DC,0x0B3E,0x0E17, + 0x112F,0x145C,0x1777,0x19B4,0x1C7F,0x2069,0x249A,0x2929, + 0x2C19,0x2D51,0x2CA9,0x2AFF,0x2954,0x27A2,0x25A7,0x2272, + 0x1DA4,0x17A8,0x1146,0x0A29,0x03F7,0xFE2C,0xF817,0xF283, + 0xED46,0xE918,0xE6D0,0xE55F,0xE42F,0xE344,0xE1F1,0xE0B8, + 0xDFFE,0xE07A,0xE226,0xE3EA,0xE533,0xE5F5,0xE673,0xE6C8, + 0xE736,0xE804,0xE958,0xEB3F,0xECF9,0xEEFC,0xF165,0xF47A, + 0xF7FE,0xFBB1,0xFF16,0x02D0,0x0630,0x09E9,0x0DC3,0x12C7, + 0x1688,0x1972,0x1AA9,0x1AE1,0x1AC4,0x1AF5,0x1AB7,0x19E9, + 0x18CA,0x16E6,0x13E8,0x0E58,0x0C27,0x09F6,0x0687,0x04AD, + 0x02AF,0xFF85,0xFD05,0xFB15,0xF97A,0xF7EB,0xF672,0xF480, + 0xF297,0xF167,0xF01E,0xEF96,0xEE7C,0xED0C,0xEB9D,0xEA20, + 0xE939,0xE873,0xE83F,0xE94D,0xEA7A,0xEB74,0xEC38,0xED34, + 0xEF02,0xF1CD,0xF4E0,0xF77D,0xF9D6,0xFC24,0xFEB1,0x016D, + 0x03D4,0x06B1,0x094E,0x0A5C,0x0A5C,0x0AA1,0x0B7B,0x0CC9, + 0x0D8C,0x0D8A,0x0D35,0x0C6B,0x0B13,0x09D7,0x0978,0x094F, + 0x0886,0x0761,0x060A,0x053C,0x04DB,0x03AB,0x02B2,0x0161, + 0x009B,0x0084,0xFE0C,0xFC75,0xFB81,0xFA6B,0xF8E1,0xF640, + 0xF431,0xF2CE,0xF241,0xF25B,0xF1DB,0xF18C,0xF1EE,0xF1BD, + 0xF1D3,0xF29A,0xF3F8,0xF4F1,0xF5AC,0xF77B,0xF897,0xFA46, + 0xFC12,0xFD71,0xFE01,0xFECD,0xFFB4,0x008F,0x01AF,0x020F, + 0x00F5,0xFE5C,0xFA52,0xF5EE,0xF207,0xED5B,0xE64C,0xDADA, + 0xCBC6,0xC059,0xBEE6,0xBED8,0xBEF8,0xBE9F,0xBE4A,0xBF08, + 0xBF6C,0xC43F,0xCDDD,0xDB60,0xEBEA,0xFCC0,0x0C95,0x1A68, + 0x26A4,0x3075,0x3876,0x3D86,0x3DF4,0x3DCA,0x3E07,0x3DFB, + 0x3E00,0x3DFD,0x3DF9,0x3E32,0x3B84,0x363A,0x32E2,0x3239, + 0x34B6,0x3813,0x3A52,0x3A78,0x38C7,0x35CC,0x31BD,0x2DB7, + 0x2986,0x24E2,0x1F08,0x1748,0x0E69,0x0450,0xF9AE,0xEEC9, + 0xE41C,0xDA38,0xD28E,0xCC7A,0xC8DC,0xC783,0xC759,0xC75C, + 0xC80F,0xC99D,0xCC64,0xD121,0xD7AE,0xDF64,0xE690,0xECD6, + 0xF167,0xF496,0xF762,0xFAA3,0xFE3A,0x0084,0x02EC,0x058A, + 0x087C,0x0A43,0x0C0A,0x0E6F,0x10B6,0x12E8,0x1603,0x19A4, + 0x1E17,0x21DC,0x26DF,0x2805,0x27B1,0x28EE,0x27AF,0x2661, + 0x24CD,0x2230,0x1E75,0x199F,0x13AB,0x0DA3,0x073F,0x0124, + 0xF9FF,0xF41F,0xEF7B,0xEB77,0xE7E6,0xE51B,0xE357,0xE1DB, + 0xE0C1,0xDF56,0xDF14,0xDFBB,0xE192,0xE342,0xE459,0xE56B, + 0xE65A,0xE65F,0xE643,0xE7AE,0xE908,0xEAE0,0xECF5,0xEE50, + 0xF049,0xF2F9,0xF60C,0xF902,0xFC53,0x0080,0x0490,0x0827, + 0x0BB6,0x0F5F,0x12D9,0x1551,0x1791,0x19A1,0x1AB9,0x1B19, + 0x1AD3,0x19EE,0x1844,0x165A,0x1435,0x11A0,0x0EAC,0x0B90, + 0x087A,0x04FF,0xFFF3,0xFCD0,0xFBDF,0xFA98,0xF8B3,0xF6A0, + 0xF54F,0xF3D6,0xF2AA,0xF0FF,0xEF3E,0xEE60,0xED60,0xECB8, + 0xEB99,0xEAA8,0xEA26,0xEA03,0xE920,0xE817,0xE84E,0xEA9D, + 0xEC07,0xECAC,0xEE8D,0xF093,0xF2E1,0xF523,0xF7EE,0xFAAE, + 0xFDE8,0x00C8,0x0340,0x05B0,0x07B3,0x09AE,0x0B25,0x0BFB, + 0x0CAE,0x0DB1,0x0E85,0x0F06,0x0F13,0x0EE5,0x0D27,0x0C35, + 0x0B92,0x0B2D,0x0B28,0x0A96,0x09C2,0x0874,0x06EB,0x0587, + 0x04FF,0x049D,0x03CF,0x02A7,0x013E,0xFEDF,0xFCC6,0xFAB7, + 0xF93D,0xF846,0xF719,0xF578,0xF453,0xF36C,0xF381,0xF399, + 0xF2B2,0xF270,0xF2E4,0xF3C7,0xF554,0xF6AF,0xF87F,0xF9CD, + 0xFA6C,0xFAD0,0xFBE5,0xFD35,0xFF5A,0x00DE,0x0219,0x0334, + 0x0409,0x042F,0x042B,0x0448,0x0339,0x0083,0xFC89,0xF91D, + 0xF597,0xF118,0xE8CB,0xDD60,0xD022,0xC3DA,0xBFCF,0xC00F, + 0xBFFD,0xBFEA,0xC0C7,0xC44D,0xC7DC,0xCDF3,0xD6EC,0xE341, + 0xF1AD,0x0118,0x0F28,0x1B32,0x2599,0x2E82,0x352F,0x39AA, + 0x3CCD,0x3E44,0x3D9C,0x3D06,0x3F2B,0x3EA0,0x3D75,0x3A7D, + 0x3664,0x321F,0x2F86,0x2F8D,0x31CB,0x3497,0x3633,0x358D, + 0x33AE,0x30E0,0x2DA7,0x29F0,0x2614,0x219E,0x1BD3,0x1497, + 0x0C55,0x039A,0xFAB1,0xF0E5,0xE69F,0xDE28,0xD75D,0xD292, + 0xCFEC,0xCEF3,0xCEEB,0xCF15,0xCEB8,0xCF4E,0xD247,0xD7DF, + 0xDE3E,0xE4FE,0xEAEB,0xEFAB,0xF336,0xF63D,0xF8DF,0xFC0C, + 0xFF01,0x018D,0x02EC,0x0456,0x06F5,0x098A,0x0C0C,0x0DDA, + 0x0FBD,0x11FA,0x14F4,0x180A,0x1B8E,0x1F4F,0x22C7,0x253A, + 0x2840,0x27CE,0x25F9,0x23D8,0x21B3,0x1F58,0x1B4A,0x1640, + 0x10EE,0x0B5B,0x055F,0xFF7E,0xF9FF,0xF4B0,0xEFF5,0xEC33, + 0xE928,0xE6BC,0xE56A,0xE398,0xE22E,0xE1D0,0xE131,0xE13A, + 0xE2B8,0xE483,0xE578,0xE6AB,0xE712,0xE6C3,0xE6DC,0xE7AF, + 0xE931,0xEB55,0xEC35,0xEE32,0xF06B,0xF235,0xF4B6,0xF737, + 0xF9FE,0xFD01,0x007D,0x04C0,0x08F1,0x0B58,0x0EB2,0x11D8, + 0x1340,0x13A0,0x1426,0x14D4,0x157B,0x1556,0x1403,0x1202, + 0x0ECE,0x0B7D,0x08D5,0x0699,0x0403,0x0219,0xFF9F,0xFD2F, + 0xFB03,0xF905,0xF7DD,0xF6EE,0xF540,0xF3AC,0xF264,0xF158, + 0xF017,0xEF75,0xEEC6,0xED42,0xEBAF,0xEAAB,0xE9D1,0xE954, + 0xE8D4,0xE90B,0xE9CF,0xEA37,0xEAC2,0xEBFE,0xEDC6,0xF017, + 0xF268,0xF478,0xF70C,0xF9DD,0xFC51,0xFEDA,0x012B,0x031B, + 0x04FF,0x0660,0x076E,0x0838,0x095A,0x09FF,0x0A3E,0x09FD, + 0x0950,0x088E,0x0818,0x07C5,0x070E,0x05F9,0x055A,0x054F, + 0x0514,0x03CF,0x0364,0x02C3,0x017D,0xFFB4,0xFE81,0xFD97, + 0xFC54,0xFB85,0xFBEC,0xF87A,0xF734,0xF56B,0xF3E2,0xF341, + 0xF362,0xF361,0xF285,0xF1E3,0xF1E5,0xF24F,0xF257,0xF358, + 0xF484,0xF5F5,0xF758,0xF834,0xF9FC,0xFB74,0xFC86,0xFD2D, + 0xFE57,0xFFEA,0x0129,0x0272,0x0359,0x049B,0x0550,0x04ED, + 0x037C,0x0221,0x0116,0x00E3,0x0051,0xFE99,0xFA4D,0xF4BE, + 0xEE94,0xE912,0xE58D,0xE45C,0xE55C,0xE717,0xE89D,0xE991, + 0xEB75,0xEDA6,0xF105,0xF5B8,0xFB12,0x0107,0x0756,0x0C42, + 0x1025,0x133A,0x1501,0x155B,0x1531,0x1559,0x1689,0x17C3, + 0x179F,0x1648,0x1388,0x12C2,0x113D,0x0FE2,0x0F60,0x104D, + 0x11D2,0x1313,0x1414,0x147F,0x147F,0x1383,0x1165,0x0F6C, + 0x0E0C,0x0CE1,0x0BB6,0x0A1B,0x06FD,0x02D9,0xFEEC,0xFAA2, + 0xF5E3,0xF1CC,0xF057,0xEFCD,0xEF0D,0xEEB7,0xEE68,0xEE0B, + 0xEDF5,0xEE36,0xEFA1,0xF20A,0xF451,0xF6DE,0xF969,0xFB2C, + 0xFCF5,0xFD8B,0xFDF8,0xFEA4,0xFF04,0x00F8,0x027E,0x029D, + 0x0307,0x02F4,0x03A0,0x0473,0x0552,0x064C,0x076D,0x091D, + 0x0B4C,0x0D0D,0x0E4D,0x0F98,0x1090,0x103E,0x0F79,0x0EF7, + 0x0EB5,0x0DD8,0x0C24,0x0A84,0x08D3,0x0640,0x03BA,0x0224, + 0x006E,0xFEC1,0xFC99,0xFB6E,0xFA5F,0xF8C0,0xF7AE,0xF74D, + 0xF6DE,0xF6CD,0xF754,0xF737,0xF74B,0xF761,0xF7AD,0xF7C9, + 0xF7F0,0xF837,0xF811,0xF877,0xF8C0,0xF91E,0xF9B1,0xFA83, + 0xFB04,0xFB70,0xFC6A,0xFD77,0xFEC4,0x0013,0x0201,0x02E0, + 0x03F4,0x04E8,0x06BB,0x07DE,0x08E0,0x0944,0x0920,0x08A8, + 0x07C4,0x0741,0x0752,0x078F,0x06C1,0x059F,0x043F,0x034D, + 0x02C1,0x01F3,0xFF69,0x009E,0xFFD6,0xFE20,0xFDCE,0xFDD9, + 0xFD71,0xFC26,0xFB11,0xFAC0,0xFAF1,0xFA70,0xF987,0xF930, + 0xF967,0xF8F8,0xF869,0xF775,0xF73B,0xF6F4,0xF735,0xF736, + 0xF69D,0xF609,0xF597,0xF561,0xF4EF,0xF489,0xF432,0xF376, + 0xF333,0xF338,0xF354,0xF1D4,0xEE50,0xE9E0,0xE727,0xE5FE, + 0xE676,0xE7AE,0xE939,0xE9AD,0xE8B8,0xE733,0xE690,0xE6E3, + 0xE785,0xE830,0xE8D9,0xE95B,0xE8FC,0xE924,0xE8B0,0xE886, + 0xE853,0xE80F,0xE7BA,0xE75D,0xE772,0xE740,0xE764,0xE852, + 0xE9CE,0xE8A5,0xE84B,0xE886,0xE8A8,0xE89B,0xE8CD,0xE85C, + 0xE842,0xE821,0xE804,0xE83A,0xE86E,0xE86C,0xE855,0xE84E, + 0xE851,0xE86E,0xE8AD,0xE8DF,0xE9A9,0xEA42,0xEA30,0xEA7E, + 0xEB84,0xEC0D,0xEC55,0xEBEC,0xEB45,0xEAF7,0xEB69,0xEBA0, + 0xEC60,0xECC9,0xECC0,0xECA1,0xED25,0xED5E,0xEDD8,0xEE6D, + 0xEED8,0xEF7B,0xF003,0xF0AE,0xF0BC,0xF015,0xF0ED,0xF1BA, + 0xF208,0xF2A3,0xF2EE,0xF357,0xF3D5,0xF44D,0xF462,0xF40D, + 0xF40C,0xF44C,0xF520,0xF56B,0xF5D5,0xF62D,0xF67C,0xF6B9, + 0xF706,0xF74A,0xF804,0xF88E,0xF90C,0xF99D,0xFA2C,0xFA74, + 0xFAA1,0xFB06,0xFB81,0xFC1D,0xFCA9,0xFDB3,0xFE57,0xFF05, + 0xFF51,0xFF24,0xFEBC,0xFEAD,0xFED0,0xFF84,0x005E,0x00F2, + 0x0153,0x0190,0x01F7,0x0226,0x0276,0x033E,0x0392,0x0408, + 0x03D8,0x03F0,0x03EF,0x0436,0x049E,0x0498,0x0479,0x049A, + 0x0536,0x0586,0x063C,0x0671,0x0698,0x074A,0x073D,0x0819, + 0x0876,0x0913,0x0916,0x0928,0x091F,0x095B,0x0A01,0x09CE, + 0x095F,0x0B83,0x0B2D,0x0A5F,0x0BF3,0x0B9C,0x0BAD,0x0C49, + 0x0C52,0x0C2E,0x0C74,0x0C95,0x0CF1,0x0D38,0x0D78,0x0D50, + 0x0D6E,0x0D6E,0x0D67,0x0D79,0x0DAB,0x0E51,0x0E32,0x0E20, + 0x0DE2,0x0E0A,0x0DF7,0x0DFD,0x0E25,0x0EC5,0x0F40,0x0F17, + 0x0F25,0x0F5B,0x0F20,0x0E8E,0x0E95,0x0ED4,0x0F1A,0x0F00, + 0x0F80,0x0FD6,0x0F83,0x0F46,0x0F31,0x0F93,0x0F63,0x0FB4, + 0x0F83,0x0F4B,0x0EF8,0x0EE6,0x0EA8,0x0E88,0x0E93,0x0E71, + 0x0ED6,0x0E87,0x0E65,0x0EA0,0x0EA2,0x0E70,0x0EC0,0x0E46, + 0x0D93,0x0BE8,0x0B49,0x0C19,0x0C4C,0x0C3C,0x0BDB,0x0BF7, + 0x0B7A,0x0B92,0x0C16,0x0C16,0x0C70,0x0C3A,0x0C50,0x0C82, + 0x0C91,0x0CCC,0x0CF5,0x0D00,0x0C32,0x0C55,0x0C87,0x0C9C, + 0x0D15,0x0CD4,0x0CDB,0x0CBC,0x0C90,0x0D0A,0x0D2E,0x0D87, + 0x0D76,0x0D2F,0x0CF3,0x0CC9,0x0CAA,0x0D07,0x0CEE,0x0C93, + 0x0C6A,0x0C85,0x0C82,0x0C38,0x0C57,0x0D59,0x0C28,0x0B65, + 0x0AF5,0x0AE5,0x0AEB,0x0B33,0x0B16,0x0AFC,0x0AE8,0x0B47, + 0x0B7E,0x0B8E,0x0BC5,0x0C27,0x0BD5,0x0BB0,0x0BB1,0x0B23, + 0x0B40,0x0B37,0x0B4B,0x0B3D,0x0B26,0x0B1E,0x0ACB,0x0A60, + 0x09E1,0x09F0,0x09E6,0x09AC,0x0983,0x0942,0x0907,0x08A4, + 0x0897,0x08CC,0x08C8,0x08A7,0x0850,0x0859,0x0895,0x0853, + 0x0807,0x07F3,0x0818,0x0790,0x0761,0x078F,0x07AF,0x073B, + 0x06FE,0x073F,0x0752,0x074C,0x0735,0x070C,0x069B,0x0643, + 0x05EB,0x05D5,0x05BB,0x05F0,0x0610,0x05B9,0x05CC,0x05A0, + 0x05AD,0x0563,0x051E,0x04EA,0x0563,0x0546,0x04CA,0x04C0, + 0x0549,0x0423,0x03B8,0x0580,0x0474,0x0480,0x0491,0x041F, + 0x03BD,0x0364,0x0372,0x03E4,0x03F9,0x03E4,0x038B,0x0344, + 0x0324,0x030B,0x0292,0x0289,0x0291,0x029E,0x02A0,0x0290, + 0x022B,0x01DB,0x01D7,0x0231,0x0274,0x0253,0x0276,0x0264, + 0x0213,0x01D9,0x014B,0x01BD,0x01D1,0x0209,0x01B7,0x019F, + 0x0155,0x00D8,0x0092,0x006F,0x00A7,0x00B3,0x0093,0x00C1, + 0x0089,0xFF35,0xFFD0,0xFFF5,0xFFC1,0xFF76,0xFF66,0xFF2B, + 0xFF20,0xFF61,0xFFAD,0xFF4F,0xFF2E,0xFF4A,0xFF4E,0xFF45, + 0xFEFE,0xFF09,0xFEAC,0xFE93,0xFED8,0xFEE2,0xFE27,0xFD14, + 0xFDF7,0xFF11,0xFEAD,0xFE1A,0xFDCC,0xFDEF,0xFE07,0xFDFB, + 0xFDE3,0xFE2C,0xFDA4,0xFD4F,0xFDB4,0xFCF3,0xFC58,0xFCA7, + 0xFC61,0xFC8E,0xFC9C,0xFCCB,0xFCBB,0xFCC4,0xFCD0,0xFC8E, + 0xFD02,0xFCEB,0xFCB2,0xFCF6,0xFD16,0xFD55,0xFD6B,0xFD6C, + 0xFD63,0xFD84,0xFDA0,0xFDAE,0xFD7F,0xFD84,0xFD76,0xFDBA, + 0xFDAE,0xFD78,0xFD88,0xFDCB,0xFDD8,0xFDB6,0xFDB1,0xFDB5, + 0xFDC8,0xFDCC,0xFD97,0xFDD4,0xFDF2,0xFDF6,0xFE22,0xFDF2, + 0xFE1A,0xFDFF,0xFE0B,0xFE53,0xFEA0,0xFF50,0xFF29,0xFFF4, + 0x0079,0x0100,0x0160,0x01FC,0x0344,0x042F,0x054E,0x065B, + 0x0768,0x07F4,0x07FE,0x09F5,0x0885,0x0813,0x092D,0x08B9, + 0x087A,0x08EA,0x0913,0x08BC,0x08CB,0x08DF,0x09B3,0x0A6E, + 0x0B3A,0x0B9B,0x0BC2,0x0C35,0x0C4C,0x0C89,0x0CA9,0x0D4F, + 0x0D7A,0x0E7A,0x0F46,0x1052,0x110A,0x11BB,0x1183,0x110F, + 0x10E9,0x10ED,0x119E,0x129A,0x13F1,0x149B,0x14E3,0x1439, + 0x13C9,0x13B3,0x146E,0x1526,0x15D9,0x167D,0x16D4,0x16FD, + 0x1700,0x16F1,0x1733,0x178D,0x179C,0x17B3,0x1776,0x1725, + 0x1734,0x172E,0x172F,0x175A,0x176A,0x1772,0x16EE,0x163E, + 0x1685,0x1693,0x15C7,0x136E,0x129B,0x12BD,0x1243,0x120D, + 0x11FA,0x1180,0x1126,0x10DA,0x10CC,0x108B,0x106F,0x0FEC, + 0x0F38,0x0ED0,0x0EA4,0x0E67,0x0E90,0x0E6F,0x0D15,0x0C74, + 0x0CC9,0x0C80,0x0C03,0x0C31,0x0BDF,0x0AF2,0x0A1C,0x09E9, + 0x098C,0x0988,0x09E0,0x0993,0x08EA,0x080A,0x0742,0x06B3, + 0x06E8,0x06EF,0x0752,0x079B,0x070B,0x05EE,0x064B,0x05F3, + 0x0462,0x03BB,0x02FB,0x027C,0x01CA,0x0143,0x00B6,0xFFA8, + 0xFE0B,0xFBE1,0xF9BC,0xF6D4,0xF498,0xF38C,0xF281,0xF1B8, + 0xF0CF,0xEF85,0xEE31,0xECF5,0xEC6D,0xECC4,0xEDCE,0xEF86, + 0xF146,0xF2B7,0xF487,0xF69B,0xF89E,0xFA3C,0xFC2D,0xFE1A, + 0x0004,0x020F,0x0398,0x0520,0x0678,0x0760,0x07B8,0x0774, + 0x06D6,0x06E7,0x0746,0x06B8,0x068E,0x0641,0x05C2,0x04A6, + 0x038B,0x0301,0x024A,0x0217,0x01FF,0x0275,0x0295,0x0296, + 0x021A,0x0169,0x00ED,0x005E,0xFF90,0xFEA0,0xFD98,0xFD38, + 0xFCE6,0xFB69,0xF9FF,0xF84A,0xF65D,0xF39F,0xF1FA,0xF0A5, + 0xEF8B,0xEE16,0xED90,0xEA87,0xE92D,0xE92C,0xE678,0xE58F, + 0xE56A,0xE45D,0xE396,0xE3B4,0xE438,0xE465,0xE472,0xE4E8, + 0xE576,0xE574,0xE54B,0xE5A8,0xE69B,0xE7B6,0xE87E,0xE93E, + 0xE949,0xE98D,0xE980,0xE928,0xE9D3,0xEAFB,0xEBA1,0xEC07, + 0xECB2,0xEDB7,0xEE5D,0xEECE,0xEF12,0xEFA0,0xF07B,0xF185, + 0xF264,0xF3E5,0xF5CF,0xF693,0xF663,0xF653,0xF6A7,0xF779, + 0xF818,0xF8CC,0xF9AE,0xFA4E,0xF9C6,0xF8C6,0xF7FC,0xF798, + 0xF76F,0xF6CB,0xF65E,0xF66E,0xF604,0xF4F6,0xF3EC,0xF3B5, + 0xF39F,0xF543,0xF3E5,0xF2D4,0xF254,0xF1E3,0xF19B,0xF14A, + 0xF101,0xEFFF,0xEF4A,0xEEC1,0xEEBB,0xEF55,0xEF1A,0xEE6F, + 0xEE04,0xED90,0xED37,0xED47,0xECE7,0xED34,0xEDDE,0xED28, + 0xEC95,0xED40,0xEDAB,0xED57,0xEDD8,0xEE77,0xEEAD,0xEEE8, + 0xEF26,0xEF92,0xF038,0xF0C8,0xF15C,0xF2A8,0xF39E,0xF3D6, + 0xF433,0xF562,0xF663,0xF722,0xF795,0xF804,0xF7D1,0xF79E, + 0xF890,0xF92D,0xF969,0xFA74,0xFB00,0xFAB1,0xFAAC,0xFAD3, + 0xFA27,0xF95B,0xF91E,0xF982,0xFA4E,0xF98B,0xF917,0xF898, + 0xF86C,0xF84F,0xF847,0xF833,0xF7F0,0xF809,0xF7EE,0xF712, + 0xF6DB,0xF6F5,0xF6E1,0xF6ED,0xF674,0xF5C6,0xF5AF,0xF571, + 0xF55C,0xF589,0xF56B,0xF4DB,0xF442,0xF449,0xF421,0xF415, + 0xF424,0xF414,0xF3FA,0xF3E0,0xF3D9,0xF3C0,0xF40A,0xF3EA, + 0xF414,0xF47A,0xF464,0xF452,0xF440,0xF46E,0xF4BD,0xF4E4, + 0xF4C4,0xF4FA,0xF5E6,0xF672,0xF674,0xF579,0xF488,0xF2D1, + 0xF134,0xF0AC,0xF056,0xEEFA,0xEC36,0xE726,0xE0DC,0xDA3F, + 0xD432,0xCF69,0xCE5C,0xCE7F,0xCB37,0xCA7D,0xC903,0xC82B, + 0xC8C9,0xCAC5,0xCE54,0xD37A,0xD9DB,0xE0AE,0xE7DC,0xEFEC, + 0xF7F5,0xFEF6,0x052A,0x0B15,0x112B,0x1709,0x1CFB,0x2324, + 0x2871,0x2C5D,0x2E77,0x2E74,0x2DE6,0x2E05,0x2E1D,0x2E2E, + 0x2EA4,0x2EEE,0x2EF4,0x2E22,0x2CA5,0x2B1A,0x2A37,0x2A1E, + 0x29BF,0x29A0,0x29EC,0x2A2A,0x2A6C,0x2A41,0x297F,0x281A, + 0x262A,0x22F2,0x1FD9,0x1D3E,0x1B6F,0x1922,0x155A,0x10B0, + 0x0B8A,0x05A4,0xFF51,0xF9AD,0xF4A1,0xF088,0xEC61,0xE8BA, + 0xE4D8,0xE153,0xDD0A,0xD8FE,0xD7A3,0xD6B6,0xD648,0xD68B, + 0xD794,0xD913,0xDA84,0xDBE5,0xDD61,0xDE9B,0xE083,0xE262, + 0xE4EB,0xE7C2,0xEA0C,0xEC1E,0xEE8F,0xEFA1,0xEFE8,0xF1A9, + 0xF39C,0xF539,0xF713,0xF96F,0xFB54,0xFCA4,0xFE21,0x0034, + 0x0215,0x0436,0x0718,0x0A23,0x0C39,0x0E53,0x10C4,0x12E3, + 0x145E,0x164E,0x1849,0x1A8A,0x1B70,0x1B15,0x1B60,0x1B03, + 0x1A2F,0x1975,0x17F5,0x16CF,0x1556,0x1331,0x108B,0x0E43, + 0x0C83,0x0BC6,0x0A23,0x073E,0x04F9,0x0336,0x010D,0xFF41, + 0xFD97,0xFC8F,0xFB8D,0xFA56,0xF8CB,0xF701,0xF5A6,0xF4F9, + 0xF408,0xF332,0xF2B4,0xF237,0xF171,0xF03D,0xEFB0,0xEF35, + 0xEEB0,0xEE6A,0xEDF9,0xED9F,0xEDAA,0xED81,0xEDA0,0xEE10, + 0xEF4F,0xF068,0xF0C4,0xF13D,0xF2AC,0xF4B6,0xF6AA,0xF850, + 0xFA07,0xFBF6,0xFD21,0xFE62,0x0076,0x02C3,0x045C,0x0599, + 0x06E4,0x0860,0x0989,0x0A58,0x0AE6,0x0BD7,0x0C6C,0x0CAB, + 0x0C87,0x0C99,0x0C58,0x0C18,0x0BB6,0x0B56,0x0BDD,0x0BC4, + 0x0B57,0x0AC0,0x09FF,0x0816,0x0A00,0x09F6,0x088C,0x0823, + 0x07D4,0x06EE,0x05E3,0x0510,0x04D4,0x040B,0x02BF,0x016E, + 0x0055,0xFF49,0xFE59,0xFD6B,0xFC25,0xFB01,0xFA1C,0xF93D, + 0xF875,0xF804,0xF780,0xF6F9,0xF63E,0xF59A,0xF4D8,0xF591, + 0xF665,0xF6B8,0xF661,0xF6C0,0xF734,0xF799,0xF85A,0xF8FF, + 0xF990,0xFA3B,0xFABE,0xFB25,0xFBAF,0xFC8C,0xFDDE,0xFE4B, + 0xFDDC,0xFC5B,0xFA38,0xF905,0xF850,0xF759,0xF51D,0xF1A6, + 0xEBD1,0xE405,0xDC23,0xD707,0xD417,0xD1E8,0xD0EB,0xCFD3, + 0xCF99,0xCFAA,0xCE2C,0xCF16,0xD292,0xD751,0xDC87,0xE2D2, + 0xEA4D,0xF288,0xFB22,0x0378,0x0B82,0x1236,0x1845,0x1E00, + 0x23AA,0x2997,0x2FA8,0x3465,0x36B1,0x3924,0x390C,0x3752, + 0x3664,0x36C8,0x365E,0x35FA,0x34D5,0x341B,0x32AC,0x30C1, + 0x2FB6,0x2F7A,0x2EBB,0x2DBB,0x2D5B,0x2CEF,0x2D35,0x2D30, + 0x2D4D,0x2CDC,0x2B2B,0x283F,0x253C,0x21AB,0x1D57,0x1AB4, + 0x1806,0x14EB,0x105D,0x0AB4,0x045A,0xFE35,0xF812,0xF24B, + 0xED03,0xE814,0xE475,0xE148,0xDD9C,0xDA81,0xD79D,0xD577, + 0xD450,0xD455,0xD517,0xD671,0xD82C,0xD9FD,0xDC1A,0xDE2A, + 0xE001,0xE193,0xE3A6,0xE613,0xE816,0xEA2F,0xECD0,0xEFA5, + 0xF192,0xF25A,0xF30D,0xF3D0,0xF58A,0xF7A8,0xF988,0xFC1E, + 0xFE3F,0xFFEB,0x0172,0x035B,0x05E1,0x0891,0x0AB8,0x0CA0, + 0x0F30,0x1143,0x13B0,0x167E,0x1819,0x1977,0x1A48,0x1AD2, + 0x1A9C,0x1A1D,0x19C5,0x198A,0x18C9,0x1758,0x1564,0x1332, + 0x111B,0x0E65,0x0B52,0x089B,0x06D4,0x044D,0x023B,0x003F, + 0xFE1F,0xFBC5,0xFBEB,0xF85F,0xF5EC,0xF590,0xF39E,0xF26A, + 0xF1F3,0xF12A,0xF076,0xEFCF,0xEEE6,0xEDFA,0xECF9,0xEC17, + 0xEB4F,0xEB1D,0xEB1A,0xEB35,0xEB44,0xEA5E,0xE9C6,0xE961, + 0xE9D2,0xEAAD,0xEBC9,0xECDB,0xEDB5,0xEEF2,0xF008,0xF106, + 0xF2AE,0xF498,0xF70E,0xF8E0,0xFA9F,0xFCB3,0xFEAA,0x0046, + 0x0266,0x0419,0x0586,0x06B3,0x07B5,0x085B,0x0971,0x0AB7, + 0x0C61,0x0D33,0x0CD9,0x0C2F,0x0BCA,0x0C25,0x0CF4,0x0D3E, + 0x0C6F,0x0BD7,0x0B33,0x0A6A,0x097A,0x09C9,0x09A9,0x08DC, + 0x07DB,0x05DE,0x0299,0x01F0,0x025F,0x01EF,0x01D8,0x013A, + 0xFFA1,0xFE4D,0xFD11,0xFC01,0xFAC9,0xF98A,0xF8FB,0xF8C1, + 0xF803,0xF6F3,0xF604,0xF5CD,0xF506,0xF2D1,0xF221,0xF2E1, + 0xF33F,0xF30A,0xF387,0xF433,0xF3F1,0xF40A,0xF485,0xF568, + 0xF618,0xF6F6,0xF7B3,0xF829,0xF8FE,0xF9DA,0xFB67,0xFC72, + 0xFCF0,0xFD19,0xFD70,0xFD78,0xFD04,0xFCB3,0xFC0A,0xF9B0, + 0xF88E,0xF71A,0xF4B2,0xF0C2,0xEAEC,0xE350,0xDBB2,0xD697, + 0xD422,0xD30C,0xD207,0xD0BA,0xD020,0xCED7,0xCE2B,0xCF30, + 0xD2A8,0xD81D,0xDE18,0xE44E,0xEBFB,0xF43C,0xFCE1,0x0524, + 0x0CBF,0x1386,0x18F1,0x1DF1,0x23D4,0x2A00,0x300A,0x34F3, + 0x3883,0x39A0,0x3936,0x37AF,0x3685,0x36BA,0x3721,0x371E, + 0x36A6,0x354D,0x340C,0x3227,0x314F,0x30C1,0x3003,0x2F4F, + 0x2F1A,0x2F01,0x2F6A,0x2FF5,0x2F86,0x2E59,0x2C4B,0x296E, + 0x265E,0x2357,0x210C,0x1E4A,0x1A67,0x1644,0x10D7,0x0B1A, + 0x0500,0xFEAD,0xF93C,0xF4E9,0xEFC4,0xEB3A,0xE7A9,0xE3CD, + 0xE140,0xDFE2,0xDC49,0xDA39,0xDAFD,0xD9FA,0xDA31,0xDBD1, + 0xDDF6,0xE015,0xE1E5,0xE30F,0xE413,0xE5DE,0xE78C,0xE9D0, + 0xECD4,0xEF66,0xF125,0xF286,0xF398,0xF455,0xF5A9,0xF735, + 0xF890,0xFA7F,0xFC12,0xFD53,0xFF7C,0x01CE,0x0406,0x0659, + 0x085A,0x0A00,0x0C33,0x0E58,0x10F7,0x1381,0x166B,0x1897, + 0x19D1,0x1A3C,0x1A92,0x1B38,0x1BC7,0x1BE9,0x1C0E,0x1B7B, + 0x1A41,0x1810,0x1641,0x13DD,0x11B6,0x0FA2,0x0D2E,0x0A4E, + 0x0829,0x05DC,0x0391,0x01A4,0xFF27,0xFCBE,0xFB14,0xF9B0, + 0xFAF5,0xF9B3,0xF804,0xF74F,0xF644,0xF4F1,0xF346,0xF238, + 0xF1BF,0xF0B6,0xEFDB,0xEF8C,0xEFC1,0xEF60,0xEE30,0xECB0, + 0xEC00,0xEBBB,0xEB6E,0xEAF5,0xEBF5,0xED48,0xED64,0xED3C, + 0xEE67,0xF028,0xF0D8,0xF22E,0xF36F,0xF56F,0xF7E4,0xFA1C, + 0xFC07,0xFDBE,0xFF1A,0x0056,0x016E,0x02D3,0x0483,0x0672, + 0x0811,0x08E5,0x0940,0x09CD,0x0A70,0x0938,0x09B4,0x0B5E, + 0x0BAF,0x0BA1,0x0B91,0x0B61,0x0B6A,0x0B12,0x0A55,0x0943, + 0x085D,0x07C2,0x06F4,0x069C,0x0618,0x0597,0x04D9,0x0386, + 0x026A,0x01BB,0x0113,0x0044,0xFF8D,0xFE8E,0xFD06,0xFBF1, + 0xFAE1,0xF99F,0xF864,0xF79C,0xF699,0xF553,0xF40F,0xF31D, + 0xF2CB,0xF25D,0xF1A6,0xF13C,0xF0E8,0xF035,0xEF93,0xEFB3, + 0xF0D5,0xF1C4,0xF2A8,0xF2A3,0xF297,0xF2C3,0xF309,0xF3C1, + 0xF4EF,0xF61E,0xF6F0,0xF763,0xF7C2,0xF8D6,0xF95D,0xF910, + 0xF80C,0xF6B3,0xF543,0xF44B,0xF39B,0xF2D6,0xF082,0xEB97, + 0xE476,0xDC04,0xD56B,0xD11E,0xCECB,0xCDD1,0xCE37,0xCD2D, + 0xCA2E,0xC948,0xCA67,0xCA73,0xCF42,0xD4EA,0xDB26,0xE200, + 0xE96C,0xF1DE,0xFB14,0x0394,0x0AB5,0x10CE,0x16A9,0x1CC1, + 0x225A,0x28AC,0x2EA0,0x338D,0x364A,0x365E,0x3592,0x350C, + 0x34BA,0x343B,0x33F5,0x340C,0x3392,0x3242,0x30ED,0x2FEB, + 0x2EEC,0x2DD4,0x2CE2,0x2C99,0x2CBC,0x2D34,0x2D7B,0x2DF1, + 0x2D8B,0x2C24,0x2978,0x26AA,0x2400,0x2128,0x1E73,0x1B98, + 0x17F6,0x1369,0x0DF3,0x07E1,0x0210,0xFC78,0xF6F1,0xF1D8, + 0xED49,0xE903,0xE566,0xE1AC,0xDE76,0xDC36,0xDABE,0xD976, + 0xD854,0xD6F8,0xD5D7,0xD74D,0xD8B0,0xDAB4,0xDD91,0xDFD5, + 0xE1C0,0xE347,0xE541,0xE7C2,0xE9F4,0xEC10,0xEE20,0xEFF3, + 0xF171,0xF264,0xF3AC,0xF64C,0xF80D,0xF885,0xFA60,0xFCC8, + 0xFEB1,0x000F,0x0259,0x0549,0x07CE,0x0A62,0x0C13,0x0E84, + 0x110C,0x1358,0x15E2,0x1718,0x1877,0x1A1B,0x1B34,0x1B1F, + 0x1B42,0x1B50,0x1B24,0x19B3,0x1850,0x17B6,0x1500,0x1275, + 0x108E,0x0DD8,0x0B99,0x094C,0x066B,0x035F,0x01E0,0x0050, + 0xFEAC,0xFD45,0xFB59,0xFA68,0xF987,0xF7A3,0xF688,0xF56E, + 0xF4C3,0xF41A,0xF24E,0xF148,0xF129,0xF127,0xF06C,0xEF5F, + 0xEECC,0xEE4D,0xED50,0xEC67,0xEC51,0xECAC,0xED28,0xECEA, + 0xED16,0xEDC3,0xEE5D,0xEF20,0xEFCD,0xF107,0xF297,0xF419, + 0xF4D5,0xF70D,0xF9E1,0xFC32,0xFD6A,0xFEFC,0x00D8,0x0236, + 0x0316,0x042E,0x0669,0x0937,0x0AC8,0x0AEB,0x0AFD,0x0B98, + 0x0C04,0x0C21,0x0BF6,0x0C7A,0x0D95,0x0D99,0x0D4B,0x0CAC, + 0x0CB3,0x0BED,0x0AF2,0x09D2,0x091E,0x0973,0x095C,0x0918, + 0x0979,0x095C,0x067A,0x06E8,0x0592,0x0336,0x02BA,0x0241, + 0x01B3,0x015D,0x009A,0xFF2B,0xFD5F,0xFB8D,0xFA0D,0xF95D, + 0xF8BD,0xF82D,0xF7A4,0xF6EB,0xF5DB,0xF4EC,0xF453,0xF41D, + 0xF43C,0xF468,0xF425,0xF408,0xF46F,0xF512,0xF58A,0xF5BF, + 0xF65E,0xF704,0xF77E,0xF793,0xF849,0xF9A6,0xFAD9,0xFBDA, + 0xFC53,0xFC63,0xFB89,0xFA33,0xF90D,0xF7ED,0xF766,0xF6C3, + 0xF554,0xF1E0,0xEC13,0xE4EA,0xDCDE,0xD699,0xD2FD,0xD0F3, + 0xCFA9,0xCE91,0xCCDC,0xCC1A,0xCB84,0xCC13,0xCE29,0xD41E, + 0xDB31,0xE0FD,0xE819,0xF050,0xF8D5,0x010E,0x088C,0x0F52, + 0x1593,0x1B1B,0x2089,0x26C1,0x2D68,0x3314,0x36D1,0x382D, + 0x37C5,0x367B,0x3515,0x344F,0x357C,0x361D,0x34C4,0x332A, + 0x327F,0x3125,0x2F6A,0x2E03,0x2CBC,0x2C31,0x2C37,0x2BF6, + 0x2C28,0x2CBF,0x2CC2,0x2BCE,0x298E,0x26C0,0x2391,0x20A3, + 0x1DD2,0x1ADC,0x17A5,0x141D,0x0F1F,0x0856,0x02CD,0xFD16, + 0xF7AD,0xF296,0xEDDA,0xE92C,0xE4E2,0xE105,0xDD99,0xDA35, + 0xD760,0xD592,0xD4B5,0xD342,0xD303,0xD41A,0xD5E0,0xD7EC, + 0xDA24,0xDBD1,0xDD51,0xDF00,0xE0B6,0xE26E,0xE526,0xE837, + 0xEB1A,0xED79,0xEEC8,0xEFEF,0xF0D2,0xF1F3,0xF36D,0xF54A, + 0xF761,0xF91F,0xFA8A,0xFCB7,0xFF05,0x0190,0x0396,0x051E, + 0x06F4,0x0927,0x0B99,0x0E68,0x11A7,0x1442,0x160F,0x1636, + 0x1678,0x16E4,0x17DA,0x184F,0x185B,0x181F,0x1732,0x1557, + 0x130A,0x1067,0x0E81,0x0CD6,0x0A25,0x07CC,0x052A,0x0313, + 0x00C2,0xFE65,0xFCB2,0xFABF,0xF869,0xF67B,0xF50A,0xF36E, + 0xF1FB,0xF3F6,0xF258,0xF089,0xF00B,0xEE3C,0xECF2,0xEC43, + 0xEC56,0xEC48,0xEC91,0xEBDD,0xEABF,0xE9FD,0xEA04,0xE9C0, + 0xE9FC,0xEA37,0xEAC3,0xEBAF,0xEB5B,0xEBD5,0xED1C,0xEECF, + 0xF030,0xF188,0xF2B5,0xF495,0xF6A5,0xF86E,0xFA93,0xFCFA, + 0xFF66,0x0130,0x02A5,0x0421,0x05D5,0x0770,0x08BA,0x09E5, + 0x0B17,0x0B6C,0x0B9C,0x0B97,0x0C02,0x0D34,0x0D3D,0x0C96, + 0x0C35,0x0BFD,0x0B77,0x0AF9,0x0A99,0x0ACE,0x0B42,0x0A90, + 0x0954,0x087A,0x07BB,0x07AD,0x068D,0x062E,0x05F4,0x04D8, + 0x02E5,0xFF85,0xFE2A,0xFE0E,0xFD55,0xFC9E,0xFB70,0xF9FB, + 0xF852,0xF71D,0xF67B,0xF629,0xF5D4,0xF4AE,0xF3F2,0xF328, + 0xF245,0xF199,0xF22C,0xF35B,0xF30F,0xF2B7,0xF2B1,0xF2EC, + 0xF36B,0xF40A,0xF4E5,0xF5F8,0xF787,0xF85B,0xF89B,0xF9C1, + 0xFA90,0xFB69,0xFBB8,0xFC69,0xFD2A,0xFE03,0xFE2F,0xFDCD, + 0xFCA0,0xFAB1,0xF99D,0xF88E,0xF745,0xF436,0xEDEA,0xE606, + 0xDE5B,0xD7C5,0xD422,0xD27C,0xD1AD,0xD0F4,0xCFC0,0xCE68, + 0xCDFF,0xCEC4,0xD1EC,0xD788,0xDDC5,0xE43D,0xEBCD,0xF34C, + 0xFB20,0x02F2,0x0ABE,0x1224,0x18D9,0x1DF4,0x22D1,0x2851, + 0x2EA3,0x33B3,0x3737,0x38E7,0x38C0,0x37A1,0x3637,0x3572, + 0x357B,0x35B2,0x353E,0x3437,0x3345,0x3270,0x3158,0x307C, + 0x2F9B,0x2E47,0x2D7D,0x2D52,0x2E4D,0x2F03,0x2F46,0x2E80, + 0x2C6A,0x2972,0x25F9,0x225D,0x1F49,0x1C95,0x1A14,0x168D, + 0x11CD,0x0C05,0x0539,0xFE20,0xF809,0xF35F,0xEF3E,0xEB3B, + 0xE796,0xE43E,0xE15C,0xDE15,0xDC05,0xDA0B,0xD896,0xD808, + 0xD90B,0xD88A,0xDAF3,0xDED4,0xE02A,0xE1CB,0xE31F,0xE400, + 0xE585,0xE781,0xEA29,0xECEE,0xEF60,0xF10E,0xF246,0xF2EA, + 0xF40D,0xF53D,0xF6DA,0xF861,0xF99C,0xFBB6,0xFDC2,0x0012, + 0x0246,0x0421,0x0667,0x0880,0x0A33,0x0B93,0x0E1B,0x1171, + 0x1492,0x1691,0x1850,0x1948,0x1922,0x1969,0x197A,0x196C, + 0x1968,0x18FA,0x18B3,0x1767,0x1529,0x12A4,0x101D,0x0D82, + 0x0AF1,0x0895,0x0627,0x0406,0x0209,0x008F,0xFED0,0xFC65, + 0xFA36,0xF865,0xF66D,0xF489,0xF3CA,0xF39C,0xF42C,0xF620, + 0xF438,0xF271,0xF0A9,0xEF5C,0xEEB6,0xEE85,0xEECB,0xEE31, + 0xED85,0xECBE,0xEB9B,0xEB45,0xEB90,0xEBC7,0xEBEC,0xEBF3, + 0xEBC4,0xEC21,0xECC9,0xEF12,0xF11B,0xF1A3,0xF20E,0xF392, + 0xF5C3,0xF736,0xF962,0xFBD1,0xFE43,0xFFAC,0x00B0,0x01F8, + 0x0374,0x04E8,0x066D,0x078B,0x083B,0x08E3,0x095A,0x0A3B, + 0x0A8C,0x0A3C,0x0AD3,0x0AFD,0x09B8,0x0880,0x0942,0x098E, + 0x09A3,0x08BC,0x07EC,0x080B,0x0768,0x0658,0x0541,0x047A, + 0x039E,0x02D2,0x0210,0x00BF,0xFFBE,0xFF13,0xFE02,0xFC8F, + 0xFB2A,0xFA1A,0xF9AC,0xF8E3,0xF828,0xF752,0xF5F9,0xF4AD, + 0xF374,0xF2F5,0xF1F0,0xF12B,0xF053,0xF049,0xF08D,0xF0D0, + 0xF0C5,0xF0B3,0xF020,0xEFE2,0xF05A,0xF108,0xF267,0xF419, + 0xF553,0xF514,0xF4DF,0xF532,0xF636,0xF75D,0xF837,0xF959, + 0xFA3C,0xFAC2,0xFA4D,0xF8CA,0xF7DA,0xF78B,0xF788,0xF65E, + 0xF42A,0xF0CA,0xEBD4,0xE5FA,0xE08E,0xDC4F,0xDA6C,0xD96E, + 0xD77A,0xD686,0xD5C7,0xD558,0xD55F,0xD6DA,0xD9E3,0xDCC7, + 0xE216,0xE864,0xECF8,0xF4E6,0xFBB0,0x01FF,0x078A,0x0CA1, + 0x1152,0x162B,0x1AAA,0x1FA0,0x2469,0x2823,0x2992,0x2A1C, + 0x2A43,0x29EB,0x29B1,0x294F,0x28D7,0x2859,0x278C,0x26B0, + 0x262C,0x260E,0x25B7,0x24DE,0x2374,0x2259,0x21E6,0x21BB, + 0x2221,0x230B,0x22F8,0x21FE,0x1FC6,0x1DCE,0x1B7C,0x193A, + 0x1704,0x1439,0x1138,0x0D7D,0x09A0,0x052B,0x00F2,0xFCEF, + 0xF8DE,0xF457,0xF03A,0xEC41,0xE93E,0xE688,0xE4AB,0xE3A4, + 0xE259,0xE0C4,0xDF53,0xDED5,0xDF1E,0xE048,0xE201,0xE3AB, + 0xE40E,0xE3F8,0xE543,0xE701,0xE8D6,0xEABB,0xECF7,0xEF06, + 0xF0CC,0xF1F6,0xF2FF,0xF413,0xF590,0xF741,0xF870,0xF947, + 0xFA14,0xFB39,0xFE19,0xFFD4,0x00F6,0x0392,0x05E7,0x06D9, + 0x07EC,0x09E7,0x0C78,0x0F16,0x1137,0x12A7,0x133B,0x13D6, + 0x14B4,0x15C8,0x165C,0x1681,0x1639,0x158C,0x13F3,0x129C, + 0x118B,0x0FE9,0x0E9C,0x0C67,0x0B02,0x08D6,0x0678,0x040B, + 0x0259,0x00EE,0xFF93,0xFE06,0xFC81,0xFAF1,0xF9EB,0xF975, + 0xF91D,0xF87B,0xF816,0xF7F5,0xF6D0,0xF616,0xF544,0xF4A7, + 0xF431,0xF3AE,0xF34B,0xF2C9,0xF299,0xF2E3,0xF2AE,0xF276, + 0xF1F4,0xF1A0,0xF1EF,0xF208,0xF244,0xF320,0xF4C9,0xF615, + 0xF6ED,0xF823,0xF95E,0xFA39,0xFAE1,0xFBF3,0xFE6B,0x00C3, + 0x0227,0x0313,0x03DF,0x055D,0x065A,0x06F0,0x07A5,0x08DB, + 0x09D0,0x09EB,0x09F8,0x0A92,0x0B0A,0x0AF4,0x0A9A,0x09E9, + 0x095F,0x097C,0x096C,0x09A0,0x09CB,0x09AE,0x095C,0x087C, + 0x0759,0x0683,0x05EE,0x0582,0x05B6,0x052A,0x046F,0x04AB, + 0x03C4,0x0153,0x01EA,0x0102,0xFEF0,0xFDDA,0xFD31,0xFCEC, + 0xFC88,0xFB2C,0xFA56,0xF922,0xF88D,0xF71B,0xF655,0xF61E, + 0xF655,0xF62C,0xF5C6,0xF59A,0xF5D8,0xF59A,0xF5CE,0xF5C4, + 0xF5E1,0xF6D5,0xF7B2,0xF880,0xF87F,0xF8DC,0xF941,0xF9C2, + 0xFAA2,0xFBB0,0xFB81,0xFB9B,0xFC08,0xFC5A,0xFC98,0xFCBA, + 0xFCDE,0xFD15,0xFD12,0xFC48,0xFA9E,0xF852,0xF6EB,0xF5B3, + 0xF4F4,0xF4C7,0xF4C9,0xF473,0xF3ED,0xF2D6,0xF22F,0xF287, + 0xF406,0xF5D4,0xF70F,0xF8EB,0xFAAF,0xFD06,0x00FB,0x0473, + 0x05C8,0x0753,0x08E5,0x09BD,0x0AD7,0x0C84,0x0EAE,0x0FF4, + 0x10AD,0x1078,0x1012,0x0EE2,0x0DEF,0x0DF1,0x0E1C,0x0D95, + 0x0D44,0x0C28,0x0BA3,0x0BFE,0x0B4B,0x099F,0x08DE,0x08FC, + 0x08B2,0x0862,0x08E0,0x0939,0x0905,0x0893,0x0769,0x06C3, + 0x05EE,0x0544,0x056F,0x0521,0x048E,0x0394,0x01BD,0xFFE7, + 0xFDDF,0xFCA2,0xFBD3,0xFA58,0xF827,0xF867,0xF828,0xF6E0, + 0xF585,0xF4C2,0xF48B,0xF488,0xF455,0xF413,0xF3A6,0xF3DA, + 0xF434,0xF4A2,0xF44F,0xF507,0xF677,0xF709,0xF754,0xF7E5, + 0xF8C9,0xF99A,0xF9FB,0xFA43,0xFAD9,0xFAC8,0xFAA6,0xFAE3, + 0xFB91,0xFCD9,0xFD35,0xFCB6,0xFC0E,0xFC5E,0xFD6D,0xFE3C, + 0xFF2D,0x0013,0x00B8,0x0036,0xFFE2,0x001F,0x00A8,0x0145, + 0x018F,0x013C,0x00EE,0x0096,0x001E,0xFF51,0xFE8D,0xFD72, + 0xFCBA,0xFC22,0xFB5B,0xFAF3,0xF8D2,0xF41A,0xEE76,0xE985, + 0xE6BF,0xE5C1,0xE5D5,0xE683,0xE6CE,0xE5AB,0xE48A,0xE2D4, + 0xE1EB,0xE229,0xE2AF,0xE2E1,0xE347,0xE38A,0xE3B4,0xE2EC, + 0xE478,0xE327,0xE352,0xE38F,0xE265,0xE1F1,0xE245,0xE296, + 0xE313,0xE325,0xE2CB,0xE269,0xE27A,0xE2E3,0xE2C4,0xE38E, + 0xE421,0xE48A,0xE4E7,0xE543,0xE53A,0xE583,0xE5F4,0xE619, + 0xE633,0xE683,0xE678,0xE70C,0xE766,0xE7A6,0xE7A7,0xE7D8, + 0xE81E,0xE8E6,0xE93C,0xE977,0xE985,0xE9BE,0xE9FD,0xE9F1, + 0xEA55,0xEB81,0xEC4B,0xECB0,0xED11,0xEDBB,0xEDE8,0xEE36, + 0xEE86,0xEEE9,0xEF82,0xEFE1,0xF065,0xF110,0xF14B,0xF1C0, + 0xF292,0xF2F4,0xF330,0xF388,0xF3D9,0xF4BC,0xF57C,0xF58C, + 0xF45B,0xF485,0xF60D,0xF6A3,0xF772,0xF7BC,0xF82C,0xF89D, + 0xF923,0xF9BF,0xF9CF,0xFA3B,0xFAED,0xFB53,0xFBBC,0xFC97, + 0xFD29,0xFD74,0xFE0B,0xFDD0,0xFE48,0xFF5B,0xFFEF,0x0057, + 0x00D5,0x0171,0x0179,0x0195,0x01CC,0x01CE,0x02C7,0x0364, + 0x03A4,0x03F1,0x0430,0x041C,0x04F1,0x052E,0x0578,0x0639, + 0x06B9,0x0719,0x06CE,0x085C,0x08E3,0x0800,0x07D6,0x0780, + 0x07B7,0x0823,0x08AC,0x0959,0x09B4,0x0A08,0x0AC1,0x0B5B, + 0x0BB3,0x0C4D,0x0DC5,0x0E18,0x0E04,0x0DD4,0x0DC5,0x0E05, + 0x0E17,0x0EA6,0x0EB3,0x0E8D,0x0EAC,0x0F43,0x0F35,0x0F3D, + 0x0F8C,0x0FA7,0x0F3B,0x0F8E,0x0FAE,0x0F9B,0x0FD0,0x1015, + 0x102A,0x1065,0x0FB9,0x0F30,0x0EDF,0x0EE8,0x0FC2,0x1055, + 0x1063,0x1086,0x108B,0x103B,0x1031,0x1059,0x1064,0x1039, + 0x0FE7,0x0F9C,0x0FD5,0x0FCC,0x0FAE,0x0FC1,0x0FAA,0x0FA7, + 0x1002,0x1000,0x103E,0x105C,0x0FF5,0x0FC0,0x0EEA,0x0EDE, + 0x0F0E,0x0F33,0x0EE6,0x0EE0,0x0F4D,0x0EB7,0x0E9A,0x0F7E, + 0x0E2E,0x0E89,0x1014,0x0E9A,0x0EBC,0x0EDD,0x0ED6,0x0E6D, + 0x0E2A,0x0DE7,0x0DEF,0x0E17,0x0E11,0x0DC8,0x0DCC,0x0DD2, + 0x0DE8,0x0D5A,0x0D22,0x0D3A,0x0D7C,0x0D20,0x0CBC,0x0C80, + 0x0C44,0x0C2E,0x0C8E,0x0CB8,0x0CB5,0x0CB5,0x0C87,0x0C66, + 0x0C56,0x0C55,0x0C4A,0x0BF6,0x0BD8,0x0BF4,0x0BAD,0x0BB0, + 0x0C03,0x0BDF,0x0C15,0x0BFE,0x0BAB,0x0BAC,0x0B5D,0x0AE6, + 0x0AC4,0x0AD5,0x0B0D,0x0AD1,0x0AF6,0x0AD2,0x0A7E,0x0A9E, + 0x0AAA,0x0A9F,0x0ACD,0x0A5D,0x0A6C,0x0ACB,0x0CB0,0x0CB6, + 0x0BC0,0x0AF9,0x0A93,0x0A92,0x0A7C,0x0A25,0x0A06,0x09F3, + 0x09B4,0x0944,0x096F,0x0932,0x095C,0x08EA,0x0889,0x08B8, + 0x0880,0x079F,0x0831,0x08F8,0x085A,0x0786,0x0741,0x0733, + 0x06CC,0x0714,0x06D3,0x0738,0x0705,0x0646,0x064D,0x06B7, + 0x0667,0x0666,0x0620,0x05F5,0x0591,0x057E,0x0528,0x04D5, + 0x04B3,0x04AC,0x048E,0x03BC,0x03C7,0x04DF,0x04DE,0x04C8, + 0x0415,0x03DD,0x03BA,0x03A7,0x037B,0x034B,0x02F4,0x0264, + 0x0251,0x01FA,0x0174,0x01D6,0x0218,0x01C1,0x0183,0x010C, + 0x00AB,0x0085,0x0099,0x00D7,0x00EA,0x011E,0x00D1,0x00DD, + 0x00AE,0x00C4,0x0113,0x014C,0x014B,0x00C6,0x00B3,0x00C8, + 0x00AE,0x0097,0xFD51,0xFD5D,0xFDE9,0xFE0F,0xFE00,0xFDD0, + 0xFE53,0xFE4D,0xFE5A,0xFE3D,0xFE5E,0xFE7A,0xFE75,0xFEBE, + 0xFEAB,0xFEDA,0xFEDD,0xFF19,0xFF39,0xFE87,0xFEDB,0xFFC0, + 0x0029,0x0081,0x0150,0x01CA,0x01E2,0x01F5,0x0267,0x02B3, + 0x035C,0x04A1,0x065F,0x079D,0x07FB,0x07DD,0x0849,0x0890, + 0x0896,0x0940,0x0955,0x0913,0x0925,0x0A8F,0x0B4B,0x0A02, + 0x098C,0x0976,0x09A4,0x0A90,0x0BCF,0x0CFA,0x0CD9,0x0CBF, + 0x0CDF,0x0E6F,0x1050,0x11FE,0x1330,0x12ED,0x12A1,0x12C0, + 0x1328,0x1489,0x15DA,0x15D5,0x15B8,0x15DF,0x1698,0x1763, + 0x1797,0x177E,0x1781,0x1798,0x17BB,0x186C,0x189E,0x18DC, + 0x1916,0x18B5,0x1875,0x18C9,0x19D6,0x1A9C,0x1A57,0x18D6, + 0x1840,0x1843,0x1832,0x188C,0x193A,0x195F,0x1835,0x1710, + 0x1793,0x17C7,0x17D9,0x1768,0x164F,0x15EB,0x164B,0x166D, + 0x167F,0x15E9,0x14C1,0x13E4,0x13B7,0x1403,0x144F,0x141E, + 0x132C,0x1293,0x1245,0x1242,0x1122,0x0EEB,0x0B59,0x06E1, + 0x0249,0xFD48,0xF42E,0xEBBC,0xE4DB,0xDE48,0xDEF6,0xE6A0, + 0xF2AC,0xFE96,0x07CC,0x0DFB,0x12A3,0x183A,0x1F01,0x24BE, + 0x282E,0x2874,0x25B3,0x2158,0x1D3B,0x1AD2,0x19DF,0x1A28, + 0x1B75,0x1E19,0x2096,0x2156,0x1F84,0x1AFD,0x147C,0x0DBF, + 0x0768,0x0210,0xFC7E,0xF4DA,0xECC7,0xE4E7,0xE036,0xDF7F, + 0xE2BF,0xE80E,0xEDDE,0xF1C9,0xF422,0xF660,0xF952,0xFC41, + 0xFDC9,0xFEBE,0xFF55,0x0038,0x0087,0x01CD,0x02FF,0x0501, + 0x074C,0x0A6D,0x0DDE,0x11F8,0x1450,0x13D1,0x1088,0x0C17, + 0x092E,0x04A3,0x0030,0xFB4C,0xF5CE,0xEFF3,0xEB00,0xE7AF, + 0xE668,0xE616,0xE68A,0xE7C2,0xE8A1,0xE95D,0xE94A,0xE8A6, + 0xE7F8,0xE7B2,0xE757,0xE75B,0xE91E,0xEC24,0xEE00,0xF014, + 0xF396,0xF6F4,0xFA28,0xFE24,0x0176,0x03AC,0x0490,0x041C, + 0x02AE,0x00BF,0xFDCF,0xFB0C,0xF807,0xF579,0xF300,0xF0CC, + 0xEF3E,0xEDA8,0xEBE7,0xEAEA,0xE9EB,0xE7E2,0xE733,0xE6A5, + 0xE45B,0xE31F,0xE20E,0xE079,0xE010,0xE133,0xE3A5,0xE53F, + 0xE67D,0xE809,0xEB3A,0xEE08,0xF034,0xF359,0xF60C,0xF7C3, + 0xF81A,0xF78C,0xF715,0xF709,0xF745,0xF6D7,0xF6AB,0xF649, + 0xF569,0xF404,0xF34B,0xF2F7,0xF278,0xF0EC,0xEF54,0xEDD0, + 0xEC4E,0xE98B,0xE6D8,0xE4FF,0xE3E4,0xE34D,0xE431,0xE536, + 0xE59C,0xE5B2,0xE61B,0xE799,0xEA5D,0xEDA1,0xF01E,0xF188, + 0xF1EE,0xF27A,0xF3B1,0xF4AE,0xF571,0xF603,0xF68D,0xF764, + 0xF7D4,0xF8C9,0xF994,0xF99A,0xF7EB,0xF6C9,0xF6A1,0xF706, + 0xF697,0xF4AF,0xF2C7,0xEFE4,0xEDB0,0xEC60,0xEC60,0xECFD, + 0xEC90,0xED4C,0xEDA4,0xEBCD,0xED33,0xEE20,0xEF4A,0xF07D, + 0xF160,0xF1B4,0xF1D8,0xF243,0xF39E,0xF4F6,0xF5B3,0xF65A, + 0xF71E,0xF92B,0xFA8D,0xFB13,0xFABF,0xFA81,0xFB15,0xFBB7, + 0xFB6C,0xFACD,0xF9D7,0xF85B,0xF6E8,0xF594,0xF4E8,0xF4F8, + 0xF49B,0xF3A8,0xF318,0xF33B,0xF35D,0xF2F1,0xF28F,0xF241, + 0xF240,0xF269,0xF2DB,0xF2EE,0xF2E4,0xF368,0xF3C4,0xF470, + 0xF5D6,0xF781,0xF78F,0xF7FE,0xF953,0xFAFD,0xFBFD,0xFB28, + 0xF82C,0xF22D,0xE923,0xDE63,0xD209,0xC39E,0xBF4A,0xBFEC, + 0xBF61,0xBE93,0xBE49,0xBF0C,0xC0A8,0xD924,0xF272,0x02D9, + 0x120C,0x22A6,0x3503,0x3E79,0x3E94,0x3E9B,0x3F1C,0x3B7B, + 0x3233,0x2E23,0x2DF7,0x31FE,0x3969,0x3EB9,0x3F3F,0x3F35, + 0x3FB0,0x3B08,0x29AC,0x18BA,0x096F,0xFB6B,0xEB43,0xD746, + 0xC383,0xBFDF,0xC04F,0xC048,0xBFED,0xC3FD,0xD22F,0xDD03, + 0xE68B,0xEEB9,0xF5A5,0xFB8A,0x0082,0x05AA,0x082D,0x0AAA, + 0x0D29,0x1051,0x1552,0x1BD5,0x2508,0x3034,0x3C6C,0x4087, + 0x4009,0x40BC,0x3EEC,0x34B4,0x28DB,0x1CBF,0x1054,0x0314, + 0xF557,0xE7E7,0xDCCF,0xD605,0xD3AD,0xD4E8,0xD832,0xDBA1, + 0xDE33,0xDEDA,0xDF1F,0xDE72,0xDCFE,0xDCDB,0xDEA1,0xE201, + 0xE6AB,0xEC48,0xF2E8,0xF9DA,0x02B1,0x0D05,0x187C,0x23E9, + 0x2C4E,0x30B0,0x3157,0x2F05,0x2B26,0x2551,0x1E5A,0x172A, + 0x1027,0x0A3C,0x0513,0xFFEF,0xFA81,0xF5A5,0xF22C,0xF0A7, + 0xEF93,0xEDC3,0xEAF4,0xE601,0xDFF7,0xDAA4,0xD6E6,0xD5CE, + 0xD784,0xD9AC,0xDD89,0xE21D,0xE8B2,0xF08B,0xF847,0x0048, + 0x08A5,0x0E5D,0x121C,0x1815,0x199C,0x1924,0x176B,0x14BD, + 0x12F9,0x126F,0x1201,0x1199,0x1019,0x0E01,0x0AC0,0x07A7, + 0x0565,0x02A0,0xFF8F,0xFAFC,0xF4EE,0xEEDD,0xE8A9,0xE3E2, + 0xE079,0xDE8B,0xDEE1,0xE11A,0xE3A1,0xE621,0xE91B,0xED11, + 0xF1AE,0xF635,0xFAC7,0xFF2D,0x0211,0x0394,0x0489,0x06B3, + 0x0914,0x0AA3,0x0C17,0x0DD7,0x104D,0x124C,0x12CA,0x1209, + 0x1136,0x0F31,0x0C61,0x096B,0x0630,0x02BD,0xFDC8,0xF7C6, + 0xF226,0xEE76,0xED05,0xECC6,0xEC58,0xEBEC,0xEB1C,0xECF2, + 0xEF08,0xF0D3,0xF321,0xF488,0xF500,0xF600,0xF7AC,0xF9AF, + 0xFC5A,0xFF4E,0x0277,0x052E,0x07C8,0x0A48,0x0D0C,0x0FC3, + 0x1110,0x10F7,0x0FBB,0x0E9A,0x0E13,0x0C80,0x094D,0x067F, + 0x0397,0xFFC0,0xFC9F,0xFB02,0xFA92,0xF9F5,0xF7EC,0xF5BC, + 0xF436,0xF309,0xF2AA,0xF284,0xF281,0xF226,0xF1FC,0xF2D2, + 0xF3CB,0xF4B7,0xF6C1,0xF96C,0xFB28,0xFD7B,0x01F5,0x0558, + 0x076C,0x08C6,0x090F,0x0828,0x051E,0xFDD2,0xF1F1,0xE285, + 0xCE9A,0xBEFC,0xBE5E,0xBDC9,0xBDA6,0xBDDF,0xBE89,0xBEA7, + 0xC178,0xDF12,0xFCAC,0x0FFB,0x20E3,0x34C1,0x3E7F,0x3DC9, + 0x3E3A,0x3E23,0x3E48,0x3E34,0x3E56,0x3C6E,0x3D83,0x3E8E, + 0x3E74,0x3E80,0x3EA1,0x3E86,0x3DE4,0x3EBB,0x37A3,0x21F7, + 0x0FA7,0xFD5E,0xE882,0xCEDF,0xBEC3,0xBF04,0xBEEF,0xBF10, + 0xBEDE,0xC187,0xD165,0xDE49,0xE81F,0xF165,0xF8C3,0xFE54, + 0x02D6,0x06C1,0x0B03,0x0F9F,0x13F3,0x18C1,0x1E17,0x25DC, + 0x315D,0x3D67,0x3F03,0x3EF6,0x3EFC,0x3ED5,0x3ED6,0x3DA8, + 0x3199,0x24F4,0x1446,0x0336,0xF2EA,0xE3F0,0xD916,0xD286, + 0xD023,0xD0A3,0xD3B4,0xD75A,0xDC5E,0xDEFD,0xDF08,0xDBE9, + 0xD826,0xD72C,0xD968,0xDE35,0xE461,0xEB57,0xF355,0xFC82, + 0x073E,0x14C9,0x22FC,0x2FD8,0x38F9,0x3DD0,0x3F40,0x3D17, + 0x373C,0x2F02,0x25EB,0x1CC4,0x1505,0x0EA6,0x098C,0x0451, + 0xFE91,0xF889,0xF44F,0xF1D2,0xF074,0xEE1C,0xEA02,0xE3EE, + 0xDC82,0xD55F,0xD06C,0xCEFD,0xD0C7,0xD4A6,0xD9B8,0xE00A, + 0xE886,0xF1E2,0xFB20,0x03CA,0x0CEF,0x15A3,0x1BFC,0x1F8B, + 0x1FB5,0x1D20,0x1B9A,0x194D,0x1761,0x167D,0x164E,0x159C, + 0x1432,0x1216,0x0FC2,0x0C56,0x07E7,0x035F,0xFEC4,0xF900, + 0xF259,0xEB3A,0xE4B4,0xDE80,0xD8CD,0xD73A,0xD8A0,0xDB12, + 0xDDF0,0xE187,0xE60C,0xEB42,0xF0EF,0xF67C,0xFADB,0xFF5F, + 0x030B,0x0588,0x079E,0x0A18,0x0CD6,0x0F28,0x10A2,0x127C, + 0x1545,0x187C,0x19ED,0x1908,0x1859,0x158D,0x107F,0x0B7E, + 0x0760,0x02E8,0xFE72,0xF870,0xF262,0xEDD7,0xEABE,0xEA1B, + 0xE9C9,0xEA51,0xEC20,0xEDE6,0xEE1C,0xEF05,0xF0AE,0xF28F, + 0xF479,0xF646,0xF887,0xFB5F,0xFEB9,0x01BA,0x0485,0x0757, + 0x0AAA,0x0E2F,0x11DB,0x1480,0x16B4,0x17DE,0x16B2,0x13AC, + 0x10F0,0x0F8A,0x0D9B,0x0A61,0x0642,0x02CC,0xFFC2,0xFC78, + 0xF979,0xF7FC,0xF7CC,0xF685,0xF4F1,0xF3B4,0xF2FC,0xF251, + 0xF134,0xF049,0xF06E,0xF193,0xF384,0xF56B,0xF72E,0xF97A, + 0xFBCB,0xFE4C,0x0141,0x050B,0x085C,0x0B25,0x0AC8,0x05D4, + 0xFC2C,0xEEC4,0xDF18,0xCB59,0xBFA2,0xC003,0xBF90,0xBFBA, + 0xC03D,0xC00D,0xBF99,0xCAE2,0xEC48,0x04E0,0x16F4,0x28DE, + 0x3C37,0x3FBA,0x3F46,0x3F90,0x3F67,0x3F47,0x3F65,0x3E40, + 0x3B0C,0x3C9A,0x3F4C,0x3F9A,0x3F95,0x3F6E,0x3F54,0x3EED, + 0x3F83,0x32D0,0x1D16,0x0C0B,0xF9EF,0xE487,0xCA6E,0xBF07, + 0xC02C,0xBF85,0xBFE4,0xBF34,0xC778,0xD83B,0xE449,0xEE9D, + 0xF6B6,0xFDBE,0x02B2,0x0610,0x08A2,0x0C03,0x1084,0x151C, + 0x1909,0x1E4C,0x269A,0x3351,0x3E5E,0x3F2C,0x3F28,0x3F42, + 0x3EE4,0x3F5E,0x3AC4,0x2BC7,0x1E5C,0x100B,0x000E,0xF15C, + 0xE341,0xD966,0xD485,0xD31F,0xD4D8,0xD838,0xDC24,0xDFB0, + 0xE1C3,0xE126,0xDE98,0xDA8A,0xD886,0xDA2A,0xDFFD,0xE73D, + 0xEE02,0xF566,0xFE3F,0x09D0,0x17B0,0x24EB,0x310F,0x3A54, + 0x3D87,0x3C1B,0x37F7,0x31AB,0x29DD,0x215F,0x189E,0x1071, + 0x0976,0x0366,0xFE25,0xF8D8,0xF509,0xF259,0xF018,0xEDA3, + 0xEA1A,0xE5CE,0xDFDF,0xD890,0xD16F,0xCDDC,0xCE1B,0xCFE3, + 0xD40E,0xD96F,0xDF82,0xE6DE,0xEFF3,0xF9A7,0x03F5,0x0C97, + 0x1361,0x17F8,0x1A5A,0x1A47,0x19E5,0x17FA,0x160D,0x1488, + 0x133E,0x1233,0x10C4,0x0F2F,0x0CE0,0x0A60,0x0830,0x04F7, + 0x0054,0xFA58,0xF397,0xEC93,0xE5B1,0xDFC6,0xDACB,0xD771, + 0xD62F,0xD6BF,0xD913,0xDCD1,0xE19C,0xE673,0xEB20,0xEFF2, + 0xF56C,0xFAB9,0xFE96,0x00E1,0x0306,0x04C3,0x060A,0x07C8, + 0x09EA,0x0D2E,0x10B2,0x1305,0x13BC,0x137E,0x12ED,0x1236, + 0x1017,0x0CEC,0x08BB,0x036C,0xFDA9,0xF72C,0xF1DE,0xEE05, + 0xEB0C,0xE8B9,0xE731,0xE689,0xE79C,0xE8F7,0xEA21,0xEA5A, + 0xECDB,0xEE72,0xEE6C,0xF1A3,0xF409,0xF5F2,0xF7C0,0xF9C8, + 0xFC64,0x0010,0x0428,0x08CE,0x0C9F,0x0F2C,0x10B4,0x122A, + 0x12BA,0x1262,0x10FD,0x0E88,0x0BFA,0x0862,0x04A9,0x014C, + 0xFE83,0xFBD6,0xF976,0xF6F0,0xF510,0xF3E6,0xF33C,0xF28E, + 0xF10F,0xEF77,0xEE26,0xEDAC,0xED8B,0xEE67,0xF029,0xF1F2, + 0xF377,0xF49D,0xF70E,0xFAE4,0xFF14,0x0255,0x0551,0x077A, + 0x0905,0x09A9,0x07CD,0x018E,0xF706,0xE913,0xD959,0xC616, + 0xBF20,0xBFD3,0xBF4F,0xBF67,0xBF99,0xC0AF,0xBF6D,0xCF69, + 0xEFC8,0x0480,0x162E,0x286B,0x3AB0,0x3EAD,0x3E6B,0x3E94, + 0x3EA4,0x3EA8,0x3EBE,0x3BFA,0x3BA9,0x3EDC,0x3F1B,0x3F0D, + 0x3F2F,0x3F23,0x3F49,0x3EBA,0x3DF5,0x2E1B,0x18DC,0x0719, + 0xF4C6,0xDE5D,0xC60F,0xBF7C,0xC047,0xBFEB,0xC05D,0xC040, + 0xCC0C,0xDC2C,0xE62E,0xEEDA,0xF718,0xFE38,0x0285,0x0543, + 0x0806,0x0C31,0x10FE,0x1667,0x1D5F,0x23AB,0x2BB0,0x38A4, + 0x400C,0x3FA9,0x401C,0x4005,0x3F6F,0x4070,0x3915,0x28AF, + 0x1B95,0x0DAD,0xFE89,0xEEB5,0xDFC1,0xD67A,0xD297,0xD2D8, + 0xD528,0xD8EE,0xDD54,0xE032,0xE0CD,0xDF6A,0xDC3C,0xD8A8, + 0xD724,0xD975,0xE08D,0xE8C4,0xF087,0xF794,0x00CD,0x0C34, + 0x19D2,0x2851,0x353D,0x3D23,0x3F2E,0x3CC0,0x3773,0x3118, + 0x29F8,0x21A3,0x1884,0x1033,0x09A5,0x04AE,0xFFDC,0xFAC9, + 0xF63B,0xF2BD,0xF066,0xEEB6,0xEBAD,0xE75A,0xE0FF,0xD8E9, + 0xD1E8,0xCEB5,0xCEEF,0xD269,0xD6D9,0xDBEA,0xE247,0xEA97, + 0xF49C,0xFF36,0x0863,0x108D,0x16F4,0x1B36,0x1DCB,0x1FDE, + 0x1EAA,0x1B79,0x1B11,0x1790,0x15A2,0x1620,0x163A,0x148F, + 0x11A1,0x0E08,0x0A3C,0x06CC,0x0256,0xFD14,0xF6BE,0xEF41, + 0xE7C8,0xE184,0xDD29,0xDAB5,0xD981,0xDA3F,0xDC1F,0xDF66, + 0xE3CE,0xE93A,0xEEDE,0xF418,0xF8C2,0xFCEE,0x004B,0x034D, + 0x0688,0x0949,0x0B2D,0x0CC4,0x0EBC,0x111F,0x13D3,0x160C, + 0x17BE,0x1811,0x172C,0x154C,0x1283,0x0F8A,0x0BCC,0x05D8, + 0xFF58,0xF99E,0xF491,0xF0AC,0xEDA0,0xEAD1,0xE8CA,0xE7E7, + 0xE84D,0xE942,0xEB35,0xECA6,0xEDCD,0xEECC,0xF25B,0xF5D7, + 0xF731,0xF967,0xFB2A,0xFDD1,0x0116,0x04E8,0x092A,0x0D13, + 0x1015,0x11CE,0x1362,0x14AE,0x1600,0x15B6,0x149A,0x11EE, + 0x0E2E,0x09AE,0x066A,0x04D5,0x01C5,0xFD70,0xFA61,0xF8E9, + 0xF74A,0xF5C7,0xF41C,0xF1ED,0xF0EF,0xF030,0xEFB2,0xF04C, + 0xF0C8,0xF0A6,0xEF8E,0xEFD2,0xF29A,0xF679,0xFA60,0xFD52, + 0xFFDC,0x0238,0x04BB,0x06ED,0x08BE,0x0AA5,0x088C,0x0002, + 0xF3D2,0xE66A,0xD5E8,0xC2F0,0xBE77,0xBEFF,0xBE6B,0xBE2C, + 0xBE8C,0xBF31,0xBF80,0xD698,0xF435,0x072C,0x1864,0x2D7C, + 0x3CD6,0x3D9E,0x3DBA,0x3DF6,0x3DE8,0x3E20,0x3CA4,0x3820, + 0x3A67,0x3E73,0x3E2D,0x3E65,0x3E5F,0x3E59,0x3DDA,0x3E50, + 0x386F,0x2407,0x1182,0x001D,0xEC3A,0xD337,0xC018,0xBEB9, + 0xBEA3,0xBEDA,0xBEEE,0xBF81,0xCBEF,0xD9E7,0xE35F,0xEBE7, + 0xF3B1,0xFA8C,0xFFD4,0x03E6,0x06B3,0x09D9,0x0E1C,0x1274, + 0x17C4,0x1EC9,0x29A0,0x385C,0x3EBE,0x3E4E,0x3EB2,0x3E4F, + 0x3E8B,0x3D0E,0x30F0,0x228D,0x13D7,0x044F,0xF371,0xE308, + 0xD805,0xCEDF,0xCC81,0xCE37,0xD0D7,0xD53A,0xD906,0xDAAB, + 0xDAAF,0xD8B3,0xD627,0xD561,0xD5CA,0xD902,0xDE79,0xE56A, + 0xEC3A,0xF4C4,0x0023,0x0DD3,0x1C7B,0x2967,0x33E3,0x398D, + 0x3B08,0x3898,0x3385,0x2D33,0x256F,0x1C5C,0x136F,0x0B7A, + 0x0513,0xFFD7,0xFB07,0xF768,0xF3AB,0xF0BB,0xEE75,0xEC58, + 0xE8A0,0xE25B,0xDAB9,0xD3C1,0xCFDE,0xCE78,0xCF0D,0xD151, + 0xD538,0xDAC8,0xE1DF,0xEA84,0xF4D1,0x0047,0x0A31,0x110F, + 0x1564,0x1990,0x1C85,0x1CE9,0x1B49,0x1925,0x1753,0x15AA, + 0x1310,0x11F7,0x1143,0x0FB5,0x0D25,0x09FE,0x06DE,0x03EF, + 0xFF6D,0xF8B8,0xF100,0xE9C2,0xE321,0xDDDD,0xDA3F,0xD806, + 0xD769,0xD8CF,0xDB4B,0xDE8C,0xE437,0xEA4A,0xEFAE,0xF498, + 0xF932,0xFDFE,0x0205,0x048D,0x05F2,0x076A,0x0A07,0x0D01, + 0x0F87,0x11B7,0x13C3,0x15D8,0x1754,0x17B4,0x172C,0x15D3, + 0x1302,0x0E95,0x0971,0x052A,0x00E9,0xFA16,0xF43F,0xEF31, + 0xEC01,0xEA26,0xE9D0,0xE9CC,0xEA9F,0xEB61,0xEBF6,0xED37, + 0xEF44,0xF1CD,0xF4B2,0xF6B4,0xF7DA,0xF8EE,0xFAE4,0xFD7A, + 0x00BF,0x05A2,0x0A28,0x0DD6,0x104B,0x1227,0x13B6,0x14A5, + 0x1561,0x14D7,0x1303,0x106D,0x0CFE,0x09B3,0x06AE,0x0385, + 0xFFED,0xFD0E,0xFA88,0xF8EE,0xF7CC,0xF686,0xF4FA,0xF2A0, + 0xF12A,0xF01E,0xEFDC,0xF083,0xF0A1,0xF0D9,0xF123,0xF277, + 0xF4E5,0xF803,0xFB17,0xFED6,0x0181,0x0496,0x079B,0x09E4, + 0x0A0D,0x06C1,0xFE8B,0xF23E,0xE34A,0xD0CC,0xC114,0xBFE3, + 0xBFDA,0xBF8F,0xBF75,0xC05A,0xC03B,0xC655,0xE617,0x01A6, + 0x1142,0x22CB,0x37F4,0x3F9A,0x3F43,0x3F9E,0x3F88,0x3F57, + 0x3FA1,0x3D0F,0x39A1,0x3CCA,0x3F97,0x3F6E,0x3F71,0x3F92, + 0x3F81,0x3EC9,0x3F67,0x3602,0x1FCF,0x0CFD,0xFB0F,0xE68A, + 0xCCF8,0xBFC0,0xBFD1,0xBF92,0xBFD0,0xBF77,0xC2DB,0xD224, + 0xDF48,0xE943,0xF261,0xF9F7,0xFF8D,0x02C2,0x059E,0x0923, + 0x0D7D,0x11BE,0x169B,0x1BE5,0x23F1,0x3004,0x3CFA,0x3F53, + 0x3EFA,0x3F59,0x3EDF,0x3F4D,0x3B02,0x2C68,0x1E51,0x0F53, + 0xFF58,0xEFAB,0xE09D,0xD509,0xCF4D,0xCF9D,0xD462,0xD6E1, + 0xD9B6,0xDCF1,0xDF08,0xDECF,0xDC2F,0xD8DE,0xD7E3,0xD9A7, + 0xDE0B,0xE41D,0xEAB2,0xF256,0xFB84,0x0691,0x135A,0x2135, + 0x2DC1,0x3662,0x3B92,0x3C1D,0x3838,0x315A,0x2962,0x2049, + 0x1854,0x11C7,0x0B1B,0x03DA,0xFCC0,0xF6DD,0xF36D,0xF11F, + 0xEF44,0xEDB4,0xEA60,0xE520,0xDEC7,0xD879,0xD373,0xCF77, + 0xCD0B,0xCD36,0xD04B,0xD556,0xDDDE,0xE68F,0xEF18,0xF7A8, + 0x002D,0x0904,0x11A0,0x187D,0x1BC8,0x1C31,0x1A24,0x16C7, + 0x1540,0x1462,0x1366,0x12CD,0x11D9,0x1073,0x0DCE,0x0AF4, + 0x0812,0x04F0,0x017D,0xFCAD,0xF622,0xEEB9,0xE7FD,0xE15C, + 0xDB81,0xD74F,0xD5D9,0xD64F,0xD879,0xDBD5,0xE0B8,0xE5D2, + 0xEA2E,0xEE46,0xF305,0xF8CE,0xFE30,0x0288,0x0500,0x0590, + 0x0676,0x0809,0x0AB9,0x0E0F,0x1141,0x1342,0x1431,0x1475, + 0x1500,0x1427,0x1203,0x0E00,0x092D,0x0483,0xFFCF,0xFACB, + 0xF4F4,0xEF5C,0xEA75,0xE77B,0xE65E,0xE6A8,0xE725,0xE7D6, + 0xE890,0xE99F,0xEB7D,0xEDE1,0xF018,0xF1BF,0xF28B,0xF5BA, + 0xF8EF,0xFA0E,0xFE05,0x00E8,0x0484,0x0856,0x0BD2,0x0E6A, + 0x1133,0x12F3,0x135D,0x12DB,0x11E9,0x1092,0x0DEC,0x0A5C, + 0x06EC,0x03C6,0x00AA,0xFDE9,0xFB34,0xF978,0xF7EE,0xF5BD, + 0xF3B5,0xF22F,0xF1A3,0xF14B,0xF0F8,0xF04D,0xF006,0xEF54, + 0xF01B,0xF1D0,0xF429,0xF6EA,0xF921,0xFB1B,0xFE83,0x024D, + 0x05E3,0x08DB,0x0A6F,0x0AA5,0x0940,0x0512,0xFC69,0xF0B7, + 0xE2FF,0xD0F1,0xC0F5,0xBFBB,0xBFC3,0xBFA6,0xBFD0,0xC0A0, + 0xBFB4,0xCE55,0xEDFF,0x0324,0x1239,0x214B,0x332A,0x3DCA, + 0x3DF0,0x3E6E,0x3E3B,0x3EDE,0x3A5E,0x3266,0x313E,0x35BE, + 0x3D38,0x3F08,0x3EDB,0x3EF1,0x3EAF,0x3EC6,0x3CC4,0x2BB5, + 0x19D2,0x0A1D,0xF868,0xE43B,0xCD7A,0xC016,0xBFDB,0xBF9A, + 0xBFF0,0xC07F,0xCCDE,0xDBDC,0xE5B4,0xEDA2,0xF488,0xF99B, + 0xFE80,0x033E,0x06EB,0x0A63,0x0D7A,0x1164,0x1666,0x1BBC, + 0x2356,0x2F94,0x3D9A,0x404C,0x3F9B,0x3FC6,0x3F81,0x3EDF, + 0x32D4,0x250A,0x1998,0x0CF1,0xFEB0,0xEFE1,0xE2F9,0xDA08, + 0xD535,0xD4FD,0xD757,0xDB31,0xDF2C,0xE12C,0xE18A,0xE017, + 0xDD3B,0xDADD,0xDA54,0xDC94,0xE117,0xE720,0xEDC3,0xF56A, + 0xFE3B,0x089A,0x1481,0x2107,0x2BE4,0x339B,0x373A,0x36B0, + 0x3258,0x2BC2,0x2480,0x1D56,0x1622,0x0F8D,0x09E9,0x0436, + 0xFF34,0xFABD,0xF7A8,0xF546,0xF36B,0xF143,0xEDBA,0xE8F9, + 0xE367,0xDDBA,0xD831,0xD492,0xD36E,0xD515,0xD838,0xDCDC, + 0xE39F,0xEB0D,0xF455,0xFCFC,0x0567,0x0D1C,0x136E,0x1758, + 0x1962,0x1911,0x18B2,0x1790,0x15C2,0x146F,0x1420,0x1319, + 0x10F8,0x1120,0x0EB6,0x0CCA,0x0AE8,0x07D1,0x0346,0xFDFE, + 0xF745,0xF03F,0xEA40,0xE51C,0xE0A3,0xDE1E,0xDCE1,0xDCC0, + 0xDDDD,0xE065,0xE479,0xE985,0xEEFD,0xF436,0xF881,0xFBD6, + 0xFEC5,0x00A9,0x0263,0x04ED,0x07E3,0x0A6C,0x0C68,0x0E09, + 0x1028,0x1205,0x1385,0x145C,0x1523,0x1430,0x1208,0x0E6B, + 0x0A17,0x0569,0x00C5,0xFBC7,0xF62A,0xF133,0xEE8F,0xED34, + 0xEC10,0xEACC,0xE9ED,0xEA93,0xEB53,0xECD1,0xEF5F,0xF1B8, + 0xF316,0xF35C,0xF3E4,0xF58E,0xF837,0xFD08,0x0078,0x0277, + 0x0601,0x09C1,0x0D33,0x0FD5,0x1089,0x10FC,0x119F,0x11D0, + 0x1158,0x0FB4,0x0D0E,0x0967,0x0538,0x018E,0xFF75,0xFD8C, + 0xFB36,0xF8F3,0xF81F,0xF719,0xF584,0xF3E6,0xF230,0xF0DE, + 0xF0C7,0xF0F2,0xF115,0xF11A,0xF143,0xF138,0xF263,0xF4D2, + 0xF883,0xFC8C,0xFF7E,0x00F7,0x026C,0x0564,0x07EC,0x09A0, + 0x0978,0x070D,0x0138,0xFAFF,0xF63F,0xEFBD,0xE60C,0xDA65, + 0xD014,0xCB3A,0xCE30,0xD80A,0xE487,0xEFF1,0xF8C3,0xFED6, + 0x03A5,0x08B0,0x0EE6,0x14A1,0x17A6,0x16E6,0x12E0,0x0EAD, + 0x0BB9,0x0B38,0x0CF5,0x0FE7,0x141F,0x194C,0x1D88,0x2010, + 0x1FA1,0x1BB4,0x15B4,0x0E60,0x07CC,0x0257,0xFC46,0xF494, + 0xEBE1,0xE3CE,0xDF9E,0xE038,0xE46A,0xEA2B,0xEFC9,0xF425, + 0xF666,0xF781,0xF8ED,0xFAB5,0xFC27,0xFC90,0xFC97,0xFD84, + 0xFEC8,0xFFB1,0x0138,0x041B,0x08E7,0x0EDB,0x14F2,0x195F, + 0x1B17,0x1AF4,0x17CE,0x13ED,0x1027,0x0C95,0x07E2,0x032A, + 0xFE51,0xF9E2,0xF67D,0xF3CC,0xF293,0xF2D4,0xF3D8,0xF732, + 0xF617,0xF602,0xF5E1,0xF39A,0xF1FD,0xF147,0xF1D5,0xF2DC, + 0xF3ED,0xF439,0xF64D,0xF972,0xFE2D,0x0260,0x0716,0x0B6F, + 0x0EA9,0x1065,0x1116,0x10F7,0x0F37,0x0CD0,0x0A4A,0x0909, + 0x0765,0x05AF,0x03BA,0x0222,0x0067,0xFED1,0xFDE9,0xFDBA, + 0xFE6E,0xFD91,0xFB9B,0xF87A,0xF539,0xF2DA,0xF140,0xF01F, + 0xF037,0xF147,0xF264,0xF31C,0xF41B,0xF6AF,0xFA81,0xFDFD, + 0x011D,0x0401,0x0626,0x06B8,0x0658,0x0534,0x04F2,0x05FB, + 0x066D,0x0634,0x05F8,0x0665,0x05DC,0x04D2,0x03C8,0x01A4, + 0x0159,0x00F8,0x0038,0xFECA,0xFCAD,0xFA9E,0xF8B3,0xF6A5, + 0xF572,0xF471,0xF401,0xF31F,0xF1D3,0xF09B,0xEFED,0xEF24, + 0xEF83,0xF122,0xF212,0xF429,0xF512,0xF488,0xF3BE,0xF3CE, + 0xF4D4,0xF613,0xF73B,0xF805,0xF7B3,0xF820,0xF831,0xF821, + 0xF840,0xF7EB,0xF710,0xF68F,0xF5EE,0xF565,0xF4A7,0xF3F9, + 0xF303,0xF26F,0xF25A,0xF197,0xF031,0xEEEA,0xEE35,0xED4D, + 0xECF8,0xECCF,0xEC6D,0xEC06,0xEBB0,0xEBEF,0xEC0D,0xEBA2, + 0xEB36,0xEBF2,0xEBA3,0xEB5D,0xEB1D,0xEAE6,0xEADD,0xEADC, + 0xEACF,0xEAA5,0xEA31,0xE9F4,0xE9C5,0xE9B7,0xE959,0xE8D6, + 0xE8EF,0xE927,0xE8DF,0xE8C2,0xE868,0xE835,0xE839,0xE861, + 0xE88E,0xE899,0xE890,0xE8D2,0xE8D3,0xE917,0xE940,0xE9D9, + 0xEA2D,0xEA36,0xEA95,0xEAFE,0xEB6A,0xEBD9,0xEC53,0xECA7, + 0xED19,0xED36,0xED64,0xEDF9,0xEEA2,0xEEDC,0xEF19,0xEF53, + 0xEFDB,0xF048,0xF0A0,0xF0DB,0xF10E,0xF141,0xF1A1,0xF1E9, + 0xF222,0xF251,0xF31E,0xF3A5,0xF425,0xF499,0xF5A2,0xF3C8, + 0xF4CB,0xF6B2,0xF603,0xF699,0xF73B,0xF7CA,0xF803,0xF854, + 0xF8C6,0xF8E6,0xF925,0xF9F6,0xFAA0,0xFB3E,0xFBEC,0xFC39, + 0xFC69,0xFC71,0xFCB7,0xFD8E,0xFE23,0xFEDF,0xFED1,0xFF26, + 0xFF87,0xFFAA,0x0033,0x0057,0x010B,0x0163,0x01BB,0x01CA, + 0x01D5,0x025D,0x0235,0x021A,0x02B5,0x0330,0x0331,0x0360, + 0x03BE,0x03EF,0x0421,0x0441,0x04EB,0x05C7,0x05F8,0x0638, + 0x06B0,0x06EA,0x0742,0x0751,0x0799,0x07E8,0x086D,0x08A4, + 0x0939,0x0943,0x0987,0x09C1,0x0AD5,0x0D41,0x0CDA,0x0C6B, + 0x0C97,0x0C97,0x0C88,0x0C75,0x0CA4,0x0C97,0x0CE7,0x0D14, + 0x0D15,0x0D09,0x0CBD,0x0CDE,0x0CAC,0x0CAF,0x0D28,0x0D40, + 0x0C8E,0x0CE0,0x0DD5,0x0D64,0x0CB0,0x0D1C,0x0D96,0x0DC4, + 0x0DFD,0x0DA6,0x0D9E,0x0D34,0x0CE2,0x0CDB,0x0D76,0x0DE6, + 0x0E46,0x0DD0,0x0D7E,0x0D3C,0x0D2B,0x0D23,0x0D9D,0x0D5A, + 0x0D7B,0x0D10,0x0C09,0x0C19,0x0D5A,0x0DF0,0x0DC7,0x0E1D, + 0x0E33,0x0DC7,0x0D8F,0x0D5B,0x0D09,0x0C8E,0x0C16,0x0C7C, + 0x0C53,0x0BCE,0x0C13,0x0BC2,0x0BB6,0x0BCC,0x0BDD,0x0BEC, + 0x0B89,0x0B30,0x0AB5,0x0B5F,0x0BC4,0x0BA9,0x0BA2,0x0C45, + 0x0C5C,0x0BF9,0x0BA2,0x0B1C,0x0AB0,0x0AB7,0x0ABE,0x0AC5, + 0x0B29,0x0AEF,0x0A6B,0x0A42,0x0A64,0x0AA6,0x0AFC,0x0AD8, + 0x0B02,0x0A83,0x0A34,0x0A44,0x0A1D,0x09FE,0x09FC,0x09B8, + 0x0A48,0x0A96,0x0A23,0x09E2,0x09D4,0x09BA,0x09F9,0x0A0D, + 0x09F4,0x0964,0x0970,0x0928,0x095C,0x0973,0x094C,0x096D, + 0x09A9,0x097A,0x0996,0x0967,0x0960,0x082F,0x092F,0x094D, + 0x07DC,0x0930,0x08EE,0x08AC,0x08C0,0x08DF,0x08E7,0x08F3, + 0x0918,0x0945,0x08D2,0x085A,0x08BB,0x0888,0x0834,0x082B, + 0x082E,0x080E,0x0809,0x07E2,0x0852,0x0829,0x07C0,0x07DA, + 0x0770,0x0769,0x07BA,0x07D9,0x07D8,0x072B,0x071E,0x0720, + 0x06EE,0x0715,0x0705,0x06E9,0x0700,0x066D,0x0640,0x0651, + 0x0689,0x0668,0x0600,0x0626,0x0627,0x05FD,0x061B,0x05E9, + 0x0577,0x05A8,0x05C6,0x056C,0x058C,0x0592,0x057A,0x0549, + 0x0535,0x0553,0x056C,0x056B,0x0587,0x0519,0x03B8,0x02AD, + 0x0314,0x031B,0x031A,0x032C,0x0366,0x039A,0x0315,0x02E0, + 0x02F7,0x0324,0x030C,0x02FC,0x0309,0x0361,0x032C,0x0321, + 0x037B,0x0301,0x0341,0x0403,0x03B8,0x033F,0x0339,0x02E2, + 0x030C,0x0349,0x0387,0x0381,0x0330,0x0362,0x035F,0x0364, + 0x0386,0x0395,0x0399,0x03A1,0x02BF,0x02D8,0x02E5,0x02E3, + 0x0304,0x030F,0x0442,0x03A5,0x026B,0x01EF,0x0225,0x0255, + 0x028B,0x0269,0x0281,0x023E,0x02CA,0x0372,0x03C6,0x0399, + 0x03FA,0x041C,0x03A7,0x03B8,0x035F,0x0354,0x02FD,0x02FC, + 0x02F2,0x0316,0x0354,0x031D,0x0272,0x01F0,0x01FA,0x01E3, + 0x021E,0x0267,0x026A,0x026B,0x01B4,0x01FB,0x0233,0x01F7, + 0x0221,0x01BD,0x0195,0x016B,0x0169,0x01C7,0x01E3,0x01A4, + 0x01CF,0x022E,0x0221,0x01C1,0x0123,0x00CF,0x00DD,0x00BF, + 0x0098,0x00C3,0x009C,0x0080,0xFFB0,0xFF93,0xFF61,0xFF5D, + 0xFF2F,0xFF32,0xFF01,0xFF39,0xFED4,0xFF37,0xFF8F,0xFF60, + 0xFF86,0xFF6A,0xFF7A,0xFF3F,0xFF4E,0xFF3E,0xFEE9,0xFF3B, + 0xFFEF,0xFFF7,0x0047,0x0051,0x00A7,0x0084,0x00B0,0x0147, + 0x01F0,0x0328,0x0437,0x0444,0x03B1,0x02BE,0x035B,0x04D0, + 0x058F,0x0607,0x065C,0x0666,0x0602,0x0645,0x06A6,0x0742, + 0x07ED,0x07D2,0x0802,0x087A,0x08E4,0x0909,0x098B,0x0BA6, + 0x0C14,0x0C60,0x0CA3,0x0D39,0x0E16,0x0EAC,0x0E80,0x0E58, + 0x0F51,0x10D8,0x11BF,0x129E,0x12A8,0x132B,0x12F8,0x12CF, + 0x1386,0x147F,0x1474,0x14A1,0x149A,0x1483,0x14E6,0x15D2, + 0x1578,0x157B,0x1620,0x166D,0x1698,0x162C,0x161B,0x1652, + 0x15FD,0x1554,0x15F4,0x167C,0x16C2,0x15F0,0x155E,0x1581, + 0x1613,0x15AA,0x155C,0x1517,0x1424,0x14A8,0x14EC,0x1415, + 0x137C,0x13C9,0x13B2,0x1329,0x12DC,0x12CB,0x122E,0x1035, + 0x0ED2,0x0F53,0x103B,0x0FA7,0x0F1E,0x0EEB,0x0ED4,0x0E3A, + 0x0D6A,0x0CA4,0x0CB0,0x0D52,0x0D9F,0x0CFF,0x0BF6,0x0ADD, + 0x0A00,0x09D3,0x0A5E,0x0ACD,0x0A09,0x08D7,0x0847,0x07E4, + 0x07D3,0x0755,0x0651,0x05CF,0x053C,0x052E,0x052B,0x04B2, + 0x03F8,0x0321,0x01DF,0x0193,0x023E,0x0293,0x024A,0x014B, + 0x00E6,0x00B5,0x004A,0x0008,0xFFDF,0xFF7D,0xFEF3,0xFEAA, + 0xFE4E,0xFE18,0xFDED,0xFD01,0xFB2F,0xFAC0,0xFBD9,0xFC76, + 0xFC2E,0xFBBA,0xFB1C,0xFA22,0xF9F2,0xF9FE,0xFA28,0xF924, + 0xF9D8,0xF9A9,0xF6D9,0xF587,0xF1A9,0xED7C,0xE90E,0xE47F, + 0xDD82,0xD4B2,0xCA51,0xC36C,0xC26D,0xC865,0xD394,0xE10D, + 0xEE4C,0xF8C4,0x01A9,0x0AD0,0x1621,0x21E4,0x2AAD,0x2D65, + 0x2B3E,0x265A,0x1E98,0x159E,0x0C78,0x0422,0xFE36,0xF976, + 0xF604,0xF3B2,0xF1AC,0xEF52,0xEBE6,0xE90B,0xE824,0xE979, + 0xEA43,0xE8A2,0xE3B1,0xDD32,0xD7A4,0xD4E8,0xD5BE,0xD9A2, + 0xDF3C,0xE4F2,0xEA18,0xEFB8,0xF6E2,0xFF0A,0x06F4,0x0E34, + 0x1454,0x17DD,0x18F5,0x1693,0x1187,0x0A84,0x0411,0xFE50, + 0xF7F7,0xF209,0xEE8E,0xE9C7,0xE4E3,0xE173,0xDFE4,0xE07C, + 0xE1BA,0xE345,0xE400,0xE39A,0xE224,0xE047,0xDEAD,0xDEBC, + 0xDFED,0xE1E4,0xE4E3,0xE7B4,0xEAAC,0xEE79,0xF254,0xF6CB, + 0xFC5F,0x0272,0x0754,0x0A80,0x0B76,0x0A29,0x0794,0x042C, + 0x0058,0xFC20,0xF7C2,0xF3D6,0xEFD1,0xEBB4,0xE714,0xE3DC, + 0xE1C9,0xE18C,0xE294,0xE418,0xE6B5,0xE6B3,0xE64D,0xE5C4, + 0xE5FE,0xE7CD,0xE9CA,0xEBA1,0xED32,0xEF91,0xF25B,0xF47C, + 0xF68D,0xF942,0xFD85,0x0185,0x03A3,0x0589,0x06FF,0x070F, + 0x053D,0x01F4,0xFF52,0xFDCC,0xFB8E,0xF7C1,0xF358,0xEFB4, + 0xEC3F,0xE9AE,0xE7C0,0xE79C,0xE908,0xEA11,0xEA36,0xEA39, + 0xEB7D,0xEDE4,0xEF41,0xF064,0xF20C,0xF40C,0xF58C,0xF690, + 0xF72E,0xF845,0xF9D7,0xFBD5,0xFD8D,0xFF54,0x00C2,0x0118, + 0x00EE,0x0128,0x0163,0x0137,0xFFA2,0xFD11,0xFA6E,0xF7FA, + 0xF569,0xF2F2,0xF089,0xEF37,0xEDF6,0xED2B,0xECA9,0xED37, + 0xEDE1,0xEE94,0xEEDC,0xF064,0xF304,0xF4F4,0xF6A7,0xF860, + 0xF872,0xF837,0xFB5F,0xFBFB,0xFC7A,0xFDDB,0xFE13,0xFD7B, + 0xFD8C,0xFE60,0xFF15,0xFF2D,0xFEBA,0xFDCE,0xFC69,0xFAEB, + 0xF93E,0xF7D0,0xF669,0xF4FD,0xF359,0xF219,0xF14C,0xF171, + 0xF139,0xF0CD,0xF0FD,0xF1CC,0xF389,0xF577,0xF6F7,0xF8B0, + 0xF9A0,0xFA34,0xFADA,0xFB69,0xFCED,0xFE66,0xFF6B,0xFF8F, + 0xFED8,0xFE60,0xFE5D,0xFE9E,0xFF4D,0xFF6A,0xFF23,0xFEA0, + 0xFD83,0xFC3A,0xFB8B,0xFB1A,0xFA1C,0xF8B7,0xF768,0xF69E, + 0xF642,0xF614,0xF5F1,0xF56C,0xF582,0xF531,0xF5B7,0xF1A8, + 0xE81A,0xDCFA,0xD1EE,0xC554,0xBFC0,0xC004,0xBFB6,0xBFC5, + 0xC02F,0xC0E0,0xBFC7,0xD32A,0xF5AB,0x0E8C,0x283E,0x3D7B, + 0x3F8A,0x3F11,0x3F4B,0x3FD2,0x3F9C,0x3F0D,0x3EC9,0x3F5F, + 0x3A28,0x25E0,0x13F4,0x0860,0x017A,0xFC80,0xF679,0xEE6B, + 0xE5CC,0xE1A2,0xE3A9,0xE7AA,0xE7FF,0xE138,0xD2F5,0xC2E4, + 0xBEDF,0xBF8D,0xBF1A,0xC2AB,0xCF68,0xDE06,0xEE33,0x0169, + 0x175C,0x2EC9,0x3E1E,0x3EB9,0x3EDB,0x3F04,0x3EE4,0x3E4B, + 0x3DD9,0x3D55,0x2D60,0x1BC2,0x0EC1,0x026F,0xF55F,0xE7F7, + 0xDC48,0xD48A,0xD256,0xD4B7,0xD8F8,0xDC1B,0xDBED,0xD9E9, + 0xD707,0xD4A8,0xD3D4,0xD487,0xD675,0xDA4E,0xE092,0xE8E7, + 0xF3CF,0xFF71,0x0BBB,0x18D3,0x2669,0x341A,0x3D84,0x3E5F, + 0x3E16,0x3EB5,0x3A6D,0x2F94,0x24C0,0x1885,0x0B20,0xFD4F, + 0xEF64,0xE3B3,0xDB77,0xD66C,0xD3AC,0xD2C3,0xD2CD,0xD49F, + 0xD7A3,0xDB7B,0xDEA0,0xE08E,0xE36C,0xE5C5,0xE93A,0xECD6, + 0xF167,0xF6E4,0xFCAA,0x02DA,0x09F2,0x12D8,0x1B3A,0x2228, + 0x292B,0x2A61,0x2BA1,0x2BDC,0x28E5,0x23A7,0x1B4A,0x1173, + 0x0656,0xFBF9,0xF2C8,0xEAAB,0xE371,0xDD6C,0xD8D1,0xD733, + 0xD820,0xDA8D,0xDE30,0xE174,0xE4AD,0xE8CD,0xEDFB,0xF256, + 0xF610,0xF9CF,0xFD04,0xFFA2,0x02CD,0x06E6,0x0BBC,0x105D, + 0x1410,0x1702,0x1937,0x1B1B,0x1C64,0x1C3F,0x1A62,0x16F9, + 0x1176,0x0AFF,0x0458,0xFD86,0xF6AF,0xEFE7,0xE9D4,0xE595, + 0xE274,0xE0D0,0xE018,0xE0B3,0xE340,0xE6E6,0xEACF,0xEF3E, + 0xF38A,0xF79A,0xFB71,0xFF88,0x02BA,0x056E,0x07F0,0x09C7, + 0x0A8F,0x0C94,0x0EA9,0x0F75,0x0FE5,0x106A,0x10C3,0x1116, + 0x1073,0x0DEB,0x09C8,0x04EA,0x00B4,0xFC8E,0xF894,0xF489, + 0xF097,0xED26,0xEA7F,0xE746,0xE667,0xE800,0xEA19,0xED68, + 0xF154,0xF4C3,0xF78A,0xFB37,0xFF1A,0x02C4,0x05E0,0x08BA, + 0x0BE9,0x0DA0,0x0DD8,0x0E0E,0x0EA6,0x0EB8,0x0E07,0x0D70, + 0x0D92,0x0D85,0x0C61,0x09F9,0x075F,0x035D,0x001B,0xFCCE, + 0xFAA0,0xF990,0xF762,0xF42E,0xF087,0xEEE8,0xEF58,0xF10C, + 0xF21A,0xF111,0xECC2,0xE3D6,0xD96A,0xCFD9,0xC4F9,0xC06B, + 0xC0B6,0xC07D,0xC079,0xC167,0xC0A0,0xC82F,0xEA65,0x08EF, + 0x21E1,0x3957,0x406F,0x3FF7,0x4079,0x4069,0x4073,0x402D, + 0x3FFC,0x3F82,0x4021,0x33EC,0x1D20,0x0CE1,0x015D,0xFA83, + 0xF58E,0xEFE0,0xE8DB,0xE334,0xE199,0xE468,0xE840,0xE80F, + 0xE021,0xD28C,0xC530,0xC039,0xC04D,0xC2FE,0xCE42,0xDC6A, + 0xEC0C,0xFCDD,0x1067,0x2608,0x3A05,0x4004,0x3FAD,0x3FF9, + 0x3FE8,0x3FD9,0x3F3F,0x3FD2,0x3C41,0x2911,0x17AF,0x0A10, + 0xFC35,0xF150,0xE6AD,0xDAE9,0xD416,0xD2C9,0xD617,0xDBA3, + 0xDF9F,0xE068,0xDECA,0xDBFC,0xDA4D,0xDA94,0xDC35,0xDE83, + 0xE365,0xEB5D,0xF4E8,0xFFAC,0x0A4A,0x1572,0x20E0,0x2D95, + 0x3AB0,0x3F72,0x3F28,0x3F30,0x3F3C,0x36F0,0x2A93,0x1F01, + 0x13A8,0x07F0,0xFAF7,0xECCF,0xE0D5,0xD844,0xD3A0,0xD279, + 0xD352,0xD5FF,0xDA27,0xDE0A,0xE10F,0xE3B3,0xE5F3,0xE867, + 0xEB57,0xEFD5,0xF4FB,0xFAA0,0xFF54,0x03ED,0x08CF,0x0F03, + 0x16D5,0x1EDF,0x2655,0x2C84,0x2FDC,0x3035,0x2EC8,0x28B1, + 0x216D,0x1996,0x113E,0x0737,0xFCAE,0xF245,0xE89E,0xE0E8, + 0xDBF5,0xDA23,0xDAAA,0xDC30,0xDE8E,0xE1A3,0xE668,0xEAE6, + 0xEEA2,0xF253,0xF707,0xFC1C,0xFF9F,0x02BC,0x06C4,0x09ED, + 0x0C2D,0x0E4A,0x1128,0x157E,0x19D5,0x1CE6,0x1DAF,0x1CAB, + 0x1A2B,0x16EB,0x12D3,0x0E48,0x0902,0x0334,0xFBFA,0xF3BE, + 0xECB5,0xE754,0xE354,0xE020,0xDFC2,0xE216,0xE4C8,0xE707, + 0xE984,0xED13,0xF21A,0xF793,0xFBFC,0xFFA9,0x0308,0x05FE, + 0x08AF,0x0AB0,0x0B87,0x0D49,0x0EB9,0x0FE6,0x113C,0x12DE, + 0x1397,0x1216,0x0F3C,0x0C30,0x0A13,0x079A,0x0401,0xFFA7, + 0xFB18,0xF62B,0xF16E,0xED48,0xE9E7,0xE7FE,0xE6D2,0xE775, + 0xE993,0xEB98,0xEE44,0xF162,0xF444,0xF7C4,0xFC2B,0x0093, + 0x0487,0x0777,0x092D,0x0A33,0x0B1E,0x0BB7,0x0CA0,0x0D73, + 0x0DCE,0x0DA6,0x0D3E,0x0BA1,0x093E,0x06DC,0x045D,0x0229, + 0xFF2E,0xFCB9,0xFA6D,0xF7AD,0xF444,0xF0F1,0xEE48,0xECA8, + 0xECE8,0xEE47,0xEFD7,0xF10C,0xF0B3,0xED55,0xE629,0xDF6E, + 0xD7AE,0xCD42,0xC291,0xBEAD,0xBF2F,0xBEEC,0xBF00,0xBFED, + 0xBF02,0xCC21,0xEFE4,0x0ADD,0x22EB,0x3959,0x3F17,0x3EDA, + 0x3F4D,0x3F2F,0x3F46,0x3F1F,0x3EDA,0x3EE8,0x3D31,0x28F1, + 0x1461,0x0672,0xFD97,0xF895,0xF45A,0xED70,0xE5DA,0xE119, + 0xE203,0xE6E5,0xEB89,0xEA22,0xDFE3,0xD039,0xC20B,0xBFDD, + 0xBFC6,0xC47D,0xD129,0xDF94,0xEE57,0xFF53,0x1299,0x27B8, + 0x3AEF,0x3FBA,0x3F6D,0x3FD3,0x3FAC,0x3F85,0x3F02,0x3F95, + 0x3552,0x21D5,0x1327,0x05DB,0xF95B,0xECBB,0xE06F,0xD5AE, + 0xCFB7,0xD0CA,0xD5D8,0xDBB7,0xDF01,0xDEFF,0xDCCD,0xDA40, + 0xD8C3,0xD861,0xD9B0,0xDDDA,0xE3FC,0xEBEC,0xF4BA,0xFE56, + 0x08A1,0x1531,0x214D,0x2DD8,0x3ADE,0x3F74,0x3F12,0x3F7B, + 0x3C92,0x3203,0x2707,0x1B2B,0x0E8A,0x023A,0xF593,0xE920, + 0xDE31,0xD6B4,0xD304,0xD2B8,0xD4BB,0xD873,0xDC3D,0xE02D, + 0xE341,0xE533,0xE700,0xEAF2,0xEDE0,0xF132,0xF56E,0xF9C2, + 0xFE4A,0x0309,0x08E4,0x0FC8,0x1780,0x1FA3,0x27AC,0x2CC8, + 0x2EAD,0x2DF9,0x2AC4,0x253E,0x1D58,0x14F7,0x0D06,0x0444, + 0xFA11,0xEF97,0xE5B6,0xDF7F,0xDBFC,0xDA84,0xDB34,0xDDBC, + 0xE0DE,0xE46F,0xE81F,0xEC03,0xF059,0xF496,0xF91A,0xFDC5, + 0x022E,0x0579,0x0843,0x0A43,0x0D08,0x10DD,0x14A2,0x18D3, + 0x1CB7,0x1F4B,0x2006,0x1EA3,0x1C8F,0x19CF,0x1562,0x1005, + 0x0A67,0x0352,0xFB64,0xF459,0xEE61,0xEA17,0xE6B8,0xE4C8, + 0xE4A8,0xE5C1,0xE805,0xEA36,0xED6C,0xF1A4,0xF6E2,0xFB06, + 0xFF3C,0x0251,0x056C,0x0846,0x0A83,0x0C51,0x0F13,0x10CB, + 0x10E4,0x1345,0x1320,0x1354,0x1404,0x135C,0x11C5,0x0F44, + 0x0BDD,0x0851,0x03C5,0xFF78,0xFB8F,0xF715,0xF21A,0xEDD7, + 0xEB3C,0xEA47,0xEA16,0xEA37,0xEB38,0xEDBA,0xF104,0xF450, + 0xF7E1,0xFBC8,0xFF51,0x025D,0x0540,0x081E,0x0AB4,0x0BC5, + 0x0C15,0x0C7D,0x0D20,0x0D93,0x0D35,0x0C76,0x0BFB,0x0ADC, + 0x08C2,0x06C5,0x0570,0x03E2,0x015F,0xFD8E,0xF98F,0xF696, + 0xF4AA,0xF2C7,0xF136,0xEFFF,0xEF8A,0xEF0A,0xEF44,0xF0FC, + 0xF163,0xEE3B,0xE70A,0xDDB0,0xD4C2,0xCC7F,0xC266,0xBFE3, + 0xC007,0xBFE2,0xC005,0xC0EF,0xBFDF,0xD4C3,0xF906,0x11FA, + 0x29EC,0x3D5E,0x3FA2,0x3F8B,0x3FF8,0x3FB8,0x3F97,0x3F8D, + 0x3EF7,0x3F19,0x3B2B,0x25B0,0x10D4,0x038A,0xFCB1,0xF8C5, + 0xF44A,0xED4D,0xE59D,0xE1A4,0xE37D,0xE862,0xEBC9,0xE7F0, + 0xDC2F,0xCC66,0xC0AE,0xBF91,0xBFA9,0xC7BD,0xD426,0xE0D2, + 0xF0C6,0x03AE,0x175A,0x2D32,0x3D6A,0x3F13,0x3F06,0x3F38, + 0x3F14,0x3EE5,0x3E96,0x3E05,0x2F2B,0x1B87,0x0CEC,0xFF81, + 0xF2FE,0xE67D,0xDB7E,0xD3E2,0xD0FD,0xD2B9,0xD6BC,0xDAC1, + 0xDCC0,0xDC3F,0xDABE,0xD9B5,0xD8D2,0xD80C,0xD90B,0xDCA8, + 0xE2AB,0xEAC4,0xF4E8,0xFF89,0x0B4B,0x17A9,0x243B,0x3065, + 0x3ABA,0x3E6F,0x3DE4,0x3E81,0x3991,0x2E23,0x231A,0x1603, + 0x086C,0xFBB9,0xEFBA,0xE4FF,0xDB6B,0xD4B8,0xD129,0xD0D3, + 0xD2D4,0xD644,0xDA1A,0xDD9A,0xE0EB,0xE39D,0xE657,0xE924, + 0xEBB0,0xEEAD,0xF2B9,0xF87B,0xFE7E,0x04BA,0x0ACD,0x1142, + 0x186F,0x1F9F,0x2591,0x2A13,0x2C15,0x2A8C,0x2675,0x21F3, + 0x1812,0x0F6E,0x06D1,0xFCCD,0xF2F6,0xEA80,0xE31A,0xDD72, + 0xD9B9,0xD7A4,0xD81E,0xDB22,0xDF48,0xE376,0xE7D2,0xEB33, + 0xEE89,0xF199,0xF5BE,0xFAA1,0xFE7E,0x0219,0x0553,0x0828, + 0x0B47,0x0EF3,0x12EB,0x16A6,0x1963,0x1ADD,0x1B5D,0x1AF4, + 0x1948,0x1605,0x10DC,0x0A1F,0x02DC,0xFC6C,0xF63A,0xF05F, + 0xEB19,0xE676,0xE2D1,0xE062,0xE081,0xE320,0xE6FE,0xEA66, + 0xEDD4,0xF161,0xF546,0xF907,0xFCD0,0x00BD,0x04E3,0x07CE, + 0x092B,0x0A8B,0x0C3B,0x0E38,0x0F8C,0x10D9,0x10D0,0x0FAD, + 0x0FCC,0x0F27,0x0D68,0x0B58,0x080A,0x03A3,0xFF47,0xFB48, + 0xF77C,0xF2F3,0xEEB2,0xEA9B,0xE7C5,0xE695,0xE72A,0xE92E, + 0xEB96,0xEDF3,0xEF86,0xF2A4,0xF6DD,0xFAA3,0xFE21,0x01AF, + 0x049F,0x0721,0x0948,0x0ACD,0x0B9D,0x0B61,0x0AF8,0x0BA0, + 0x0C6D,0x0D00,0x0C8C,0x0AFE,0x08B0,0x061E,0x03C1,0x01C0, + 0xFFB2,0xFC87,0xFB29,0xF8AF,0xF4E6,0xF1BD,0xEF84,0xEEA9, + 0xEF23,0xF05C,0xF167,0xF109,0xEC06,0xE346,0xDA7B,0xD1A9, + 0xC67B,0xC0BE,0xC106,0xC06E,0xC083,0xC11A,0xC1A2,0xC306, + 0xE08C,0x01AA,0x1AB6,0x33C0,0x402A,0x4026,0x4091,0x4084, + 0x407D,0x406C,0x4058,0x3F98,0x4076,0x37FC,0x215D,0x0FD7, + 0x039F,0xFBAC,0xF68F,0xF124,0xEA3B,0xE420,0xE183,0xE34B, + 0xE759,0xE7D9,0xE1C2,0xD5A7,0xC721,0xC034,0xC0A3,0xC10F, + 0xCA5A,0xD872,0xE753,0xF7D0,0x0A9E,0x1F78,0x35FD,0x3FE7, + 0x3FB0,0x3FF9,0x401F,0x4003,0x3F93,0x3FA0,0x3D9C,0x2B13, + 0x1837,0x09D6,0xFE08,0xF244,0xE5B0,0xDAB5,0xD3E0,0xD050, + 0xD3A2,0xD9F1,0xDC9C,0xDD98,0xDC7D,0xDB23,0xDA99,0xDA36, + 0xD9EC,0xDBB6,0xE021,0xE755,0xF120,0xFC9C,0x0803,0x12C3, + 0x1D2F,0x2852,0x35CB,0x3ED4,0x3F30,0x3F30,0x3F64,0x3844, + 0x2B4A,0x1FEC,0x148E,0x08FB,0xFBEE,0xEE33,0xE22B,0xD8CF, + 0xD378,0xD12C,0xD18C,0xD3B0,0xD6F3,0xDA9D,0xDEBC,0xE240, + 0xE461,0xE546,0xE743,0xEB09,0xF06E,0xF6C2,0xFCC5,0x01C7, + 0x059D,0x0A84,0x113B,0x1A28,0x233D,0x2A01,0x2CEF,0x2BCA, + 0x283F,0x23AF,0x1D6A,0x1617,0x0E3F,0x0692,0xFC9B,0xF284, + 0xE951,0xE24F,0xDD24,0xD91E,0xD7B6,0xD948,0xDCFA,0xE1DB, + 0xE5C8,0xE914,0xEC12,0xEF93,0xF3CE,0xF8AE,0xFD6E,0x017C, + 0x0481,0x07EC,0x0B61,0x0DAB,0x1036,0x1507,0x1926,0x1B58, + 0x1CEC,0x1D12,0x1B83,0x1805,0x135A,0x0E0E,0x08A1,0x024E, + 0xFBBF,0xF48E,0xEDB8,0xE7A5,0xE26B,0xDF56,0xDEE1,0xE07A, + 0xE2F5,0xE4E7,0xE64A,0xE9E3,0xEF90,0xF41A,0xF8A6,0xFCBC, + 0x009B,0x040B,0x06A4,0x089A,0x09DB,0x0ACD,0x0C07,0x0DFE, + 0x0FB4,0x107B,0x10AD,0x0FDE,0x0DDD,0x0B59,0x0871,0x061A, + 0x02E3,0xFE6C,0xF97C,0xF412,0xEF40,0xEB8D,0xE8BD,0xE702, + 0xE67C,0xE721,0xE79C,0xE84B,0xEA6A,0xEDF9,0xF223,0xF700, + 0xFB35,0xFE5A,0x00E2,0x0372,0x068D,0x08CB,0x0A1D,0x0B09, + 0x0B98,0x0C53,0x0C78,0x0BFD,0x0AD9,0x09DF,0x0814,0x05AC, + 0x03B9,0x023A,0x001A,0xFD17,0xF944,0xF5E4,0xF384,0xF155, + 0xEF1A,0xED06,0xECE2,0xEE11,0xEF09,0xEF18,0xEE63,0xECE6, + 0xE930,0xE18F,0xD8F0,0xD01B,0xC41A,0xBE46,0xBF3C,0xBF52, + 0xBE7A,0xBFED,0xBF51,0xC545,0xE82F,0x06A9,0x1E88,0x3614, + 0x3EF7,0x3EDF,0x3F31,0x3F3E,0x3F1B,0x3EFA,0x3EC5,0x3E95, + 0x3E00,0x2CE8,0x17DC,0x0997,0x007A,0xFB3B,0xF65F,0xEF14, + 0xE74B,0xE16D,0xE11F,0xE5A6,0xEAF6,0xEA9F,0xE276,0xD396, + 0xC48D,0xBFCD,0xBFC5,0xC2B5,0xCFB8,0xDE4E,0xED05,0xFD1F, + 0x0F51,0x233C,0x38B0,0x3FB6,0x3F22,0x3FB6,0x3FB0,0x3F76, + 0x3F10,0x3FCC,0x3831,0x2449,0x14DC,0x08B9,0xFDEA,0xF1C6, + 0xE4D5,0xD95C,0xD2E5,0xD2B2,0xD77A,0xDD94,0xE0AB,0xDFAF, + 0xDD36,0xD9AD,0xD817,0xD7F0,0xD9EE,0xDD8F,0xE2EF,0xEAB3, + 0xF34B,0xFC9D,0x0707,0x122B,0x1E73,0x2BE1,0x390A,0x3EF5, + 0x3F2F,0x3F33,0x3CB2,0x32AC,0x28BC,0x1DA8,0x119E,0x0578, + 0xF8F9,0xEBEF,0xE0AF,0xD866,0xD3EF,0xD35B,0xD4F8,0xD829, + 0xDC2A,0xE049,0xE34C,0xE50A,0xE6A9,0xE9C1,0xEDF1,0xF2AA, + 0xF760,0xFB8B,0x00DA,0x0491,0x08B0,0x0F78,0x17D3,0x20A7, + 0x2804,0x2CC1,0x2E1B,0x2D0C,0x29B6,0x251C,0x1FF0,0x189A, + 0x106B,0x071F,0xFC33,0xF1B4,0xE8D8,0xE211,0xDE03,0xDC5F, + 0xDD00,0xDF69,0xE243,0xE5A1,0xE88D,0xEC13,0xF051,0xF572, + 0xFA6B,0xFEF3,0x02A1,0x0462,0x0666,0x0876,0x0BBC,0x103D, + 0x148A,0x17B8,0x1A43,0x1C29,0x1D0C,0x1C8B,0x1B12,0x1826, + 0x148C,0x0F51,0x08F8,0x0297,0xFBD4,0xF463,0xED15,0xE701, + 0xE3A4,0xE304,0xE2C8,0xE350,0xE4E0,0xE7CA,0xEB4A,0xEF17, + 0xF334,0xF7E8,0xFCCA,0x0139,0x0453,0x0668,0x087F,0x0A5A, + 0x0B6D,0x0D5B,0x0FE9,0x1190,0x1254,0x12BE,0x116E,0x0F15, + 0x1072,0x0ECD,0x0B05,0x079B,0x03C7,0xFF21,0xFA2F,0xF59D, + 0xF1B7,0xEE5A,0xEAF1,0xE84D,0xE80F,0xE941,0xEAC9,0xEC64, + 0xEEF4,0xF1C8,0xF57B,0xF9B1,0xFE55,0x01D6,0x0473,0x06D8, + 0x08F8,0x09E5,0x0AFF,0x0C37,0x0D03,0x0D00,0x0C22,0x0B85, + 0x0AE5,0x09CE,0x0850,0x05FC,0x03A2,0x00FE,0xFE0A,0xFB75, + 0xF921,0xF6E2,0xF3A1,0xF0FA,0xEEAF,0xED5F,0xED6D,0xEE7F, + 0xF050,0xF18E,0xF173,0xEF6E,0xEB1F,0xE5B5,0xDFBF,0xD9F0, + 0xD19B,0xC342,0xBEA6,0xBF92,0xC0A6,0xC101,0xC3E9,0xDD53, + 0xF7DF,0x0C5C,0x1E46,0x3216,0x3F8B,0x3F7B,0x3FE6,0x3FC2, + 0x3FC2,0x3F69,0x3F36,0x3E36,0x2EF6,0x1B7C,0x0C6C,0x0162, + 0xFBB9,0xF8AC,0xF50E,0xEF76,0xEA3F,0xE832,0xE8F6,0xECCD, + 0xEFAC,0xEE0C,0xE6B6,0xDBD7,0xD28D,0xCE60,0xCF21,0xD4B8, + 0xDD71,0xE7B1,0xF33E,0xFFA2,0x0E34,0x1E1E,0x2D54,0x3A2A, + 0x3EFD,0x3E69,0x3E39,0x3E50,0x3E83,0x333E,0x231E,0x14E1, + 0x0872,0xFDF1,0xF4DE,0xECA2,0xE4D2,0xDE99,0xDBD8,0xDC89, + 0xDE61,0xE16E,0xE42D,0xE53A,0xE52D,0xE470,0xE326,0xE261, + 0xE27A,0xE4EC,0xE93E,0xEF58,0xF636,0xFD82,0x0578,0x0E21, + 0x1773,0x2141,0x2924,0x2E48,0x2FEE,0x2E3A,0x2A02,0x2353, + 0x1ACE,0x10F8,0x06B8,0xFBF9,0xF286,0xEB17,0xE50B,0xE0B1, + 0xDD11,0xDAFD,0xDBA6,0xDECA,0xE28E,0xE68C,0xE988,0xEBBF, + 0xEDC3,0xEF1D,0xF0ED,0xF3A6,0xF739,0xFB10,0xFEA6,0x0205, + 0x0600,0x0AC0,0x1120,0x1642,0x1A07,0x1C84,0x1E54,0x1EDD, + 0x1D52,0x197A,0x13E7,0x0CD1,0x048F,0xFC87,0xF7CC,0xF0FF, + 0xEBD6,0xE783,0xE2F2,0xE09A,0xE105,0xE34E,0xE6D7,0xEAC9, + 0xEE52,0xF185,0xF40C,0xF6C1,0xF9DC,0xFD39,0x0046,0x02BA, + 0x04C2,0x06DC,0x09CE,0x0BDD,0x0DA7,0x101C,0x12D3,0x1446, + 0x152B,0x14D3,0x12D7,0x0FC3,0x0BF3,0x0817,0x03F0,0xFFCE, + 0xFB2E,0xF64C,0xF148,0xECEB,0xEA2C,0xE995,0xE90C,0xE987, + 0xEBA0,0xEE6E,0xF259,0xF55E,0xF798,0xFA0B,0xFD0C,0x0036, + 0x03AC,0x0692,0x086C,0x0998,0x09AC,0x09AB,0x0AE7,0x0CCC, + 0x0DF6,0x0DD2,0x0C9F,0x0BB3,0x0A79,0x0817,0x03AB,0x009E, + 0xFE28,0xFAB8,0xF7C5,0xF5B4,0xF34C,0xF04C,0xECE3,0xEA3D, + 0xEA30,0xEC27,0xEF12,0xF173,0xF2C5,0xF448,0xF651,0xF9B8, + 0xFD4A,0xFF86,0x0292,0x056A,0x06C4,0x0776,0x07DE,0x086A, + 0x0836,0x084A,0x0841,0x0863,0x08B3,0x07FD,0x06A0,0x04A8, + 0x02B7,0x0121,0xFF95,0xFDAC,0xFC44,0xFAAC,0xF8CE,0xF6E2, + 0xF4E3,0xF45E,0xF578,0xF53B,0xF521,0xF58B,0xF650,0xF62B, + 0xF572,0xF36A,0xF20D,0xF0E0,0xEE27,0xEAB2,0xE7B6,0xE83C, + 0xED6F,0xF521,0xFDA0,0x053D,0x0C0B,0x1208,0x17CC,0x1DCA, + 0x2325,0x26FC,0x277C,0x249C,0x1F83,0x1934,0x1255,0x0B5E, + 0x054D,0x009E,0xFCB0,0xF9FB,0xF858,0xF78C,0xF6E5,0xF609, + 0xF610,0xF748,0xF945,0xFA85,0xFA57,0xF8C0,0xF685,0xF4F1, + 0xF483,0xF5C7,0xF832,0xFACF,0xFD34,0x005C,0x048D,0x09A4, + 0x0E5B,0x11DD,0x141B,0x15EB,0x17AE,0x17F0,0x15D7,0x1197, + 0x0C12,0x073A,0x0268,0xFE82,0xFB38,0xF866,0xF59E,0xF2C1, + 0xF0E7,0xF1A7,0xF37F,0xF4BC,0xF5A1,0xF71F,0xF676,0xF7D5, + 0xFA21,0xF95F,0xF9F7,0xF9C9,0xFA5D,0xFB78,0xFE3F,0x015D, + 0x03C1,0x04FC,0x0635,0x074C,0x0915,0x0ACE,0x0BC5,0x0B7C, + 0x0A3F,0x08F9,0x077A,0x05BD,0x041F,0x02A2,0x00E0,0xFFB9, + 0xFE67,0xFD27,0xFC9D,0xFC0D,0xFB4A,0xFBB4,0xFD2B,0xFE99, + 0xFFE2,0x00D3,0x014F,0x0116,0x0115,0x00DB,0x0030,0x0004, + 0x0061,0x009D,0x0065,0xFF91,0xFEFB,0xFE48,0xFCF1,0xFC34, + 0xFBC1,0xFAF1,0xFA87,0xF974,0xF7AD,0xF63D,0xF4AA,0xF2D1, + 0xF151,0xF091,0xEFEC,0xF011,0xF17C,0xF03B,0xEE85,0xED83, + 0xECB7,0xEC17,0xEBA8,0xEB29,0xEAE6,0xEA64,0xE9A3,0xE8AC, + 0xE7E3,0xE75C,0xE6FD,0xE661,0xE694,0xE6A8,0xE638,0xE525, + 0xE53C,0xE5C9,0xE52E,0xE461,0xE487,0xE406,0xE310,0xE2D7, + 0xE289,0xE23B,0xE1F7,0xE271,0xE2E7,0xE285,0xE226,0xE254, + 0xE227,0xE26A,0xE29F,0xE2D9,0xE317,0xE339,0xE334,0xE3FB, + 0xE453,0xE34D,0xE47F,0xE630,0xE6D0,0xE722,0xE7CA,0xE832, + 0xE86D,0xE907,0xE8E3,0xE921,0xE955,0xE90D,0xE933,0xE955, + 0xE932,0xE9EF,0xE9D0,0xEA2F,0xEACF,0xEB22,0xEB30,0xEB53, + 0xEBE0,0xEC6C,0xECAE,0xED8D,0xEE35,0xEE8D,0xEF04,0xEFB3, + 0xF098,0xF133,0xF1D2,0xF287,0xF328,0xF381,0xF3D3,0xF485, + 0xF511,0xF5A3,0xF619,0xF680,0xF70C,0xF788,0xF81C,0xF8DB, + 0xF92B,0xF987,0xFA46,0xFAC6,0xFB0B,0xFB4F,0xFBEA,0xFC66, + 0xFC9B,0xFD15,0xFD24,0xFD8E,0xFDF0,0xFE34,0xFE63,0xFE8A, + 0xFEA4,0xFF7D,0x0034,0x00CD,0x0156,0x01C4,0x022F,0x02EA, + 0x0370,0x03E1,0x0490,0x04FB,0x0440,0x058A,0x0687,0x0564, + 0x06CA,0x0700,0x0707,0x0758,0x080D,0x081E,0x08A4,0x088A, + 0x0864,0x08BE,0x08AA,0x08E8,0x095F,0x09D3,0x09A1,0x0A77, + 0x0AA8,0x0AA3,0x0AE7,0x0B1B,0x0B3E,0x0BA4,0x0C5D,0x0C4F, + 0x0C6B,0x0C99,0x0CC6,0x0CDA,0x0D5E,0x0D75,0x0DAF,0x0D8C, + 0x0E21,0x0E2D,0x0E32,0x0E31,0x0E3C,0x0E55,0x0E45,0x0EBE, + 0x0EEB,0x0ED8,0x0EB0,0x0F0B,0x0ECB,0x0F1C,0x0F65,0x0F5D, + 0x0F83,0x0F9C,0x0F32,0x0F3C,0x0EE1,0x0F27,0x0F81,0x0FC7, + 0x0FFD,0x0FD8,0x0FA7,0x0F38,0x0F8B,0x0E41,0x0CE3,0x0D4C, + 0x0D53,0x0D84,0x0DC6,0x0E1E,0x0E66,0x0E6C,0x0E37,0x0E0A, + 0x0E69,0x0E68,0x0EAC,0x0E9D,0x0E23,0x0E42,0x0E81,0x0F10, + 0x0E81,0x0DFF,0x0E77,0x0EB9,0x0E32,0x0E7E,0x0EDC,0x0EDA, + 0x0EC1,0x0EF6,0x0EED,0x0E7D,0x0E2C,0x0E3B,0x0E3D,0x0E9D, + 0x0E9F,0x0EFD,0x0EE6,0x0E9C,0x0EB1,0x0E82,0x0E59,0x0E24, + 0x0E05,0x0F2C,0x0EB7,0x0DC2,0x0D41,0x0D88,0x0DED,0x0DFA, + 0x0E5A,0x0DF5,0x0DE7,0x0E4A,0x0E6A,0x0EA0,0x0E81,0x0EB3, + 0x0F10,0x0EB4,0x0EBE,0x0EC7,0x0E56,0x0DBA,0x0DB7,0x0D66, + 0x0D1A,0x0D26,0x0D02,0x0D0D,0x0C74,0x0C43,0x0C0A,0x0C0F, + 0x0BF2,0x0C1C,0x0BD2,0x0B9C,0x0BBD,0x0B3B,0x0B2D,0x0B61, + 0x0B24,0x0ADE,0x0A2B,0x09C0,0x0A16,0x0A0B,0x09C7,0x09CF, + 0x09BB,0x0992,0x095F,0x08EA,0x0908,0x08B0,0x0879,0x0829, + 0x0842,0x0876,0x0805,0x07E4,0x07A1,0x0787,0x079D,0x075D, + 0x07DF,0x079F,0x0734,0x06F2,0x0710,0x0712,0x06CE,0x06B4, + 0x06A1,0x070C,0x06E9,0x0677,0x06EA,0x0632,0x0490,0x0665, + 0x05FB,0x059F,0x05AA,0x052C,0x0522,0x053D,0x0558,0x0589, + 0x054A,0x051E,0x04B0,0x0445,0x040E,0x03DF,0x0428,0x03CD, + 0x03C5,0x0416,0x0414,0x040A,0x03B4,0x039B,0x03B8,0x0353, + 0x031D,0x0322,0x034C,0x036E,0x033F,0x0326,0x0304,0x02F4, + 0x028F,0x0299,0x02A4,0x029E,0x02DD,0x02D6,0x02DE,0x02AC, + 0x028A,0x030D,0x02FF,0x02B5,0x02ED,0x027E,0x0227,0x0272, + 0x028C,0x0287,0x02A1,0x02BA,0x0283,0x022B,0x0264,0x0298, + 0x026A,0x0258,0x0268,0x03DA,0x04D8,0x043A,0x046A,0x0496, + 0x0473,0x03F6,0x036B,0x0316,0x0327,0x02E7,0x02DA,0x02F6, + 0x0312,0x02E6,0x02EB,0x029B,0x027C,0x028F,0x01EA,0x0163, + 0x020F,0x0268,0x01AA,0x0112,0x012C,0x0155,0x0157,0x00EE, + 0x00AF,0xFF9F,0xFFB3,0xFF98,0xFFFF,0x00EC,0x0117,0x0145, + 0x0196,0x0233,0x032E,0x0418,0x04DC,0x0576,0x0613,0x0635, + 0x0637,0x06C9,0x087A,0x0A24,0x0B12,0x0B6F,0x0B71,0x0BDF, + 0x0BB9,0x0B5D,0x0BD2,0x0CA2,0x0CD8,0x0CE9,0x0D1A,0x0DB1, + 0x0D50,0x0CDB,0x0CC4,0x0D90,0x0E48,0x0ED8,0x0F62,0x0FB8, + 0x0FBA,0x0F4B,0x0F43,0x1010,0x11DF,0x12B6,0x12D1,0x125D, + 0x122A,0x11F8,0x123C,0x12F9,0x13F0,0x14FA,0x15AF,0x15D0, + 0x1515,0x14FD,0x1511,0x14C7,0x14E0,0x159F,0x1583,0x137A, + 0x12F5,0x1294,0x1246,0x12D4,0x13C7,0x131C,0x1136,0x0DD7, + 0x0A31,0x0662,0x028A,0xFD46,0xF6C2,0xF032,0xECF8,0xEFD2, + 0xF810,0x01FC,0x0BD3,0x14F5,0x1D04,0x24A9,0x2D54,0x362C, + 0x3CC4,0x3F42,0x3D43,0x374E,0x3013,0x2834,0x1FC7,0x1787, + 0x0F31,0x08D9,0x04B3,0x0238,0x0033,0xFF0D,0xFE30,0xFE5F, + 0xFF6B,0x0181,0x0527,0x065C,0x048F,0x0259,0x00AB,0x0052, + 0x0119,0x02BF,0x04EF,0x088B,0x0CDA,0x1159,0x15E0,0x19EC, + 0x1DF1,0x2117,0x21CF,0x2199,0x2133,0x1D8D,0x170A,0x1029, + 0x08CD,0x0197,0xFAEA,0xF590,0xF1FD,0xEF90,0xED45,0xEC2B, + 0xECD8,0xEF7B,0xF377,0xF710,0xFA70,0xFCB8,0xFF3F,0x01C1, + 0x035F,0x041E,0x045C,0x04B3,0x051C,0x0553,0x052C,0x05C2, + 0x0657,0x0672,0x063D,0x062E,0x05BA,0x045C,0x0277,0xFFD5, + 0xFC51,0xF7B2,0xF2ED,0xEF02,0xEC5A,0xE9C4,0xE666,0xE4AF, + 0xE47E,0xE5E3,0xE816,0xEB0B,0xEDDE,0xF13E,0xF4D8,0xF8EF, + 0xFC38,0xFEF1,0x0117,0x01BC,0x00CA,0x004A,0xFFEF,0xFD19, + 0xFD28,0xFB66,0xF892,0xF6DD,0xF5AE,0xF457,0xF329,0xF1B1, + 0xF037,0xEF55,0xEE9D,0xED3C,0xEB57,0xE930,0xE7BE,0xE6B5, + 0xE6AF,0xE76D,0xE8AD,0xEA35,0xEB3A,0xECDE,0xEF2E,0xF261, + 0xF5D5,0xF8B5,0xFA9E,0xFBEF,0xFCAC,0xFC90,0xFB52,0xFA13, + 0xF8C6,0xF76F,0xF557,0xF318,0xF094,0xEDF3,0xEC24,0xEA8C, + 0xEA2D,0xEA4C,0xEA05,0xE962,0xE8DB,0xE9DA,0xEB4B,0xEC08, + 0xEBBD,0xEBEC,0xED34,0xEE6D,0xEFD2,0xF10E,0xF214,0xF31C, + 0xF3B1,0xF4EE,0xF67A,0xF8A6,0xFB06,0xFC4E,0xFA7A,0xF9DD, + 0xF977,0xF82B,0xF62C,0xF474,0xF2A9,0xF0D5,0xEF04,0xEDB4, + 0xED76,0xECCF,0xEBD6,0xEB8F,0xEC85,0xEE03,0xEF38,0xEF02, + 0xEF6B,0xF213,0xF3BA,0xF448,0xF4F9,0xF6B8,0xF71D,0xF65A, + 0xF63C,0xF6B6,0xF7AC,0xF848,0xF7EC,0xF6B1,0xF64C,0xF6D5, + 0xF695,0xF560,0xF3F5,0xF294,0xF1F5,0xF166,0xF127,0xEFE5, + 0xEF1E,0xED74,0xEB7A,0xECA3,0xEF75,0xF159,0xF1BD,0xF115, + 0xF0AA,0xF163,0xF418,0xF6F6,0xF7D8,0xF79E,0xF6C0,0xF693, + 0xF65E,0xF6A8,0xF6E9,0xF5B6,0xF4C6,0xF458,0xF460,0xF439, + 0xF258,0xED9C,0xE63E,0xDD91,0xD57D,0xCDF6,0xC400,0xBE42, + 0xBE62,0xBE4A,0xBE67,0xBF20,0xBE61,0xCDFB,0xECF3,0x0375, + 0x15B4,0x297E,0x3B7B,0x3E3F,0x3E3C,0x3E85,0x3E58,0x3D9A, + 0x3E62,0x3144,0x19A5,0x0544,0xF2CA,0xE41C,0xDA6A,0xD5A4, + 0xD2FE,0xD064,0xCD88,0xCCDC,0xD0A4,0xD834,0xE10D,0xE75D, + 0xE7A5,0xE2B5,0xDC9B,0xDA89,0xDF3C,0xE901,0xF526,0x0115, + 0x0B62,0x153C,0x2030,0x2BB8,0x3674,0x3D94,0x3F80,0x3EBD, + 0x3DCA,0x360E,0x2677,0x13B0,0xFEAA,0xEB5A,0xDC8C,0xD261, + 0xCB01,0xC5FC,0xC16F,0xBFE6,0xC12B,0xC841,0xD47D,0xE28F, + 0xEE97,0xF75B,0xFD03,0x019E,0x057A,0x08DA,0x0CE4,0x104E, + 0x131C,0x15C1,0x179A,0x193C,0x19D4,0x19C2,0x1996,0x1A68, + 0x1A82,0x1952,0x153F,0x0C4B,0x002E,0xF3DA,0xE9AF,0xE194, + 0xDAAC,0xD4C2,0xD01C,0xCD45,0xCD01,0xCFC6,0xD60B,0xDFF4, + 0xEAE5,0xF5C5,0x003F,0x09F6,0x128D,0x1870,0x1BC9,0x1CAC, + 0x1D15,0x1CD6,0x1BA5,0x18B5,0x14B1,0x0F30,0x0813,0x0264, + 0xFF06,0xFD15,0xFBB8,0xF99E,0xF5FF,0xF0FA,0xEC47,0xE8AE, + 0xE55D,0xE340,0xE1F1,0xE16E,0xE173,0xE1F4,0xE407,0xE87A, + 0xEEC2,0xF4F3,0xFCAF,0x0506,0x0C93,0x12ED,0x180B,0x1AF1, + 0x1BD2,0x1AAA,0x1921,0x1687,0x1341,0x0E79,0x081C,0x0123, + 0xFA82,0xF54C,0xF1F1,0xEFF3,0xEE75,0xECE6,0xEB79,0xEAA9, + 0xEB1D,0xED40,0xF047,0xF0C8,0xF1FB,0xF3AF,0xF5DB,0xF8FC, + 0xFC8D,0xFFB1,0x023F,0x05C1,0x0A38,0x0F2B,0x12B1,0x1435, + 0x1529,0x14C6,0x140A,0x12EC,0x1125,0x0E38,0x099B,0x035D, + 0xFCC8,0xF775,0xF3D9,0xF1DB,0xF075,0xEF52,0xEDA9,0xED4F, + 0xEE9B,0xF0FE,0xF43B,0xF788,0xFAD4,0xFE11,0x0147,0x039B, + 0x048B,0x05CC,0x0895,0x0AC5,0x0BFE,0x0C68,0x0D11,0x0D7B, + 0x0C7B,0x0B37,0x0A26,0x097F,0x090A,0x0725,0x037B,0x003F, + 0xFD1A,0xF99F,0xF65C,0xF489,0xF3DE,0xF38B,0xF330,0xF2D1, + 0xF245,0xF3F2,0xF6BE,0xF997,0xFCD1,0x0089,0x03C8,0x068B, + 0x07D6,0x08EA,0x0A7B,0x0B8D,0x0C44,0x0C81,0x0AB3,0x097B, + 0x0A43,0x06FE,0x0401,0x01F1,0xFF47,0xF973,0xEFBF,0xE41F, + 0xD8AF,0xCC34,0xC115,0xBF7B,0xBF5C,0xBF32,0xBF61,0xC055, + 0xBF8B,0xD574,0xF981,0x13D2,0x2CC8,0x3DFE,0x3F2D,0x3F34, + 0x3F83,0x3F60,0x3F59,0x3F22,0x3E81,0x3E97,0x2C49,0x11B0, + 0xFC6A,0xEAF7,0xDE80,0xD6FF,0xD241,0xCE65,0xCBAD,0xCC52, + 0xD1FA,0xDB2B,0xE3BA,0xE73B,0xE57F,0xE045,0xDC27,0xDCD4, + 0xE353,0xEF77,0xFD82,0x0AEB,0x18B2,0x26A2,0x360E,0x3ECF, + 0x3F08,0x3F3C,0x3F64,0x3F83,0x4010,0x40CE,0x378D,0x1DDA, + 0x051B,0xEEF1,0xDD82,0xD0E9,0xC6B7,0xC0C3,0xC034,0xC08A, + 0xC017,0xC816,0xD712,0xE625,0xF3B4,0xFDCB,0x055E,0x0B3F, + 0x1150,0x16EE,0x1A52,0x1CC6,0x207B,0x23DA,0x265E,0x2864, + 0x29A6,0x2A9B,0x2A96,0x2A21,0x2927,0x264C,0x1F0B,0x1383, + 0x047D,0xF603,0xE949,0xDE67,0xD53C,0xCCE3,0xC664,0xC37C, + 0xC425,0xC834,0xD14C,0xDE50,0xEB3F,0xF756,0x0396,0x0F6D, + 0x19F4,0x21F8,0x268C,0x2794,0x26B8,0x2525,0x22DB,0x1FA4, + 0x1ABE,0x14F5,0x0EB7,0x08EA,0x0401,0x0107,0xFDDF,0xF9EB, + 0xF4D9,0xEE8E,0xE946,0xE553,0xE228,0xDEC0,0xDB5A,0xD933, + 0xD976,0xDB72,0xDFCC,0xE5D5,0xEDA9,0xF62C,0xFE1C,0x0689, + 0x0FC6,0x1824,0x1ED2,0x225A,0x2381,0x229C,0x207D,0x1C9E, + 0x17AC,0x114A,0x09B2,0x01E3,0xFA25,0xF42E,0xEFD8,0xEC54, + 0xE972,0xE74C,0xE661,0xE65B,0xE6EE,0xE7D4,0xE993,0xEB9B, + 0xEDD4,0xEFCC,0xF2FB,0xF6FD,0xFB06,0xFE93,0x02FC,0x0866, + 0x0DFD,0x11B3,0x151E,0x17C6,0x1909,0x1A90,0x1A7C,0x153E, + 0x1286,0x0E9D,0x090C,0x025E,0xFC86,0xF6AC,0xF208,0xED93, + 0xEA40,0xE899,0xE885,0xE9AA,0xEB4C,0xEDDE,0xF0FF,0xF501, + 0xF8B9,0xFBDD,0xFF12,0x029F,0x05FC,0x082D,0x0A62,0x0C4C, + 0x0DC0,0x0EBA,0x0F28,0x0F74,0x0F5A,0x0F61,0x0EF5,0x0D64, + 0x0A5E,0x068C,0x02A2,0xFEF0,0xFBE5,0xF933,0xF649,0xF2BD, + 0xEF44,0xECD5,0xEBCE,0xEC50,0xEEC4,0xF1C3,0xF50D,0xF800, + 0xFB41,0xFEA9,0x022A,0x0580,0x082C,0x0B2F,0x0DC4,0x0EB9, + 0x0E63,0x0D53,0x0C56,0x0AF5,0x08D8,0x060F,0x0294,0xFF1E, + 0xF77C,0xEBC8,0xDECC,0xD34A,0xC665,0xBEC8,0xBEF7,0xBED9, + 0xBEBB,0xBF16,0xBFEA,0xC025,0xD964,0xFC08,0x1665,0x308E, + 0x3ECF,0x3E7D,0x3F43,0x3F7E,0x3F5E,0x3F45,0x3EFF,0x3EBA, + 0x3E57,0x2860,0x0D07,0xF796,0xE868,0xDF47,0xDAB5,0xD67A, + 0xD157,0xCCC5,0xCD30,0xD375,0xDDA1,0xE593,0xE7AA,0xE344, + 0xDD39,0xDB32,0xDD63,0xE588,0xF1EF,0xFF14,0x0D3F,0x1C23, + 0x2C27,0x3B60,0x401B,0x3FF9,0x4077,0x40A9,0x408E,0x4036, + 0x40FA,0x352D,0x1A66,0x00B4,0xEB9C,0xDB03,0xCFB6,0xC6DC, + 0xC1A1,0xC0DB,0xC111,0xC16A,0xCB3C,0xDA99,0xE92D,0xF5BD, + 0xFED5,0x05ED,0x0BE8,0x111E,0x159A,0x19B7,0x1D4F,0x209E, + 0x2456,0x2852,0x2AB2,0x2B6E,0x2B5E,0x2B9A,0x2BF0,0x2AF8, + 0x270E,0x1EB6,0x12D4,0x0474,0xF54F,0xE7B7,0xDC6F,0xD316, + 0xCBFC,0xC756,0xC54B,0xC6B0,0xCB70,0xD3D0,0xDF8C,0xECFE, + 0xFB1F,0x08EB,0x14DA,0x1DB2,0x238A,0x267E,0x27D3,0x284E, + 0x27AD,0x25C7,0x21B1,0x1C1F,0x15FA,0x0FD1,0x096D,0x0746, + 0x0456,0xFFB3,0xFC1C,0xF741,0xF1D0,0xEC3F,0xE6C1,0xE1AE, + 0xDDF9,0xDBA3,0xDAEF,0xDBF3,0xDECD,0xE2F0,0xE7F3,0xEDE0, + 0xF663,0x010C,0x0BFD,0x15FB,0x1D58,0x2202,0x2432,0x250F, + 0x2474,0x2271,0x1EC9,0x195F,0x125C,0x0A53,0x020A,0xFA88, + 0xF50B,0xF132,0xED83,0xEA34,0xE915,0xE90C,0xE935,0xE8C7, + 0xE8C8,0xE9F3,0xEC49,0xEF1A,0xF21B,0xF598,0xF949,0xFCB8, + 0x004B,0x048E,0x091F,0x0F06,0x142E,0x1803,0x1A0B,0x1AF4, + 0x1A5C,0x183F,0x15CB,0x13AD,0x107C,0x0A57,0x03F7,0xFD10, + 0xF694,0xF103,0xEC8C,0xE9A2,0xE86E,0xE8C5,0xE9CB,0xEB86, + 0xEDA7,0xF06F,0xF411,0xF855,0xFC09,0x0039,0x02F6,0x04CF, + 0x0859,0x0B56,0x0C2B,0x0D04,0x0E0D,0x0E6A,0x0F5C,0x0FA5, + 0x0E8D,0x0D0A,0x0A03,0x061A,0x02CC,0x0046,0xFDED,0xFA28, + 0xF567,0xF100,0xED6F,0xEBC0,0xEB36,0xEBA5,0xECBF,0xEEC0, + 0xF004,0xF14A,0xF5A6,0xFB02,0xFEF8,0x0267,0x0580,0x086C, + 0x0A7B,0x0B85,0x0B98,0x0B52,0x0B03,0x09FA,0x08BC,0x0709, + 0x04FB,0x0305,0xFFDA,0xFA2B,0xF169,0xE58C,0xD972,0xCE47, + 0xC224,0xBDEC,0xBE2A,0xBE10,0xBE22,0xBED6,0xBED4,0xC3B1, + 0xE4D5,0x049D,0x1D6D,0x35D3,0x3EB4,0x3E02,0x3E76,0x3E55, + 0x3E49,0x3E49,0x3D96,0x3E4A,0x377D,0x1C10,0x026F,0xEE43, + 0xE083,0xD968,0xD43F,0xCF18,0xCA03,0xC6A5,0xC860,0xD11D, + 0xDD05,0xE56A,0xE5D9,0xDFB9,0xD8A0,0xD68D,0xDB34,0xE5EC, + 0xF3E6,0x0313,0x10D6,0x1ECD,0x2D26,0x3B01,0x3EAB,0x3EE4, + 0x3EFB,0x3EBE,0x3ED2,0x3E92,0x3CB2,0x28CD,0x0CCF,0xF3F1, + 0xE159,0xD283,0xC7F9,0xC06D,0xBF39,0xBF45,0xBFA9,0xBF8F, + 0xCA23,0xDB38,0xEA01,0xF56E,0xFE5C,0x0519,0x0B04,0x1022, + 0x1452,0x1893,0x1C2D,0x1FC8,0x2346,0x2657,0x2766,0x2742, + 0x26E7,0x2766,0x2818,0x2799,0x235D,0x1957,0x0B71,0xFBAE, + 0xECB9,0xE098,0xD78D,0xCFB1,0xC87A,0xC342,0xC0D8,0xC2A6, + 0xC9B6,0xD4B6,0xE1FD,0xEFBB,0xFD9D,0x0AA6,0x156C,0x1DB6, + 0x22ED,0x25B9,0x27C6,0x28A4,0x2712,0x23F6,0x1E9A,0x18B5, + 0x122C,0x0BE6,0x0729,0x0466,0x0174,0xFBA8,0xF62F,0xF100, + 0xEB90,0xE6C6,0xE1FB,0xDE28,0xDC02,0xDAF6,0xDA09,0xD9BF, + 0xDC33,0xE0B7,0xE75A,0xEFCF,0xF97D,0x0463,0x0E8D,0x170C, + 0x1B70,0x1FB5,0x243B,0x2601,0x24F9,0x21EF,0x1CF4,0x15BC, + 0x0DC2,0x05F7,0xFF28,0xF939,0xF465,0xF04C,0xED39,0xEB49, + 0xE9B8,0xE911,0xE930,0xE99A,0xEA99,0xED16,0xEFFC,0xF284, + 0xF4E7,0xF7C4,0xF8BC,0xFBCC,0x00CF,0x06FD,0x0CAD,0x1154, + 0x13D5,0x15E8,0x17E8,0x19D9,0x1B19,0x1A6F,0x182D,0x13FC, + 0x0D36,0x05E4,0xFFDA,0xFA2C,0xF491,0xEFBD,0xEC52,0xEAF0, + 0xEA31,0xE9FD,0xEAA4,0xEC19,0xEE7F,0xF2BA,0xF775,0xFD14, + 0x0188,0x03F8,0x0531,0x06CA,0x0998,0x0D32,0x10B4,0x11F9, + 0x11B6,0x10CE,0x100A,0x0F63,0x0EC6,0x0E3C,0x0C97,0x0988, + 0x05E6,0x0222,0xFE62,0xFA80,0xF601,0xF217,0xEF79,0xEDFD, + 0xED6D,0xEDB6,0xEEC2,0xEFCB,0xF0F9,0xF38C,0xF834,0xFDF7, + 0x02D4,0x0589,0x07BA,0x09FC,0x0C1F,0x0CDB,0x0DBC,0x0E1B, + 0x0E65,0x0D73,0x0B62,0x08D5,0x074F,0x02EA,0xFF08,0xFAB6, + 0xF0E8,0xE609,0xDA94,0xCCEA,0xC0D9,0xBFB7,0xBFA0,0xBF78, + 0xBF88,0xC089,0xBF4B,0xCB3B,0xEF1C,0x0BBA,0x2627,0x3B81, + 0x3F45,0x3F1D,0x3F8A,0x3F69,0x3F4B,0x3F2A,0x3E8D,0x3F14, + 0x3230,0x15F7,0xFF4B,0xED5F,0xE12F,0xD8E7,0xD295,0xCD66, + 0xC9A2,0xC971,0xCDE9,0xD6EF,0xE048,0xE5D8,0xE44C,0xDE4E, + 0xD8D7,0xD8F3,0xDF7C,0xEA6D,0xF7BA,0x05D9,0x145E,0x229F, + 0x321C,0x3DCE,0x3F2D,0x3F11,0x3F24,0x3F38,0x3E90,0x3F44, + 0x397D,0x204F,0x083A,0xF397,0xE0D5,0xD2AD,0xC715,0xC0BA, + 0xC062,0xC080,0xC012,0xC2AB,0xD0C5,0xE028,0xED67,0xF809, + 0x0085,0x07B9,0x0D98,0x12AF,0x1696,0x19A2,0x1C90,0x20E7, + 0x259C,0x2752,0x275A,0x27D5,0x28E4,0x297C,0x2924,0x2646, + 0x1FF9,0x1536,0x06FD,0xF821,0xEB22,0xDFD6,0xD5A9,0xCCDA, + 0xC5CC,0xC205,0xC1D0,0xC617,0xCE1D,0xD8C0,0xE546,0xF2EA, + 0xFF62,0x0BCB,0x17E6,0x2006,0x2495,0x264D,0x26AE,0x269C, + 0x2572,0x22BD,0x1D61,0x1660,0x0F9A,0x0A2B,0x062F,0x01FA, + 0xFE92,0xFA14,0xF4A5,0xEF80,0xEA94,0xE5C0,0xE0CB,0xDC47, + 0xD8E5,0xD746,0xD811,0xDA3C,0xDD91,0xE292,0xE8E4,0xF103, + 0xFB14,0x0586,0x0EFB,0x16D7,0x1CF6,0x2141,0x23C6,0x2340, + 0x2103,0x1C90,0x1742,0x11A3,0x0AFD,0x041E,0xFC8A,0xF57B, + 0xEF17,0xEAFE,0xE815,0xE718,0xE722,0xE768,0xE72E,0xE6A7, + 0xE6C2,0xE85C,0xEAFB,0xEE06,0xF168,0xF549,0xF971,0xFD61, + 0x0112,0x0536,0x09F1,0x0F37,0x139E,0x1701,0x19BC,0x1B22, + 0x191F,0x1585,0x1103,0x0C07,0x087C,0x04FF,0xFCEC,0xF76C, + 0xF1D7,0xECD6,0xE92B,0xE761,0xE6C5,0xE82B,0xE9CB,0xEC17, + 0xEEF1,0xF1EA,0xF52E,0xF853,0xFC80,0x00F4,0x052E,0x0857, + 0x0AD9,0x0C6B,0x0D58,0x0E2A,0x0EE9,0x0FB3,0x1013,0x100F, + 0x0F52,0x0D60,0x09D7,0x0681,0x0233,0xFE52,0xFB22,0xF8E3, + 0xF646,0xF281,0xEF30,0xEBEB,0xEA98,0xEAFC,0xED4A,0xF0E6, + 0xF4A2,0xF821,0xFB01,0xFCB7,0xFF93,0x034B,0x07E7,0x0B3C, + 0x0D9B,0x0E43,0x0DB1,0x0CE1,0x0BCC,0x0AFD,0x09C9,0x08AB, + 0x06B8,0x02AA,0xFB34,0xF0CE,0xE2D6,0xD464,0xC753,0xBEE3, + 0xBEDA,0xBE97,0xBE82,0xBEED,0xC003,0xBEF7,0xD159,0xF59B, + 0x113D,0x2B5F,0x3D47,0x3EC5,0x3F07,0x3F3F,0x3F55,0x3F1A, + 0x3E89,0x3E5B,0x3EB7,0x2C77,0x1017,0xFA97,0xEA07,0xE034, + 0xDAEC,0xD69F,0xD1B8,0xCD5B,0xCCD7,0xD1D1,0xDAA8,0xE2D4, + 0xE66B,0xE3EC,0xDE42,0xDA3E,0xDB0D,0xE23F,0xED9B,0xFB4B, + 0x0B29,0x199B,0x27E5,0x3848,0x3FB5,0x3F8E,0x3FF6,0x3FF0, + 0x4009,0x3F91,0x4057,0x3850,0x1DF6,0x03E7,0xED1F,0xDBC9, + 0xCF60,0xC675,0xC129,0xC0E9,0xC14A,0xC0E4,0xC621,0xD4B9, + 0xE3C6,0xF182,0xFC57,0x03FA,0x0A14,0x0ED2,0x127D,0x169E, + 0x1A9F,0x1ECE,0x2290,0x251F,0x2787,0x2939,0x29C9,0x2A66, + 0x2A68,0x2992,0x2604,0x1EB1,0x13AE,0x05B2,0xF680,0xE8A3, + 0xDC85,0xD241,0xCACA,0xC5D0,0xC357,0xC3E9,0xC80C,0xCFD3, + 0xDAF7,0xE78E,0xF58B,0x0332,0x0FFB,0x1A0F,0x20C3,0x2489, + 0x263E,0x269A,0x2648,0x24DF,0x217E,0x1C8C,0x15F6,0x0F6A, + 0x0AC8,0x069F,0x0316,0x0096,0xFC3B,0xF561,0xF1A4,0xEC67, + 0xE65B,0xE18B,0xDD88,0xDAA3,0xD9EF,0xDAC9,0xDD49,0xE0A2, + 0xE58D,0xEB8C,0xF35A,0xFD32,0x088D,0x12EE,0x1ACD,0x1F8E, + 0x21FC,0x22D9,0x224C,0x207D,0x1D2F,0x186A,0x11B6,0x0A3C, + 0x0249,0xFB44,0xF50B,0xF05C,0xED15,0xEA48,0xE871,0xE797, + 0xE749,0xE709,0xE671,0xE754,0xE908,0xEB5F,0xEF07,0xF28A, + 0xF649,0xF9DA,0xFD06,0x008B,0x051C,0x0A96,0x10D2,0x15A8, + 0x188F,0x18F8,0x185E,0x16C7,0x1404,0x1051,0x0C95,0x08C0, + 0x02DD,0xFB7E,0xF60D,0xF28F,0xEDE0,0xEA87,0xE87C,0xE84F, + 0xE9EA,0xEBA0,0xED90,0xEFEB,0xF32F,0xF6BD,0xFA6D,0xFE7A, + 0x0332,0x0758,0x0A0E,0x0AAB,0x0B0B,0x0BF2,0x0DA1,0x104C, + 0x11CD,0x1119,0x0FDD,0x0E22,0x0AD4,0x07B6,0x0564,0x02DA, + 0xFFB0,0xFBE4,0xF7AF,0xF40C,0xF0DF,0xED94,0xEBDE,0xEAFD, + 0xEC25,0xEE72,0xF0FE,0xF37B,0xF622,0xF8AC,0xFC0C,0xFEDC, + 0x01CE,0x06D4,0x0B32,0x0CFB,0x0D15,0x0CA4,0x0BF7,0x0B87, + 0x0A68,0x0967,0x07C9,0x054A,0x0156,0xFC4D,0xF465,0xEA53, + 0xE042,0xD612,0xCB54,0xC011,0xBDF1,0xBE02,0xBE02,0xBEA0, + 0xBE74,0xC2B6,0xE0E8,0xFD46,0x12EA,0x2792,0x3B13,0x3E3E, + 0x3E08,0x3E5A,0x3E57,0x3E3A,0x3D9E,0x3E3B,0x343F,0x1BFE, + 0x0714,0xF5CD,0xE9E1,0xE26A,0xDD1B,0xD82B,0xD3B0,0xCFFE, + 0xD07F,0xD646,0xDED1,0xE65C,0xE8BC,0xE488,0xDD73,0xDA2D, + 0xDD8D,0xE6F6,0xF340,0xFFE2,0x0BB3,0x1682,0x224D,0x2EED, + 0x3BB9,0x3EBE,0x3E70,0x3E93,0x3DFF,0x3EC5,0x39D1,0x2581, + 0x1038,0xFC05,0xEB04,0xDD6C,0xD5C6,0xCD02,0xC543,0xC1AA, + 0xC086,0xC59D,0xD02D,0xDE07,0xEA51,0xF4CE,0xFC69,0x01F9, + 0x05B4,0x0A69,0x0F9C,0x14A7,0x1883,0x1B67,0x1DC1,0x1F87, + 0x20DC,0x2174,0x2202,0x22AC,0x23AE,0x22ED,0x1F09,0x16A2, + 0x0A74,0xFD7A,0xF198,0xE7F9,0xDFEE,0xD8AC,0xD222,0xCD31, + 0xCAB3,0xCBA9,0xD102,0xD97C,0xE3EF,0xEF32,0xFA72,0x0500, + 0x0E8F,0x1639,0x1AB6,0x1D6D,0x1F3C,0x20AB,0x2122,0x1FAE, + 0x1B6A,0x1602,0x10F6,0x0BFF,0x084A,0x05B8,0x03F3,0x00F8, + 0xFCC3,0xF6BA,0xF10D,0xEC38,0xE6E5,0xE31C,0xE0CB,0xDF54, + 0xDEAD,0xDEF3,0xE059,0xE3C1,0xE8F6,0xF036,0xF845,0x00AA, + 0x08C0,0x1005,0x15D5,0x19B4,0x1BBC,0x1D0E,0x1D31,0x1B04, + 0x1788,0x138C,0x0D9C,0x0638,0xFF6E,0xF9F5,0xF5A3,0xF341, + 0xF13B,0xEE02,0xEBA9,0xE9E9,0xE9D6,0xEAFF,0xEC35,0xEE54, + 0xF0D5,0xF26E,0xF3F6,0xF631,0xF8FC,0xFC9A,0x00F6,0x0575, + 0x08B1,0x0D07,0x1110,0x1330,0x145D,0x1510,0x150C,0x1418, + 0x1265,0x0FE1,0x0BF9,0x0713,0x0106,0xFBBC,0xF82E,0xF56B, + 0xF212,0xEF6D,0xED4B,0xED07,0xEE22,0xEF33,0xF155,0xF3E3, + 0xF76F,0xFB43,0xFE31,0x0159,0x039A,0x059C,0x0728,0x0922, + 0x0B4E,0x0D7C,0x0E64,0x0E01,0x0D2C,0x0D08,0x0CD6,0x0B6F, + 0x099D,0x079F,0x04F6,0x01B8,0xFEB6,0xFB7A,0xF840,0xF545, + 0xF231,0xF033,0xEFEE,0xF071,0xF08D,0xF0B6,0xF203,0xF4BF, + 0xF843,0xFBE7,0xFFBD,0x02E5,0x0595,0x0710,0x0865,0x098D, + 0x0A93,0x0BD2,0x0BCE,0x0AB0,0x092D,0x0785,0x0591,0x0411, + 0x01A7,0xFE48,0xFB16,0xF735,0xF110,0xEB8E,0xE865,0xE09F, + 0xD7DE,0xD0AB,0xCDBF,0xD15B,0xDA81,0xE6FC,0xF393,0xFEB1, + 0x07F4,0x109A,0x1B0D,0x264D,0x2FB3,0x34D8,0x34B0,0x2FB3, + 0x2900,0x20DC,0x1827,0x0F35,0x06AA,0xFF23,0xFA13,0xF612, + 0xF327,0xF058,0xEDBD,0xEBE9,0xEB71,0xEDA3,0xF068,0xF22E, + 0xF1F8,0xEFE9,0xEDD4,0xEE2A,0xF0F3,0xF512,0xF9C9,0xFF21, + 0x051F,0x0ADB,0x1018,0x15D5,0x1B1A,0x1F9C,0x2244,0x2269, + 0x2079,0x1D8C,0x181B,0x0F87,0x0675,0xFE55,0xF7D7,0xF250, + 0xED76,0xE941,0xE868,0xE73E,0xE743,0xE97C,0xED89,0xF1E1, + 0xF5BA,0xF8D6,0xFBB3,0xFFA4,0x02C5,0x05A3,0x074D,0x08A2, + 0x0AB6,0x0C67,0x0E21,0x1002,0x114F,0x115A,0x1169,0x11B8, + 0x10E0,0x0F30,0x0D5F,0x09E6,0x052A,0x0020,0xFAB3,0xF606, + 0xF24A,0xEEDD,0xEBB4,0xE985,0xE87B,0xE994,0xEC44,0xEFA7, + 0xF352,0xF6FB,0xFB42,0xFFBC,0x044F,0x07BD,0x09D0,0x0C6F, + 0x0DF5,0x0E65,0x0DF7,0x0D28,0x0C85,0x0B49,0x0931,0x070B, + 0x0538,0x0333,0x0197,0xFFCB,0xFE02,0xFC49,0xF98A,0xF7FD, + 0xF667,0xF4B4,0xF345,0xF1C9,0xF0EB,0xF05C,0xF0E5,0xF2A9, + 0xF4A8,0xF766,0xFA49,0xFCCA,0xFF15,0x0127,0x02CA,0x0476, + 0x053B,0x0537,0x04A9,0x03D4,0x032E,0x0246,0x0106,0x0005, + 0xFEAB,0xFD49,0xFC0D,0xFAAF,0xF985,0xF869,0xF773,0xF667, + 0xF54F,0xF474,0xF330,0xF281,0xF184,0xF0A8,0xEFC4,0xEF20, + 0xEE39,0xED88,0xECF7,0xEC88,0xEC3E,0xEB88,0xEAB7,0xEA12, + 0xE9E2,0xE950,0xE8EE,0xE86C,0xE7B6,0xE7D6,0xE6EA,0xE5E5, + 0xE561,0xE53D,0xE3E3,0xE374,0xE459,0xE221,0xE285,0xE2F4, + 0xE2A2,0xE2BE,0xE2E0,0xE2EB,0xE314,0xE306,0xE319,0xE34A, + 0xE338,0xE33A,0xE34D,0xE416,0xE432,0xE45E,0xE4F0,0xE543, + 0xE5F3,0xE603,0xE666,0xE6B3,0xE701,0xE716,0xE775,0xE75A, + 0xE717,0xE741,0xE7B3,0xE854,0xE88F,0xE8E1,0xE954,0xEA29, + 0xEA13,0xEA44,0xEAD3,0xEBBC,0xEBCC,0xEC1B,0xEC9E,0xED10, + 0xEDD0,0xEE46,0xEEB1,0xEF8D,0xF047,0xF0F9,0xF1B1,0xF292, + 0xF378,0xF3D9,0xF440,0xF447,0xF48B,0xF4F3,0xF591,0xF616, + 0xF63A,0xF69E,0xF6FB,0xF631,0xF4EF,0xF59F,0xF67E,0xF6F7, + 0xF774,0xF7D4,0xF842,0xF867,0xF8EE,0xF9BC,0xFA3E,0xFAA3, + 0xFADE,0xFBB5,0xFC88,0xFD66,0xFE06,0xFED1,0xFEC7,0xFECF, + 0xFF92,0x008E,0x0134,0x0117,0x014C,0x01B2,0x0210,0x02F8, + 0x037B,0x0412,0x04AB,0x0494,0x04CB,0x0534,0x0531,0x051A, + 0x0539,0x0569,0x05A6,0x05E5,0x0681,0x0702,0x077F,0x08A5, + 0x081A,0x07AC,0x081F,0x0880,0x08FB,0x0969,0x09B9,0x09CF, + 0x0A6E,0x0B57,0x0BF3,0x0CAA,0x0CDB,0x0DA2,0x0DF7,0x0DB9, + 0x0E37,0x0E23,0x0DCF,0x0DF5,0x0E58,0x0DEF,0x0DE0,0x0DC7, + 0x0DE0,0x0DDC,0x0E56,0x0E51,0x0E4B,0x0E4E,0x0DD4,0x0DBB, + 0x0DF3,0x0E56,0x0EE5,0x0F12,0x0EDA,0x0EDF,0x0EB6,0x0EE5, + 0x0F1F,0x0F07,0x0F5A,0x0F42,0x0F49,0x0F9F,0x0FA1,0x0F57, + 0x0EFC,0x0F12,0x0F1A,0x0F32,0x0F5F,0x0F62,0x0F3D,0x0EE4, + 0x0EC5,0x0EB0,0x0E84,0x0E68,0x0EB2,0x0EB0,0x0E90,0x0EAE, + 0x0E85,0x0E56,0x0E79,0x0E92,0x0EDE,0x0E8B,0x0E98,0x0ED6, + 0x0EC2,0x0EF4,0x0F30,0x0F9D,0x0DD9,0x0F6D,0x0F9B,0x0E80, + 0x0ED6,0x0ECC,0x0ED0,0x0E94,0x0E73,0x0E4D,0x0DB8,0x0DA9, + 0x0D4C,0x0D72,0x0DD3,0x0DEF,0x0DAA,0x0D9A,0x0D2B,0x0CBB, + 0x0CB9,0x0C9D,0x0C60,0x0C39,0x0C08,0x0C66,0x0C3F,0x0BF9, + 0x0C31,0x0BEC,0x0BFE,0x0BE8,0x0B91,0x0BB5,0x0BB0,0x0B85, + 0x0B94,0x0B2B,0x0B68,0x0B7B,0x0B71,0x0B2E,0x0B58,0x0B2A, + 0x0B74,0x0B6A,0x0AFF,0x0ABF,0x0ABC,0x0A76,0x0A11,0x0A11, + 0x09FC,0x09F2,0x09C2,0x09AA,0x0987,0x0979,0x0978,0x0989, + 0x0981,0x0AB7,0x0C31,0x0B77,0x0B5F,0x0ADB,0x0A7C,0x0A55, + 0x0A44,0x0A29,0x0AB7,0x0AB3,0x0A91,0x0A35,0x09F3,0x09DE, + 0x098D,0x094D,0x0985,0x0957,0x089A,0x0822,0x08A0,0x0916, + 0x0871,0x07BD,0x0818,0x07D6,0x0770,0x0765,0x070A,0x06CB, + 0x069A,0x0663,0x0683,0x061B,0x061F,0x0611,0x05FD,0x05D4, + 0x057E,0x0571,0x055D,0x0550,0x0529,0x0550,0x04C5,0x0398, + 0x043C,0x0538,0x0508,0x053D,0x054F,0x0540,0x04E7,0x04DD, + 0x04D6,0x0444,0x034C,0x030D,0x0318,0x0294,0x023B,0x021E, + 0x0200,0x0248,0x020E,0x0208,0x01E5,0x01C6,0x01DA,0x01AA, + 0x01BF,0x01C0,0x0214,0x024A,0x0233,0x0203,0x020F,0x0228, + 0x01FC,0x01B9,0x01DF,0x01C8,0x01D7,0x01DA,0x0198,0x01CB, + 0x01D9,0x0185,0x0172,0x013A,0x0157,0x020C,0x01FE,0x01C1, + 0x019A,0x0177,0x0160,0x0163,0x01A2,0x01A1,0x0170,0x0133, + 0x00D0,0x00F8,0x009B,0x00B3,0xFFB1,0xFF9F,0xFFAB,0xFF82, + 0xFEBF,0xFCB9,0xFCF6,0xFD2B,0xFD94,0xFDAE,0xFDD8,0xFDEB, + 0xFDF7,0xFDC5,0xFDE7,0xFDF6,0xFE34,0xFE32,0xFE39,0xFE7E, + 0xFF07,0xFEFE,0xFF68,0xFF18,0xFE92,0xFF04,0xFF08,0xFEEA, + 0xFEE4,0xFEAD,0xFF04,0xFF4D,0xFF75,0xFF82,0xFF3B,0xFF21, + 0xFF50,0xFF85,0xFF68,0xFF85,0xFFC4,0xFFBC,0xFFA7,0xFFCE, + 0xFF98,0xFF9C,0xFFBF,0xFFCD,0x0105,0x01B4,0x0124,0x0146, + 0x00C6,0x0058,0x009D,0x01B2,0x0316,0x04BC,0x0557,0x05F2, + 0x0709,0x071C,0x07DC,0x08D0,0x08E2,0x0930,0x098E,0x0935, + 0x08D8,0x08AF,0x08FF,0x08ED,0x091E,0x098B,0x09ED,0x09A3, + 0x091F,0x0924,0x090A,0x0995,0x0A1E,0x0A5C,0x0B83,0x0C7E, + 0x0D04,0x0D74,0x0DC1,0x0E14,0x0EAE,0x0F05,0x0FC1,0x1156, + 0x1249,0x1259,0x11B2,0x10CB,0x10C0,0x11A5,0x12BE,0x1390, + 0x1492,0x14ED,0x14AB,0x148D,0x1508,0x15C2,0x1684,0x1713, + 0x16F6,0x16BA,0x16AB,0x1703,0x16F7,0x1711,0x16EB,0x16BD, + 0x16BF,0x1718,0x176D,0x16E7,0x16D3,0x16B9,0x16A8,0x16D5, + 0x16EC,0x1510,0x1681,0x163A,0x1468,0x1463,0x148C,0x1488, + 0x144C,0x13DD,0x13E7,0x1424,0x13AA,0x12CC,0x128E,0x12DF, + 0x12A5,0x11CC,0x1100,0x10AA,0x1020,0x0F7B,0x0F76,0x0FB0, + 0x0F5E,0x0E5E,0x0DE3,0x0D92,0x0CBD,0x0B9F,0x0B22,0x0B9D, + 0x0BFC,0x0BD8,0x0B1F,0x0A09,0x0957,0x0909,0x08C6,0x08D0, + 0x094C,0x092C,0x084B,0x06ED,0x0577,0x04F3,0x04D2,0x0502, + 0x0495,0x04B9,0x047B,0x03F2,0x02B2,0x017D,0x01A0,0x0237, + 0x0243,0x01B1,0x00EC,0x002D,0xFF7B,0xFE64,0xFF0A,0x0148, + 0x00AB,0x0056,0xFFEC,0xFFF7,0xFF7B,0xFE43,0xFD8A,0xFD92, + 0xFD6F,0xFD75,0xFD32,0xFD0C,0xFBB3,0xF9B8,0xF788,0xF411, + 0xEEDB,0xE7F4,0xDFFF,0xD81D,0xCD62,0xC250,0xBFBE,0xBFF8, + 0xCABB,0xE0CC,0xF764,0x09CA,0x1583,0x1A8D,0x1BB9,0x1D26, + 0x1F8C,0x2046,0x1E0A,0x1735,0x0E9C,0x0703,0x0226,0x000F, + 0xFFBF,0x01B5,0x04D8,0x05CC,0x02D2,0xFC71,0xF18B,0xE408, + 0xD740,0xCEFB,0xCC35,0xCE37,0xD137,0xD41A,0xD73D,0xDCBA, + 0xE5FB,0xF2A3,0xFF08,0x0886,0x0F4C,0x1151,0x0EBC,0x09A2, + 0x0430,0x006B,0xFEFB,0xFF91,0x01EC,0x03F6,0x0427,0x0159, + 0xFCCD,0xF8CD,0xF5CB,0xF28D,0xEE0F,0xE7DB,0xDF94,0xD6FE, + 0xCFD2,0xCBF1,0xCD17,0xD2DD,0xD9F5,0xE190,0xE8F4,0xEFA2, + 0xF4E2,0xF81F,0xF9E7,0xFBCE,0xFE0F,0x003E,0x00D0,0xFF56, + 0xFD2B,0xFB35,0xFAA1,0xFBB7,0xFD7D,0xFF9F,0x000B,0xFCFD, + 0xF724,0xF024,0xE99D,0xE3E4,0xDF4E,0xDB96,0xD951,0xD8A0, + 0xD866,0xDA07,0xDCDC,0xE0B3,0xE5C0,0xEACF,0xEF76,0xF37B, + 0xF8AF,0xF8FD,0xF7C0,0xF8A3,0xF87F,0xF94A,0xFB1D,0xFDC7, + 0xFF37,0x007B,0x0046,0xFE4D,0xFBBA,0xF97B,0xF708,0xF48D, + 0xF19C,0xED14,0xE842,0xE322,0xE041,0xDF5C,0xE097,0xE350, + 0xE653,0xE8AB,0xEB14,0xED96,0xEF87,0xF15B,0xF323,0xF560, + 0xF7F4,0xF977,0xF9C9,0xF9EA,0xFADB,0xFC76,0xFE47,0x0033, + 0x019F,0x017F,0xFFFF,0xFDAF,0xFB32,0xF849,0xF463,0xF0FF, + 0xEE88,0xECB0,0xEB17,0xE97F,0xE894,0xE8DD,0xEA19,0xEC4E, + 0xEED0,0xF0FD,0xF284,0xF35A,0xF43B,0xF53B,0xF62B,0xF769, + 0xF77A,0xF7E8,0xFA67,0xFC3B,0xFDF8,0xFE9D,0xFE5C,0xFD8B, + 0xFD4E,0xFD3E,0xFC79,0xFB3E,0xF85C,0xF486,0xF132,0xEEF5, + 0xEE86,0xEEEF,0xEFE7,0xEF4C,0xEF24,0xF044,0xF12A,0xF1DF, + 0xF396,0xF5A6,0xF6D3,0xF816,0xF8F8,0xF9C6,0xFB0E,0xFCC5, + 0xFE3F,0xFF7C,0x0064,0x01E9,0x0326,0x0305,0x027D,0x0160, + 0x0014,0xFE14,0xFBF8,0xFB33,0xFB3C,0xF8EB,0xF692,0xF4EC, + 0xF46F,0xF580,0xF5A9,0xF5E6,0xF652,0xF710,0xF7F0,0xF9A5, + 0xFA2A,0xFB07,0xFC09,0xFD4E,0xFE77,0xFF53,0x0103,0x0209, + 0x0257,0x0212,0x01E8,0x02A2,0x03A3,0x0356,0x01E4,0x0009, + 0xFE13,0xFB60,0xF605,0xEC71,0xDF2D,0xCD53,0xC0A5,0xC0B1, + 0xC045,0xC025,0xC050,0xC1B6,0xC01B,0xD2F5,0x099C,0x31CD, + 0x3F88,0x3F63,0x3FE8,0x4026,0x3FED,0x4011,0x3F57,0x4037, + 0x39E1,0x285C,0x1F61,0x1D41,0x20D1,0x273D,0x2BD7,0x2A62, + 0x2094,0x0D82,0xF224,0xD1E5,0xC080,0xC0A0,0xC015,0xC02B, + 0xC00A,0xC072,0xC0B6,0xCEB1,0xE917,0x0755,0x268E,0x3CFD, + 0x3F57,0x3EE0,0x404B,0x394A,0x30AC,0x2C9C,0x2A90,0x2ABF, + 0x2D44,0x2F95,0x2E82,0x29AB,0x2208,0x18F2,0x0EA2,0x02DA, + 0xF554,0xE51A,0xD138,0xC167,0xBFA8,0xBFF4,0xC036,0xC049, + 0xCCA1,0xE032,0xF10F,0xFFE3,0x0BCA,0x1574,0x1CB2,0x21E4, + 0x254E,0x268A,0x25E8,0x2470,0x223E,0x2033,0x2064,0x22B5, + 0x267B,0x27D3,0x2551,0x1DBD,0x10D9,0x0086,0xEFB3,0xE0F3, + 0xD5EE,0xCE0D,0xC7D4,0xC44A,0xC467,0xC89F,0xD118,0xDCD8, + 0xE98F,0xF541,0xFF46,0x076C,0x0DB6,0x1171,0x14C6,0x155C, + 0x1526,0x1772,0x1B8F,0x2029,0x23B1,0x2517,0x2471,0x2173, + 0x1C6A,0x16C2,0x0FD5,0x06CE,0xFB7F,0xEEF1,0xE369,0xDA67, + 0xD519,0xD2DF,0xD52F,0xDAFB,0xE02C,0xE57F,0xEB23,0xF123, + 0xF724,0xFCC9,0x0136,0x04E9,0x080B,0x0A62,0x0CEE,0x1005, + 0x13CC,0x181C,0x1B00,0x1CE0,0x1DBB,0x1C7E,0x1982,0x1417, + 0x0C29,0x03A0,0xFB48,0xF205,0xEA7E,0xE671,0xE38B,0xE125, + 0xDFF9,0xE0F5,0xE436,0xE8A1,0xED2A,0xF18B,0xF4E4,0xF6AB, + 0xF8EC,0xFBC0,0xFE3E,0x0203,0x05BA,0x0986,0x0D00,0x1018, + 0x12F9,0x14F2,0x15DA,0x1579,0x1336,0x0F2C,0x0A2E,0x04F7, + 0xFECC,0xF811,0xF23B,0xEDD6,0xEAB4,0xE8B7,0xE82C,0xE8C2, + 0xEA85,0xEC72,0xEDB2,0xEF8D,0xF231,0xF519,0xF7DB,0xFA31, + 0xFC6B,0xFF2A,0x0290,0x0644,0x0A40,0x0D5F,0x1012,0x1256, + 0x13D9,0x13AF,0x118B,0x0EA1,0x0B78,0x0765,0x02B7,0xFE2F, + 0xF9D0,0xF623,0xF2A0,0xF08C,0xF057,0xF0FB,0xF1F9,0xF143, + 0xF15C,0xF22D,0xF3BD,0xF5D5,0xF811,0xFA64,0xFBF5,0xFEE1, + 0x02D3,0x0394,0x086F,0x0BCB,0x0D4D,0x0EB5,0x0FAF,0x0F7D, + 0x0F1F,0x0DC6,0x0ACB,0x06E9,0x014B,0xF8D5,0xEBC4,0xDB20, + 0xC7AC,0xBF3D,0xBF6A,0xBF2B,0xBF24,0xBF5E,0xC120,0xBFBC, + 0xDD39,0x1298,0x35AD,0x3EBD,0x3EB5,0x3F21,0x3F3D,0x3F64, + 0x3F36,0x3EFC,0x3F5B,0x3D23,0x303D,0x2936,0x28DF,0x2C20, + 0x3037,0x31DA,0x2DEA,0x21A9,0x0B1E,0xEBEC,0xCA83,0xBFA6, + 0xC02F,0xBFAC,0xBF95,0xC002,0xC025,0xC0F2,0xD1A9,0xEF02, + 0x0F10,0x2CEE,0x3DCC,0x3F1B,0x3F35,0x3F92,0x3A35,0x3276, + 0x2DFB,0x2D81,0x2F44,0x323A,0x3444,0x335A,0x2DC5,0x241D, + 0x186A,0x0C26,0xFFBA,0xF0F0,0xDF2F,0xCAC8,0xBF94,0xBF82, + 0xBF75,0xC019,0xC09A,0xCDD1,0xE188,0xF22E,0xFF9F,0x0BAB, + 0x1601,0x1DF3,0x23A4,0x275C,0x2955,0x2942,0x283A,0x270A, + 0x268C,0x2781,0x2A34,0x2D2F,0x2E09,0x2995,0x1FAC,0x10DE, + 0xFFA2,0xEE34,0xDF49,0xD52B,0xCD05,0xC6F1,0xC40D,0xC5A8, + 0xCB4F,0xD387,0xDDF5,0xE9D7,0xF6F5,0x02EC,0x0B5F,0x0FA1, + 0x11D9,0x13B5,0x156F,0x17BE,0x1C01,0x21CA,0x260D,0x278C, + 0x2787,0x2658,0x2482,0x2060,0x18E2,0x0F4F,0x03E0,0xF820, + 0xEC50,0xE268,0xDA28,0xD496,0xD25B,0xD352,0xD7DF,0xDE6E, + 0xE5E2,0xED05,0xF325,0xF831,0xFC7D,0x004B,0x04E9,0x0918, + 0x0D84,0x1184,0x14FB,0x1813,0x1B3A,0x1E1A,0x205F,0x2094, + 0x1F04,0x1AF0,0x14F4,0x0DA5,0x04E7,0xFBBB,0xF343,0xEBFC, + 0xE687,0xE2B5,0xE0FC,0xE127,0xE30F,0xE55D,0xE89E,0xEC06, + 0xF06C,0xF43B,0xF80E,0xFC66,0xFFE4,0x02A2,0x05B8,0x0940, + 0x0BBE,0x1238,0x16B0,0x18FE,0x1B32,0x1B5F,0x19B2,0x165F, + 0x11FA,0x0CED,0x070C,0x00D7,0xFAAA,0xF564,0xF055,0xEC2E, + 0xE9E2,0xE9C9,0xEA95,0xEBD0,0xEE02,0xF02A,0xF167,0xF299, + 0xF483,0xF71C,0xFA4B,0xFD78,0x00EE,0x04A1,0x0879,0x0BCE, + 0x0EDB,0x110D,0x12DA,0x13D9,0x13FC,0x12FD,0x0FC5,0x0BE4, + 0x06C7,0x0167,0xFCA4,0xF923,0xF695,0xF465,0xF2E4,0xF125, + 0xEFCA,0xEF9F,0xEFCD,0xF0AB,0xF23D,0xF464,0xF667,0xF808, + 0xF97C,0xFAF6,0xFD6C,0x00F3,0x058B,0x0B39,0x0FCF,0x10AF, + 0x11AB,0x11FD,0x1151,0x1091,0x0F03,0x0C5A,0x08C2,0x050D, + 0xFF22,0xF531,0xE64A,0xD300,0xC229,0xBFA4,0xBFC4,0xBF32, + 0xBF58,0xBFBA,0xC10F,0xC2D0,0xEBAA,0x205A,0x3BFF,0x3E9A, + 0x3ED4,0x3F31,0x3F2F,0x3F27,0x3EEE,0x3EAA,0x3F0A,0x3AF4, + 0x2F11,0x2A23,0x29A7,0x2C11,0x2ECE,0x2F5C,0x299D,0x1AC2, + 0x020C,0xE1EA,0xC466,0xBE74,0xBF19,0xBF37,0xBF46,0xBFAE, + 0xBF61,0xC436,0xDA02,0xF717,0x1693,0x331A,0x3E4C,0x3DDB, + 0x3DF7,0x3E50,0x39E3,0x333F,0x304C,0x2FCD,0x3129,0x33F4, + 0x35BE,0x32BE,0x2B9D,0x209F,0x146D,0x085D,0xFB58,0xEC5E, + 0xD9FA,0xC545,0xBE38,0xBEC2,0xBEB9,0xBEA7,0xC13B,0xD22C, + 0xE48F,0xF451,0x01B6,0x0D1F,0x16FD,0x1E95,0x2335,0x257A, + 0x26E1,0x273D,0x265F,0x2508,0x23C3,0x23FA,0x2637,0x28E7, + 0x291B,0x248A,0x1969,0x083A,0xF5E8,0xE59F,0xD80F,0xCE77, + 0xC6D7,0xC1DA,0xC016,0xC23F,0xC889,0xD24C,0xDDF0,0xEAB8, + 0xF6FC,0x01A0,0x0986,0x0E4C,0x1075,0x10F5,0x101C,0x149A, + 0x18FA,0x1E96,0x24F4,0x25AD,0x2413,0x215A,0x1DC2,0x193A, + 0x1333,0x0AD2,0x0065,0xF370,0xE5E3,0xDB11,0xD417,0xD01A, + 0xCF79,0xD21B,0xD79E,0xDE9C,0xE5B5,0xEC4C,0xF128,0xF57C, + 0xFA3C,0xFFFC,0x0608,0x0ADC,0x0DBA,0x0F4F,0x10A5,0x136E, + 0x18C6,0x1E93,0x21DA,0x219E,0x1E32,0x1840,0x10C7,0x08BB, + 0x006C,0xF836,0xF067,0xE9AF,0xE4AA,0xE119,0xDF46,0xDF2B, + 0xE052,0xE330,0xE7FA,0xEE00,0xF328,0xF604,0xF7E7,0xF9DB, + 0xFBF0,0xFFA3,0x04A2,0x097B,0x0DC2,0x11CE,0x1482,0x14F5, + 0x15C1,0x166A,0x14A7,0x118C,0x0D82,0x088E,0x0215,0xFA94, + 0xF3AE,0xEDF5,0xE9B5,0xE76C,0xE69F,0xE73B,0xE88C,0xE9F2, + 0xEB6A,0xED33,0xEDAE,0xEFD2,0xF3EF,0xF74C,0xF9C8,0xFCCF, + 0x0013,0x03D0,0x078F,0x0B8B,0x0F73,0x1248,0x1382,0x137C, + 0x122F,0x1066,0x0D29,0x0866,0x02E8,0xFE3E,0xFAC8,0xF819, + 0xF5DB,0xF2ED,0xF0E5,0xF00D,0xEF01,0xEFCB,0xF125,0xF1F3, + 0xF232,0xF2FE,0xF4B4,0xF754,0xF9E2,0xFCA0,0x0079,0x03E1, + 0x0767,0x0B37,0x0E51,0x10C7,0x1233,0x11BA,0x10DD,0x0F7F, + 0x0E04,0x0BE2,0x084A,0x0355,0xFB9E,0xEFD1,0xE139,0xCFA2, + 0xC192,0xC08A,0xC044,0xC037,0xC058,0xC12A,0xC10F,0xCA4F, + 0xFC12,0x2B19,0x3EB8,0x3F41,0x4004,0x4030,0x402D,0x4019, + 0x3FED,0x3F92,0x401E,0x37B8,0x2BCC,0x286C,0x2958,0x2D1B, + 0x311A,0x30E2,0x282C,0x1593,0xFA06,0xD90B,0xC20A,0xC055, + 0xC032,0xC000,0xC00E,0xC099,0xC059,0xC79F,0xE066,0xFF03, + 0x1E91,0x3796,0x3F55,0x3F3E,0x3F82,0x3F8A,0x3B15,0x3454, + 0x3158,0x32CC,0x338B,0x35C2,0x366F,0x3219,0x2983,0x1E38, + 0x1295,0x06DD,0xF984,0xE953,0xD59E,0xC303,0xBF8B,0xBFF0, + 0xC015,0xBF94,0xC5BB,0xD8ED,0xEA26,0xF8B8,0x0583,0x109F, + 0x19D7,0x2132,0x25E7,0x28AC,0x294D,0x2870,0x2677,0x24CE, + 0x240C,0x256C,0x2873,0x2A80,0x29AD,0x2312,0x15FD,0x046C, + 0xF2C5,0xE35B,0xD764,0xCE83,0xC799,0xC2D4,0xC09B,0xC272, + 0xCA36,0xD5F7,0xE354,0xEFB4,0xFA5B,0x0393,0x0AFC,0x0F92, + 0x120C,0x1316,0x13B6,0x163E,0x1B65,0x2324,0x2799,0x2836, + 0x2632,0x2290,0x1E8D,0x19B5,0x12F5,0x0939,0xFDC5,0xF062, + 0xE3CD,0xD9CC,0xD32D,0xD0BE,0xD0BC,0xD32E,0xD7BA,0xDE48, + 0xE561,0xECA0,0xF332,0xF808,0xFBC4,0x0059,0x04C5,0x0900, + 0x0D4E,0x0FDA,0x120B,0x147A,0x1789,0x1B5D,0x1E56,0x1E3E, + 0x1AF6,0x154E,0x0E04,0x05B5,0xFCCB,0xF434,0xEC17,0xE520, + 0xE0C0,0xDDCC,0xDC40,0xDC91,0xDF19,0xE23C,0xE65E,0xEBB5, + 0xF0C6,0xF412,0xF650,0xF8F7,0xFC33,0xFFC8,0x03DE,0x08DB, + 0x0D2D,0x0F56,0x1184,0x141C,0x16A6,0x16B9,0x1408,0x0FFB, + 0x0AFE,0x05E9,0xFFD9,0xF957,0xF31E,0xEDF5,0xE9B2,0xE70E, + 0xE5A5,0xE5F1,0xE754,0xE8B7,0xEA22,0xEB8F,0xEE21,0xF16E, + 0xF46C,0xF6EE,0xF921,0xFC16,0x003D,0x0403,0x074D,0x0AC1, + 0x0D76,0x0F97,0x1160,0x1298,0x11E2,0x0F45,0x0AB5,0x05A4, + 0x0147,0xFDAB,0xF9C4,0xF5C2,0xF27F,0xF022,0xEE4E,0xEC8D, + 0xEC65,0xEE0C,0xEF61,0xF0FC,0xF1A7,0xF324,0xF47A,0xF6AE, + 0xF942,0xFCA7,0xFF91,0x0311,0x06C1,0x099F,0x0D25,0x10C5, + 0x0FA7,0x0FE2,0x0F3D,0x0E06,0x0CD3,0x0A43,0x04B5,0xFB54, + 0xED9B,0xDCD9,0xC94C,0xBF20,0xBF82,0xBF01,0xBF36,0xBF60, + 0xC0BA,0xBF31,0xD313,0x0906,0x3076,0x3E5F,0x3E94,0x3F3F, + 0x3F66,0x3F62,0x3F43,0x3F04,0x3F2E,0x3E8C,0x347C,0x2C03, + 0x2983,0x2AA1,0x2E76,0x3165,0x300B,0x2569,0x1064,0xF234, + 0xCFF1,0xBFA9,0xC055,0xBFD9,0xBFFA,0xBFEF,0xC04E,0xC051, + 0xCCB8,0xE868,0x07A6,0x2597,0x39DB,0x3F33,0x3F24,0x3FF2, + 0x3CD6,0x3593,0x30A3,0x2E23,0x2E6D,0x31D9,0x34C4,0x3323, + 0x2F1A,0x2646,0x1B2C,0x0E85,0x01B9,0xF37B,0xE2FC,0xCE54, + 0xBFC1,0xBF6A,0xBF3B,0xBF95,0xBF35,0xC849,0xDB8E,0xEC22, + 0xFB01,0x0719,0x1176,0x1A64,0x20C0,0x23EA,0x2486,0x24D1, + 0x2568,0x2575,0x2587,0x2527,0x2694,0x2929,0x2B38,0x296F, + 0x2154,0x1390,0x0275,0xF07E,0xE0AA,0xD488,0xCB79,0xC5A5, + 0xC285,0xC292,0xC809,0xCF27,0xD8ED,0xE4F9,0xF178,0xFCC3, + 0x0547,0x0B31,0x0ECE,0x1089,0x116E,0x13B3,0x17AD,0x1D24, + 0x22F9,0x2763,0x290F,0x27E0,0x23FD,0x1F76,0x1958,0x11C2, + 0x08B5,0xFCBA,0xEF69,0xE313,0xD92F,0xD2CB,0xD083,0xD283, + 0xD679,0xDC4C,0xE267,0xE94F,0xEFDE,0xF567,0xF97B,0xFD8E, + 0x01C6,0x0690,0x0B3E,0x0F07,0x1257,0x146B,0x16CC,0x1A43, + 0x1E42,0x210A,0x20BE,0x1D56,0x1691,0x0D96,0x0463,0xFBF4, + 0xF43B,0xECD0,0xE664,0xE221,0xDF30,0xDE8F,0xDEE6,0xE0E5, + 0xE46B,0xE939,0xEE84,0xF2A4,0xF59D,0xF8F6,0xFB90,0xFDBE, + 0x009B,0x053F,0x0B45,0x103A,0x133C,0x1591,0x17B4,0x178C, + 0x18BD,0x172B,0x1243,0x0D66,0x079F,0x0072,0xF9D1,0xF402, + 0xEEEA,0xEAE8,0xE8B0,0xE85D,0xE94D,0xEA13,0xEAF2,0xEC91, + 0xEE83,0xF091,0xF2D8,0xF598,0xF936,0xFC4F,0xFF46,0x0220, + 0x05D3,0x0A44,0x0E0B,0x10EF,0x134F,0x1461,0x1481,0x128B, + 0x0F9D,0x0B64,0x067F,0x01E2,0xFD8C,0xF9F6,0xF6F9,0xF442, + 0xF106,0xEE28,0xECEC,0xED74,0xEEE0,0xF0B7,0xF19B,0xF1AA, + 0xF244,0xF409,0xF681,0xF940,0xFC22,0xFF5A,0x03C7,0x0766, + 0x0A77,0x0C93,0x0DB3,0x0DE4,0x0F3E,0x101C,0x0E15,0x0C06, + 0x0965,0x04DD,0xFE49,0xF42C,0xE69D,0xD677,0xC4A8,0xBF8E, + 0xBFF6,0xBF76,0xBFA0,0xBFF7,0xC145,0xC10A,0xDFD5,0x1564, + 0x36B9,0x3F51,0x3F1D,0x3F42,0x3F03,0x3F77,0x3F1A,0x3EB0, + 0x3F34,0x3BEE,0x2EDE,0x2756,0x269A,0x2951,0x2CE5,0x2EBD, + 0x2AB3,0x1D1D,0x0591,0xE5BA,0xC6DA,0xBEE3,0xBF7F,0xBEBE, + 0xBEFC,0xBF09,0xBEEC,0xBFB6,0xCF6B,0xECFB,0x0E10,0x2BC0, + 0x3D24,0x3E8E,0x3E68,0x3F0D,0x3A95,0x3358,0x2FBE,0x2EBC, + 0x2F53,0x31A8,0x3414,0x32EA,0x2CAF,0x21C8,0x157F,0x098B, + 0xFDAA,0xEFA9,0xDD54,0xC747,0xBE14,0xBECE,0xBE9A,0xBECA, + 0xBF69,0xCE4C,0xE0D9,0xEFF8,0xFD27,0x095E,0x1497,0x1C8D, + 0x21B1,0x2497,0x262B,0x2683,0x2608,0x250C,0x2401,0x2452, + 0x261D,0x28DB,0x2A66,0x27A3,0x1D0D,0x0CC1,0xFA1D,0xE90C, + 0xDB0A,0xD086,0xC8DF,0xC3FE,0xC12A,0xC179,0xC630,0xCF51, + 0xDBA7,0xE878,0xF469,0xFEAE,0x0752,0x0C80,0x0EA0,0x106A, + 0x1293,0x1549,0x197E,0x1EE8,0x23B3,0x25A8,0x2775,0x248E, + 0x1F9A,0x1C03,0x153F,0x0CEE,0x02AC,0xF649,0xE8A4,0xDD0A, + 0xD418,0xCFF9,0xCFCA,0xD2CD,0xD6DA,0xDBE4,0xE21A,0xE887, + 0xEF0E,0xF528,0xFA92,0xFEA9,0x02BA,0x0702,0x0B4F,0x0EED, + 0x1227,0x14FC,0x1811,0x1B5C,0x1DD0,0x1F42,0x1DE0,0x198A, + 0x1241,0x0974,0x004E,0xF83C,0xF098,0xE9B5,0xE46C,0xE09B, + 0xDE82,0xDE00,0xDF3F,0xE29B,0xE7CA,0xEC76,0xF01F,0xF363, + 0xF644,0xF94C,0xFC77,0xFFFD,0x0492,0x0942,0x0D33,0x1111, + 0x150E,0x17D0,0x197A,0x19C7,0x18B7,0x15A1,0x0FE4,0x09D5, + 0x0446,0xFD4D,0xF5EA,0xEF88,0xEB6F,0xE934,0xE835,0xE879, + 0xE877,0xE83E,0xE8B2,0xEA5D,0xED84,0xF16C,0xF4F8,0xF7ED, + 0xF9BB,0xFAAC,0xFD8F,0x0265,0x0790,0x0BF2,0x0F81,0x11F0, + 0x132B,0x1365,0x12E6,0x10B9,0x0DE7,0x09ED,0x05C1,0x01C5, + 0xFD51,0xF8EB,0xF4FE,0xF13F,0xEEE4,0xEE2D,0xEEA7,0xEFA9, + 0xF11A,0xF218,0xF2EB,0xF25F,0xF3EF,0xF640,0xF88E,0xFB7F, + 0xFEF0,0x0301,0x066A,0x08B5,0x0B68,0x0E55,0x1004,0x10FE, + 0x11D8,0x11B0,0x1011,0x0CA6,0x077A,0x0294,0xFD6B,0xF610, + 0xEB7E,0xDEBC,0xCFA3,0xC265,0xC07B,0xC09C,0xC087,0xC121, + 0xC0B0,0xCB9E,0xF1EF,0x143D,0x2BE4,0x38E5,0x3EDB,0x4017, + 0x4017,0x4042,0x3FDD,0x402A,0x3AB0,0x2D2C,0x23D5,0x1F7E, + 0x1F77,0x2258,0x2534,0x2488,0x1E86,0x11B4,0xFE62,0xE6F5, + 0xCFC0,0xC1B1,0xC051,0xC048,0xC03F,0xC04B,0xC636,0xD157, + 0xE0C9,0xF647,0x0DDE,0x22D8,0x3078,0x350E,0x327E,0x2DA3, + 0x2898,0x25CF,0x24E6,0x251D,0x2653,0x288C,0x2756,0x241C, + 0x20E5,0x18DF,0x0FCD,0x06C7,0xFCF7,0xF174,0xE325,0xD330, + 0xC558,0xC045,0xC010,0xC53D,0xD12A,0xDE34,0xEAAF,0xF57C, + 0xFEDB,0x0774,0x1025,0x1736,0x1B10,0x1CBB,0x1D50,0x1D5B, + 0x1CE6,0x1D48,0x1D66,0x1E2C,0x1F79,0x2057,0x1F43,0x1B58, + 0x13AD,0x07FB,0xFA18,0xED82,0xE458,0xDCD3,0xD75F,0xD3B5, + 0xD1C3,0xD229,0xD660,0xDE48,0xE81A,0xF185,0xF8A0,0xFE73, + 0x03E7,0x088A,0x0B98,0x0D99,0x0E4E,0x0F6C,0x11F5,0x1550, + 0x1869,0x1AD3,0x1C1B,0x1B45,0x19D4,0x1516,0x0F03,0x0934, + 0x0124,0xF78C,0xEDB8,0xE53D,0xDFFF,0xDD4A,0xDD40,0xDF02, + 0xE230,0xE591,0xE98F,0xEE49,0xF3F5,0xF8FB,0xFC1A,0xFDF2, + 0x008A,0x04CB,0x085B,0x0B03,0x0DF8,0x10A0,0x1285,0x1456, + 0x1573,0x15C7,0x1491,0x1129,0x0C37,0x05D8,0xFF1F,0xF8CD, + 0xF267,0xECFB,0xE913,0xE661,0xE55F,0xE522,0xE608,0xE8B2, + 0xEBF1,0xEDED,0xF07A,0xF476,0xF78A,0xFA30,0xFCB8,0xFFC0, + 0x02C9,0x05E4,0x08B2,0x0B81,0x0E3E,0x100E,0x10D4,0x106D, + 0x0DE4,0x0BC0,0x0944,0x0557,0x005C,0xFADC,0xF627,0xF2B6, + 0xEFE5,0xED7C,0xEC1A,0xEBCC,0xEB7C,0xEBA0,0xED33,0xEFAD, + 0xF1DD,0xF2F5,0xF3D3,0xF598,0xF86A,0xFBA6,0xFF06,0x01F8, + 0x0486,0x06E3,0x0904,0x0AA7,0x0C6E,0x0DEA,0x0D7B,0x0B71, + 0x088B,0x05C4,0x0267,0xFE95,0xFB63,0xF909,0xF720,0xF5C2, + 0xF43E,0xF338,0xF262,0xF1B0,0xF1C7,0xF23A,0xF3A0,0xF527, + 0xF666,0xF856,0xFA3B,0xFB7D,0xFD9D,0x000F,0x0342,0x0660, + 0x08FF,0x0A7B,0x0AF2,0x0A79,0x0912,0x089E,0x08EB,0x052E, + 0x039F,0x012A,0xFD7C,0xF9D3,0xF5C3,0xF0C2,0xEBB9,0xE7ED, + 0xE56C,0xE4B9,0xE580,0xE9F0,0xEFC6,0xF5D8,0xFBB0,0x012C, + 0x05B8,0x08EC,0x0B42,0x0CA9,0x0DC0,0x0E6A,0x0E26,0x0D5C, + 0x0D29,0x0CCD,0x0CE3,0x0C1A,0x0B71,0x0AA9,0x097C,0x0787, + 0x048D,0x014E,0xFDDA,0xFA55,0xF718,0xF516,0xF441,0xF345, + 0xF252,0xF17F,0xF0DD,0xF08A,0xF02B,0xF103,0xF21E,0xF393, + 0xF47E,0xF531,0xF5F6,0xF6C2,0xF705,0xF789,0xF7BB,0xF721, + 0xF722,0xF703,0xF722,0xF677,0xF492,0xF21C,0xEF58,0xEE9B, + 0xEDB7,0xECD3,0xEC54,0xEB10,0xEA60,0xE9B2,0xE987,0xE937, + 0xE930,0xE92A,0xE8B3,0xE855,0xE85F,0xE893,0xE84D,0xE8B4, + 0xE809,0xE744,0xE82E,0xE8C9,0xE8BF,0xE8C1,0xE8DB,0xE8C1, + 0xE895,0xE8D4,0xE8C2,0xE894,0xE874,0xE7E2,0xE737,0xE6C9, + 0xE6D8,0xE6F7,0xE789,0xE793,0xE786,0xE7AC,0xE7F6,0xE7FA, + 0xE7B7,0xE8DF,0xE96B,0xE8EB,0xE93B,0xE99E,0xEA00,0xEAC2, + 0xEB7B,0xEC43,0xED27,0xEDC4,0xEF2D,0xF01A,0xF015,0xF039, + 0xF137,0xF149,0xF153,0xF192,0xF19E,0xF21F,0xF249,0xF23A, + 0xF295,0xF2C5,0xF324,0xF2EE,0xF2F3,0xF32B,0xF3A4,0xF3DA, + 0xF3EE,0xF4D7,0xF507,0xF57C,0xF647,0xF722,0xF7CA,0xF842, + 0xF8A7,0xF90A,0xF9C2,0xF9EC,0xFA85,0xFB17,0xFB31,0xFB9A, + 0xFBFD,0xFC51,0xFC56,0xFC8F,0xFCF4,0xFD5C,0xFD71,0xFD0E, + 0xFD30,0xFD3D,0xFDDD,0xFE3C,0xFE64,0xFED6,0xFF61,0xFFC7, + 0x0023,0x006B,0x00A5,0x0134,0x01B7,0x024C,0x02F3,0x02E1, + 0x0310,0x03D2,0x041E,0x047B,0x0564,0x061A,0x04CB,0x06B6, + 0x06DB,0x05D4,0x0635,0x0681,0x0777,0x07CE,0x0808,0x0828, + 0x080C,0x07B4,0x07BE,0x07BC,0x07D9,0x0873,0x0889,0x08FC, + 0x0923,0x092B,0x0908,0x0970,0x0985,0x0A1D,0x0A5B,0x0A97, + 0x0AFE,0x0AE3,0x0AE3,0x0AF6,0x0B33,0x0B66,0x0B7D,0x0BEC, + 0x0C1C,0x0BDF,0x0C05,0x0BC2,0x0B88,0x0BE0,0x0C74,0x0CB1, + 0x0CC4,0x0CB7,0x0D11,0x0C93,0x0C7A,0x0C9F,0x0C2F,0x0C81, + 0x0CEE,0x0CAB,0x0C8A,0x0CA2,0x0D4C,0x0D41,0x0D4E,0x0D55, + 0x0D66,0x0DBD,0x0E03,0x0F72,0x1115,0x1041,0x1004,0x101C, + 0x1026,0x0FEE,0x0FAC,0x0FBB,0x0F58,0x0F45,0x0F43,0x0F69, + 0x0F88,0x0FAA,0x0F51,0x0F03,0x0EAE,0x0EAA,0x0E4E,0x0DD0, + 0x0EC9,0x0F64,0x0E86,0x0E28,0x0E59,0x0DE3,0x0DB3,0x0DDD, + 0x0DBC,0x0D5E,0x0D53,0x0D64,0x0CED,0x0CCC,0x0CB2,0x0CCC, + 0x0CB5,0x0CF8,0x0CF5,0x0D0E,0x0CA8,0x0C6C,0x0C5D,0x0C48, + 0x0BE0,0x0B0F,0x0BE6,0x0C9B,0x0C8D,0x0C56,0x0C1F,0x0BBE, + 0x0B92,0x0B5B,0x0B42,0x0B16,0x0AC8,0x09FB,0x0987,0x08F4, + 0x0853,0x08D5,0x0901,0x08C6,0x08A2,0x0865,0x080F,0x081C, + 0x0824,0x082F,0x0861,0x087A,0x0867,0x086F,0x081C,0x0803, + 0x07D9,0x0815,0x0829,0x0830,0x0824,0x07EB,0x07F8,0x07BC, + 0x076F,0x071A,0x06EE,0x0746,0x0748,0x0737,0x072D,0x06EE, + 0x06C4,0x06AB,0x06B3,0x06E0,0x06C1,0x0686,0x0684,0x0687, + 0x068E,0x0674,0x0627,0x0674,0x068D,0x0655,0x0647,0x060A, + 0x05AB,0x05A2,0x0574,0x05B4,0x0592,0x0569,0x05DC,0x05EA, + 0x05BD,0x0585,0x057B,0x0584,0x04D2,0x06AB,0x0644,0x04FE, + 0x0606,0x05A3,0x05EE,0x0612,0x05A6,0x0557,0x0576,0x0536, + 0x050E,0x0519,0x050F,0x04D6,0x0501,0x0519,0x04E4,0x048A, + 0x0430,0x046D,0x0479,0x04A6,0x049A,0x046D,0x047E,0x04AE, + 0x04BF,0x049C,0x046F,0x048B,0x048F,0x044B,0x0422,0x03EA, + 0x042E,0x0444,0x03C8,0x0429,0x0438,0x03E9,0x0392,0x0385, + 0x041D,0x043B,0x040A,0x0450,0x048D,0x0446,0x0398,0x03F6, + 0x040B,0x03A4,0x03D5,0x038E,0x03FC,0x03B9,0x0354,0x0348, + 0x0351,0x033F,0x02F2,0x02CD,0x0241,0x00AF,0xFFB7,0xFFC0, + 0xFFA5,0xFF91,0xFF8C,0xFFD6,0x004D,0x00AA,0x00BC,0x009D, + 0x00F0,0x012F,0x0110,0x00FF,0x018D,0x020C,0x02DC,0x03ED, + 0x0470,0x053A,0x064A,0x0743,0x080E,0x0899,0x08DC,0x08C2, + 0x08CA,0x08E8,0x08B3,0x08FB,0x096D,0x0988,0x0981,0x09BB, + 0x0A05,0x0A51,0x0A48,0x0A5A,0x0A5E,0x0AFB,0x0BC6,0x0CA9, + 0x0D10,0x0EA6,0x10CD,0x1050,0x103F,0x1076,0x112B,0x11A9, + 0x122E,0x12A0,0x1320,0x13B3,0x1416,0x1492,0x1505,0x1593, + 0x1621,0x160E,0x15C6,0x1571,0x14F1,0x146A,0x154B,0x1640, + 0x1614,0x163A,0x1730,0x1737,0x1676,0x166D,0x1639,0x1633, + 0x15EC,0x1528,0x147B,0x1429,0x13EE,0x1463,0x144B,0x14ED, + 0x1511,0x1465,0x13B0,0x136C,0x12FF,0x12DA,0x1229,0x10F4, + 0x11C7,0x124D,0x11F3,0x1160,0x10C2,0x1087,0x1074,0x0FCF, + 0x0F02,0x0EF3,0x0DBB,0x0CB4,0x0C82,0x0BD6,0x0C08,0x0C49, + 0x0BE7,0x0BA6,0x0B0A,0x0A20,0x08E6,0x07F6,0x07ED,0x0808, + 0x086C,0x0851,0x07CC,0x0761,0x0713,0x066C,0x0540,0x0514, + 0x04C1,0x0442,0x03BA,0x02AB,0x01FB,0x0173,0x00D3,0xFFC0, + 0xFE2A,0xFBA0,0xF78D,0xF1F4,0xEABD,0xE27A,0xD9A2,0xD226, + 0xCDC8,0xCE26,0xD3EB,0xDF50,0xEDED,0xFDFF,0x0D1D,0x183E, + 0x1E49,0x1EB9,0x1A27,0x12D3,0x09F4,0x017B,0xFC1F,0xFA88, + 0xFCD4,0x0359,0x0CA4,0x178B,0x21C2,0x2941,0x2C4B,0x2A18, + 0x22EB,0x1759,0x090C,0xFDBC,0xF115,0xE83C,0xE4D5,0xE30D, + 0xE468,0xE6D6,0xE9CC,0xEBBC,0xEDB0,0xEE51,0xEDA4,0xEC22, + 0xEA73,0xE7DD,0xE58B,0xE41E,0xE3D0,0xE3D6,0xE4DC,0xE7CF, + 0xEAAE,0xEE6C,0xF28F,0xF69E,0xFB06,0x0010,0x051B,0x09E9, + 0x0D89,0x0F49,0x0F0B,0x0C80,0x07FD,0x0306,0xFE0C,0xF99A, + 0xF6DE,0xF5B3,0xF606,0xF7D2,0xF9D8,0xFB4C,0xFBE1,0xFBA4, + 0xF9BE,0xF5B6,0xF058,0xEA00,0xE3C1,0xDDBF,0xD97C,0xD780, + 0xD8D8,0xDCA3,0xE134,0xE5AB,0xEA93,0xEECE,0xF12F,0xF1DA, + 0xF184,0xF16E,0xF0C7,0xEDDC,0xED6E,0xEEEB,0xF01D,0xF20D, + 0xF45A,0xF750,0xF9EA,0xFCAC,0xFE98,0x0045,0x00BB,0x002D, + 0xFF5B,0xFD57,0xFAAE,0xF7D9,0xF558,0xF33C,0xEFBB,0xED33, + 0xEBB0,0xEA10,0xE969,0xE940,0xE9B2,0xEADC,0xEBF6,0xEC46, + 0xEBC5,0xEB2E,0xEA2E,0xE8B1,0xE725,0xE604,0xE57F,0xE65F, + 0xE7D3,0xE98A,0xECA8,0xF096,0xF3F3,0xF66B,0xF975,0xFC49, + 0xFC1D,0xFB92,0xFB0D,0xFA88,0xFA43,0xFA40,0xF9E1,0xF9AF, + 0xFA75,0xFACE,0xFB8C,0xFB87,0xFB9F,0xFC0F,0xFB93,0xF9F7, + 0xF88B,0xF724,0xF578,0xF3B2,0xF191,0xEF8C,0xEE3E,0xEDE1, + 0xECAD,0xEC41,0xEC22,0xED27,0xEE58,0xEF26,0xF099,0xF211, + 0xF323,0xF32E,0xF2D3,0xF277,0xF2E8,0xF388,0xF471,0xF596, + 0xF6E2,0xF84E,0xF975,0xFA85,0xFBCA,0xFCBC,0xFD64,0xFD8C, + 0xFDD4,0xFD1F,0xFC1D,0xFAD7,0xF9E5,0xF8DC,0xF7EF,0xF775, + 0xF728,0xF6D2,0xF67D,0xF614,0xF567,0xF503,0xF4A2,0xF411, + 0xF3F4,0xF3C5,0xF31C,0xF2C2,0xF264,0xF12C,0xF176,0xF26F, + 0xF2FD,0xF3F5,0xF599,0xF4F3,0xF5E7,0xF8F3,0xF8A9,0xF9C7, + 0xFB48,0xFC4F,0xFC8E,0xFBE0,0xFBBF,0xFBA6,0xFB56,0xFAF6, + 0xFC1D,0xFD5D,0xFE6B,0xFF4F,0xFFC0,0xFFBB,0xFF55,0xFE99, + 0xFD4D,0xFB7D,0xF91E,0xF510,0xEF0D,0xE722,0xDCEB,0xCF84, + 0xC1D3,0xBF2D,0xBF94,0xBF34,0xBF46,0xBF79,0xC040,0xC0A2, + 0xD90E,0x01AC,0x2535,0x3BE9,0x3EBC,0x3E5C,0x3E2F,0x2EC3, + 0x18F0,0x07A5,0xFD89,0xFD3B,0x0729,0x199D,0x3312,0x3F54, + 0x3EB7,0x3F29,0x3F44,0x3EBE,0x3E90,0x3BD4,0x2255,0x0315, + 0xEAAA,0xDBA0,0xD315,0xD18F,0xD544,0xDC2F,0xE364,0xE8A7, + 0xEC0B,0xEBE5,0xE918,0xE513,0xE012,0xDA18,0xD566,0xD331, + 0xD2B7,0xD50B,0xD965,0xE017,0xE7B2,0xF115,0xFC71,0x07C8, + 0x13CE,0x2110,0x2D65,0x3765,0x3E01,0x3F0A,0x3E03,0x36AC, + 0x2CD1,0x21F7,0x173A,0x0E86,0x0958,0x07E2,0x0940,0x0D15, + 0x1295,0x16E8,0x17B2,0x14BE,0x0E33,0x02C4,0xF30E,0xE2A7, + 0xD479,0xC8EB,0xC20D,0xBFCB,0xC2EF,0xCA81,0xD4D7,0xE021, + 0xEA23,0xF20F,0xF727,0xFA19,0xFAD3,0xF99F,0xF896,0xF784, + 0xF7FC,0xF9DD,0xFDC7,0x0331,0x09DC,0x1132,0x1865,0x1E60, + 0x2296,0x24C0,0x2591,0x23FC,0x20B9,0x1C2B,0x161F,0x0FBA, + 0x088A,0x01A9,0xFB34,0xF546,0xF0D5,0xEDFB,0xEC42,0xEB99, + 0xEBD6,0xECD4,0xECFE,0xECEB,0xEBE2,0xE9CB,0xE6C7,0xE3A9, + 0xE051,0xDE07,0xDDBF,0xDF73,0xE2D3,0xE7C4,0xEF1F,0xF74F, + 0xFF7E,0x0693,0x0C19,0x0FDA,0x11DC,0x1212,0x1106,0x0F5E, + 0x0D51,0x0C2D,0x0AE9,0x0B02,0x0C03,0x0D82,0x0E71,0x0EEF, + 0x0FA4,0x0E82,0x0DBA,0x0BAB,0x0552,0x0141,0xFBBD,0xF681, + 0xF1ED,0xEE70,0xEB9A,0xEA2D,0xE968,0xE9E4,0xEB1B,0xECCE, + 0xEF12,0xF0D3,0xF2EF,0xF4A1,0xF63B,0xF730,0xF7FF,0xF904, + 0xFA3E,0xFB8A,0xFDA7,0x0017,0x0299,0x0616,0x0910,0x0BBC, + 0x0E25,0x1091,0x1224,0x12D0,0x12C9,0x1241,0x109C,0x0E95, + 0x0C51,0x09CE,0x0790,0x0525,0x02C7,0x00B6,0xFF0E,0xFDF8, + 0xFCF8,0xFBF5,0xFB4C,0xFA40,0xF8DE,0xF784,0xF5B4,0xF421, + 0xF35C,0xF2A5,0xF268,0xF20D,0xF2BC,0xF463,0xF654,0xF897, + 0xFB21,0xFDBD,0xFF5A,0xFF7E,0x01B0,0x0355,0x0465,0x0489, + 0x049A,0x04B6,0x0590,0x066A,0x069D,0x0754,0x0866,0x08DF, + 0x093F,0x08C2,0x0800,0x06D8,0x054F,0x01DC,0xFCAD,0xF7A3, + 0xF031,0xE555,0xD797,0xC721,0xBF5F,0xBFE3,0xBF84,0xBF7A, + 0xBFBD,0xC02D,0xC108,0xC1B8,0xE113,0x1032,0x34B7,0x3FBD, + 0x3F06,0x3F3B,0x400C,0x33FC,0x1B91,0x0B20,0x044F,0x0672, + 0x132C,0x2C72,0x3ECF,0x3F6F,0x3FE4,0x400C,0x4008,0x3FB1, + 0x3F28,0x3F7A,0x2897,0x05EC,0xEC6B,0xDB08,0xD26E,0xD257, + 0xD6AD,0xDDD1,0xE487,0xE971,0xEB8E,0xEA8C,0xE70E,0xE186, + 0xDB2E,0xD4DA,0xCFBF,0xCD49,0xCD5B,0xD011,0xD5DC,0xDDAF, + 0xE743,0xF2F6,0x0045,0x0E9C,0x1DEC,0x2DB7,0x3C34,0x4045, + 0x3FFA,0x4023,0x3FDF,0x3FCE,0x3646,0x285F,0x1D1F,0x14AA, + 0x106E,0x105F,0x13FB,0x18C3,0x1D96,0x20C5,0x2041,0x1AEF, + 0x105D,0x01C9,0xF05D,0xDE94,0xCD40,0xC1B7,0xC049,0xC098, + 0xC01B,0xC615,0xD312,0xDFDA,0xEA44,0xF25F,0xF87A,0xFAF9, + 0xFB2C,0xFA9B,0xF9C7,0xF80E,0xFBB0,0xFF1B,0x0331,0x0AB0, + 0x12C0,0x1AFC,0x2250,0x2871,0x2D08,0x2F00,0x2E4F,0x2C4D, + 0x2862,0x2399,0x1D3D,0x15E6,0x0E29,0x062E,0xFE3A,0xF700, + 0xF148,0xEDCB,0xEC5C,0xEC8C,0xED61,0xEDC9,0xED91,0xECFA, + 0xEA47,0xE70C,0xE3A2,0xE027,0xDD0F,0xDB2A,0xDAE6,0xDD41, + 0xE218,0xE8C0,0xF1C3,0xFB48,0x0496,0x0C2A,0x1181,0x14E2, + 0x16A8,0x1695,0x159A,0x1460,0x12EC,0x11A4,0x112D,0x10EB, + 0x1175,0x12C8,0x13EF,0x149A,0x1484,0x133F,0x10DC,0x0CF5, + 0x095B,0x053A,0xFE76,0xF822,0xF2C1,0xEEB9,0xEB11,0xE8A6, + 0xE71F,0xE6F4,0xE87E,0xEAAA,0xED80,0xF03C,0xF2C4,0xF47B, + 0xF5C3,0xF63A,0xF6B9,0xF7B3,0xF8C8,0xFB63,0xFDC9,0xFFDC, + 0x030B,0x0710,0x0A44,0x0E01,0x11A9,0x148C,0x170C,0x177F, + 0x1676,0x14A0,0x11E2,0x0E87,0x0AB2,0x076B,0x04FF,0x027B, + 0x00E5,0xFF88,0xFDFC,0xFC85,0xFB6A,0xF98B,0xF717,0xF629, + 0xF4CB,0xF2CA,0xF073,0xEE29,0xED0C,0xEC71,0xECDD,0xED99, + 0xEED3,0xF01C,0xF1E8,0xF4A7,0xF72E,0xFA0C,0xFD4A,0x0028, + 0x029B,0x041A,0x0536,0x05E9,0x0657,0x0695,0x0669,0x070D, + 0x07F1,0x0884,0x0954,0x09D3,0x0A03,0x0961,0x08C7,0x0703, + 0x041A,0xFF74,0xF86D,0xEE9D,0xE279,0xD2EE,0xC1EA,0xBE1E, + 0xBE9B,0xBE50,0xBE3E,0xBE4C,0xBF3C,0xBF1A,0xC476,0xEABB, + 0x17CA,0x37D7,0x3E24,0x3DB2,0x3DFA,0x3C42,0x2827,0x123D, + 0x03D5,0xFF1F,0x05F1,0x177E,0x32E3,0x3EC5,0x3DF9,0x3E7A, + 0x3EB8,0x3E89,0x3DEB,0x3DF8,0x3B2C,0x1E50,0xFC5C,0xE486, + 0xD54C,0xCEBB,0xD1B6,0xD5FD,0xDCB1,0xE3DF,0xE781,0xE83C, + 0xE65B,0xE28A,0xDC3B,0xD54D,0xCEB9,0xC9E0,0xC77D,0xC824, + 0xCBCD,0xD2FD,0xDBBF,0xE642,0xF2CE,0x00E2,0x1056,0x1FEC, + 0x2F4B,0x3C1F,0x3F53,0x3F18,0x3F16,0x3F56,0x3C85,0x3042, + 0x2356,0x18C5,0x11C4,0x0F39,0x1055,0x149B,0x19F9,0x1E94, + 0x20D6,0x1ED0,0x1775,0x0BA1,0xFC48,0xEA3F,0xD87E,0xC850, + 0xC06C,0xC010,0xC005,0xC000,0xC7B7,0xD4AE,0xE0A8,0xEA28, + 0xF123,0xF589,0xF782,0xF763,0xF6E5,0xF664,0xF74B,0xF9BC, + 0xFD62,0x0270,0x07DC,0x0F73,0x1855,0x1FD5,0x2687,0x2B54, + 0x2D26,0x2D2D,0x2ACF,0x2663,0x20F8,0x1A79,0x1324,0x0B56, + 0x035F,0xFB9E,0xF4DC,0xF04E,0xED25,0xEAA4,0xEA8A,0xEC2F, + 0xECDB,0xEC9A,0xEB44,0xE88B,0xE517,0xE111,0xDCFA,0xDA48, + 0xD950,0xD9D8,0xDCCF,0xE1EB,0xE98A,0xF2B9,0xFC0B,0x04F4, + 0x0CA5,0x1368,0x171E,0x17D0,0x1709,0x16B5,0x148C,0x119C, + 0x107D,0x111A,0x127F,0x140C,0x1581,0x16A6,0x1748,0x16EB, + 0x14F3,0x11DB,0x0DD6,0x0864,0x02A6,0xFC9C,0xF6D2,0xF21C, + 0xEE67,0xEB84,0xE999,0xE8BF,0xE8B0,0xE973,0xEAD9,0xECD9, + 0xEED9,0xF104,0xF334,0xF569,0xF718,0xF84F,0xF9B0,0xFB1B, + 0xFC60,0xFDF6,0x0081,0x0385,0x073B,0x0B9B,0x0FC7,0x13C0, + 0x1695,0x1834,0x18F2,0x180B,0x15DC,0x1355,0x1086,0x0D4F, + 0x0A2C,0x0726,0x04E4,0x02BC,0x016D,0x0014,0xFEC2,0xFD77, + 0xFBD1,0xF9E8,0xF7BC,0xF4FD,0xF273,0xF091,0xEF38,0xEEAC, + 0xEE92,0xEF6F,0xF060,0xF1AA,0xF2D6,0xF595,0xF8D7,0xFB4C, + 0xFE04,0x01E2,0x0343,0x0568,0x08AC,0x08B1,0x0909,0x09A0, + 0x09F2,0x0A2C,0x0ADC,0x0C09,0x0D4D,0x0DC4,0x0E1C,0x0DFC, + 0x0DBA,0x0C95,0x0B32,0x091F,0x0585,0xFF89,0xF73B,0xEC65, + 0xDF65,0xCE68,0xC075,0xBF81,0xBF5D,0xBF36,0xBF51,0xBF47, + 0xC094,0xBF9D,0xCCE9,0xF9EA,0x24DB,0x3CE0,0x3EBB,0x3E76, + 0x3F33,0x3A94,0x243A,0x104E,0x04EC,0x038A,0x0D6A,0x22A0, + 0x3AFA,0x3F76,0x3EF0,0x3F5C,0x3F6D,0x3F25,0x3E2E,0x3F30, + 0x36C0,0x1403,0xF555,0xDF92,0xD313,0xCF96,0xD2F4,0xD98A, + 0xE1B6,0xE6A9,0xE914,0xE972,0xE69F,0xE19E,0xDBCB,0xD582, + 0xCF0A,0xCA51,0xC887,0xCA5A,0xCEFB,0xD61D,0xDF11,0xEA20, + 0xF6F5,0x0504,0x142F,0x2383,0x33FE,0x3F4F,0x3F61,0x3F36, + 0x3F19,0x3F85,0x3A13,0x2BD3,0x1EF8,0x1519,0x0F7B,0x0E1A, + 0x1029,0x146B,0x1900,0x1D1F,0x1E11,0x1AFC,0x12F8,0x05DB, + 0xF4DF,0xE24C,0xD029,0xC22F,0xBF18,0xBEEA,0xBEB8,0xC06E, + 0xCAD0,0xD71D,0xE211,0xEB4C,0xF162,0xF4C9,0xF68F,0xF660, + 0xF596,0xF529,0xF60D,0xF82C,0xFBC2,0x023B,0x0A09,0x128B, + 0x1ACD,0x2233,0x2790,0x29F5,0x2A95,0x2A38,0x2806,0x243E, + 0x1F48,0x18C5,0x1142,0x0808,0xFEDA,0xF685,0xF049,0xEB88, + 0xE8AF,0xE821,0xE8C3,0xE9F3,0xEA6B,0xE9F3,0xE89F,0xE5AC, + 0xE1EB,0xDDF5,0xD9F9,0xD75E,0xD62F,0xD700,0xDA05,0xE023, + 0xE86C,0xF1B9,0xFB5A,0x0447,0x0BBB,0x10D0,0x13C4,0x1439, + 0x1362,0x120F,0x10A1,0x0F6F,0x0EE4,0x0F32,0x1018,0x113C, + 0x1246,0x1245,0x1221,0x1155,0x0F28,0x0BBE,0x0754,0x0244, + 0xFBB9,0xF6CA,0xF2F3,0xEC3D,0xE98E,0xE6EA,0xE4A1,0xE3DD, + 0xE3EA,0xE469,0xE672,0xE906,0xEBCE,0xEEF9,0xF1A7,0xF3F8, + 0xF58B,0xF690,0xF734,0xF82A,0xF9E0,0xFC89,0xFF6F,0x02DF, + 0x06F6,0x0ABE,0x0E83,0x119E,0x1474,0x15D9,0x1685,0x164C, + 0x1442,0x11A5,0x0E8E,0x0AB1,0x06D8,0x0426,0x020E,0x0069, + 0xFF3C,0xFDC8,0xFC37,0xFAF8,0xF942,0xF7C9,0xF59B,0xF3DC, + 0xF241,0xF01E,0xEE7F,0xEDC2,0xED77,0xEDBA,0xEE83,0xEFF4, + 0xF32E,0xF708,0xFA29,0xFC61,0xFF03,0x016F,0x02FD,0x042E, + 0x05A0,0x0662,0x05FB,0x07B5,0x0897,0x08D4,0x0976,0x09CE, + 0x0A25,0x0AF6,0x0C10,0x0BE1,0x0AD1,0x0963,0x07DA,0x04D9, + 0x0077,0xFAA3,0xF2F0,0xE94C,0xDBB6,0xC8C3,0xBF2F,0xBFCC, + 0xBF59,0xBF33,0xBF70,0xBFB6,0xC0D5,0xC015,0xD656,0x0557, + 0x2D51,0x3EE3,0x3ECC,0x3EF9,0x3FD9,0x3597,0x1DFB,0x0C19, + 0x029C,0x0410,0x1110,0x29CE,0x3E80,0x402D,0x406C,0x400A, + 0x3FD7,0x3F96,0x3EB7,0x3FF4,0x2F04,0x0B0A,0xEFBC,0xDCD5, + 0xD325,0xD1A7,0xD526,0xDBE5,0xE2CC,0xE773,0xE9C4,0xE936, + 0xE5BE,0xE0E5,0xDA53,0xD3E2,0xCE97,0xCB67,0xCAC5,0xCCE6, + 0xD1B1,0xD948,0xE303,0xEE3D,0xFA92,0x0925,0x190E,0x2952, + 0x3903,0x4076,0x401C,0x4035,0x3FED,0x4032,0x37D2,0x29BA, + 0x1D86,0x143C,0x0F27,0x0EAC,0x1282,0x1817,0x1DFF,0x224F, + 0x22C4,0x1DED,0x1385,0x042D,0xF216,0xDF07,0xCCE1,0xC138, + 0xC052,0xC093,0xC012,0xC38D,0xCF8F,0xDB9B,0xE61A,0xEE54, + 0xF411,0xF6A8,0xF729,0xF645,0xF5D0,0xF637,0xF7B4,0xFAF1, + 0x00CB,0x07CA,0x0DA0,0x1768,0x1F4F,0x24EC,0x2A6C,0x2DB2, + 0x2E7B,0x2D64,0x2A85,0x2674,0x2040,0x183A,0x0FCB,0x0750, + 0xFEC1,0xF6B4,0xF0A1,0xEC54,0xE9BF,0xE96D,0xEA55,0xEC3B, + 0xED9A,0xED2C,0xEB6D,0xE834,0xE3AC,0xDEB4,0xDABF,0xD7E7, + 0xD760,0xD9C8,0xDEA3,0xE576,0xED93,0xF6EE,0x006D,0x0972, + 0x1083,0x14FF,0x172F,0x1723,0x15AE,0x134E,0x115A,0x0FF5, + 0x0FD0,0x1014,0x11C7,0x136B,0x148C,0x14B4,0x1404,0x126E, + 0x0FF7,0x0C7F,0x07FD,0x0295,0xFD25,0xF745,0xF164,0xED84, + 0xEB7B,0xE7D3,0xE625,0xE5D6,0xE66F,0xE82B,0xEA93,0xECC9, + 0xEEF9,0xF179,0xF420,0xF5BD,0xF70D,0xF7D3,0xF874,0xF93A, + 0xFA97,0xFD08,0xFFFE,0x03B1,0x091C,0x0E2D,0x1137,0x144A, + 0x171B,0x177C,0x16B7,0x15BA,0x135B,0x1057,0x0CF4,0x0908, + 0x05A3,0x02EB,0x00CC,0xFFAA,0xFE36,0xFDBB,0xFCA4,0xFAE5, + 0xF870,0xF5E0,0xF31C,0xF093,0xEDA8,0xEB82,0xEBE8,0xEC35, + 0xEBDD,0xECB4,0xEDBD,0xEF36,0xF183,0xF434,0xF774,0xFA38, + 0xFC96,0xFEDA,0x0164,0x02DB,0x0461,0x0559,0x0614,0x06A9, + 0x070B,0x073E,0x0728,0x075C,0x07D9,0x08C5,0x091E,0x0965, + 0x08DE,0x07BD,0x05DF,0x01C4,0xFB34,0xF19D,0xE5CA,0xD5C4, + 0xC3DB,0xBE1F,0xBE7E,0xBE31,0xBE56,0xBE62,0xBEC5,0xBFA8, + 0xC0A5,0xE212,0x0FC5,0x3314,0x3E11,0x3D93,0x3DBE,0x3D89, + 0x2ABD,0x1394,0x0420,0xFE60,0x0368,0x138E,0x2E55,0x3E55, + 0x3E08,0x3EA6,0x3E91,0x3E73,0x3DF3,0x3D63,0x3DAD,0x25AC, + 0x0201,0xE7BB,0xD681,0xCF0B,0xCEB7,0xD3BF,0xDBA0,0xE262, + 0xE660,0xEA1C,0xE77C,0xE2A7,0xDE06,0xD72E,0xD0D2,0xCB05, + 0xC78C,0xC6CE,0xC9A2,0xCF12,0xD76E,0xE20D,0xEF04,0xFDFF, + 0x0CF8,0x1C91,0x2BB5,0x39AD,0x3F40,0x3F36,0x3F4B,0x3F3B, + 0x3DF1,0x3302,0x2544,0x1A1F,0x129B,0x0E95,0x0EB4,0x1334, + 0x1940,0x1E72,0x2184,0x1FF5,0x1A19,0x0ECA,0xFF14,0xED4E, + 0xDB30,0xCADF,0xC093,0xBFEA,0xC017,0xBFD1,0xC55E,0xD200, + 0xDDF1,0xE88A,0xF12D,0xF6F2,0xF8FD,0xF909,0xF82D,0xF6E2, + 0xF674,0xF7D0,0xFB75,0x0140,0x08C2,0x115A,0x19B5,0x2170, + 0x27CF,0x2AA1,0x2C92,0x2DA4,0x2C24,0x2882,0x22C4,0x1BDF, + 0x1470,0x0C5D,0x03CD,0xFBE8,0xF532,0xF043,0xED40,0xEB83, + 0xEB4B,0xEBDB,0xECED,0xECF2,0xEA17,0xE7FB,0xE588,0xE204, + 0xDDA2,0xD9C3,0xD7C8,0xD772,0xD986,0xDE7F,0xE5CA,0xEF0D, + 0xF94B,0x02DE,0x0B44,0x11BE,0x153B,0x16AC,0x1655,0x14D1, + 0x1317,0x1194,0x10D7,0x0FFA,0x10A5,0x11FB,0x1294,0x136E, + 0x146C,0x14A7,0x13BD,0x1100,0x0C78,0x06A5,0xFFFC,0xFA3A, + 0xF4FE,0xF05B,0xECB0,0xEAA3,0xE8BA,0xE71E,0xE6A1,0xE7C3, + 0xE927,0xEB2C,0xED94,0xF026,0xF257,0xF3C3,0xF4CB,0xF5AC, + 0xF6BC,0xF7DA,0xF94D,0xFBB5,0xFF1F,0x0268,0x059D,0x0884, + 0x0BED,0x0FC5,0x12E8,0x14E8,0x1613,0x1654,0x1525,0x1281, + 0x0F20,0x0B93,0x0875,0x0561,0x02A1,0x00C4,0xFF41,0xFE3D, + 0xFD28,0xFBAF,0xFAE9,0xF996,0xF860,0xF678,0xF3E6,0xF17A, + 0xEECE,0xEC34,0xEA9D,0xEA87,0xEB55,0xED44,0xF06D,0xF45D, + 0xF7F4,0xFB29,0xFDDA,0xFF8F,0x01B6,0x031F,0x0401,0x051D, + 0x070D,0x05D5,0x067A,0x08C7,0x08B9,0x0A8E,0x0C27,0x0C8A, + 0x0D46,0x0DAE,0x0D41,0x0B82,0x08E5,0x0644,0x02F7,0xFE20, + 0xF75E,0xEF0C,0xE513,0xD7BC,0xC6DD,0xBF10,0xBF9D,0xBF53, + 0xBF33,0xBF4B,0xC05D,0xBF5E,0xCA29,0xF153,0x16B9,0x347E, + 0x3EB5,0x3E28,0x3F32,0x377B,0x22A6,0x10BB,0x0481,0x00CB, + 0x07E5,0x1843,0x3110,0x3F12,0x3EB2,0x3F07,0x3F19,0x3F05, + 0x3E6D,0x3F1B,0x3632,0x1739,0xFC03,0xE7DF,0xDB43,0xD61D, + 0xD713,0xDB03,0xE0B2,0xE5C5,0xE900,0xE9B2,0xE7E0,0xE656, + 0xE124,0xDAA7,0xD472,0xD0AD,0xCF94,0xD024,0xD397,0xD960, + 0xE0A6,0xEA0C,0xF462,0x006B,0x0E68,0x1D34,0x2B63,0x3867, + 0x3F7F,0x3F52,0x3F30,0x3E68,0x3625,0x2A21,0x1EFF,0x1678, + 0x10EF,0x0E5A,0x0F5B,0x1325,0x17AE,0x1BAA,0x1D7F,0x1BBE, + 0x150F,0x09AF,0xFAB6,0xE9D9,0xD912,0xCAC6,0xC1AB,0xBF64, + 0xC060,0xC667,0xCFCA,0xD912,0xE2A7,0xEC34,0xF23C,0xF5A1, + 0xF75B,0xF7EC,0xF77D,0xF70F,0xF7ED,0xFA3A,0xFDB6,0x025C, + 0x0870,0x0FA5,0x16A7,0x1BFA,0x208A,0x239F,0x2575,0x2591, + 0x2421,0x2115,0x1D00,0x1725,0x102F,0x08BE,0x00D6,0xF994, + 0xF34E,0xEEB4,0xEC09,0xEAD8,0xEB1C,0xEB3C,0xEBEB,0xEC5B, + 0xEC2A,0xEAE7,0xE849,0xE491,0xE0AB,0xDD30,0xDAA9,0xD9E8, + 0xDC1F,0xE1A1,0xE8BB,0xF12C,0xF9E5,0x021C,0x09AE,0x0ED6, + 0x1196,0x1308,0x12CB,0x119B,0x0F8B,0x0D52,0x0BFB,0x0B35, + 0x0BC7,0x0D38,0x0EBA,0x1004,0x102F,0x0FDC,0x0E51,0x0B49, + 0x0715,0x026E,0xFDD3,0xF906,0xF3CD,0xEEEB,0xEB75,0xE83F, + 0xE703,0xE74B,0xE557,0xE731,0xE933,0xEAEB,0xED12,0xEF4A, + 0xF11E,0xF396,0xF502,0xF678,0xF76C,0xF838,0xF950,0xFA59, + 0xFC9A,0xFFA8,0x041A,0x084B,0x0C39,0x0FD1,0x1313,0x1448, + 0x13F5,0x1350,0x1193,0x0F6B,0x0C26,0x0886,0x0521,0x02C8, + 0x00C9,0xFF98,0xFEE8,0xFED8,0xFEB0,0xFD75,0xFBF4,0xF9E6, + 0xF7B7,0xF4FC,0xF260,0xF084,0xEFE4,0xEFD7,0xEFC8,0xEFB6, + 0xF078,0xF1E2,0xF351,0xF53E,0xF7E8,0xFB1D,0xFE69,0x00FB, + 0x02BD,0x04EC,0x0702,0x07AF,0x0825,0x0905,0x09AF,0x0997, + 0x07F4,0x06BA,0x0813,0x08EC,0x0969,0x0999,0x0987,0x0948, + 0x086C,0x05D7,0x02EF,0xFF56,0xFB5D,0xF61A,0xEFBC,0xE96E, + 0xE2F8,0xDBEF,0xD528,0xCF5B,0xCCB9,0xCF42,0xD657,0xE079, + 0xED99,0xFB7B,0x086D,0x1140,0x15C8,0x161F,0x12C7,0x0D5B, + 0x07A2,0x0348,0x018B,0x02F2,0x0868,0x1075,0x19E7,0x2424, + 0x2CD9,0x32C2,0x34E5,0x30E1,0x289D,0x1E80,0x1271,0x068A, + 0xFD06,0xF6DB,0xF3D1,0xF2D4,0xF407,0xF6D0,0xF8D4,0xFA34, + 0xFA5A,0xF9AD,0xF842,0xF5D4,0xF298,0xEFE8,0xEDA2,0xEC2B, + 0xEB3F,0xEC0F,0xEDF7,0xF101,0xF4B6,0xF91C,0xFE81,0x045E, + 0x0953,0x0DDF,0x127F,0x160B,0x180B,0x1890,0x177D,0x157C, + 0x12E1,0x0FF6,0x0D70,0x0B58,0x0A49,0x09F2,0x0A1F,0x0BBA, + 0x0D27,0x0D6F,0x0C57,0x0A17,0x0652,0x0117,0xFB56,0xF5D1, + 0xF0C7,0xECD0,0xEA34,0xE8CE,0xE941,0xEABD,0xED1B,0xF08A, + 0xF43D,0xF7EC,0xFA5D,0xFB89,0xFC00,0xFBF0,0xFB35,0xFACE, + 0xFBAD,0xFDC3,0xFF23,0x0196,0x0466,0x0712,0x09F6,0x0DA4, + 0x0F88,0x0F77,0x1230,0x126F,0x1073,0x0E97,0x0C2B,0x099F, + 0x075B,0x052F,0x02FF,0x01B4,0x00A7,0xFF0C,0xFD4C,0xFC50, + 0xFB38,0xFA01,0xF8DC,0xF729,0xF5C7,0xF42C,0xF264,0xF04E, + 0xEE94,0xEDB1,0xEE57,0xEFA5,0xF10C,0xF274,0xF3E9,0xF519, + 0xF649,0xF741,0xF7FA,0xF895,0xF8FE,0xF8EA,0xF8D9,0xF882, + 0xF803,0xF749,0xF68A,0xF5E0,0xF563,0xF504,0xF498,0xF3F1, + 0xF361,0xF2DC,0xF1FD,0xF0B3,0xEF8E,0xEEB8,0xEDBD,0xECBF, + 0xEBE6,0xEB48,0xEACA,0xEA6E,0xEA2C,0xEA3A,0xEB47,0xEBE0, + 0xEA4D,0xE9B4,0xE8D8,0xE7FB,0xE7B5,0xE795,0xE7A6,0xE79D, + 0xE7BB,0xE7D3,0xE82B,0xE82D,0xE827,0xE7C4,0xE7AE,0xE7D2, + 0xE791,0xE784,0xE796,0xE834,0xE891,0xE81D,0xE797,0xE84D, + 0xE819,0xE7EE,0xE81E,0xE7FD,0xE7D0,0xE826,0xE836,0xE7FD, + 0xE842,0xE83A,0xE8C9,0xE8DA,0xE8EF,0xE8EF,0xE92E,0xE989, + 0xEA16,0xEA5F,0xEACC,0xE9B9,0xEAF1,0xEC48,0xECA4,0xED0D, + 0xED8A,0xEDFF,0xEE62,0xEF1A,0xEFCF,0xF0B8,0xF114,0xF0E7, + 0xF151,0xF1BC,0xF176,0xF19B,0xF26F,0xF2D7,0xF342,0xF437, + 0xF4CC,0xF52E,0xF59C,0xF5A2,0xF61B,0xF698,0xF695,0xF6ED, + 0xF73B,0xF7B3,0xF842,0xF887,0xF91C,0xF9C0,0xF9CC,0xFA4F, + 0xFA93,0xFAE0,0xFB07,0xFB7D,0xFBD3,0xFC9A,0xFCEC,0xFDC1, + 0xFEA0,0xFEB1,0xFF07,0xFF62,0xFFD9,0x007D,0x00D5,0x0134, + 0x0190,0x01A6,0x020C,0x0284,0x02CF,0x0305,0x034E,0x0403, + 0x048D,0x04E3,0x04EB,0x04FC,0x0545,0x0548,0x05C8,0x05A9, + 0x05E6,0x06A5,0x074A,0x072A,0x06EC,0x077F,0x07CC,0x0749, + 0x0958,0x07D4,0x07C4,0x08BA,0x0851,0x0885,0x094F,0x09A4, + 0x0977,0x0A56,0x0AC2,0x0B22,0x0B01,0x0B2A,0x0AD4,0x0AD1, + 0x0B8B,0x0BA0,0x0BB1,0x0C23,0x0CA6,0x0C4C,0x0C82,0x0C29, + 0x0C35,0x0C6D,0x0C8C,0x0D22,0x0D89,0x0D84,0x0D79,0x0D7E, + 0x0D56,0x0D01,0x0D21,0x0D4D,0x0D22,0x0D41,0x0D78,0x0DE7, + 0x0E24,0x0DC5,0x0D67,0x0D77,0x0D89,0x0D7D,0x0DD9,0x0E10, + 0x0EAC,0x0ED4,0x0E4D,0x0E2A,0x0E5A,0x0E4A,0x0EF5,0x0EFC, + 0x0F2B,0x0FC5,0x0F66,0x0EF6,0x0F18,0x0F01,0x0E43,0x0E0D, + 0x0C6C,0x0C9F,0x0CE3,0x0CB5,0x0C98,0x0C5D,0x0C8B,0x0C33, + 0x0BE2,0x0C2A,0x0CA3,0x0C78,0x0C54,0x0C5C,0x0CB0,0x0C8E, + 0x0C83,0x0CB5,0x0CEE,0x0C21,0x0C29,0x0C9E,0x0D07,0x0C91, + 0x0CBC,0x0D0A,0x0D01,0x0CF7,0x0CDD,0x0CB0,0x0CCA,0x0CE6, + 0x0CEC,0x0CCA,0x0D1A,0x0CA5,0x0CA8,0x0CA4,0x0CA7,0x0CBE, + 0x0CBF,0x0CE2,0x0C88,0x0D29,0x0DD0,0x0C9B,0x0C3E,0x0C3C, + 0x0C68,0x0C3A,0x0C38,0x0C30,0x0C02,0x0C2B,0x0C7B,0x0D0B, + 0x0D49,0x0D7C,0x0DC1,0x0D87,0x0D1F,0x0D28,0x0CA6,0x0C3E, + 0x0C0A,0x0BD1,0x0BD3,0x0B67,0x0B32,0x0B76,0x0B55,0x0B4D, + 0x0AF2,0x0AD5,0x0AB1,0x0AF7,0x0B24,0x0AD0,0x0AAD,0x0A13, + 0x0960,0x093E,0x09AC,0x09AC,0x09CE,0x09A2,0x098B,0x09AA, + 0x0915,0x0899,0x0853,0x0859,0x081F,0x082E,0x0863,0x084E, + 0x07C3,0x071A,0x06D7,0x073B,0x0727,0x076E,0x079F,0x0766, + 0x078C,0x0716,0x0733,0x075E,0x079D,0x07BE,0x073D,0x06D7, + 0x0685,0x06B3,0x05EF,0x0605,0x0639,0x061E,0x0603,0x06BD, + 0x04DB,0x052B,0x0677,0x050C,0x04B2,0x057A,0x057F,0x050C, + 0x0516,0x054D,0x055E,0x04F2,0x048B,0x0445,0x043D,0x045D, + 0x044E,0x0408,0x03D9,0x03C8,0x03A7,0x03B3,0x03C3,0x0340, + 0x0329,0x034F,0x037E,0x0384,0x0382,0x032A,0x02E1,0x02B6, + 0x02A9,0x029C,0x02B5,0x0298,0x0254,0x025D,0x0258,0x0260, + 0x025D,0x01DE,0x01AE,0x018D,0x0145,0x018A,0x01B4,0x01B5, + 0x0180,0x0186,0x0164,0x0155,0x0140,0x010D,0x00E9,0x0112, + 0x010A,0x0118,0x010A,0x0107,0x00FD,0x00F1,0x0382,0x0378, + 0x030E,0x02B2,0x0273,0x0209,0x01E3,0x0220,0x0239,0x0207, + 0x0248,0x0224,0x01AD,0x0168,0x0152,0x012A,0x013B,0x0118, + 0x00CE,0xFFC3,0xFFB2,0xFF71,0xFFA8,0xFF53,0xFF5B,0xFF06, + 0xFEA6,0xFFC2,0xFFAA,0xFED4,0xFE61,0xFECB,0xFE74,0xFE87, + 0xFEEC,0xFE93,0xFE7D,0xFE76,0xFE04,0xFE0E,0xFE2E,0xFE16, + 0xFE3E,0xFE1B,0xFE26,0xFE04,0xFE34,0xFDEC,0xFE04,0xFE5D, + 0xFE60,0xFDDB,0xFC9D,0xFDB2,0xFEC6,0xFE94,0xFE41,0xFE5B, + 0xFE5D,0xFE14,0xFDF3,0xFDD3,0xFDA0,0xFCFA,0xFCDA,0xFCF3, + 0xFC21,0xFBFA,0xFC3A,0xFC13,0xFC37,0xFC1B,0xFC1F,0xFBF6, + 0xFBCD,0xFBCB,0xFC1F,0xFC1F,0xFC36,0xFC4D,0xFC63,0xFC77, + 0xFCAB,0xFCB7,0xFCC9,0xFCE0,0xFCD0,0xFCCF,0xFCC0,0xFCEC, + 0xFCE2,0xFCEA,0xFC90,0xFC69,0xFC89,0xFCA9,0xFCCE,0xFCF7, + 0xFD3C,0xFD86,0xFDB5,0xFE07,0xFE1B,0xFE3C,0xFEB3,0xFF28, + 0xFFC8,0x00AE,0x015B,0x0215,0x02AA,0x0305,0x03A7,0x0437, + 0x04D8,0x04A8,0x050D,0x04CF,0x0540,0x0535,0x0585,0x0577, + 0x064B,0x068E,0x0699,0x0758,0x0762,0x06F7,0x0921,0x0809, + 0x0845,0x08E0,0x088B,0x0910,0x09EF,0x0B1C,0x0BDE,0x0C3E, + 0x0D1E,0x0DF3,0x0E61,0x0EFD,0x0F7C,0x0FF9,0x10B8,0x1127, + 0x1183,0x122F,0x130D,0x138B,0x1449,0x151C,0x158F,0x15BE, + 0x15F9,0x15F5,0x15EF,0x1651,0x1676,0x1650,0x1657,0x1645, + 0x1613,0x1599,0x14DE,0x13E6,0x1348,0x118D,0x0F9D,0x0DC5, + 0x0B5F,0x088F,0x0621,0x03E0,0x0266,0x0168,0x01B2,0x02EF, + 0x05E1,0x09BE,0x0DE6,0x1207,0x1615,0x19A7,0x1CD7,0x1FB0, + 0x2213,0x237F,0x24B3,0x2496,0x2427,0x22AD,0x1FAC,0x1E4D, + 0x1E4F,0x1D4B,0x1C7B,0x1C78,0x1C60,0x1BBF,0x1B5D,0x1AB1, + 0x19F6,0x1944,0x18DE,0x1848,0x179E,0x16F2,0x15F3,0x151B, + 0x1340,0x1092,0x0EB1,0x0CF5,0x0AB4,0x074D,0x04A9,0x0200, + 0xFECC,0xFBDA,0xF966,0xF766,0xF648,0xF5F2,0xF64E,0xF74B, + 0xF8F0,0xF9DB,0xFAEB,0xFC68,0xFDC8,0xFF35,0xFF81,0x0056, + 0x011D,0x0204,0x02AD,0x00F0,0x001B,0x002F,0x0058,0x006C, + 0x00AA,0x00C8,0x01AC,0x020D,0x0283,0x033C,0x0357,0x038B, + 0x0450,0x04A6,0x04EB,0x054C,0x0562,0x0556,0x0503,0x047F, + 0x03CC,0x02AC,0x00E3,0xFED9,0xFCD4,0xFAB2,0xF867,0xF65A, + 0xF488,0xF343,0xF1D2,0xF108,0xF03C,0xEFEA,0xEFB9,0xEFD4, + 0xEFBB,0xEFBC,0xEF84,0xEEF0,0xEF15,0xEF8D,0xEFA4,0xEF90, + 0xEF9A,0xEFAC,0xEF86,0xEF7E,0xEF89,0xF03F,0xEFA9,0xEFAB, + 0xEFFE,0xEFFE,0xF068,0xF0AD,0xF168,0xF1FF,0xF2E2,0xF38E, + 0xF410,0xF4F6,0xF5C4,0xF6F2,0xF748,0xF84F,0xF914,0xF898, + 0xF755,0xF711,0xF698,0xF58C,0xF476,0xF467,0xF229,0xF22E, + 0xF2E8,0xF11A,0xF070,0xEFDC,0xEF18,0xEE7D,0xEDFE,0xEE17, + 0xEE4D,0xEE9A,0xEE95,0xEE24,0xEDC0,0xEDC4,0xECFC,0xEC97, + 0xECE7,0xED27,0xECC0,0xECA0,0xECA5,0xECA1,0xEC68,0xEC47, + 0xEBFB,0xEC38,0xEC9A,0xECAF,0xED5A,0xEDF4,0xEEB1,0xEEED, + 0xEF5D,0xF131,0xF23E,0xF309,0xF3C0,0xF482,0xF486,0xF4D3, + 0xF4C4,0xF45C,0xF428,0xF415,0xF404,0xF458,0xF460,0xF467, + 0xF442,0xF3D4,0xF361,0xF2F2,0xF2B5,0xF277,0xF283,0xF2BC, + 0xF29D,0xF2A1,0xF2C5,0xF33C,0xF571,0xF483,0xF3FF,0xF39A, + 0xF313,0xF2A3,0xF1C9,0xF15A,0xF0E9,0xF0DC,0xF0A7,0xF085, + 0xF098,0xF11D,0xF139,0xF190,0xF214,0xF1F2,0xF1FF,0xF1D1, + 0xF2A2,0xF3AA,0xF385,0xF3D7,0xF4AA,0xF556,0xF581,0xF59F, + 0xF530,0xF524,0xF50E,0xF469,0xF308,0xF0F1,0xEDAF,0xE9D5, + 0xE490,0xDE86,0xD797,0xCFDB,0xC7D9,0xC02E,0xBEB7,0xBEFB, + 0xBEF5,0xBECD,0xBE51,0xC39C,0xD0B8,0xDE48,0xEC58,0xFA16, + 0x0681,0x116B,0x1A51,0x206F,0x2479,0x268A,0x2715,0x25CE, + 0x2395,0x2197,0x1F34,0x1D4E,0x1C0C,0x1B3D,0x1AE7,0x1AC4, + 0x1A0F,0x19C1,0x196F,0x1929,0x1933,0x1946,0x1928,0x191C, + 0x1931,0x1860,0x16A0,0x141B,0x1062,0x0B24,0x0481,0xFD40, + 0xF583,0xED21,0xE4F6,0xDD5C,0xD69C,0xD111,0xCD52,0xCB62, + 0xCAF2,0xCCBA,0xD00D,0xD496,0xD978,0xDEFA,0xE417,0xE895, + 0xEC76,0xEFE4,0xF2FA,0xF599,0xF7D6,0xF973,0xFB0B,0xFC91, + 0xFD86,0xFEF0,0x007F,0x022B,0x0435,0x05A7,0x079E,0x0A56, + 0x0C5A,0x0E04,0x102A,0x12AA,0x141B,0x1723,0x19A2,0x192A, + 0x1AD3,0x1A0F,0x184A,0x15AC,0x12F8,0x0EBB,0x0A49,0x0589, + 0x009B,0xFBAD,0xF6E3,0xF26F,0xEE60,0xEBC3,0xE9B4,0xE86F, + 0xE77A,0xE798,0xE7DD,0xE87A,0xE92D,0xE946,0xE9EA,0xEA7A, + 0xEB1C,0xEBF0,0xECED,0xEDC3,0xEEAE,0xEF4C,0xF009,0xF05A, + 0xF0AF,0xF16B,0xF276,0xF449,0xF653,0xF88E,0xFB70,0xFE6B, + 0x0139,0x03F4,0x06B1,0x0933,0x0B70,0x0DB4,0x1007,0x11AE, + 0x12C1,0x12DC,0x122D,0x1106,0x0FAC,0x0DEB,0x0BAD,0x0969, + 0x078C,0x05AA,0x035B,0x01A6,0x000A,0xFD30,0xFA6E,0xFA07, + 0xF946,0xF83D,0xF788,0xF70D,0xF622,0xF516,0xF481,0xF376, + 0xF24A,0xF1A0,0xF176,0xF13D,0xF0BC,0xF013,0xEFCB,0xF055, + 0xF012,0xEFDC,0xF0BC,0xF1E2,0xF2F0,0xF486,0xF650,0xF85E, + 0xFAEC,0xFD45,0xFF35,0x013B,0x028F,0x04DB,0x0713,0x084F, + 0x0934,0x09F9,0x0AEC,0x0AC3,0x0AAD,0x0AB6,0x0AD2,0x0A2A, + 0x09ED,0x0B00,0x09EA,0x087C,0x07A1,0x071A,0x0679,0x05F1, + 0x0536,0x0490,0x045F,0x03F5,0x0382,0x02B1,0x01A7,0x00CD, + 0xFFAC,0xFE28,0xFD00,0xFC21,0xFADF,0xFA27,0xF967,0xF8DE, + 0xF886,0xF7F1,0xF811,0xF84F,0xF849,0xF896,0xF954,0xF9A0, + 0xFA2A,0xFB26,0xFBDF,0xFCC7,0xFE07,0xFF5A,0x0043,0x012C, + 0x0210,0x0313,0x0392,0x036B,0x03B7,0x03C7,0x034B,0x0215, + 0xFFF6,0xFC7A,0xF8F6,0xF3F0,0xED41,0xE50D,0xDB5B,0xD04E, + 0xC4B2,0xBFF1,0xC02A,0xBFE2,0xBFE9,0xC047,0xC008,0xC317, + 0xD345,0xE4C3,0xF727,0x08B5,0x18E4,0x2712,0x31D6,0x3990, + 0x3E47,0x3F87,0x3FB4,0x3F4A,0x3CCC,0x397B,0x3524,0x34E0, + 0x33A4,0x32C8,0x3298,0x3255,0x31B6,0x30EE,0x302F,0x2F69, + 0x2EB0,0x2E84,0x2E7A,0x2E2C,0x2D35,0x2BA4,0x28EB,0x251B, + 0x200A,0x1983,0x1193,0x0818,0xFD9A,0xF302,0xE7C2,0xDCF8, + 0xD37D,0xCC55,0xC845,0xC672,0xC6DD,0xC9CF,0xCE97,0xD457, + 0xDA58,0xE06C,0xE6B8,0xECC5,0xF1FE,0xF5E7,0xF92A,0xFC4F, + 0xFEC9,0x009D,0x01D0,0x0347,0x051F,0x0742,0x0938,0x0AA9, + 0x0CF3,0x0F7D,0x1191,0x132F,0x157E,0x1828,0x1B44,0x1E41, + 0x214A,0x2465,0x26E5,0x2A21,0x2B53,0x29AF,0x27C8,0x2479, + 0x1F8C,0x19E0,0x13B2,0x0CC5,0x0620,0xFF61,0xF977,0xF415, + 0xEFD4,0xECBF,0xEA58,0xE84F,0xE6DC,0xE609,0xE577,0xE503, + 0xE6C1,0xE7C3,0xE855,0xE92C,0xEA43,0xEB50,0xEC33,0xEC6C, + 0xEC87,0xECEE,0xED84,0xEE60,0xEF83,0xF08C,0xF206,0xF46C, + 0xF66B,0xF925,0xFC5E,0xFFCC,0x0372,0x0722,0x0B6E,0x0FFA, + 0x1227,0x13CA,0x16C7,0x1940,0x1A62,0x1A68,0x19C8,0x185A, + 0x1691,0x141B,0x1135,0x0DAD,0x0AD0,0x088C,0x05BD,0x0275, + 0x005B,0xFE69,0xFCE0,0xFAF4,0xF961,0xF857,0xF6EF,0xF5D0, + 0xF519,0xF48D,0xF3EA,0xF2F5,0xF1BE,0xF03B,0xEEF1,0xEE21, + 0xEDA3,0xECEE,0xEC65,0xEBF5,0xEC17,0xEC15,0xEC72,0xED4E, + 0xEEFE,0xF177,0xF427,0xF6AA,0xF977,0xFCBE,0xFF84,0x01AB, + 0x03BC,0x0592,0x0733,0x0945,0x0A73,0x0B14,0x0BA4,0x0B7B, + 0x0B7F,0x0B2D,0x0ABB,0x0AA0,0x0A78,0x094F,0x086A,0x07A9, + 0x065D,0x05AF,0x049A,0x0445,0x03B3,0x0320,0x02E2,0x025A, + 0x0093,0xFEEF,0xFDA0,0xFB8C,0xF9C1,0xFA2B,0xF74E,0xF589, + 0xF573,0xF494,0xF369,0xF27D,0xF21B,0xF1F2,0xF26B,0xF267, + 0xF2EB,0xF383,0xF4DE,0xF5BC,0xF64B,0xF77F,0xF960,0xFACC, + 0xFC18,0xFDAD,0xFF1E,0x008E,0x0137,0x0207,0x0271,0x02DC, + 0x036E,0x03B1,0x0347,0x0241,0x0029,0xFD28,0xF8BA,0xF396, + 0xEC8B,0xE3AA,0xD9C5,0xCE2C,0xC34B,0xBF7A,0xBF9B,0xBF7F, + 0xBF91,0xBFD9,0xBF8C,0xC719,0xD8C9,0xEA60,0xFC2F,0x0D05, + 0x1C2B,0x28B7,0x32CD,0x3992,0x3D6C,0x3EB1,0x3DF1,0x3BBC, + 0x38CD,0x35F5,0x3351,0x3172,0x2FF6,0x2D7C,0x2D41,0x2E22, + 0x2E33,0x2D88,0x2C6F,0x2BD3,0x2B83,0x2B59,0x2B83,0x2B0F, + 0x2A29,0x289E,0x261A,0x221C,0x1CEC,0x1672,0x0EAF,0x051E, + 0xF8BC,0xEDC3,0xE38E,0xD9C5,0xD0B0,0xCA5A,0xC711,0xC65D, + 0xC7AF,0xCAF1,0xCF93,0xD593,0xDBEA,0xE244,0xE87C,0xEE0D, + 0xF302,0xF748,0xFA2D,0xFC8E,0xFEA4,0x0045,0x020B,0x037B, + 0x066A,0x094E,0x0A51,0x0BE5,0x0DE1,0x0FDF,0x11F6,0x1414, + 0x15FA,0x1869,0x1B69,0x1EA4,0x21CE,0x248B,0x2745,0x29C6, + 0x29D1,0x28C4,0x26C9,0x23DB,0x1F09,0x1947,0x1276,0x0B64, + 0x0464,0xFD53,0xF742,0xF27F,0xEE77,0xEB26,0xE963,0xE8BC, + 0xE7FA,0xE7B7,0xE79B,0xE831,0xE918,0xE9F8,0xEA92,0xEB8F, + 0xEC76,0xED46,0xEDF9,0xEDE0,0xEE7D,0xEF39,0xEFF8,0xF14F, + 0xF2F3,0xF457,0xF62D,0xF7BE,0xF9DF,0xFCC0,0xFEB8,0x015A, + 0x0519,0x0910,0x0D27,0x109B,0x140A,0x1710,0x18E8,0x1A34, + 0x1B00,0x1AC9,0x1A7B,0x193D,0x1735,0x1450,0x111B,0x0DAF, + 0x0B57,0x08AF,0x05CC,0x03D6,0x02E5,0xFF0F,0xFE1E,0xFE19, + 0xFB81,0xFA62,0xF95B,0xF7D1,0xF6A1,0xF5E1,0xF52A,0xF3E8, + 0xF273,0xF19E,0xF08D,0xEFC4,0xEEBC,0xEE40,0xEE4B,0xEE4A, + 0xEE5A,0xEE8C,0xEF3B,0xF010,0xF150,0xF299,0xF507,0xF755, + 0xF9BF,0xFCE5,0x003B,0x0327,0x0571,0x079A,0x0951,0x0AE8, + 0x0B40,0x0B79,0x0C38,0x0C5D,0x0C37,0x0BFE,0x0B9A,0x0AFC, + 0x0A4A,0x0972,0x08F8,0x08B2,0x080C,0x0747,0x06B8,0x05DB, + 0x04D8,0x0401,0x02AF,0x0156,0x0006,0xFF20,0xFE06,0xFCCA, + 0xFBAC,0xFAA7,0xF9BD,0xFA94,0xF92F,0xF7D7,0xF699,0xF568, + 0xF4F8,0xF4B7,0xF4BB,0xF488,0xF4AA,0xF5BF,0xF74B,0xF889, + 0xF9A3,0xFADB,0xFC72,0xFD88,0xFE91,0xFF62,0x0056,0x021F, + 0x03D5,0x0399,0x03D4,0x0466,0x0433,0x02D3,0x013B,0xFF0C, + 0xFBB5,0xF721,0xF14F,0xE9AC,0xE0A4,0xD58F,0xC9B6,0xC01A, + 0xBEF5,0xBEEA,0xBED8,0xBF32,0xBF40,0xBFBB,0xCBB1,0xDD35, + 0xEDE6,0x005D,0x123E,0x20E8,0x2C80,0x3562,0x3B84,0x3E01, + 0x3DE0,0x3C40,0x399B,0x35E3,0x3242,0x301F,0x2EB7,0x2D60, + 0x2C79,0x2C35,0x2BCD,0x2B32,0x2A67,0x2911,0x28BF,0x2932, + 0x295E,0x299D,0x29E2,0x295B,0x276F,0x2412,0x1F41,0x18C8, + 0x111F,0x0836,0xFE0C,0xF351,0xE89A,0xDE25,0xD490,0xCC8F, + 0xC6BE,0xC3A5,0xC393,0xC575,0xC9FA,0xD00C,0xD652,0xDCDF, + 0xE338,0xE916,0xEE60,0xF2A3,0xF626,0xF94F,0xFBDC,0xFDFF, + 0xFF32,0x0054,0x01EA,0x03E5,0x05BC,0x07B2,0x0A53,0x0C8C, + 0x0EFB,0x1139,0x1360,0x15D5,0x1800,0x1AB2,0x1DF7,0x20CE, + 0x22DD,0x24D9,0x2655,0x25B6,0x254F,0x2379,0x1D69,0x19D9, + 0x140B,0x0D30,0x0619,0xFF19,0xF875,0xF2A0,0xEDD3,0xEA56, + 0xE832,0xE701,0xE64D,0xE636,0xE66F,0xE6C2,0xE77D,0xE826, + 0xE8BA,0xE974,0xEA9D,0xEB07,0xEB80,0xEBED,0xECBF,0xED5A, + 0xEE2C,0xEF5F,0xF08F,0xF1FC,0xF37C,0xF4C5,0xF65F,0xF8AB, + 0xFB69,0xFE6B,0x01D9,0x05C4,0x09E0,0x0DB9,0x1120,0x1411, + 0x16CD,0x1853,0x192D,0x1961,0x18FE,0x186B,0x1673,0x1418, + 0x1144,0x0E7D,0x0BA1,0x084D,0x0586,0x0348,0x0109,0xFED5, + 0xFD80,0xFCE5,0xFBA4,0xFA75,0xF7EA,0xF52A,0xF4F2,0xF428, + 0xF332,0xF210,0xF182,0xF0E6,0xEF7E,0xEE61,0xED79,0xECD3, + 0xEC62,0xEC34,0xEC6A,0xED61,0xEE21,0xEF1E,0xF136,0xF1CE, + 0xF2CE,0xF601,0xF8CC,0xFB4A,0xFE16,0x011F,0x03AA,0x0602, + 0x086B,0x0A0B,0x0AE9,0x0BEE,0x0CF6,0x0D76,0x0D5E,0x0D26, + 0x0C72,0x0BD2,0x0B2D,0x0A96,0x09A3,0x09B3,0x0922,0x08E2, + 0x0983,0x080D,0x0603,0x04F2,0x03B7,0x02A9,0x01B0,0x00DB, + 0xFFC3,0xFE36,0xFCFD,0xFBFC,0xFAC6,0xF961,0xF831,0xF763, + 0xF617,0xF52B,0xF4A2,0xF434,0xF462,0xF47B,0xF4D2,0xF57C, + 0xF609,0xF799,0xF90F,0xFA1F,0xFB36,0xFBDE,0xFD42,0xFE6C, + 0xFF92,0x003A,0x00B8,0x01A9,0x02B5,0x034F,0x03C2,0x0482, + 0x045D,0x033C,0x011B,0xFDA0,0xFA1B,0xF598,0xEED1,0xE6A9, + 0xDD8F,0xD2E7,0xC669,0xBFDD,0xC026,0xBFF6,0xBFCC,0xBFF5, + 0xC025,0xC1C6,0xCF0A,0xE03D,0xF1DE,0x033D,0x1374,0x21AB, + 0x2D21,0x3646,0x3BD0,0x3E88,0x3EF9,0x3D01,0x3913,0x35CF, + 0x32C6,0x308C,0x2F4A,0x2F39,0x2DEA,0x2CD1,0x2EC9,0x2DCC, + 0x2C9C,0x2C9D,0x2CA7,0x2C7C,0x2C94,0x2C97,0x2C05,0x2B07, + 0x2868,0x24A7,0x1F6B,0x18D3,0x1123,0x0861,0xFE71,0xF378, + 0xE857,0xDE26,0xD522,0xCD68,0xC822,0xC5F0,0xC635,0xC8D7, + 0xCD0A,0xD2D1,0xD916,0xDEEB,0xE4F8,0xEAC3,0xEF74,0xF445, + 0xF822,0xFB39,0xFD52,0xFF57,0x00D6,0x01E8,0x02FA,0x0480, + 0x0642,0x0877,0x0A86,0x0D50,0x0FED,0x1233,0x1457,0x1689, + 0x193B,0x1C78,0x1FAF,0x227B,0x24C6,0x2630,0x26E8,0x2650, + 0x24BD,0x223F,0x202E,0x1BD8,0x14E2,0x0E21,0x074B,0x0039, + 0xF986,0xF3DB,0xEF68,0xEBA6,0xE8E7,0xE726,0xE661,0xE5FC, + 0xE673,0xE663,0xE6C4,0xE753,0xE7F8,0xE824,0xE80D,0xE991, + 0xEA45,0xEA36,0xEABF,0xEC2F,0xECDC,0xEE2D,0xEF3E,0xF058, + 0xF1EB,0xF343,0xF53D,0xF7A2,0xF9E9,0xFCC7,0x004F,0x0424, + 0x0810,0x0BBB,0x0F76,0x12C8,0x1527,0x16BC,0x1796,0x171C, + 0x14E4,0x14BB,0x13D5,0x11D0,0x0F26,0x0C4C,0x09C1,0x073D, + 0x0499,0x020A,0xFF77,0xFDBE,0xFC24,0xFA7F,0xF8FF,0xF7B3, + 0xF62F,0xF4E7,0xF381,0xF263,0xF1BB,0xF0A5,0xEFA5,0xEEA1, + 0xED92,0xED03,0xEC0C,0xEB5A,0xEAF5,0xEA7F,0xEA20,0xEAAE, + 0xEB5B,0xEC14,0xEDA3,0xEFB1,0xF246,0xF471,0xF731,0xFA6A, + 0xFDA1,0x0021,0x0284,0x0486,0x069B,0x082F,0x08BF,0x0982, + 0x0A79,0x0AAD,0x0A88,0x0A0E,0x0A6B,0x0A16,0x0976,0x08CF, + 0x082A,0x082B,0x07E4,0x073E,0x0691,0x05F4,0x0543,0x0395, + 0x0250,0x00F8,0x009F,0xFF94,0xFE11,0xFCD4,0xFC89,0xFADD, + 0xF900,0xF7A0,0xF5F6,0xF48A,0xF4EB,0xF2A9,0xF24B,0xF2F5, + 0xF2E1,0xF35F,0xF479,0xF507,0xF5BA,0xF74C,0xF899,0xFA44, + 0xFB13,0xFC20,0xFCEC,0xFE3C,0xFF00,0xFFF3,0x011D,0x0210, + 0x033C,0x03B0,0x0409,0x0417,0x03FC,0x02CD,0x0040,0xFD68, + 0xF9AB,0xF4B3,0xEDB5,0xE50E,0xDB57,0xD08C,0xC481,0xBF67, + 0xBFB0,0xBF6E,0xBF76,0xC006,0xBFA9,0xC3B7,0xD3DE,0xE55A, + 0xF708,0x0808,0x182D,0x25E6,0x302A,0x3776,0x3C44,0x3E8D, + 0x3E31,0x3BEF,0x38CE,0x35B4,0x32FC,0x30BE,0x2F75,0x2F71, + 0x2F11,0x2E92,0x2DE6,0x2D09,0x2B91,0x2AE3,0x2A98,0x2AF1, + 0x2BDC,0x2BED,0x2ADC,0x28FB,0x266E,0x22C1,0x1D99,0x1722, + 0x0F54,0x05ED,0xFB8D,0xF0E5,0xE5F4,0xDC1E,0xD2E9,0xCA7D, + 0xC64E,0xC526,0xC5E0,0xC8A5,0xCDAC,0xD3B2,0xD9AB,0xE08D, + 0xE6BD,0xECA4,0xF200,0xF587,0xF93D,0xFBFB,0xFDCA,0xFF63, + 0x012B,0x02B9,0x048C,0x05FA,0x07F2,0x0A94,0x0C7C,0x0F99, + 0x11C8,0x12FE,0x14BF,0x1710,0x19A4,0x1C88,0x1FE2,0x22D3, + 0x2512,0x2692,0x2728,0x26D3,0x24C0,0x21F7,0x1E61,0x1927, + 0x1286,0x0B9D,0x04B8,0xFE6D,0xF844,0xF2EB,0xEE6A,0xEAD9, + 0xE8E4,0xE7C9,0xE760,0xE731,0xE6E0,0xE711,0xE73D,0xE793, + 0xE7FC,0xE8F4,0xE9AB,0xEA31,0xEACA,0xEB04,0xEB60,0xEC6A, + 0xECF4,0xEDD7,0xEF8E,0xF152,0xF325,0xF4AD,0xF703,0xF983, + 0xFC30,0xFEEB,0x0255,0x0662,0x0A51,0x0E0A,0x10E6,0x13C5, + 0x1635,0x1774,0x1864,0x18E3,0x18EE,0x17CB,0x15DE,0x1343, + 0x106F,0x0CF4,0x09EB,0x078E,0x050C,0x02AA,0x0036,0xFF87, + 0xFDE8,0xFC17,0xFB4A,0xFA87,0xF6F8,0xF685,0xF630,0xF3FC, + 0xF2EE,0xF219,0xF0B8,0xEF7D,0xEE34,0xEDA2,0xECD3,0xEBDE, + 0xEB86,0xEB5A,0xEB96,0xEC04,0xECEB,0xEE36,0xEFE9,0xF1D6, + 0xF41A,0xF665,0xF916,0xFC0B,0xFE97,0x00C8,0x0384,0x05D5, + 0x07EF,0x0987,0x0A65,0x0B5A,0x0B9C,0x0B7F,0x0BA6,0x0B7D, + 0x0B6F,0x0B0B,0x0A69,0x09C6,0x094B,0x08EB,0x0897,0x07BA, + 0x06A8,0x05F3,0x0526,0x03FD,0x02E2,0x019F,0x003B,0xFE9D, + 0xFD49,0xFBC7,0xFA90,0xF946,0xF819,0xF64B,0xF488,0xF39B, + 0xF2EC,0xF29B,0xF3C6,0xF31F,0xF34D,0xF33F,0xF33F,0xF3E0, + 0xF4D1,0xF649,0xF77E,0xF883,0xFA07,0xFB46,0xFC2D,0xFD19, + 0xFDFF,0xFEBD,0xFF8D,0x0046,0x013A,0x01FB,0x02CC,0x0354, + 0x01E6,0xFEFC,0xFB9C,0xF6CF,0xF0D9,0xE9A0,0xE0C1,0xD6A1, + 0xCAF8,0xC0F9,0xBF14,0xBF4C,0xBEFE,0xBF3B,0xBF54,0xBF0F, + 0xC743,0xD8A5,0xE9D7,0xFB96,0x0C50,0x1B42,0x2802,0x3074, + 0x379D,0x3C64,0x3DB4,0x3C67,0x39EE,0x3636,0x331A,0x30EA, + 0x2F70,0x2E2B,0x2DA7,0x2CF7,0x2C2E,0x2B38,0x29D6,0x2931, + 0x28D0,0x2848,0x28A3,0x2912,0x28E2,0x282B,0x2707,0x23E9, + 0x1FA5,0x19F6,0x12A6,0x0A41,0x00A6,0xF642,0xEBA5,0xE118, + 0xD729,0xCEEC,0xC937,0xC5D6,0xC52F,0xC6A1,0xCA37,0xCF8A, + 0xD591,0xDBF3,0xE22D,0xE7E3,0xED0D,0xF186,0xF54F,0xF8A9, + 0xFB6B,0xFDDD,0xFF57,0x0096,0x01C1,0x03A1,0x0569,0x0741, + 0x08EB,0x0AFE,0x0D0D,0x0EE4,0x112B,0x13CB,0x165E,0x1911, + 0x1C7B,0x1FB5,0x2280,0x244C,0x2555,0x2589,0x241F,0x2179, + 0x1E6F,0x1A35,0x145E,0x0FF6,0x0A06,0x019B,0xFBD2,0xF537, + 0xF060,0xECBD,0xEA02,0xE7B8,0xE709,0xE6A8,0xE67E,0xE6D6, + 0xE743,0xE7DF,0xE84A,0xE8F6,0xE954,0xEA11,0xEB00,0xEB79, + 0xEBF0,0xECC4,0xEDAA,0xEEA8,0xEF75,0xF0A0,0xF255,0xF43A, + 0xF63D,0xF85A,0xFABE,0xFDE8,0x0127,0x0486,0x0883,0x0BB8, + 0x0EE0,0x11FA,0x14D5,0x173D,0x18B8,0x1972,0x1927,0x17D4, + 0x1620,0x148D,0x1295,0x101D,0x0D4F,0x0A4B,0x07A3,0x051D, + 0x02C5,0x009C,0xFED2,0xFD86,0xFC5F,0xFB86,0xFA85,0xF97A, + 0xF856,0xF6E8,0xF52F,0xF2E5,0xF090,0xEFCA,0xEEF1,0xEE2E, + 0xEDA2,0xECED,0xEC69,0xEC17,0xEC33,0xECCB,0xEDE2,0xEECB, + 0xEFD0,0xF0E6,0xF297,0xF45B,0xF68C,0xF9C6,0xFBFE,0xFE83, + 0x0252,0x052D,0x0704,0x08DB,0x0A45,0x0B45,0x0BBD,0x0C36, + 0x0BC6,0x0BCE,0x0B7B,0x0B09,0x0A86,0x0A13,0x09F7,0x09E0, + 0x096D,0x0937,0x089B,0x07AF,0x06EF,0x0584,0x044B,0x0404, + 0x01EE,0x0046,0xFEC8,0xFD7E,0xFC36,0xFB1F,0xF9D4,0xF87A, + 0xF7CE,0xF6D9,0xF64A,0xF53B,0xF4D8,0xF545,0xF5B0,0xF597, + 0xF549,0xF559,0xF638,0xF792,0xF8BB,0xFA13,0xFB28,0xFC81, + 0xFDBE,0xFF12,0xFFE2,0x00D0,0x014E,0x0217,0x0288,0x02D2, + 0x03C0,0x0459,0x048E,0x04A4,0x0495,0x03F7,0x01D4,0xFFAE, + 0xFD43,0xFA01,0xF51F,0xEEF5,0xE8D9,0xE32F,0xDDC2,0xD93A, + 0xD726,0xD7FF,0xDB78,0xE00B,0xE6ED,0xEF50,0xF7EA,0x005D, + 0x07F0,0x0E39,0x137E,0x1724,0x1966,0x1A78,0x1AA7,0x1969, + 0x182B,0x1689,0x1550,0x1423,0x1400,0x1373,0x134D,0x13B9, + 0x1385,0x1357,0x1333,0x1256,0x10AC,0x127E,0x1220,0x1267, + 0x135B,0x13C7,0x1361,0x11F7,0x1060,0x0DB6,0x0A0D,0x05A7, + 0x013F,0xFCBD,0xF782,0xF261,0xEE06,0xEAD1,0xE7B8,0xE596, + 0xE568,0xE69D,0xE84E,0xEB17,0xEDF7,0xF100,0xF409,0xF640, + 0xF7F4,0xF990,0xFB4F,0xFC57,0xFCF8,0xFDEC,0xFE6E,0xFF50, + 0x0022,0x00C1,0x0135,0x0179,0x02B9,0x03AD,0x046D,0x0526, + 0x05D9,0x06AF,0x078E,0x08D7,0x0AB5,0x0C71,0x0E38,0x0FA9, + 0x102E,0x1070,0x0F9E,0x0E6E,0x0C83,0x0A02,0x084F,0x052E, + 0x0242,0x014B,0xFF41,0xFB74,0xF950,0xF784,0xF5E0,0xF4E0, + 0xF43E,0xF496,0xF45E,0xF449,0xF467,0xF528,0xF59A,0xF613, + 0xF66C,0xF6C4,0xF756,0xF793,0xF6F9,0xF697,0xF76F,0xF793, + 0xF70A,0xF6EF,0xF7FC,0xF8D9,0xF97B,0xFA66,0xFB57,0xFCEB, + 0xFE4C,0xFF6B,0x00F2,0x02B6,0x0421,0x05B3,0x06C5,0x07DC, + 0x0881,0x0908,0x090B,0x08BA,0x0834,0x0768,0x05B9,0x039E, + 0x03D3,0x034F,0x0209,0x0101,0x0096,0xFF74,0xFE62,0xFDA0, + 0xFD04,0xFC37,0xFBB3,0xFAE1,0xFA9D,0xFA44,0xF97B,0xF90F, + 0xF858,0xF789,0xF6D3,0xF65B,0xF5F3,0xF54B,0xF550,0xF59D, + 0xF594,0xF533,0xF53A,0xF5A3,0xF5F6,0xF65B,0xF6C8,0xF72B, + 0xF73F,0xF79E,0xF7DD,0xF7C9,0xF7E2,0xF7BC,0xF757,0xF6BB, + 0xF681,0xF61F,0xF5BF,0xF577,0xF40C,0xF15E,0xEE22,0xEA10, + 0xE6FA,0xE465,0xE2F4,0xE293,0xE3E8,0xE59C,0xE76B,0xE8F8, + 0xE9EF,0xEA88,0xEAE2,0xEACD,0xEABC,0xEA8E,0xE9CE,0xE965, + 0xE8DC,0xE8D3,0xE87E,0xE86D,0xE8AF,0xE984,0xE96F,0xE958, + 0xE950,0xE90A,0xE8B7,0xEACD,0xE90F,0xE8FF,0xE9F4,0xE969, + 0xE9D9,0xEA4C,0xEA3E,0xEA05,0xEA40,0xEA14,0xEA09,0xE9E6, + 0xEA20,0xEA1B,0xE9F6,0xEA94,0xEB33,0xEB65,0xEBB5,0xEC44, + 0xED1C,0xED8D,0xEDE9,0xEE3D,0xED98,0xED90,0xED40,0xED29, + 0xEC97,0xECAB,0xED10,0xED55,0xEE55,0xEEEA,0xF003,0xF10D, + 0xF0FA,0xF107,0xF1B8,0xF1E2,0xF229,0xF210,0xF1DA,0xF223, + 0xF257,0xF302,0xF395,0xF43F,0xF49D,0xF53F,0xF57B,0xF5F8, + 0xF6BD,0xF73F,0xF7BA,0xF88F,0xF929,0xF9C7,0xF9FA,0xFA86, + 0xFA88,0xFAB5,0xFA45,0xF8A0,0xF911,0xF9E2,0xFA16,0xFB36, + 0xFC4B,0xFCBC,0xFCF0,0xFD50,0xFDFC,0xFE56,0xFEAB,0xFF53, + 0xFF89,0xFFF1,0x0067,0x00B5,0x00FC,0x0123,0x006F,0x00F8, + 0x0247,0x02D7,0x0318,0x043B,0x0531,0x05DD,0x0636,0x0618, + 0x0603,0x0642,0x060D,0x0607,0x05C6,0x05FC,0x0676,0x06E5, + 0x0769,0x080B,0x08C8,0x0945,0x096A,0x0994,0x0A5B,0x0AF1, + 0x0A01,0x09DB,0x0A56,0x0A99,0x0A52,0x0A7B,0x0A65,0x0ABB, + 0x0B27,0x0BB1,0x0C2D,0x0C55,0x0D36,0x0E1F,0x0E43,0x0E38, + 0x0DC4,0x0D49,0x0D1D,0x0CE5,0x0CBD,0x0CED,0x0D38,0x0D23, + 0x0D9E,0x0DB0,0x0DB2,0x0DFA,0x0DBE,0x0DC7,0x0DD3,0x0E11, + 0x0DC6,0x0D9B,0x0E07,0x0E59,0x0E66,0x0E50,0x0E41,0x0E4F, + 0x0E15,0x0DDF,0x0E02,0x0E3E,0x0E9C,0x0E51,0x0EB9,0x0EA4, + 0x0E76,0x0E7F,0x0E65,0x0E1F,0x0DD0,0x0E28,0x0E7B,0x0EC2, + 0x0F08,0x0ECB,0x0E39,0x0E52,0x0E5B,0x0E9C,0x0E9F,0x0E6F, + 0x0E6F,0x0E38,0x0E21,0x0DF4,0x0DA0,0x0D83,0x0DC2,0x0E07, + 0x0D91,0x0DB9,0x0E4C,0x0C6D,0x0D4C,0x0E6C,0x0D58,0x0DA4, + 0x0D88,0x0D50,0x0CFB,0x0CC8,0x0D0F,0x0D33,0x0DA8,0x0E2C, + 0x0DF3,0x0DC6,0x0DE8,0x0D7F,0x0CF7,0x0D18,0x0CFB,0x0CB4, + 0x0CCD,0x0CD8,0x0CCD,0x0CAC,0x0C9A,0x0C4D,0x0C09,0x0BE2, + 0x0BEC,0x0C5E,0x0C88,0x0C0A,0x0B98,0x0B3A,0x0B3E,0x0B2D, + 0x0AD2,0x0AEA,0x0AFC,0x0AAB,0x0A86,0x0A79,0x0A56,0x0A68, + 0x0A44,0x09BE,0x0960,0x0997,0x09CD,0x098A,0x094B,0x095C, + 0x0956,0x0963,0x090C,0x090E,0x08AD,0x088B,0x08A6,0x08B0, + 0x08E2,0x0ABE,0x0A3E,0x09A5,0x09C7,0x09A8,0x09A4,0x09FF, + 0x09B0,0x09BB,0x09D3,0x0940,0x08DD,0x08CE,0x08EE,0x08BD, + 0x0823,0x0816,0x0808,0x07D3,0x0713,0x0758,0x07A8,0x06F8, + 0x065C,0x06B4,0x06B3,0x05CE,0x0556,0x0520,0x054D,0x0561, + 0x057F,0x053A,0x0547,0x04D1,0x048D,0x04B5,0x048F,0x045F, + 0x04B8,0x0514,0x04AD,0x0470,0x04EF,0x04A5,0x02F2,0x03A9, + 0x04A5,0x04CD,0x04FF,0x0530,0x052E,0x04B3,0x042A,0x041E, + 0x03B7,0x0352,0x0350,0x03B8,0x03A4,0x02A5,0x0269,0x0203, + 0x0168,0x0184,0x0195,0x01D9,0x01B1,0x01A8,0x01BA,0x01B4, + 0x01DF,0x01AC,0x01C9,0x019F,0x01CE,0x01F2,0x01F6,0x01CF, + 0x0147,0x009F,0x00E6,0x012A,0x0137,0x01D2,0x01B7,0x0119, + 0x00EF,0x00CC,0x00AC,0xFFE0,0xFFE4,0xFF4E,0xFD39,0xFD40, + 0xFDC5,0xFDC6,0xFDFE,0xFE5A,0xFE62,0xFE4E,0xFE85,0xFEE8, + 0xFE98,0xFE89,0xFF81,0xFFED,0x0068,0x014E,0x0248,0x02FB, + 0x033B,0x027D,0x0393,0x0581,0x06B6,0x06E2,0x07AF,0x0906, + 0x09CE,0x09FF,0x0A88,0x0B16,0x0AFB,0x0B2E,0x0B00,0x0B10, + 0x0B07,0x0AD8,0x0AFC,0x0B87,0x0C06,0x0C8F,0x0CD5,0x0D5E, + 0x0DC7,0x0F0E,0x100B,0x0FAE,0x0F9C,0x0FE4,0x100A,0x108E, + 0x1152,0x1205,0x132C,0x143A,0x1524,0x164F,0x16C8,0x16BF, + 0x16DB,0x165C,0x1607,0x1663,0x170C,0x1788,0x18DE,0x198C, + 0x192B,0x18FB,0x18F4,0x18CD,0x18FD,0x1901,0x18DB,0x18EA, + 0x1923,0x1910,0x18F5,0x18A7,0x18E4,0x1954,0x192B,0x18AB, + 0x1801,0x1786,0x16E4,0x1687,0x1675,0x168E,0x16D3,0x170C, + 0x16A7,0x162C,0x163A,0x15BF,0x1494,0x141F,0x139A,0x134D, + 0x12DA,0x124E,0x1232,0x1238,0x120F,0x1189,0x10E8,0x10A2, + 0x102B,0x0F0E,0x0E23,0x0E0F,0x0DC6,0x0D67,0x0D68,0x0D48, + 0x0CB8,0x0C67,0x0BED,0x0B78,0x0B1C,0x0B2D,0x087E,0x08AC, + 0x0A25,0x0921,0x08C4,0x08CE,0x0843,0x073C,0x0642,0x053B, + 0x043B,0x0377,0x031A,0x02E3,0x0271,0x028A,0x02ED,0x02B3, + 0x01A9,0x010C,0x006F,0x000D,0xFF92,0xFEAC,0xFE9A,0xFE95, + 0xFE41,0xFE04,0xFD8E,0xFD11,0xFD49,0xFCFB,0xFC7E,0xFBF6, + 0xFB56,0xFA84,0xFA0F,0xF9B3,0xF925,0xF8E5,0xF84B,0xF715, + 0xF514,0xF27D,0xEEF6,0xEB3C,0xE714,0xE308,0xDF77,0xDD3C, + 0xDC79,0xDE1A,0xE111,0xE5B5,0xEAAC,0xEE93,0xF1A7,0xF386, + 0xF3A3,0xF303,0xF251,0xF247,0xF3F9,0xF340,0xF3AF,0xF4EF, + 0xF66F,0xF82D,0xFA8A,0xFD97,0x0037,0x0217,0x0421,0x062B, + 0x0794,0x092F,0x0A46,0x0AC3,0x0B2A,0x0A7E,0x0857,0x0565, + 0x0365,0x01DB,0xFF0C,0xFCF5,0xFCE5,0xFD85,0xFE6D,0xFF31, + 0xFFA9,0x002C,0xFF0F,0xFCF3,0xFA60,0xF77B,0xF464,0xF148, + 0xEE3C,0xEBE5,0xE9F9,0xE8A1,0xE7F5,0xE742,0xE6A6,0xE667, + 0xE626,0xE529,0xE533,0xE608,0xE5F9,0xE65C,0xE759,0xE7BB, + 0xE803,0xE78E,0xE6D7,0xE61A,0xE584,0xE54F,0xE60B,0xE74F, + 0xE88D,0xEADA,0xED3A,0xEF7B,0xF176,0xF33B,0xF403,0xF46F, + 0xF56E,0xF616,0xF633,0xF68A,0xF721,0xF73F,0xF759,0xF797, + 0xF814,0xF865,0xF8C7,0xF92E,0xF9DC,0xF9FB,0xF9D3,0xF995, + 0xF9D1,0xF965,0xF8DD,0xF864,0xF771,0xF656,0xF431,0xF247, + 0xF0CF,0xEFDB,0xEEB9,0xEE77,0xEE7D,0xEECD,0xEEAC,0xEE5E, + 0xEDB3,0xECE3,0xEBB1,0xEACE,0xEA30,0xE99D,0xE937,0xE944, + 0xE8AA,0xE86E,0xE84C,0xE891,0xE93D,0xE9B4,0xEA7F,0xEBB3, + 0xEC83,0xECE5,0xEE4C,0xEF73,0xEFCD,0xF20D,0xF356,0xF234, + 0xF3A3,0xF381,0xF38C,0xF3B1,0xF409,0xF465,0xF588,0xF64D, + 0xF799,0xF8CC,0xF99A,0xF9F9,0xFADA,0xFB11,0xFA9C,0xFA87, + 0xFA51,0xF9F5,0xF999,0xF971,0xF94E,0xF904,0xF82A,0xF7A1, + 0xF77A,0xF6E4,0xF65D,0xF5FC,0xF61A,0xF68B,0xF68E,0xF5C9, + 0xF5B5,0xF5B8,0xF52C,0xF407,0xF30C,0xF2D6,0xF260,0xF187, + 0xF126,0xF1D1,0xF2B9,0xF359,0xF312,0xF34B,0xF410,0xF433, + 0xF403,0xF42F,0xF48C,0xF53A,0xF563,0xF57D,0xF5C6,0xF675, + 0xF6FF,0xF774,0xF7D1,0xF858,0xF8E3,0xF81A,0xF739,0xF7FF, + 0xF8C6,0xF91E,0xF9D2,0xFA60,0xFADF,0xFB90,0xFC05,0xFC20, + 0xFC56,0xFC9C,0xFCBF,0xFCDD,0xFC83,0xFCA4,0xFCCA,0xFD8B, + 0xFD19,0xFCD9,0xFDEF,0xFE20,0xFE02,0xFD93,0xFDFA,0xFDAB, + 0xFCA8,0xFC3B,0xFB8E,0xFA76,0xF9EA,0xF9C4,0xFA41,0xFAC9, + 0xFA91,0xF980,0xF700,0xF369,0xEEAB,0xE81A,0xE066,0xD7AB, + 0xCE01,0xC527,0xC029,0xBFF7,0xC020,0xBFD9,0xC411,0xD20A, + 0xDF00,0xEA24,0xF31A,0xF829,0xFA15,0xF9D7,0xF87C,0xF78F, + 0xF784,0xF7FD,0xF965,0xFD2E,0x02C8,0x09EE,0x121D,0x1A4C, + 0x2229,0x2970,0x2F80,0x34CA,0x3925,0x3D78,0x402E,0x4070, + 0x403D,0x4046,0x3C1E,0x3539,0x2EC3,0x28F0,0x24B0,0x2229, + 0x2169,0x223C,0x23AB,0x24D9,0x253E,0x24B3,0x22A0,0x1E14, + 0x175C,0x0EE9,0x05F6,0xFD52,0xF524,0xEE59,0xE955,0xE699, + 0xE40E,0xE23F,0xE0A2,0xDF89,0xDF67,0xDFE6,0xE08C,0xE1E4, + 0xE328,0xE3C2,0xE44E,0xE3D5,0xE32B,0xE293,0xE218,0xE0A0, + 0xE053,0xE18C,0xE3BC,0xE73F,0xECB6,0xF26F,0xF7F9,0x013F, + 0x06DD,0x0AAB,0x0E16,0x100F,0x1048,0x1007,0x1021,0x110D, + 0x122D,0x1303,0x1429,0x1555,0x1658,0x1734,0x17EC,0x1929, + 0x1A27,0x1AF0,0x1B21,0x1A6B,0x1962,0x17F6,0x1607,0x1307, + 0x0F51,0x0B53,0x06EB,0x01D1,0xFDAC,0xFAE9,0xF8F2,0xF776, + 0xF6CA,0xF5E4,0xF526,0xF412,0xF2C8,0xF143,0xEF79,0xEDBE, + 0xEBAA,0xE939,0xE725,0xE50C,0xE403,0xE3CB,0xE44A,0xE4BA, + 0xE64A,0xE7EF,0xE970,0xEB48,0xECF1,0xEF93,0xF2FE,0xF57E, + 0xF7B1,0xF9E5,0xFB78,0xFE30,0xFF4A,0xFF8B,0x0061,0x01A7, + 0x034B,0x0534,0x086A,0x0AE6,0x0CAF,0x0E77,0x100C,0x11BE, + 0x12B9,0x1252,0x1240,0x121F,0x116D,0x103B,0x0F06,0x0E36, + 0x0E44,0x0D0A,0x0AA8,0x0974,0x0809,0x0637,0x04E3,0x0440, + 0x0401,0x0330,0x0216,0x0092,0xFEFC,0xFCCB,0xFA3E,0xF820, + 0xF66D,0xF534,0xF40E,0xF2DA,0xF1E5,0xF1D4,0xF27B,0xF2FF, + 0xF286,0xF1CF,0xF34A,0xF42D,0xF3B9,0xF406,0xF4BE,0xF52F, + 0xF5EF,0xF6D6,0xF76E,0xF84D,0xF8EE,0xF90A,0xFA28,0xFACE, + 0xFC07,0xFDA1,0xFF54,0x00B9,0x028C,0x03F3,0x04ED,0x053C, + 0x05B2,0x05F5,0x0624,0x0646,0x0656,0x068C,0x06DD,0x0749, + 0x0771,0x0792,0x0775,0x0768,0x06F2,0x0634,0x05A6,0x04E1, + 0x0413,0x03BE,0x02FF,0x024A,0x0140,0xFFCE,0xFE9C,0xFD86, + 0xFCC4,0xFBA1,0xFA89,0xF98B,0xF844,0xF6D5,0xF410,0xF093, + 0xEBA8,0xE545,0xDCF6,0xD30D,0xC7BB,0xBF7D,0xBE74,0xBE83, + 0xBECA,0xBE5F,0xC516,0xD3D1,0xDFF4,0xEB3B,0xF413,0xF9AB, + 0xFAE0,0xFA7B,0xF9B3,0xF84D,0xF737,0xF9E8,0xFB18,0x0035, + 0x0810,0x1021,0x195C,0x2264,0x2A35,0x30F6,0x36AE,0x3BC2, + 0x3F14,0x3F06,0x3F26,0x3F4A,0x3F1D,0x3EDE,0x3F11,0x3A86, + 0x32F6,0x2D12,0x28E7,0x2661,0x2563,0x25F4,0x26EC,0x280E, + 0x2894,0x27EC,0x2528,0x1FFC,0x1805,0x0EC2,0x0503,0xFBF5, + 0xF40E,0xED5D,0xE89B,0xE4EE,0xE2BD,0xE0FE,0xDF36,0xDE7F, + 0xDEB0,0xDF1E,0xDF9D,0xE09B,0xE1CF,0xE28C,0xE25C,0xE25A, + 0xE242,0xE223,0xE1B8,0xE10B,0xE184,0xE32A,0xE57A,0xE938, + 0xEE66,0xF4B9,0xFBD5,0x0279,0x0794,0x0A30,0x0D70,0x0FA6, + 0x1084,0x114A,0x1265,0x1376,0x1489,0x14E4,0x15BC,0x1719, + 0x1893,0x19F2,0x1B86,0x1D43,0x1DD2,0x1E17,0x1DB7,0x1C6D, + 0x1A4C,0x1892,0x16C0,0x13F3,0x105D,0x0CBD,0x0868,0x02E4, + 0xFEE6,0xFB85,0xF927,0xF7C2,0xF737,0xF709,0xF638,0xF4CC, + 0xF37D,0xF196,0xEF9C,0xED7D,0xEB3E,0xE933,0xE788,0xE5E8, + 0xE59A,0xE5F9,0xE594,0xE671,0xE74E,0xE978,0xEB97,0xEDF3, + 0xEFD7,0xF247,0xF54B,0xF83E,0xFB51,0xFDD5,0xFFC4,0x022F, + 0x0321,0x0344,0x0435,0x0533,0x0660,0x087A,0x0B5C,0x0EB1, + 0x113A,0x1321,0x1463,0x1540,0x1554,0x14EE,0x14C6,0x144A, + 0x1407,0x137A,0x120E,0x10D2,0x0FED,0x0E7B,0x0D01,0x0B9E, + 0x0A9B,0x097A,0x080E,0x0672,0x04EB,0x03D7,0x02DF,0x0139, + 0xFF2D,0xFD60,0xFB61,0xF94C,0xF76B,0xF5DB,0xF3F9,0xF324, + 0xF269,0xF1F3,0xF1D5,0xF1FE,0xF24A,0xF30C,0xF38E,0xF3E6, + 0xF466,0xF414,0xF478,0xF549,0xF636,0xF73D,0xF80D,0xF8C3, + 0xF9CE,0xFB58,0xFC5F,0xFE02,0x004D,0x005D,0x02BD,0x0576, + 0x05D5,0x073E,0x0831,0x08DB,0x097E,0x09CC,0x0ABA,0x0B09, + 0x0AEE,0x0A82,0x0A08,0x09B7,0x099F,0x0993,0x09E8,0x09D4, + 0x09A8,0x0918,0x0898,0x0812,0x0736,0x0617,0x051E,0x0448, + 0x0306,0x01AD,0x0047,0xFF73,0xFEFC,0xFDDC,0xFC88,0xFB79, + 0xF957,0xF58A,0xF0E2,0xEBED,0xE4BF,0xDB8F,0xD18B,0xC64C, + 0xBFE1,0xBF53,0xBF58,0xBF9A,0xBFBE,0xC83D,0xD71C,0xE439, + 0xEF08,0xF6A0,0xFA55,0xFB24,0xFA15,0xF829,0xF6F8,0xF714, + 0xF859,0xFB8E,0x0210,0x0B8D,0x140B,0x1CD7,0x2526,0x2CC5, + 0x3377,0x3905,0x3DAF,0x3FCE,0x3FE4,0x3FBE,0x3FDA,0x3FBE, + 0x3FA5,0x3EE4,0x37FB,0x3079,0x2AEE,0x2740,0x255C,0x262F, + 0x2838,0x28B6,0x28D6,0x28A4,0x268D,0x2264,0x1C3A,0x1469, + 0x0AE0,0x00DA,0xF748,0xEF6C,0xE966,0xE4D1,0xE172,0xDF5F, + 0xDE44,0xDD59,0xDC82,0xDB9D,0xDB75,0xDC83,0xDDC7,0xDE8E, + 0xDE73,0xDF78,0xE027,0xDF23,0xDD92,0xDCCD,0xDD24,0xDDE3, + 0xDFB6,0xE283,0xE6F8,0xEC82,0xF32B,0xF9EC,0x006D,0x05BE, + 0x0A30,0x0D31,0x0EA1,0x0F56,0x0F83,0x0F76,0x0FE3,0x10A2, + 0x1202,0x1357,0x147D,0x1616,0x1780,0x1890,0x19D5,0x1A80, + 0x1A71,0x1A1E,0x1914,0x174A,0x1518,0x129A,0x0F67,0x0BC6, + 0x0749,0x026A,0xFE34,0xFAEB,0xF7BB,0xF553,0xF43A,0xF3DB, + 0xF2CD,0xF111,0xEF71,0xEE30,0xEC96,0xEAB7,0xE90A,0xE72E, + 0xE53A,0xE344,0xE18F,0xE0C1,0xE106,0xE17C,0xE2A3,0xE40D, + 0xE5B0,0xE777,0xE994,0xEBF9,0xEE10,0xF0DF,0xF466,0xF6E5, + 0xF818,0xFA01,0xFBB9,0xFB67,0xFD1A,0xFEBC,0xFF28,0x02AC, + 0x04D9,0x071B,0x096D,0x0C15,0x0D9F,0x0F28,0x1007,0x1110, + 0x1122,0x10E6,0x101D,0x0EFA,0x0E7A,0x0D5D,0x0C20,0x0AB0, + 0x096D,0x0898,0x0726,0x056D,0x0413,0x0339,0x0243,0x0157, + 0x0041,0xFECD,0xFCF3,0xFB6F,0xF986,0xF7DA,0xF617,0xF4C9, + 0xF307,0xF1A9,0xF0CB,0xF00D,0xF03F,0xF0DA,0xF14B,0xF1DF, + 0xF2AD,0xF2FB,0xF3A4,0xF397,0xF378,0xF3A9,0xF465,0xF4E2, + 0xF55B,0xF637,0xF78C,0xF8A4,0xFA2C,0xFBA0,0xFDD6,0xFFD2, + 0x015C,0x029E,0x03FA,0x04E4,0x0464,0x03E2,0x0613,0x07A4, + 0x086F,0x0889,0x08AB,0x08EF,0x0912,0x08D8,0x088B,0x092D, + 0x09DA,0x09D9,0x0A15,0x09CF,0x0978,0x0909,0x087F,0x0687, + 0x0560,0x04DE,0x03D1,0x01D4,0x0086,0xFFE0,0xFFBE,0xFEE3, + 0xFE25,0xFD6F,0xFC61,0xFAE8,0xF86E,0xF4DD,0xF068,0xEA71, + 0xE36D,0xDAC5,0xD028,0xC4E7,0xC027,0xC03B,0xC02E,0xC020, + 0xC246,0xCDFA,0xDB7C,0xE82A,0xF25D,0xF8C4,0xFC0E,0xFCB3, + 0xFB65,0xF958,0xF892,0xF95E,0xFBF1,0xFF7E,0x05DE,0x0E63, + 0x16D2,0x1F7A,0x2808,0x2F82,0x361A,0x3C02,0x4022,0x409D, + 0x4085,0x409E,0x4087,0x4080,0x4069,0x3ECF,0x3819,0x3163, + 0x2BD7,0x285C,0x271F,0x2731,0x283F,0x2983,0x29D7,0x293C, + 0x2709,0x2300,0x1C07,0x13E0,0x0AB3,0x012C,0xF804,0xEFCB, + 0xE9F5,0xE62A,0xE34F,0xE182,0xE01A,0xDF0E,0xDE93,0xDED0, + 0xDED5,0xDFD8,0xE11F,0xE1FD,0xE25F,0xE255,0xE10C,0xE032, + 0xDF23,0xDE23,0xDE9F,0xE01C,0xE261,0xE61D,0xEA47,0xF057, + 0xF7B1,0xFE88,0x04BD,0x0B33,0x0EFD,0x1017,0x13AA,0x13CC, + 0x12AD,0x132E,0x1356,0x13F2,0x14FB,0x16B4,0x188C,0x1973, + 0x1A79,0x1BBA,0x1CF0,0x1DB9,0x1DD5,0x1D7C,0x1C40,0x19F7, + 0x16F5,0x13BB,0x105B,0x0C7D,0x0844,0x03EB,0xFF6A,0xFBB4, + 0xF8D7,0xF637,0xF4FE,0xF471,0xF427,0xF3E6,0xF337,0xF18E, + 0xEF74,0xED25,0xEA67,0xE7E9,0xE5F4,0xE46D,0xE302,0xE1E8, + 0xE1ED,0xE2CE,0xE43B,0xE65B,0xE884,0xEAC5,0xED2D,0xEF4B, + 0xF1BB,0xF467,0xF6B8,0xF8FE,0xFB2B,0xFC92,0xFDE2,0xFEC1, + 0xFFCD,0x0131,0x041E,0x06E7,0x091C,0x0B3D,0x0D81,0x0F56, + 0x113F,0x1358,0x1422,0x14F6,0x14F0,0x13EC,0x1264,0x105B, + 0x0F23,0x0DE9,0x0CE4,0x0B9E,0x0A79,0x08C1,0x0743,0x0682, + 0x056F,0x0405,0x02DC,0x026A,0x011B,0xFFAF,0xFDAE,0xFB84, + 0xF8D1,0xF605,0xF386,0xF1CB,0xEFF2,0xEEBC,0xEDF6,0xED86, + 0xEDDE,0xEE2F,0xEEE0,0xEF95,0xEFC3,0xF045,0xF0A8,0xEFD6, + 0xEF96,0xF0F7,0xF20D,0xF28B,0xF38C,0xF51B,0xF696,0xF782, + 0xF882,0xF99C,0xFA93,0xFBFE,0xFDA3,0xFFC8,0x017A,0x0322, + 0x0490,0x056F,0x0631,0x0676,0x060F,0x058F,0x05B6,0x063E, + 0x0650,0x063B,0x06C7,0x0761,0x0806,0x0855,0x0874,0x07CC, + 0x0736,0x05EE,0x047A,0x0361,0x0287,0x011A,0xFFB9,0xFEC8, + 0xFDFF,0xFCCE,0xFBEF,0xFAE7,0xF9F9,0xF914,0xF821,0xF67B, + 0xF402,0xF0B8,0xEC0C,0xE5E2,0xDE1A,0xD47B,0xC8E1,0xBFBD, + 0xBEA4,0xBE92,0xBEC4,0xBEA7,0xC0C5,0xCD6A,0xDB82,0xE75D, + 0xF140,0xF6EE,0xF9BC,0xFA1E,0xF905,0xF77E,0xF606,0xF593, + 0xF80C,0xFD02,0x032B,0x0B45,0x1673,0x1DB5,0x25EE,0x2DB2, + 0x3352,0x3933,0x3E22,0x3F01,0x3F06,0x3F20,0x3F34,0x3EFC, + 0x3F19,0x3B31,0x33E5,0x2DD8,0x28FB,0x2641,0x2532,0x2557, + 0x2692,0x27BA,0x2834,0x2788,0x253F,0x2075,0x195E,0x106E, + 0x06C6,0xFCF7,0xF449,0xED7B,0xE7D1,0xE42F,0xE1A4,0xE015, + 0xDEB9,0xDDAF,0xDD82,0xDDE3,0xDEF3,0xE00F,0xE0D5,0xE1FA, + 0xE24B,0xE1FD,0xE184,0xE0BC,0xDFCE,0xDF9A,0xDFE6,0xE0E5, + 0xE30D,0xE6C0,0xEC3D,0xF291,0xF978,0x00DE,0x0765,0x0C4D, + 0x0FBB,0x11D4,0x131B,0x132B,0x1130,0x1111,0x1223,0x1302, + 0x13DC,0x14D8,0x1689,0x1843,0x19B0,0x1A85,0x1B34,0x1BE5, + 0x1BE9,0x1B3D,0x1AAD,0x193C,0x168C,0x1359,0x0F0F,0x08EA, + 0x0490,0x00BC,0xFC85,0xF8E9,0xF6D3,0xF5A7,0xF4C2,0xF465, + 0xF432,0xF3A6,0xF298,0xF078,0xEE54,0xEBDA,0xE94F,0xE70D, + 0xE555,0xE3F5,0xE326,0xE2D4,0xE375,0xE460,0xE5A1,0xE80C, + 0xEA46,0xEB3F,0xEC85,0xEEBD,0xF1EE,0xF4A6,0xF7A7,0xFA28, + 0xFBFE,0xFDCA,0xFF34,0x0004,0x011B,0x0240,0x0434,0x0609, + 0x0831,0x0AC7,0x0DB9,0x0FD5,0x11E0,0x143D,0x1556,0x1519, + 0x1475,0x1319,0x118E,0x1055,0x0EEC,0x0D9D,0x0CC2,0x0C6D, + 0x0BAE,0x0A40,0x0883,0x06C9,0x0544,0x03F3,0x02A3,0x01B5, + 0x00BE,0xFF78,0xFDF2,0xFB65,0xF95C,0xF74A,0xF504,0xF306, + 0xF185,0xF06F,0xEF5E,0xEEE1,0xEF15,0xF065,0xF132,0xF1A7, + 0xF20B,0xF2A4,0xF361,0xF3A4,0xF3AC,0xF455,0xF522,0xF5EB, + 0xF6CA,0xF758,0xF89F,0xFA96,0xFC54,0xFD9A,0xFEE3,0x00BD, + 0x025E,0x03AC,0x04ED,0x0744,0x06A5,0x0805,0x0A6E,0x0994, + 0x095A,0x0923,0x08BE,0x088B,0x0808,0x085E,0x08CA,0x0891, + 0x08A5,0x0832,0x084A,0x0801,0x07A7,0x0724,0x0681,0x0571, + 0x040B,0x029F,0x00F6,0xFFB8,0xFF18,0xFE08,0xFCA1,0xFBBC, + 0xFAEA,0xF9DC,0xF7B7,0xF445,0xF019,0xEBB5,0xE530,0xDC97, + 0xD259,0xC790,0xC050,0xBF59,0xBF6F,0xBF9C,0xBF4E,0xC3DF, + 0xD205,0xDF5C,0xEB5D,0xF44B,0xF8DC,0xFA6B,0xF9B0,0xF834, + 0xF687,0xF5C8,0xF696,0xF987,0xFEBB,0x05CA,0x0E51,0x17F4, + 0x214A,0x2A63,0x3378,0x38D9,0x3DBD,0x4030,0x400C,0x4000, + 0x3FE8,0x3FDF,0x3FC1,0x3F77,0x3A59,0x3353,0x2D9B,0x28C1, + 0x2606,0x253F,0x25C9,0x2750,0x28D2,0x2931,0x28FD,0x2639, + 0x1F72,0x1656,0x0CF8,0x02A5,0xF864,0xF04F,0xE9E1,0xE4F8, + 0xE202,0xDFCA,0xDEAA,0xDE02,0xDD92,0xDD04,0xDCC7,0xDDA9, + 0xDE3E,0xDEAE,0xDF60,0xDF8A,0xDF62,0xDF4D,0xDE82,0xDD10, + 0xDCD4,0xDE34,0xDFA1,0xE23A,0xE651,0xEBE6,0xF2FC,0xFA85, + 0x01C1,0x077C,0x0BE0,0x0EE2,0x1088,0x1116,0x102C,0x103F, + 0x10A0,0x1123,0x11CB,0x12B3,0x1492,0x16CE,0x18A8,0x19DD, + 0x1B0A,0x1B51,0x1B3B,0x1AF8,0x19E8,0x1855,0x16B5,0x1376, + 0x0FA3,0x0B79,0x0732,0x030E,0xFF26,0xFB9A,0xF86F,0xF655, + 0xF4BE,0xF36E,0xF247,0xF201,0xF19B,0xF05B,0xEEAE,0xEC46, + 0xE97C,0xE6AE,0xE3F0,0xE271,0xE19E,0xE139,0xE173,0xE1C1, + 0xE1FC,0xE2BB,0xE46F,0xE64D,0xE917,0xEC65,0xEF32,0xF1A1, + 0xF34C,0xF49C,0xF62E,0xF793,0xF8F6,0xFAAF,0xFCC6,0xFE45, + 0x001B,0x01D5,0x026E,0x05F6,0x094C,0x0A02,0x0D4E,0x0F1C, + 0x106C,0x1116,0x112A,0x104F,0x0FDA,0x0F12,0x0E87,0x0D65, + 0x0BF3,0x0A7D,0x08B9,0x0777,0x0619,0x0519,0x04AF,0x04A0, + 0x0395,0x021A,0x0091,0xFEB0,0xFC76,0xFA87,0xF8FD,0xF796, + 0xF635,0xF4A5,0xF2D8,0xF0EE,0xEFA1,0xEEFD,0xEE92,0xEEB7, + 0xEF19,0xEFDD,0xF0AD,0xF0FB,0xF0E7,0xF150,0xF251,0xF30C, + 0xF3F1,0xF448,0xF45B,0xF514,0xF5F9,0xF699,0xF862,0xFA8C, + 0xFCC6,0xFE44,0xFF70,0x011D,0x02A1,0x03A4,0x0435,0x04D9, + 0x067F,0x07E6,0x0857,0x073A,0x05F8,0x06D2,0x06B8,0x06C1, + 0x06FE,0x0773,0x0758,0x076E,0x0727,0x0701,0x0759,0x06DB, + 0x05D3,0x04D0,0x0438,0x02B2,0x0089,0xFF82,0xFE26,0xFD30, + 0xFDB5,0xFDF0,0xFCE7,0xFC26,0xFB83,0xF9E5,0xF75A,0xF4BD, + 0xF1D7,0xEDBC,0xE87F,0xE210,0xDA74,0xD237,0xCAF1,0xC57C, + 0xC3DF,0xC62C,0xCCB6,0xD5D2,0xDFAD,0xE96D,0xF1F8,0xF911, + 0xFBAE,0xFBD6,0xFB6D,0xFA8C,0xF92E,0xF8F7,0xFA18,0xFCF1, + 0x0145,0x07A5,0x0F0D,0x16E8,0x1DCF,0x241A,0x29A3,0x2E04, + 0x31E0,0x34D0,0x3768,0x3907,0x3933,0x3827,0x352D,0x30F6, + 0x2C24,0x275C,0x23A1,0x20C5,0x1EE2,0x1E0F,0x1E5D,0x1F1F, + 0x1F42,0x1F09,0x1D7A,0x1A19,0x1546,0x0F3D,0x081F,0x00E4, + 0xF99C,0xF364,0xEEC2,0xEB1C,0xE8F8,0xE750,0xE6C9,0xE67C, + 0xE5E3,0xE53F,0xE5A5,0xE640,0xE6DF,0xE7B9,0xE81E,0xE8B4, + 0xE822,0xE720,0xE62D,0xE5C5,0xE5E3,0xE736,0xE9E4,0xECCF, + 0xF0CA,0xF46F,0xF98F,0xFEF2,0x03BB,0x070F,0x0A7F,0x0D59, + 0x0E78,0x0E7F,0x0F52,0x0F0F,0x0DBD,0x0FD4,0x1021,0x10E9, + 0x12D3,0x143D,0x1502,0x157C,0x164B,0x16F2,0x16F8,0x1719, + 0x1622,0x14F6,0x130C,0x102D,0x0CDE,0x09A3,0x0687,0x0306, + 0xFFF9,0xFD93,0xFB74,0xF9E3,0xF8E1,0xF84F,0xF7DB,0xF772, + 0xF6EE,0xF5E7,0xF444,0xF20B,0xEFDE,0xEE0C,0xEC19,0xEA9F, + 0xE9F8,0xE9C4,0xE9FB,0xEA97,0xEB7D,0xECFA,0xEE3D,0xEFE1, + 0xF1CF,0xF3AA,0xF648,0xF7E4,0xF8E3,0xFA26,0xFB84,0xFCA4, + 0xFDEB,0xFEF5,0x003C,0x0164,0x024B,0x0347,0x047A,0x067D, + 0x08F1,0x0C98,0x0F2B,0x0FC2,0x1066,0x10C0,0x1052,0x0F4B, + 0x0E24,0x0D06,0x0C4B,0x0B42,0x0A89,0x09BE,0x0936,0x0895, + 0x07F7,0x0743,0x063D,0x04A4,0x0335,0x0119,0x002F,0xFE9A, + 0xFC70,0xFB25,0xFA8B,0xF911,0xF7AB,0xF642,0xF4BF,0xF377, + 0xF225,0xF1C0,0xF1C1,0xF1EF,0xF20C,0xF238,0xF2B4,0xF319, + 0xF374,0xF414,0xF49D,0xF4DF,0xF527,0xF556,0xF49E,0xF401, + 0xF635,0xF875,0xFA8B,0xFC62,0xFE01,0xFF71,0x0090,0x00C6, + 0x00DC,0x00E1,0x011B,0x021E,0x02D5,0x0298,0x034A,0x0465, + 0x04D7,0x0515,0x0543,0x0587,0x0537,0x04BB,0x042E,0x03F0, + 0x03EB,0x0402,0x040D,0x044B,0x03BD,0x032B,0x01EB,0x0072, + 0xFF50,0xFE82,0xFE0C,0xFD48,0xFCD2,0xFCD1,0xFC6F,0xFBA5, + 0xFAB6,0xF9E2,0xF8D1,0xF72C,0xF5CD,0xF4BD,0xF2DE,0xF070, + 0xEDB9,0xEB92,0xE92F,0xE792,0xE725,0xE86F,0xEB24,0xEEBD, + 0xF236,0xF54B,0xF77F,0xF8DF,0xF9D4,0xFA56,0xFA43,0xFADB, + 0xFB22,0xFBB4,0xFCA1,0xFDD8,0xFF9E,0x02C8,0x0518,0x0827, + 0x0AFE,0x0C9C,0x0DF3,0x118A,0x1173,0x12B2,0x1443,0x1456, + 0x1484,0x13A2,0x125A,0x108D,0x0F0B,0x0D5E,0x0BFB,0x0ACA, + 0x0AFC,0x0B20,0x0B06,0x0AFA,0x0AA5,0x0A0B,0x08A6,0x06E6, + 0x0498,0x027D,0x0056,0xFE58,0xFC2E,0xF9DA,0xF837,0xF786, + 0xF6BB,0xF5B6,0xF552,0xF4F9,0xF4E5,0xF523,0xF542,0xF522, + 0xF565,0xF5DE,0xF601,0xF5BB,0xF5D8,0xF5E7,0xF5D2,0xF5D8, + 0xF67E,0xF785,0xF8A4,0xF9CD,0xFB27,0xFD31,0xFF0F,0x0065, + 0x016B,0x0225,0x0326,0x037A,0x03D5,0x043D,0x045B,0x0426, + 0x03A6,0x02F4,0x01A8,0xFF3C,0xFE4B,0xFE17,0xFD80,0xFCF0, + 0xFC97,0xFB90,0xFA55,0xF8C1,0xF7D5,0xF7A6,0xF738,0xF73B, + 0xF688,0xF5E4,0xF594,0xF4F7,0xF405,0xF37B,0xF1D5,0xF117, + 0xF172,0xF0A7,0xEFBC,0xEF2C,0xEE81,0xEE02,0xED48,0xECBF, + 0xEC27,0xEB4E,0xEAA4,0xEA20,0xE9C4,0xE959,0xE897,0xE820, + 0xE7B3,0xE76C,0xE726,0xE71F,0xE729,0xE6F4,0xE7A8,0xE87E, + 0xE763,0xE687,0xE614,0xE619,0xE5D7,0xE5FF,0xE5E6,0xE5C3, + 0xE63C,0xE6E1,0xE760,0xE788,0xE80B,0xE8A6,0xE88D,0xE850, + 0xE898,0xE8D2,0xE92F,0xE96E,0xE9A2,0xEA0F,0xE999,0xE95B, + 0xE9BA,0xEA02,0xEA5C,0xEAC5,0xEAF1,0xEB39,0xEB7A,0xEB94, + 0xEBB8,0xEC3B,0xECAA,0xED23,0xED64,0xEDE5,0xEDEF,0xEE29, + 0xEEB2,0xEF98,0xEFE6,0xF04F,0xF0D5,0xF0BA,0xF101,0xF14D, + 0xF1D0,0xF228,0xF2BF,0xF363,0xF3EF,0xF49C,0xF4EF,0xF5C9, + 0xF69B,0xF6C4,0xF728,0xF753,0xF7D4,0xF883,0xF8AB,0xF94D, + 0xF9CB,0xF9FC,0xFA7F,0xFB2D,0xFB9E,0xFB4D,0xFC17,0xFCCB, + 0xFCF0,0xFD7E,0xFED9,0xFD92,0xFE0B,0xFFA9,0xFEC0,0xFEC7, + 0xFF79,0xFFE7,0xFFFE,0x008C,0x0147,0x01B9,0x01B6,0x0218, + 0x0249,0x0237,0x027F,0x02EE,0x0357,0x03B4,0x03B9,0x0426, + 0x0459,0x04B4,0x051D,0x05A6,0x05CA,0x05F0,0x0667,0x06BF, + 0x0749,0x0739,0x0768,0x07C8,0x07FA,0x0848,0x08B1,0x0957, + 0x0958,0x0927,0x09D1,0x0A14,0x0A2D,0x0A95,0x0ABE,0x0B0F, + 0x0AF6,0x0AE2,0x0B01,0x0B34,0x0BA1,0x0BC5,0x0BF7,0x0C0B, + 0x0BDB,0x0C06,0x0BD1,0x0BC0,0x0C42,0x0C48,0x0CC7,0x0D09, + 0x0D83,0x0FA6,0x0F30,0x0ECB,0x0EE6,0x0ECE,0x0EB9,0x0ECB, + 0x0EBA,0x0EB1,0x0EB7,0x0F02,0x0EE6,0x0ED3,0x0F02,0x0EFD, + 0x0EDB,0x0EFE,0x0F71,0x0F8E,0x0ECE,0x0F11,0x0FE2,0x0F83, + 0x0E92,0x0ED6,0x0F26,0x0EB9,0x0EC9,0x0E92,0x0E73,0x0E7F, + 0x0E39,0x0E17,0x0E3A,0x0DEC,0x0E0B,0x0DFB,0x0DCA,0x0DD0, + 0x0DAC,0x0D50,0x0D86,0x0D7B,0x0D2B,0x0BCD,0x0CE6,0x0DA9, + 0x0DB6,0x0DAF,0x0D46,0x0D03,0x0CB4,0x0CE1,0x0D13,0x0CDA, + 0x0CB7,0x0C4B,0x0C01,0x0BDB,0x0BCF,0x0AFA,0x0B28,0x0AF1, + 0x0AF1,0x0AFA,0x0B47,0x0B42,0x0AF6,0x0AF5,0x0AD5,0x0B04, + 0x0B41,0x0B4A,0x0B12,0x0AF1,0x0AD1,0x0A65,0x0A8F,0x0ACC, + 0x0AB8,0x0A86,0x0AD9,0x0A2E,0x09D1,0x09B1,0x099B,0x09B4, + 0x09D5,0x09CB,0x0A1A,0x0A27,0x09BA,0x0983,0x0967,0x0943, + 0x0925,0x08E6,0x08E9,0x0892,0x083D,0x0851,0x0820,0x0800, + 0x07F6,0x07EA,0x0809,0x080D,0x0843,0x07CC,0x0791,0x0730, + 0x07BD,0x0801,0x0803,0x0789,0x07DA,0x0783,0x06FB,0x0755, + 0x07CF,0x06FA,0x0801,0x087D,0x0634,0x0746,0x0724,0x06FC, + 0x06F9,0x06DE,0x06CB,0x06E8,0x0648,0x06A3,0x0732,0x0768, + 0x077C,0x06C5,0x06AE,0x06B3,0x06E8,0x06DE,0x0712,0x067A, + 0x069A,0x0665,0x067B,0x068F,0x066D,0x0631,0x0603,0x05E9, + 0x05C3,0x05FE,0x0618,0x05F2,0x05E8,0x05D1,0x05CA,0x0592, + 0x05B6,0x05F5,0x05F9,0x056D,0x053B,0x04C0,0x04DE,0x0523, + 0x0551,0x0537,0x04D9,0x04B6,0x0494,0x045F,0x04D3,0x04C9, + 0x04B1,0x04D1,0x048A,0x046D,0x0423,0x03E6,0x037F,0x0315, + 0x0323,0x02E6,0x01DF,0x00A2,0x0103,0x00E2,0x0098,0x00F3, + 0x0105,0x0151,0x0197,0x01A0,0x01C5,0x0178,0x01A5,0x01BB, + 0x01CB,0x021D,0x0266,0x0294,0x02BE,0x024B,0x0180,0x0209, + 0x0280,0x0273,0x0233,0x0255,0x0259,0x01D6,0x01F1,0x01B7, + 0x01BD,0x0231,0x0248,0x02A0,0x0280,0x01EB,0x01AD,0x01DB, + 0x024C,0x02D4,0x02A5,0x0267,0x038C,0x02F4,0x0176,0x017B, + 0x018C,0x0146,0x015E,0x0219,0x01E9,0x01F9,0x019A,0x01C6, + 0x0222,0x0295,0x032F,0x0370,0x041C,0x042F,0x037B,0x0308, + 0x02E1,0x02B2,0x02B9,0x02C5,0x02CB,0x0287,0x020B,0x020F, + 0x019F,0x0189,0x01B7,0x01BE,0x01BB,0x01C2,0x0193,0x0191, + 0x010E,0x0150,0x013F,0x0150,0x01B3,0x015D,0x00ED,0x0092, + 0x00A3,0x0093,0xFEE3,0xFF41,0xFF01,0xFEB3,0xFEE5,0xFED6, + 0xFF01,0xFF4F,0xFF53,0xFEFE,0xFED8,0xFE95,0xFE59,0xFE55, + 0xFE5B,0xFE8A,0xFE8D,0xFEDF,0xFEE3,0xFE94,0xFEA4,0xFE31, + 0xFDF8,0xFE3B,0xFE56,0xFE6F,0xFE6C,0xFE1B,0xFD8D,0xFDC9, + 0xFE00,0xFDF7,0xFE5B,0xFE50,0xFE5F,0xFE76,0xFE25,0xFE5D, + 0xFE82,0xFE7E,0xFE7A,0xFEC9,0xFF03,0xFF21,0xFF22,0xFF1B, + 0xFF0C,0xFEF6,0xFF0C,0xFF3A,0xFFEC,0x01D3,0x0373,0x0442, + 0x045F,0x03F9,0x0451,0x0533,0x07AA,0x07F5,0x077C,0x078F, + 0x0727,0x06C7,0x06CF,0x06DB,0x070F,0x075B,0x073C,0x06FF, + 0x0766,0x07ED,0x087A,0x08BE,0x0910,0x088A,0x07BD,0x070C, + 0x08E8,0x0BF5,0x0D90,0x0DB7,0x0DFB,0x0DF4,0x0D1D,0x0DA5, + 0x0E57,0x0F54,0x10E0,0x11E3,0x1169,0x117C,0x1172,0x11C9, + 0x1282,0x1399,0x143C,0x1437,0x140A,0x1404,0x1492,0x1512, + 0x1582,0x13B8,0x1261,0x1227,0x1114,0x0EC9,0x0BA0,0x06E8, + 0x00B4,0xFA64,0xF6FC,0xF8C2,0xFF89,0x08E2,0x129F,0x19EA, + 0x1C68,0x1BCC,0x18F0,0x166C,0x1532,0x1607,0x17CC,0x1A48, + 0x1DCF,0x21EC,0x24ED,0x26DA,0x28E8,0x2A68,0x2B2F,0x2A8C, + 0x28C8,0x2597,0x208B,0x198E,0x1365,0x0E1B,0x0B2A,0x0AB9, + 0x0C93,0x0F3E,0x107F,0x0F40,0x0C54,0x0827,0x0372,0xFF1A, + 0xFC5D,0xFAE9,0xFB78,0xFCBD,0xFE99,0x00E9,0x03BD,0x063F, + 0x0873,0x0A8E,0x0D09,0x0F19,0x0FD4,0x0EDC,0x0D14,0x0B3F, + 0x0A09,0x09F5,0x0B83,0x0DDA,0x10CC,0x12C8,0x1315,0x11AF, + 0x0EE3,0x0B2A,0x07A5,0x0420,0xFF49,0xFD44,0xFD5B,0xFA5F, + 0xFA30,0xF8AA,0xF71B,0xF6C0,0xF6C8,0xF66C,0xF671,0xF5F8, + 0xF48B,0xF25B,0xEFD7,0xEF0B,0xEF8C,0xF136,0xF35E,0xF641, + 0xF924,0xFBEC,0xFD88,0xFE34,0xFDD6,0xFD4A,0xFCCD,0xFC11, + 0xFC79,0xFCFB,0xFD7B,0xFD71,0xFD65,0xFCE7,0xFCF0,0xFCAD, + 0xFC53,0xFBF4,0xFACB,0xF8CB,0xF54A,0xF18B,0xEECE,0xED3C, + 0xEC52,0xEC60,0xED47,0xEE29,0xEE5B,0xED7C,0xEC98,0xEC34, + 0xEC6F,0xEC6A,0xEC5B,0xEC9F,0xED23,0xEDBD,0xEE4F,0xEFEF, + 0xF1BD,0xF32C,0xF4AA,0xF5E9,0xF728,0xF727,0xF55E,0xF506, + 0xF46F,0xF39B,0xF2E6,0xF2D5,0xF370,0xF3FE,0xF443,0xF386, + 0xF32B,0xF263,0xF0C6,0xEF9A,0xEEA9,0xED8B,0xEC6D,0xEBC7, + 0xEB09,0xE97C,0xEA55,0xEA99,0xEAA6,0xEB62,0xECD2,0xED15, + 0xED2A,0xEDCD,0xEE38,0xEE57,0xEDE7,0xED49,0xEE69,0xEFE5, + 0xF171,0xF2E2,0xF402,0xF556,0xF668,0xF654,0xF657,0xF6B1, + 0xF65D,0xF6EB,0xF616,0xF527,0xF4F4,0xF4B7,0xF431,0xF3B3, + 0xF319,0xF2DB,0xF2B6,0xF27E,0xF2C3,0xF288,0xF1BC,0xF10E, + 0xEFFB,0xEEDD,0xEEF0,0xEFC9,0xF088,0xF1B1,0xF299,0xF2E3, + 0xF2A8,0xF2C1,0xF2A6,0xF31E,0xF422,0xF508,0xF5CE,0xF626, + 0xF5F0,0xF5B4,0xF677,0xF778,0xF807,0xF843,0xF84F,0xF856, + 0xF7FB,0xF7E1,0xF792,0xF6CE,0xF5D6,0xF58A,0xF592,0xF56B, + 0xF5BC,0xF5BA,0xF575,0xF413,0xF29C,0xF286,0xF2B3,0xF2CB, + 0xF27A,0xF251,0xF22D,0xF206,0xF0A0,0xEE66,0xEAE7,0xE589, + 0xDCB6,0xD111,0xC3F9,0xBFA6,0xBFFE,0xC02A,0xC003,0xC313, + 0xDA25,0xF30B,0x0360,0x0A4B,0x0961,0x032B,0xFAE0,0xF9C9, + 0xFC55,0x0260,0x0C12,0x15BB,0x1E45,0x2687,0x2D51,0x30F8, + 0x334A,0x3482,0x337C,0x2EE2,0x2575,0x17B8,0x07F8,0xF8B6, + 0xECF8,0xE81F,0xE9F1,0xEFFA,0xF663,0xF944,0xF6BD,0xEF84, + 0xE5CD,0xDBA0,0xD3AC,0xCECB,0xCD93,0xCFDF,0xD442,0xDA94, + 0xE1DF,0xE9D8,0xF1E9,0xFA6A,0x02DA,0x0A1C,0x0F2F,0x122D, + 0x1178,0x0DFD,0x0A37,0x083D,0x0A05,0x0F6C,0x1683,0x1D60, + 0x222E,0x2303,0x1F68,0x18CA,0x10A9,0x085F,0xFFFE,0xF819, + 0xF294,0xEF0B,0xECE9,0xECD5,0xECFB,0xEB39,0xEB00,0xEB0D, + 0xEB9D,0xEBC6,0xEB35,0xE8BC,0xE4D0,0xE18E,0xE10F,0xE3C5, + 0xE948,0xF0BE,0xF913,0x00F5,0x0751,0x0B5B,0x0D84,0x0EA3, + 0x105A,0x0FEB,0x0DAF,0x0C6E,0x0CC1,0x0D1E,0x0E1B,0x0ED2, + 0x0EBF,0x0E51,0x0D75,0x0C60,0x0A2B,0x070A,0x01F3,0xFBDE, + 0xF444,0xEE36,0xEA87,0xE929,0xE99C,0xEA5C,0xEB36,0xECB0, + 0xECEA,0xEC88,0xED8B,0xEEEC,0xEEBD,0xEE1B,0xEE46,0xEF7E, + 0xF27C,0xF646,0xFA59,0xFDF0,0x015F,0x0499,0x07D8,0x09FF, + 0x0B26,0x0C08,0x0BA0,0x09F6,0x079F,0x067E,0x05D1,0x05BA, + 0x0616,0x059E,0x04F9,0x0415,0x02DD,0x017F,0xFE7A,0xFA7D, + 0xF6B7,0xF3BC,0xF10B,0xEEFA,0xEE76,0xEF47,0xEF85,0xEF0C, + 0xEFAF,0xF146,0xF31A,0xF4DF,0xF5EC,0xF6DC,0xF7E1,0xF839, + 0xF930,0xFAC0,0xFCAD,0xFF1C,0x0218,0x0533,0x07A0,0x0999, + 0x0AA4,0x0AAF,0x0A34,0x0931,0x080A,0x06E5,0x05A8,0x04AA, + 0x03FB,0x0337,0x0210,0x0129,0xFF6C,0xFDDF,0xFCCD,0xFBE3, + 0xFA23,0xF849,0xF6C8,0xF5A4,0xF385,0xF453,0xF357,0xF353, + 0xF5CA,0xF752,0xF915,0xFA66,0xFB4D,0xFBEA,0xFCF0,0xFD73, + 0xFE9E,0xFFE0,0x01E4,0x0383,0x050B,0x0658,0x070E,0x0785, + 0x0720,0x0728,0x07FA,0x08BF,0x08C0,0x0752,0x05B2,0x041D, + 0x026A,0x00E8,0x0028,0x002A,0x0043,0xFF5E,0xFEC4,0xFE29, + 0xFD56,0xFC00,0xFA65,0xF998,0xF9A3,0xF938,0xF8F9,0xF95F, + 0xF9A6,0xF7C1,0xF229,0xE904,0xDDD0,0xD0DB,0xC310,0xBF85, + 0xBFF7,0xC03A,0xBF97,0xCAA3,0xE9F8,0x0730,0x1A9F,0x20CE, + 0x1BE4,0x1266,0x0AF3,0x09E0,0x0E67,0x15BD,0x1EAB,0x288D, + 0x317D,0x3A71,0x3ED5,0x3EAF,0x3ECE,0x3E87,0x3EBE,0x3C28, + 0x3082,0x21C2,0x1001,0xFE40,0xF06E,0xEA44,0xECC4,0xF56A, + 0xFD86,0x0231,0x0024,0xF547,0xE7AB,0xDBBD,0xD3BD,0xD03B, + 0xD10A,0xD482,0xD9A4,0xE0C6,0xE9D2,0xF416,0xFF9B,0x0A34, + 0x1319,0x19D1,0x1DAE,0x1EF4,0x1DE0,0x1ABC,0x1747,0x1523, + 0x16AE,0x1C3C,0x2356,0x2B94,0x31FB,0x32E6,0x2DDA,0x23DA, + 0x17F7,0x0CC0,0x039F,0xFC46,0xF65D,0xF1E4,0xEE50,0xECCF, + 0xEC4F,0xEC9A,0xED8B,0xEE33,0xEDBA,0xEC23,0xEA32,0xE863, + 0xE65F,0xE483,0xE34F,0xE4ED,0xEA45,0xF32A,0xFE59,0x0920, + 0x113F,0x1672,0x1773,0x1689,0x15A8,0x14C8,0x1536,0x1556, + 0x158A,0x1531,0x1529,0x1501,0x150D,0x1527,0x149E,0x1275, + 0x0E1B,0x08A7,0x0258,0xFB7F,0xF4EE,0xEE55,0xE8AC,0xE62D, + 0xE647,0xE919,0xEC66,0xEED3,0xF010,0xEF7A,0xEE18,0xED1A, + 0xED6D,0xEEC3,0xF17C,0xF427,0xF789,0xFAC9,0xFDE6,0x01C6, + 0x0752,0x0C79,0x1091,0x133D,0x154F,0x1474,0x12D0,0x11B3, + 0x0E17,0x0C40,0x0BBA,0x0B46,0x0AD3,0x0A98,0x0A7E,0x088D, + 0x05AF,0x02A2,0xFF5E,0xFBB6,0xF7AE,0xF3C8,0xF12C,0xEF15, + 0xEDAF,0xEDA8,0xEEA0,0xF029,0xF1CF,0xF3A6,0xF540,0xF742, + 0xF888,0xF949,0xF974,0xFA02,0xFB96,0xFDF4,0x004E,0x030D, + 0x0699,0x09EC,0x0BD6,0x0CCC,0x0DE5,0x0E26,0x0E46,0x0D82, + 0x0C87,0x0A91,0x082C,0x05F1,0x03B7,0x023E,0x01E6,0x014F, + 0x0035,0xFF12,0xFE03,0xFC2C,0xF9C7,0xF690,0xF3BF,0xF1EB, + 0xF1A7,0xF27C,0xF3DC,0xF702,0xF832,0xF8FF,0xF9E5,0xFB34, + 0xFD78,0x0025,0x016C,0x018E,0x0232,0x034F,0x04A9,0x0585, + 0x0637,0x07CF,0x08F8,0x0A7D,0x0C2E,0x0CFC,0x0CE0,0x0B88, + 0x09E0,0x0764,0x04F8,0x03B4,0x02E4,0x01D6,0x0112,0x001E, + 0xFF2D,0xFDE2,0xFD1E,0xFC47,0xFB78,0xFA1A,0xF8E3,0xF774, + 0xF6F8,0xF6F5,0xF6E1,0xF67F,0xF57D,0xF31F,0xEE77,0xE6D6, + 0xDB28,0xCD67,0xC11D,0xBF19,0xBF6B,0xBFC5,0xBFEF,0xD38D, + 0xF3F8,0x0D3D,0x1C30,0x1EDB,0x18A5,0x0FCF,0x0A87,0x0A57, + 0x0FDA,0x1860,0x21C7,0x2B2A,0x334C,0x3AF8,0x3DF1,0x3DE0, + 0x3E00,0x3DAC,0x3E05,0x399C,0x2B86,0x1A99,0x07A4,0xF70E, + 0xEC7C,0xEA2A,0xEED7,0xF6F0,0xFE11,0xFF10,0xF93B,0xEE99, + 0xE283,0xD86F,0xD224,0xCF80,0xCFA1,0xD2F8,0xD885,0xE07C, + 0xEA1F,0xF4FD,0xFFDA,0x0A50,0x12D0,0x18D6,0x1BFF,0x1CEC, + 0x1A79,0x1601,0x1268,0x120A,0x1566,0x1B77,0x23B6,0x2ACA, + 0x2E85,0x2CB6,0x2593,0x1C09,0x11DF,0x086A,0xFFAF,0xF7C2, + 0xF107,0xEC9E,0xE952,0xE652,0xE646,0xE905,0xE87C,0xEA6F, + 0xEB1C,0xE9DE,0xE7CF,0xE4C9,0xE1BF,0xE005,0xE0DF,0xE59F, + 0xECC6,0xF5BB,0x0075,0x0996,0x0FF7,0x1367,0x14F3,0x1567, + 0x1557,0x1526,0x1472,0x13ED,0x1308,0x12DC,0x12A9,0x130B, + 0x134F,0x13C5,0x1376,0x117F,0x0D27,0x07E0,0x013D,0xF948, + 0xF1F6,0xEC03,0xE88F,0xE7DB,0xE8C3,0xEA78,0xECE4,0xEE46, + 0xEF05,0xEF2B,0xEEFC,0xEF30,0xEFDB,0xF134,0xF2BA,0xF506, + 0xF78F,0xFAB7,0xFEDD,0x0373,0x0869,0x0D62,0x1141,0x1350, + 0x139C,0x12E4,0x11AF,0x0F7A,0x0C1F,0x087D,0x077D,0x0747, + 0x0686,0x0611,0x05A3,0x04C3,0x02BB,0xFFAA,0xFBD0,0xF815, + 0xF442,0xF043,0xED5B,0xEC63,0xECAE,0xED27,0xEDE4,0xEE9D, + 0xEF35,0xF12D,0xF42B,0xF648,0xF82C,0xFA4F,0xFB47,0xFB1F, + 0xFCAA,0xFF31,0x0194,0x04BA,0x080D,0x0B48,0x0DDD,0x0F4D, + 0x0F66,0x0F17,0x0DFD,0x0D31,0x0B7B,0x09DD,0x0874,0x06AD, + 0x066D,0x0595,0x0305,0x0168,0xFFF6,0xFE12,0xFC6F,0xFB2A, + 0xF971,0xF800,0xF695,0xF57D,0xF454,0xF3D9,0xF4CB,0xF6A6, + 0xF7FB,0xF9C5,0xFB92,0xFCFF,0xFE36,0xFF59,0x002F,0x00F9, + 0x0273,0x04A1,0x0664,0x07A2,0x0864,0x0965,0x0A92,0x0AE3, + 0x0B3C,0x0B74,0x0ADB,0x09A0,0x08CA,0x0847,0x0760,0x056B, + 0x02F7,0x00CA,0xFF08,0xFE58,0xFE0E,0xFD8F,0xFCDC,0xFBCF, + 0xFA1C,0xF8AE,0xF7DF,0xF7F4,0xF7DB,0xF737,0xF6DE,0xF5A2, + 0xF225,0xEBE0,0xE363,0xD732,0xC7B6,0xBFEF,0xC00A,0xC06E, + 0xC079,0xC36E,0xDD06,0xFC42,0x125D,0x1CF1,0x1C3C,0x153A, + 0x0E39,0x0ABC,0x0D70,0x14BC,0x1DAB,0x254C,0x3027,0x393B, + 0x3E8B,0x3FA6,0x3F97,0x3F90,0x3F45,0x3F2B,0x37DC,0x2858, + 0x16EF,0x04A1,0xF4FA,0xEC25,0xEBAB,0xF1D1,0xF9D5,0xFF57, + 0xFECA,0xF7F5,0xED2A,0xE150,0xD712,0xD0FE,0xCE66,0xD00A, + 0xD517,0xDCFD,0xE63D,0xF040,0xFA45,0x041D,0x0D48,0x156A, + 0x1C20,0x2010,0x2055,0x1CAF,0x17AD,0x1431,0x1438,0x18AB, + 0x20DE,0x29D6,0x2FE3,0x30EF,0x2D23,0x260D,0x1CB8,0x122A, + 0x07F0,0xFE2E,0xF698,0xF08F,0xEC1D,0xEA5B,0xE96E,0xE8C5, + 0xE8FE,0xE9E5,0xEC67,0xEE7A,0xEC78,0xE9B1,0xE6CA,0xE362, + 0xE1B6,0xE368,0xE980,0xF309,0xFCDE,0x0593,0x0CAF,0x121F, + 0x1545,0x16EF,0x170A,0x16F4,0x1713,0x15D1,0x13DA,0x142C, + 0x14AE,0x1450,0x13F9,0x149A,0x13E8,0x1243,0x0F7E,0x0AC4, + 0x042B,0xFD7F,0xF626,0xEECE,0xE947,0xE640,0xE627,0xE7F4, + 0xEA0C,0xEB68,0xEBEF,0xEB7F,0xEB24,0xEBC2,0xED04,0xEDEE, + 0xED9A,0xEF43,0xF1F0,0xF4D8,0xF957,0xFF60,0x0572,0x0A1A, + 0x0D2D,0x0F59,0x10A9,0x1118,0x106B,0x0E77,0x0B8B,0x08C9, + 0x0755,0x0672,0x06B4,0x071A,0x06BE,0x04DA,0x0211,0xFECF, + 0xFB9F,0xF8C1,0xF574,0xF1C5,0xEEC5,0xEBFB,0xEA21,0xE9B7, + 0xEB26,0xED11,0xEE71,0xEFBB,0xF167,0xF32A,0xF47B,0xF5AC, + 0xF69A,0xF7BD,0xF8BF,0xFA21,0xFC52,0x0006,0x0418,0x071F, + 0x08EF,0x0AC2,0x0BFB,0x0CA7,0x0C11,0x0AF6,0x0965,0x07FB, + 0x0621,0x0491,0x036E,0x02A0,0x01B6,0x0064,0xFEC5,0xFCC8, + 0xFB3F,0xF8C4,0xF70D,0xF4B0,0xF249,0xF09F,0xF08C,0xF03A, + 0xF098,0xF1F0,0xF365,0xF3BC,0xF6F2,0xF787,0xF7C4,0xFA03, + 0xFAAC,0xFC55,0xFE0E,0xFFD3,0x00BB,0x022E,0x0354,0x04F2, + 0x0703,0x08B9,0x09C9,0x09F5,0x09B2,0x090F,0x07DA,0x0636, + 0x0512,0x0372,0x01AF,0x002F,0xFF88,0xFEBE,0xFD83,0xFC87, + 0xFBA8,0xFA74,0xF95E,0xF8C2,0xF7CB,0xF6C6,0xF629,0xF5FB, + 0xF5BA,0xF63C,0xF676,0xF536,0xF185,0xEA85,0xE075,0xD3F9, + 0xC53A,0xBF5B,0xBFC9,0xC009,0xBF9D,0xC5D4,0xE44A,0x02AE, + 0x17B1,0x1F62,0x1C02,0x12FF,0x0B29,0x094A,0x0D4A,0x1518, + 0x1E40,0x270A,0x2F1F,0x3799,0x3D45,0x3E2C,0x3E4A,0x3E47, + 0x3E7B,0x3CF1,0x318C,0x221A,0x1040,0xFDB7,0xEF60,0xE84A, + 0xEA34,0xF34C,0xFCD4,0x016F,0xFEAA,0xF4DF,0xE7E1,0xDAF8, + 0xD2D1,0xD09B,0xD18D,0xD356,0xD7A3,0xDE86,0xE760,0xF1AD, + 0xFCE2,0x07BD,0x117D,0x1882,0x1D0F,0x1EEE,0x1E02,0x1A6F, + 0x161A,0x12E1,0x13ED,0x19D0,0x22A2,0x2B7B,0x3146,0x31E3, + 0x2D6A,0x229E,0x171D,0x0CE5,0x0418,0xFC73,0xF562,0xEF9E, + 0xEB23,0xE973,0xE99C,0xEAAC,0xEB50,0xEBF6,0xECAF,0xEBF4, + 0xEABE,0xE909,0xE606,0xE2DD,0xE13E,0xE3AC,0xEA29,0xF3B2, + 0xFE89,0x088E,0x1009,0x13E6,0x155E,0x155F,0x1560,0x153A, + 0x14EC,0x1435,0x1379,0x1333,0x13F3,0x14D7,0x14D0,0x142A, + 0x124E,0x1013,0x0D6D,0x09EA,0x0498,0xFD8A,0xF5D0,0xEEE0, + 0xE976,0xE686,0xE701,0xE978,0xEBF5,0xEDDA,0xEEE7,0xEEE9, + 0xEE27,0xEE13,0xEE39,0xEF12,0xF083,0xF269,0xF514,0xF8FA, + 0xFCEF,0x01A0,0x0666,0x0BE2,0x0FDC,0x129F,0x139C,0x141F, + 0x1361,0x10A7,0x0DCA,0x0C29,0x0976,0x0884,0x0AB1,0x09F0, + 0x0976,0x0891,0x058E,0x018D,0xFDDB,0xFA1B,0xF656,0xF2B5, + 0xF01B,0xEDD9,0xEBE8,0xEB6B,0xEC59,0xEE76,0xF05E,0xF23B, + 0xF48F,0xF653,0xF764,0xF7E9,0xF848,0xF962,0xFADA,0xFCAF, + 0xFEAB,0x0184,0x0583,0x08FD,0x0BEF,0x0DA1,0x0E64,0x0E48, + 0x0D1C,0x0BD9,0x0A9D,0x08C0,0x0677,0x04AB,0x0318,0x0241, + 0x021F,0x0163,0xFFCF,0xFDC2,0xFBA7,0xF9CF,0xF7D9,0xF605, + 0xF476,0xF2A9,0xF1DA,0xF11F,0xF0F0,0xF207,0xF482,0xF734, + 0xF8E4,0xFB0E,0xFE0F,0xFF24,0xFFF7,0x0104,0x02B4,0x033B, + 0x037F,0x043F,0x05BB,0x07AA,0x0975,0x0A20,0x0A86,0x0A4F, + 0x0A14,0x0944,0x086E,0x0791,0x0677,0x03CD,0x015B,0x0053, + 0xFF47,0xFE1F,0xFDF2,0xFD8A,0xFC44,0xFAC7,0xF998,0xF8E2, + 0xF812,0xF794,0xF77A,0xF707,0xF662,0xF5D6,0xF510,0xF358, + 0xEF08,0xE731,0xDD2F,0xCFEC,0xC196,0xBEC9,0xBF60,0xBF3D, + 0xBE06,0xCB38,0xEB74,0x06E2,0x1925,0x1EC3,0x19A2,0x1035, + 0x09DD,0x08D5,0x0D4B,0x152E,0x1EDA,0x28BC,0x3068,0x3841, + 0x3D87,0x3DDF,0x3DD8,0x3DA8,0x3E08,0x3A7F,0x2E00,0x1E3D, + 0x0BB1,0xFA17,0xEDC1,0xE8D9,0xEBDF,0xF3A7,0xFC87,0x0025, + 0xFC22,0xF1CD,0xE4E3,0xD955,0xD193,0xCE81,0xCF67,0xD2AC, + 0xD78E,0xDE6D,0xE79B,0xF223,0xFD48,0x0751,0x0F87,0x162B, + 0x1A6E,0x1C26,0x1ADE,0x1719,0x1313,0x1134,0x1265,0x180D, + 0x206A,0x28E7,0x2DF9,0x2D4F,0x2733,0x1DD1,0x129A,0x07C9, + 0xFEBD,0xF71A,0xF197,0xEC74,0xE8EE,0xE741,0xE672,0xE605, + 0xE67A,0xE714,0xE6C8,0xE744,0xE85D,0xE46C,0xE21F,0xDFD6, + 0xDECB,0xE162,0xE877,0xF1F2,0xFCDA,0x0692,0x0DC0,0x12C8, + 0x1462,0x1422,0x1322,0x124C,0x122C,0x121D,0x121D,0x121C, + 0x1207,0x120C,0x1207,0x11A9,0x10ED,0x0F27,0x0C74,0x0759, + 0x010F,0xF9D2,0xF315,0xECFE,0xE841,0xE63B,0xE630,0xE856, + 0xEA57,0xECDA,0xEE84,0xEEA7,0xED9F,0xEC54,0xEC03,0xED33, + 0xEF43,0xF23B,0xF5A1,0xF8E4,0xFCBF,0x01B0,0x06F2,0x0B95, + 0x0F32,0x11A9,0x12A5,0x1249,0x1146,0x0F85,0x0D94,0x0BEF, + 0x09DE,0x087A,0x07FC,0x0735,0x05AF,0x04E7,0x02D2,0xFEE3, + 0xFA3B,0xF597,0xF27E,0xF0EC,0xEEE6,0xECD9,0xEB65,0xEAF0, + 0xEAFD,0xEBF4,0xEE84,0xF205,0xF485,0xF632,0xF661,0xF68D, + 0xF80D,0xF993,0xFA96,0xFC65,0xFFA2,0x0376,0x06C4,0x0A06, + 0x0CD0,0x0E4B,0x0E6D,0x0D8A,0x0CE0,0x0CA6,0x0BBA,0x0A82, + 0x0950,0x072A,0x04DA,0x02FC,0x0156,0xFFB8,0xFF03,0xFF5C, + 0xFE69,0xFC05,0xF949,0xF6FE,0xF469,0xF22B,0xF130,0xF112, + 0xF24A,0xF4A5,0xF6EB,0xF8BB,0xFA7C,0xFBE1,0xFD5B,0xFEE4, + 0x002A,0x0182,0x02F7,0x03E3,0x04F9,0x05B4,0x06E1,0x07E1, + 0x08BB,0x0A4D,0x0B8F,0x0C3D,0x0BFB,0x0AE9,0x0992,0x077C, + 0x0537,0x0322,0x0162,0x0060,0x0067,0x0073,0xFFE8,0xFE8C, + 0xFCF5,0xFB5B,0xFA3F,0xF9BA,0xF92C,0xF891,0xF7C2,0xF7B9, + 0xF753,0xF5A3,0xF2A6,0xED3F,0xE5E0,0xDC40,0xCF09,0xC1EB, + 0xBFC6,0xC08D,0xC01C,0xC395,0xDC89,0xFA2F,0x10EC,0x1C6D, + 0x1D67,0x16CE,0x0F0D,0x0AEF,0x0C43,0x1278,0x1AFB,0x240E, + 0x2C99,0x33EC,0x3BB7,0x3FDA,0x3EBA,0x3F7A,0x3FD7,0x3D02, + 0x335E,0x270C,0x17AD,0x064C,0xF6E5,0xEDD5,0xEC82,0xF1E1, + 0xF9CB,0xFF5E,0xFFDF,0xF993,0xEF05,0xE3D3,0xDAF6,0xD5F4, + 0xD402,0xD536,0xD860,0xDDF1,0xE663,0xF068,0xFAB6,0x0472, + 0x0CD3,0x139E,0x18C5,0x1C25,0x1CAB,0x1ABA,0x1721,0x133A, + 0x1232,0x14FF,0x1C00,0x23E9,0x2A0C,0x2BCE,0x28F1,0x222F, + 0x185E,0x0E56,0x04F1,0xFCA0,0xF5E1,0xF0E8,0xED5F,0xEBD1, + 0xEAC5,0xEA20,0xE991,0xE9A8,0xE9FC,0xEA93,0xEAB6,0xE9D5, + 0xE83F,0xE6A5,0xE565,0xE489,0xE8B5,0xF0F5,0xFB03,0x040F, + 0x0B0B,0x0FE1,0x134D,0x1476,0x1417,0x13ED,0x13B6,0x1343, + 0x122E,0x11AD,0x1269,0x132D,0x12C2,0x1138,0x10EC,0x10AF, + 0x0DF6,0x0A48,0x05B9,0xFEF4,0xF7E4,0xF07F,0xEA80,0xE7ED, + 0xE7F1,0xE9B2,0xEB90,0xEC85,0xECFE,0xEDED,0xEDF3,0xEDE4, + 0xEE10,0xEED6,0xEFE4,0xF07E,0xF236,0xF5D9,0xF9B7,0xFCD6, + 0x0239,0x07E2,0x0C1B,0x0F0E,0x107C,0x10AB,0x1037,0x0EAA, + 0x0BB7,0x0942,0x07DC,0x07C9,0x07C7,0x069B,0x05AF,0x0500, + 0x02DB,0x0019,0xFCAA,0xF8E2,0xF57C,0xF220,0xEF47,0xED42, + 0xEC3A,0xEB90,0xEB2D,0xEC24,0xEDE9,0xF003,0xF24C,0xF49E, + 0xF5ED,0xF643,0xF64E,0xF6FA,0xF845,0xFA48,0xFCCB,0xFF8D, + 0x01DB,0x04BE,0x0743,0x093A,0x0A9B,0x0AC3,0x0A7F,0x099E, + 0x082B,0x0696,0x0523,0x03A3,0x0208,0x00C0,0xFFB2,0xFEEE, + 0xFDEB,0xFC5B,0xFAD3,0xF92D,0xF6C8,0xF474,0xF249,0xF0F8, + 0xEFA0,0xEF04,0xEF05,0xEFE3,0xF1C6,0xF41B,0xF55C,0xF745, + 0xF915,0xFA46,0xFA12,0xFCBA,0xFD70,0xFD99,0xFFE2,0x00AA, + 0x02C7,0x0531,0x060F,0x0680,0x075F,0x07A2,0x07D5,0x072F, + 0x069E,0x05CE,0x046C,0x0257,0x006A,0xFF44,0xFE99,0xFE60, + 0xFDC6,0xFCFB,0xFBC7,0xFA5E,0xF9AE,0xF8ED,0xF7D4,0xF6F3, + 0xF639,0xF62B,0xF624,0xF6EA,0xF838,0xF897,0xF73A,0xF4FE, + 0xF302,0xF0B9,0xED8F,0xE980,0xE5A5,0xE397,0xE5A9,0xECAC, + 0xF6BC,0x01CF,0x0A36,0x0DB2,0x0CB5,0x096D,0x06F8,0x0617, + 0x06B5,0x0897,0x0AB8,0x0CEF,0x0EDC,0x10BF,0x1309,0x1499, + 0x1504,0x1429,0x123D,0x0E26,0x0A98,0x0754,0x01A2,0xFB06, + 0xF511,0xF227,0xF2B4,0xF62B,0xFA1E,0xFD34,0xFD3A,0xFA2E, + 0xF64C,0xF28C,0xF13C,0xF152,0xF1B1,0xF2DE,0xF399,0xF5E0, + 0xF9BF,0xFDB6,0x013D,0x04AC,0x0763,0x0948,0x0B4E,0x0C92, + 0x0CF3,0x0C45,0x0A1D,0x07EC,0x06B9,0x0799,0x094F,0x0BE6, + 0x0E05,0x0E02,0x0C83,0x09E7,0x06FF,0x0374,0x00CA,0xFE77, + 0xFA1B,0xF7E3,0xF712,0xF6D3,0xF75B,0xF8AF,0xF940,0xF925, + 0xF8A7,0xF951,0xFA8B,0xFB64,0xFAB3,0xFA44,0xF9E9,0xF9CF, + 0xFB53,0xFD9D,0x00DF,0x046C,0x079A,0x0959,0x09B5,0x0991, + 0x0945,0x0828,0x06A0,0x0603,0x0581,0x05A4,0x05C2,0x063E, + 0x068D,0x0587,0x044B,0x032F,0x0257,0x01DB,0x00AD,0xFEC3, + 0xFC34,0xF9FB,0xF7E2,0xF67C,0xF68C,0xF77C,0xF91E,0xFA38, + 0xFA8B,0xFA30,0xF9C2,0xF974,0xF8E1,0xF85F,0xF821,0xF871, + 0xF8B0,0xF87E,0xF843,0xF7C9,0xF739,0xF6C4,0xF63D,0xF680, + 0xF69D,0xF5A0,0xF454,0xF2F8,0xF208,0xF063,0xEFBF,0xEF67, + 0xEFAC,0xEF7D,0xF006,0xEEF1,0xEDED,0xEF22,0xECE4,0xEBE5, + 0xEBC2,0xEB6B,0xEABD,0xEA33,0xE9B9,0xE945,0xE909,0xE8B2, + 0xE835,0xE81B,0xE82B,0xE793,0xE776,0xE747,0xE70C,0xE73A, + 0xE759,0xE73F,0xE73E,0xE75F,0xE78C,0xE79E,0xE752,0xE76A, + 0xE774,0xE7B3,0xE7A0,0xE7A5,0xE797,0xE79F,0xE77F,0xE75A, + 0xE7AD,0xE7C1,0xE7F4,0xE85E,0xE8E2,0xE8CE,0xE8E5,0xE88E, + 0xE8CE,0xE90E,0xE97F,0xEA15,0xEAB5,0xEB46,0xEB49,0xEB97, + 0xEBD5,0xEC5C,0xECB3,0xED43,0xED63,0xED74,0xEDF2,0xEE96, + 0xEF7C,0xF1FE,0xF2AD,0xF279,0xF349,0xF3C5,0xF418,0xF473, + 0xF4CD,0xF528,0xF4D3,0xF516,0xF600,0xF67B,0xF6CC,0xF72D, + 0xF78A,0xF82E,0xF8A5,0xF8D9,0xF8C7,0xF903,0xFA03,0xFA22, + 0xF9AE,0xF9F5,0xFA9C,0xFA92,0xFB5D,0xFB8E,0xFBEB,0xFC9C, + 0xFCEC,0xFD08,0xFDAF,0xFD8A,0xFE00,0xFE96,0xFED7,0xFF39, + 0xFFC8,0x002E,0x0072,0x011A,0x0179,0x01F9,0x018F,0x0154, + 0x02FA,0x03FA,0x0419,0x047D,0x048A,0x04C6,0x0547,0x0547, + 0x0593,0x058E,0x0586,0x061C,0x05C5,0x052C,0x057D,0x05AF, + 0x05AB,0x05FA,0x066F,0x06B3,0x06EC,0x0737,0x079A,0x07A2, + 0x07E6,0x07E7,0x0826,0x087E,0x089E,0x08EF,0x0918,0x08E0, + 0x0969,0x0996,0x0961,0x0976,0x09E8,0x0A65,0x0A51,0x0A0F, + 0x0A8D,0x0AD4,0x0AAF,0x0ACB,0x0B43,0x0B81,0x0B49,0x0B63, + 0x0BAC,0x0BD2,0x0BBC,0x0B75,0x0BB1,0x0BE0,0x0C03,0x0C15, + 0x0C1B,0x0C1B,0x0BAB,0x0BD2,0x0BF9,0x0C36,0x0C4C,0x0C5C, + 0x0C79,0x0CD2,0x0C63,0x0CB4,0x0D20,0x0D55,0x0D95,0x0E1C, + 0x0E3C,0x0D47,0x0D3F,0x0F19,0x0CEE,0x0D8C,0x0EA9,0x0E74, + 0x0E1B,0x0E28,0x0DE9,0x0E2A,0x0DC9,0x0D95,0x0E47,0x0E8F, + 0x0E61,0x0E4C,0x0E7F,0x0E73,0x0E34,0x0E1C,0x0E26,0x0E75, + 0x0E1E,0x0E34,0x0DE5,0x0DFF,0x0D9B,0x0D4F,0x0D5F,0x0D86, + 0x0D85,0x0D73,0x0D7B,0x0D8E,0x0D56,0x0CC3,0x0D0F,0x0CDF, + 0x0CE8,0x0D14,0x0D37,0x0D34,0x0CC4,0x0C46,0x0C80,0x0CE0, + 0x0CC7,0x0CEC,0x0CBA,0x0CB3,0x0C2E,0x0C5A,0x0C6B,0x0C5A, + 0x0CB3,0x0C9C,0x0C29,0x0C0C,0x0C35,0x0BD2,0x0BBF,0x0BDB, + 0x0BA9,0x0B24,0x0A2F,0x0896,0x0862,0x0848,0x0842,0x0884, + 0x091C,0x090B,0x08E6,0x089F,0x0874,0x08B9,0x0893,0x0849, + 0x08A3,0x08AF,0x0885,0x0861,0x08FD,0x089A,0x0764,0x07CB, + 0x0867,0x083F,0x087A,0x0856,0x0887,0x08A0,0x0842,0x07EE, + 0x0840,0x0843,0x082E,0x0806,0x0800,0x07DA,0x0792,0x07B0, + 0x076A,0x07A0,0x0749,0x0763,0x079E,0x071C,0x0882,0x0882, + 0x073C,0x06D9,0x06B8,0x0679,0x0691,0x0695,0x0623,0x0638, + 0x063C,0x06DE,0x0722,0x0734,0x072B,0x0759,0x074F,0x0725, + 0x068B,0x0632,0x0684,0x067B,0x0646,0x066A,0x066A,0x061C, + 0x0603,0x05F5,0x05D2,0x054A,0x04FE,0x04ED,0x04D3,0x048D, + 0x049A,0x0489,0x0468,0x0440,0x042A,0x045D,0x041C,0x03D4, + 0x03F5,0x0454,0x03E8,0x03AF,0x037E,0x0348,0x032D,0x030C, + 0x035B,0x0350,0x0324,0x02EB,0x0310,0x02C8,0x02DA,0x0323, + 0x02A2,0x026F,0x02D9,0x0329,0x0320,0x0308,0x0310,0x02E8, + 0x023E,0x01FC,0x023E,0x026A,0x01CC,0x01C5,0x0201,0x01E7, + 0x0184,0x01DA,0x0231,0x00D3,0x019F,0x0266,0x017A,0x01AA, + 0x0186,0x017C,0x0153,0x0139,0x015D,0x016A,0x011C,0x009B, + 0x00EB,0x0130,0x0139,0x0102,0x00AB,0x00B6,0x0109,0x0109, + 0x00A7,0x00B5,0x00A3,0x0090,0x0088,0xFFFB,0x0221,0x0224, + 0x0213,0x02AC,0x0435,0x05E7,0x06C3,0x06F3,0x0702,0x0701, + 0x073F,0x074E,0x07A5,0x0797,0x0799,0x0783,0x07DE,0x08DD, + 0x099F,0x09D8,0x0916,0x0935,0x0A01,0x0B78,0x0D2C,0x0DCF, + 0x0E07,0x0DE4,0x0E49,0x0E83,0x0F73,0x103D,0x1135,0x11E9, + 0x126B,0x1293,0x1273,0x1292,0x1366,0x14FD,0x1532,0x14A5, + 0x13F6,0x14A1,0x15E9,0x16D3,0x163B,0x15D5,0x15EF,0x1640, + 0x16B8,0x16E2,0x1749,0x1773,0x174A,0x1723,0x16FB,0x1750, + 0x1781,0x16FB,0x163E,0x14A1,0x1451,0x1432,0x14B2,0x1541, + 0x150A,0x143C,0x13E6,0x14A9,0x1514,0x146A,0x13CE,0x1396, + 0x1393,0x12D0,0x1213,0x11E2,0x128E,0x12F9,0x11C4,0x10A3, + 0x1054,0x1057,0x0FF2,0x101E,0x107C,0x1080,0x1003,0x0E7E, + 0x0DF2,0x0F03,0x1046,0x100F,0x0E6F,0x0D24,0x0CD5,0x0C52, + 0x0C21,0x0C4F,0x0C9E,0x0C02,0x0A77,0x095D,0x0ACA,0x0BBE, + 0x0A13,0x0831,0x06FD,0x0710,0x07B0,0x06D8,0x0433,0x010E, + 0xFF0C,0xFE4D,0xFCE7,0xF81F,0xF219,0xED74,0xEB5C,0xEC7B, + 0xEF07,0xF050,0xEFB1,0xEF69,0xF0EB,0xF578,0xFAEC,0xFEBA, + 0xFFF8,0x0037,0x0050,0x0106,0x0265,0x02EA,0x03A0,0x03C1, + 0x0431,0x05F5,0x07E8,0x09C0,0x0B78,0x0D3F,0x0FE5,0x1278, + 0x1488,0x152C,0x1483,0x1324,0x1191,0x0FAC,0x0DB0,0x0B5C, + 0x089F,0x0590,0x02AF,0x008D,0xFF05,0xFD67,0xFC02,0xFA74, + 0xF98D,0xF860,0xF6D7,0xF4F9,0xF2BD,0xF088,0xEEDD,0xECD9, + 0xEACD,0xE839,0xE56A,0xE340,0xE2B0,0xE3F3,0xE529,0xE4FB, + 0xE466,0xE593,0xE824,0xE8D3,0xEB8A,0xED82,0xEDF0,0xEEF5, + 0xEEDB,0xEF1E,0xF0CD,0xF22E,0xF2D1,0xF363,0xF46B,0xF574, + 0xF654,0xF795,0xF91E,0xFACB,0xFBE0,0xFC50,0xFD48,0xFDFD, + 0xFDC3,0xFC17,0xFA08,0xF902,0xF8D8,0xF8E9,0xF75D,0xF4B0, + 0xF205,0xF0E6,0xF10E,0xF0ED,0xF127,0xF06E,0xEE72,0xEBC2, + 0xEA41,0xEB4A,0xEC18,0xEAB5,0xE7BF,0xE569,0xE4E8,0xE544, + 0xE4AE,0xE3F7,0xE2B3,0xE311,0xE4B6,0xE63A,0xE743,0xE6D0, + 0xE65D,0xE739,0xE9E7,0xEC75,0xED45,0xEC0D,0xEB44,0xEC94, + 0xEFB8,0xF3B0,0xF446,0xF3EA,0xF40B,0xF422,0xF5B7,0xF842, + 0xF9E7,0xFA8C,0xFA57,0xF9EF,0xF9EA,0xFA96,0xFB1A,0xFACC, + 0xFA2C,0xF967,0xF87B,0xF739,0xF64D,0xF6A2,0xF728,0xF586, + 0xF3D8,0xF364,0xF32F,0xF31E,0xF335,0xF26B,0xF160,0xF09C, + 0xEFE1,0xEF56,0xEF9B,0xEF35,0xEEC7,0xEDFB,0xED87,0xEDAE, + 0xEEF4,0xEFD5,0xEF0F,0xEDE9,0xEEE0,0xF051,0xF082,0xF1A6, + 0xF26D,0xF241,0xF273,0xF303,0xF448,0xF569,0xF573,0xF4E4, + 0xF47E,0xF4D8,0xF663,0xF7C5,0xF7BC,0xF695,0xF68E,0xF828, + 0xF9D5,0xFA2A,0xF960,0xF8BA,0xF7F7,0xF875,0xF926,0xF947, + 0xF801,0xF6A0,0xF6B9,0xF760,0xF7D2,0xF733,0xF623,0xF584, + 0xF5AF,0xF5BD,0xF574,0xF512,0xF4D1,0xF419,0xF39B,0xF3BC, + 0xF3EA,0xF3E1,0xF35D,0xF2E5,0xF2DD,0xF3B4,0xF45F,0xF489, + 0xF4B3,0xF4CD,0xF50B,0xF553,0xF5B2,0xF6A1,0xF7D4,0xF8C8, + 0xF824,0xF6C2,0xF6B0,0xF822,0xF974,0xFA05,0xF986,0xF880, + 0xF831,0xF64A,0xF356,0xEFFD,0xED43,0xE8C2,0xE105,0xD6DE, + 0xCC2B,0xC2E2,0xC12B,0xC3C9,0xC83F,0xCE18,0xD02F,0xD19F, + 0xD6F1,0xE188,0xECC4,0xF5FE,0xFB88,0xFEF4,0x006C,0x0151, + 0x0208,0x041F,0x07D0,0x0A9E,0x0E14,0x11ED,0x1736,0x1C27, + 0x20E6,0x2607,0x2D63,0x35AB,0x3BA8,0x3C93,0x3942,0x350D, + 0x328C,0x30AE,0x2DF1,0x28E4,0x21EB,0x1A85,0x143A,0x103E, + 0x0E9E,0x0DE5,0x0C8E,0x090F,0x05D1,0x032B,0x00CA,0xFD7F, + 0xF8D7,0xF475,0xF061,0xEB83,0xE667,0xE0F1,0xDCC9,0xDA11, + 0xD926,0xDA19,0xDC99,0xDF7A,0xE0E3,0xE305,0xE70F,0xEC64, + 0xF125,0xF3E2,0xF445,0xF4DF,0xF705,0xF8B3,0xFA47,0xFC18, + 0xFEC6,0x01D8,0x04A0,0x0788,0x0B13,0x1001,0x13A3,0x166C, + 0x191A,0x1BBD,0x1DD1,0x1DB8,0x1CDE,0x1B20,0x1958,0x16FF, + 0x1373,0x10A8,0x0F50,0x0D90,0x0998,0x05C3,0x0415,0x041C, + 0x0438,0x02D4,0x0003,0xFD91,0xFADD,0xF7F0,0xF5B0,0xF409, + 0xF198,0xEE52,0xEABA,0xE7F6,0xE71F,0xE77F,0xE8BA,0xE84E, + 0xE92A,0xEAC9,0xECD7,0xEDF0,0xEF8E,0xF262,0xF50B,0xF747, + 0xF937,0xFA8A,0xFB4B,0xFC67,0xFE72,0x00CC,0x02F6,0x0543, + 0x06BB,0x0811,0x0A04,0x0C86,0x0F5F,0x10DC,0x124E,0x1361, + 0x1383,0x1335,0x12D8,0x1196,0x0F7D,0x0D2A,0x0BE3,0x0B36, + 0x099A,0x0797,0x0520,0x0363,0x02DF,0x0252,0x01B2,0x002E, + 0xFE64,0xFC65,0xFAAD,0xF8CB,0xF7C4,0xF6F1,0xF526,0xF2F8, + 0xF108,0xEFC8,0xEFD7,0xF097,0xF12E,0xF0B5,0xF136,0xF2E9, + 0xF4AD,0xF574,0xF600,0xF6FA,0xF88C,0xFA43,0xFB9E,0xFCEE, + 0xFD25,0xFDD3,0xFE48,0xFFD3,0x0190,0x03F5,0x052B,0x0531, + 0x05CA,0x0803,0x0938,0x0985,0x0BF4,0x0AE0,0x0A3E,0x0A6E, + 0x0A49,0x09DB,0x0922,0x07DD,0x066F,0x0524,0x045F,0x040A, + 0x0337,0x0138,0x0024,0x0040,0x000A,0xFEFA,0xFD9C,0xFC1D, + 0xFB1B,0xFA69,0xF958,0xF8F0,0xF7CF,0xF676,0xF592,0xF593, + 0xF6B6,0xF76A,0xF74C,0xF6B8,0xF6A8,0xF7CC,0xF9BD,0xFADD, + 0xFB10,0xFB52,0xFC17,0xFCFD,0xFD6D,0xFD8D,0xFE73,0xFFC7, + 0x00EA,0x013C,0x015A,0x01DD,0x01B5,0x0020,0xFD23,0xFA14, + 0xF6FA,0xF1D9,0xE95D,0xDDE1,0xD2A7,0xCB85,0xCAD4,0xCF43, + 0xD5CA,0xD93D,0xD94F,0xDB8B,0xE2E6,0xEDE6,0xF887,0xFFB9, + 0x0375,0x0579,0x0745,0x08E2,0x094E,0x098F,0x0B89,0x0F4E, + 0x13B3,0x175D,0x19FF,0x1D28,0x224F,0x2AE9,0x33DD,0x39CE, + 0x3C9D,0x3C29,0x38E6,0x36D6,0x3566,0x3316,0x2E41,0x2741, + 0x205A,0x1B20,0x1705,0x12F5,0x0F10,0x0C80,0x0BD7,0x0B76, + 0x0A84,0x07EA,0x03A8,0xFF23,0xFB09,0xF6FF,0xF31D,0xEFAA, + 0xEA1A,0xE3C5,0xDF8D,0xDE42,0xDE3D,0xDEEC,0xE010,0xE1FE, + 0xE43F,0xE75E,0xEB65,0xEFC7,0xF297,0xF427,0xF629,0xF987, + 0xFCE8,0xFE15,0xFD65,0xFD16,0xFF80,0x0379,0x073C,0x09FF, + 0x0C48,0x0EBC,0x11D9,0x160B,0x1A03,0x1CBD,0x1D3F,0x1C93, + 0x1B82,0x1A6C,0x1912,0x1616,0x12CA,0x1003,0x0DC8,0x0B50, + 0x0853,0x05F4,0x04BC,0x0330,0x01EB,0x0098,0xFF3A,0xFDA9, + 0xFAE4,0xF73F,0xF4E5,0xF319,0xF0CD,0xEDF0,0xEAC8,0xE879, + 0xE724,0xE68C,0xE6B6,0xE764,0xE8E1,0xEA75,0xEBBB,0xEDBF, + 0xF06F,0xF257,0xF39C,0xF5B2,0xF76D,0xF8F2,0xFA10,0xFB07, + 0xFBE2,0xFD8A,0x0158,0x00BB,0x02D0,0x05DF,0x0809,0x0993, + 0x0B8A,0x0D5A,0x0EE7,0x0F60,0x0EF2,0x0F31,0x0F70,0x0EC4, + 0x0CA4,0x0AD6,0x0981,0x08A0,0x07EF,0x063C,0x04A2,0x0320, + 0x0208,0x0120,0xFFE7,0xFED6,0xFDD4,0xFCD4,0xFB17,0xF8F8, + 0xF707,0xF55C,0xF435,0xF40F,0xF36E,0xF1F5,0xF101,0xF14D, + 0xF21E,0xF22B,0xF2C6,0xF43D,0xF63C,0xF743,0xF7AF,0xF859, + 0xF9BB,0xFB09,0xFBFB,0xFCC2,0xFE47,0x001C,0x00EF,0x0134, + 0x028A,0x045C,0x0651,0x0716,0x0771,0x08C7,0x0A91,0x0BED, + 0x0B9E,0x0994,0x07CB,0x0858,0x0909,0x0819,0x06C4,0x05AC, + 0x052E,0x0491,0x03CE,0x0309,0x0260,0x01CC,0x0130,0x009D, + 0xFFD0,0xFEAC,0xFD71,0xFD18,0xFC78,0xFA9E,0xF975,0xF89A, + 0xF85C,0xF8B3,0xF88D,0xF76C,0xF676,0xF735,0xF830,0xF8C9, + 0xF973,0xFAD2,0xFB6C,0xFAD6,0xFB22,0xFC9D,0xFE5D,0xFE72, + 0xFEAE,0xFFA5,0x0061,0x00C7,0x0069,0x0196,0x0326,0x01CC, + 0xFE81,0xFA84,0xF72C,0xF409,0xEF14,0xE5D3,0xDA0E,0xCFFD, + 0xCB28,0xCC5D,0xD0FE,0xD659,0xD9C5,0xDABB,0xDD40,0xE56F, + 0xF096,0xFB96,0x02BF,0x0535,0x05AF,0x072D,0x0896,0x09FA, + 0x0BCF,0x0E03,0x10A5,0x143A,0x17F5,0x1C05,0x2089,0x25D4, + 0x2D67,0x3554,0x3B13,0x3CF3,0x3BB2,0x3893,0x35E7,0x3415, + 0x3200,0x2D2F,0x257C,0x1D4C,0x1780,0x14AA,0x12D5,0x1020, + 0x0C85,0x0A41,0x0972,0x08C0,0x066B,0x0224,0xFD03,0xF9A8, + 0xF682,0xF2C6,0xEDDD,0xE78E,0xE272,0xDF1D,0xDDC8,0xDEB5, + 0xDFF1,0xE0D2,0xE253,0xE4C0,0xE8ED,0xEE51,0xF1AB,0xF428, + 0xF773,0xFA8B,0xFAD4,0xFCC6,0xFE66,0xFE5C,0x00BA,0x0367, + 0x0628,0x0905,0x0B7C,0x0E96,0x11D1,0x15DB,0x199E,0x1B72, + 0x1CA7,0x1D36,0x1D65,0x1D05,0x1A96,0x1709,0x14D2,0x12D3, + 0x10F6,0x0E38,0x0AF6,0x079C,0x0590,0x0574,0x04AF,0x030E, + 0x0094,0xFE60,0xFBD9,0xFA0C,0xF7E8,0xF509,0xF23E,0xEF1D, + 0xEC52,0xEACB,0xEA27,0xE947,0xE80E,0xE737,0xE7E8,0xE9F5, + 0xECDD,0xEF83,0xF146,0xF1C7,0xF202,0xF465,0xF7D9,0xFAA8, + 0xFB32,0xFA79,0xFB11,0xFC89,0xFF32,0x01E1,0x031E,0x0529, + 0x0949,0x0B82,0x0D4E,0x0E24,0x0EB7,0x0F81,0x1077,0x1186, + 0x1185,0x0FD2,0x0DE1,0x0C37,0x0BCE,0x0B56,0x0AAC,0x08C1, + 0x0684,0x0452,0x0305,0x01EB,0x028C,0x02B1,0x0009,0xFCBF, + 0xFB0F,0xFA8F,0xF9DC,0xF824,0xF5C2,0xF3CD,0xF26A,0xF1F9, + 0xF284,0xF200,0xF175,0xF19C,0xF262,0xF389,0xF50F,0xF68C, + 0xF712,0xF787,0xF885,0xFA11,0xFB07,0xFA6C,0xFB41,0xFD47, + 0xFECD,0xFFF0,0x0132,0x01AB,0x02B4,0x03B2,0x0489,0x0645, + 0x074B,0x07A3,0x0795,0x06B8,0x0631,0x072F,0x084C,0x07A8, + 0x05B3,0x03C4,0x032B,0x035D,0x039A,0x0329,0x01E3,0x0062, + 0xFF63,0xFF1E,0xFF91,0xFF91,0xFE57,0xFC51,0xFAB4,0xFA2B, + 0xF9BC,0xF8FA,0xF7DB,0xF6A7,0xF60F,0xF5E0,0xF687,0xF64C, + 0xF634,0xF5F9,0xF6C3,0xF817,0xF97F,0xF9E5,0xF9B5,0xFA70, + 0xFB07,0xFBBC,0xFC4F,0xFCCE,0xFD50,0xFD9D,0xFE77,0xFF9D, + 0x00BC,0x0148,0x00F1,0x0018,0xFD4C,0xFA3D,0xF66E,0xF2E7, + 0xECB4,0xE250,0xD613,0xCC33,0xC818,0xCAAE,0xD047,0xD4E1, + 0xD524,0xD7AE,0xDC80,0xE4D9,0xF225,0xFBDE,0x01DE,0x037D, + 0x044E,0x05B1,0x081F,0x09E0,0x0AE5,0x0C2B,0x0F5D,0x13B4, + 0x1833,0x1CC0,0x210B,0x26EE,0x2E30,0x361C,0x3C0A,0x3E65, + 0x3CB9,0x392A,0x35AC,0x33EC,0x318A,0x2CB0,0x2558,0x1DF9, + 0x184F,0x1475,0x11B0,0x0EF1,0x0D2E,0x0C3E,0x0B70,0x0948, + 0x05BC,0x01CF,0xFD98,0xFA17,0xF628,0xF1F2,0xED60,0xE76C, + 0xE164,0xDD7F,0xDCDB,0xDE57,0xE00F,0xE113,0xE2C1,0xE59C, + 0xE98C,0xEE50,0xF1C2,0xF4A9,0xF774,0xF99F,0xFB85,0xFC74, + 0xFCD0,0xFC3C,0xFC31,0xFFB1,0x0365,0x0702,0x0A09,0x0C8F, + 0x0F6F,0x1320,0x1726,0x1A4A,0x1B89,0x1B1C,0x1A54,0x1A21, + 0x189A,0x1564,0x11F4,0x0FE0,0x0D27,0x0A60,0x07E6,0x0523, + 0x02C3,0x0151,0x00EF,0x0037,0xFF46,0xFDDA,0xFA83,0xF740, + 0xF4D4,0xF354,0xF202,0xEF0C,0xEBAB,0xE89E,0xE78C,0xE627, + 0xE580,0xE629,0xE7A3,0xE9A1,0xEBB1,0xEE2A,0xEE90,0xEF21, + 0xF18D,0xF536,0xF89E,0xFA71,0xF9F5,0xF8BF,0xF95F,0xFC22, + 0x0035,0x036D,0x0553,0x06A7,0x0781,0x090C,0x0B83,0x0E8B, + 0x1088,0x1194,0x117F,0x110C,0x1095,0x0FF8,0x0E2A,0x0C7F, + 0x0B86,0x0AE1,0x09DC,0x07E4,0x0565,0x035C,0x0229,0x015F, + 0x0246,0x02AA,0x00E5,0xFCB8,0xF930,0xF7FB,0xF935,0xF9DB, + 0xF846,0xF516,0xF1E3,0xF095,0xF085,0xF17F,0xF271,0xF313, + 0xF2E1,0xF364,0xF4D6,0xF5DB,0xF608,0xF6E8,0xF904,0xFB48, + 0xFC85,0xFBF8,0xFBA7,0xFC95,0xFDBF,0xFF9E,0x016F,0x02CA, + 0x03E0,0x03E4,0x0488,0x054D,0x0817,0x0A49,0x09E9,0x0961, + 0x09C6,0x0920,0x082E,0x09EA,0x080F,0x066E,0x0625,0x057A, + 0x055F,0x046B,0x02D7,0x0168,0x00F1,0x0137,0x00D9,0xFF9E, + 0xFDA7,0xFBBF,0xFA87,0xFA54,0xFA05,0xF919,0xF7A8,0xF600, + 0xF593,0xF619,0xF629,0xF61D,0xF5D0,0xF64A,0xF76F,0xF7D3, + 0xF7C9,0xF850,0xF969,0xFA38,0xFB25,0xFC45,0xFC95,0xFC9D, + 0xFC3D,0xFCE9,0xFEF5,0x015F,0x02DE,0x0190,0xFFB2,0xFE7C, + 0xFCBB,0xF9BE,0xF63C,0xF177,0xEA44,0xDF3F,0xD295,0xCA3E, + 0xC960,0xCD4B,0xD1E2,0xD43A,0xD59A,0xD8EA,0xDFAB,0xEB33, + 0xF6A8,0xFEAE,0x0320,0x050D,0x06B6,0x081A,0x092C,0x09BD, + 0x0AAD,0x0D42,0x115B,0x15B2,0x1905,0x1C56,0x2178,0x283B, + 0x30BD,0x37EE,0x3B8F,0x3B86,0x3A9E,0x3857,0x3578,0x327B, + 0x2E65,0x28A1,0x2287,0x1BE5,0x1614,0x11C8,0x0EDB,0x0D62, + 0x0C53,0x0A85,0x08E7,0x0702,0x0456,0xFF61,0xFA84,0xF789, + 0xF496,0xEFB0,0xE963,0xE31E,0xDE15,0xDB90,0xDBFC,0xDD6C, + 0xDF7D,0xE1AE,0xE3A6,0xE642,0xE9D2,0xEE2B,0xF193,0xF3F9, + 0xF69E,0xF9F3,0xFBCC,0xFB2A,0xFA0C,0xFAC5,0xFD6A,0x016F, + 0x0592,0x0826,0x095F,0x0ADF,0x0E3F,0x136C,0x189B,0x1B27, + 0x1B3F,0x19C1,0x18D1,0x188E,0x1839,0x1587,0x114D,0x0D97, + 0x0BA9,0x0A76,0x07E1,0x0442,0x011F,0xFFFB,0x0015,0x000A, + 0xFF01,0xFC53,0xF867,0xF4C4,0xF27A,0xF1B2,0xF0CF,0xEE5D, + 0xE9DB,0xE596,0xE40F,0xE44C,0xE542,0xE65E,0xE6FA,0xE819, + 0xEA48,0xEC9B,0xEE57,0xEFBA,0xF16E,0xF387,0xF5E4,0xF8FD, + 0xF9EE,0xF984,0xF952,0xFAE5,0xFE0A,0x01DC,0x04E8,0x055A, + 0x05B7,0x0889,0x08F2,0x0BD6,0x0E9D,0x0EF6,0x0EAC,0x0DD8, + 0x0CF2,0x0CAC,0x0C24,0x0A57,0x0824,0x06A7,0x06B5,0x0655, + 0x04A8,0x01D2,0xFF76,0xFF3D,0xFFBA,0xFFB3,0xFD98,0xFB2B, + 0xF919,0xF775,0xF676,0xF662,0xF556,0xF33D,0xF0F9,0xEFB9, + 0xF04F,0xF10F,0xF0AE,0xEFE0,0xF115,0xF374,0xF54E,0xF625, + 0xF61D,0xF64F,0xF7FE,0xFAC6,0xFC9F,0xFD6E,0xFD76,0xFD9E, + 0xFE01,0xFFF8,0x029B,0x04F7,0x05CD,0x0554,0x0670,0x08E9, + 0x0AA7,0x0A85,0x09DF,0x0A32,0x0B46,0x0BC0,0x0B36,0x09E2, + 0x07A4,0x0486,0x03FF,0x055D,0x0607,0x046E,0x01B2,0x0005, + 0x0068,0x0195,0x00E8,0xFEFF,0xFD5E,0xFB5E,0xFAC7,0xFAE9, + 0xFB26,0xFA57,0xF926,0xF7F5,0xF6D2,0xF795,0xF807,0xF752, + 0xF701,0xF840,0xF9BE,0xFA3A,0xFA89,0xFABA,0xFAC9,0xFB66, + 0xFC81,0xFE6C,0x0037,0x0035,0xFE9D,0xFE0A,0xFFD9,0x0300, + 0x049A,0x0346,0xFF15,0xFB04,0xF991,0xF725,0xF1CE,0xE8EC, + 0xDD70,0xD22C,0xCAD9,0xCAD5,0xCFB1,0xD404,0xD68B,0xD8AE, + 0xDCE3,0xE4DC,0xEF30,0xF8FF,0xFFA3,0x0488,0x07E8,0x09FC, + 0x0A5B,0x09E9,0x0A67,0x0CC4,0x1080,0x1528,0x1993,0x1CF9, + 0x1F96,0x237B,0x2AE0,0x348B,0x3C13,0x3DB1,0x3B1B,0x3859, + 0x3762,0x3697,0x33BA,0x2DA2,0x263E,0x1FB3,0x1A68,0x166E, + 0x1358,0x107C,0x0D41,0x0A86,0x09F5,0x09CE,0x0798,0x02F3, + 0xFDBF,0xF9E7,0xF77F,0xF414,0xEE6B,0xE7CA,0xE26E,0xDEB9, + 0xDD33,0xDD9E,0xDEF0,0xE029,0xE123,0xE2DC,0xE72D,0xECE9, + 0xF134,0xF33A,0xF3E6,0xF655,0xFA4E,0xFD40,0xFD67,0xFCC7, + 0xFDF1,0xFEAD,0x03E0,0x0937,0x0AC3,0x0BD3,0x0D86,0x113A, + 0x1673,0x1B7A,0x1D67,0x1B71,0x1836,0x177C,0x188E,0x1842, + 0x14EC,0x0FDD,0x0B5D,0x08BF,0x0822,0x07A4,0x0575,0x0250, + 0x001C,0xFF5B,0xFF09,0xFE66,0xFBAD,0xF7BE,0xF47E,0xF2F2, + 0xF272,0xF053,0xEC1A,0xE7A2,0xE5A6,0xE68F,0xE80C,0xE838, + 0xE76C,0xE758,0xE8DB,0xEBAC,0xEE94,0xF0B3,0xF19A,0xF1D2, + 0xF2EB,0xF603,0xF899,0xF97E,0xF8E5,0xF944,0xFBA4,0xFEEB, + 0x018E,0x02F8,0x03CE,0x04BB,0x0696,0x0A34,0x0E91,0x11AD, + 0x0FDC,0x0D50,0x0D20,0x0DFA,0x0DD4,0x0BE4,0x0990,0x07D0, + 0x06DA,0x05C5,0x0416,0x028A,0x00FA,0xFF71,0xFF15,0xFF64, + 0xFEE0,0xFC1E,0xF7BA,0xF6DF,0xF7EB,0xF6F2,0xF482,0xF1A5, + 0xEF81,0xEF08,0xEF7F,0xEFBA,0xEFA1,0xEFA9,0xF00F,0xEFEA, + 0xF0F6,0xF347,0xF5DE,0xF5FE,0xF50B,0xF4C2,0xF752,0xFA44, + 0xFB2E,0xFABE,0xFB8C,0xFD3C,0xFE7E,0x0055,0x0200,0x02F6, + 0x03B1,0x04A6,0x0640,0x090C,0x09F0,0x092A,0x075F,0x05FC, + 0x0688,0x07C5,0x07B2,0x05A1,0x037F,0x0250,0x01AC,0x01B2, + 0x019D,0x0177,0xFFC7,0xFD87,0xFC2D,0xFC8D,0xFD6F,0xFCEE, + 0xFA5F,0xF800,0xF732,0xF80E,0xF826,0xF6ED,0xF52A,0xF410, + 0xF41C,0xF59D,0xF6B8,0xF6F0,0xF5EA,0xF4F0,0xF511,0xF72D, + 0xFA69,0xFB8B,0xFA28,0xF8B5,0xF96A,0xFB50,0xFDBE,0xFEC7, + 0xFE5C,0xFE02,0xFF02,0x00E9,0x01F7,0x0116,0xFF36,0xFC5D, + 0xFA9D,0xFA16,0xF6E8,0xEE91,0xE3DD,0xDB44,0xD9DC,0xDDBA, + 0xE232,0xE352,0xE1F1,0xE125,0xE522,0xED94,0xF6C6,0xFB94, + 0xFF9E,0x00D2,0x00F4,0x044B,0x0579,0x04C3,0x037F,0x0522, + 0x0981,0x0EB2,0x1106,0x1141,0x11D7,0x162A,0x1DF2,0x257D, + 0x2971,0x2966,0x277E,0x2547,0x24B6,0x2510,0x2390,0x1F18, + 0x1932,0x143B,0x1116,0x0F48,0x0C90,0x0A18,0x0849,0x08AD, + 0x0996,0x08A5,0x0564,0x0167,0xFE7B,0xFCF9,0xFBF4,0xF97F, + 0xF4E2,0xEF00,0xEAA6,0xE8CD,0xE9AF,0xEB3C,0xEB2A,0xEA77, + 0xEAE8,0xEE46,0xF247,0xF55E,0xF66F,0xF77D,0xF985,0xFBD0, + 0xFDD7,0xFE7F,0xFE42,0xFDC5,0xFE7B,0x0129,0x04C9,0x0656, + 0x054B,0x0513,0x08FC,0x0CCC,0x0FCD,0x1169,0x11EE,0x117A, + 0x10F5,0x111B,0x1132,0x104C,0x0DA6,0x0ABE,0x0933,0x0831, + 0x06FA,0x04EC,0x0338,0x0188,0x018F,0x0232,0x0194,0xFF28, + 0xFCCD,0xFAEB,0xF96C,0xF867,0xF816,0xF63E,0xF2A1,0xEF21, + 0xEE41,0xF033,0xF168,0xF09A,0xF012,0xF127,0xF2B2,0xF442, + 0xF592,0xF660,0xF760,0xF89A,0xFA87,0xFB67,0xFC20,0xFBDC, + 0xFADD,0xFB9E,0xFDF4,0x00E0,0x0225,0x0266,0x0313,0x0525, + 0x0809,0x0A02,0x0BCC,0x0C92,0x0BE8,0x0B10,0x0A90,0x0A93, + 0x0A8B,0x096E,0x07FB,0x0652,0x0584,0x0524,0x04E4,0x0377, + 0x01A7,0x00A6,0x00F1,0x0148,0x00B4,0xFEF6,0xFD49,0xFBD9, + 0xFAFE,0xFB1F,0xFB09,0xF9AC,0xF7A2,0xF5FD,0xF5C1,0xF642, + 0xF6B5,0xF6D4,0xF6E1,0xF761,0xF820,0xF849,0xF87C,0xF967, + 0xFABA,0xFBFB,0xFBDF,0xFBD3,0xFC36,0xFCD1,0xFD8C,0xFE8F, + 0x0032,0x01B3,0x01EE,0x018F,0x0143,0x0243,0x0472,0x0689, + 0x067F,0x05A8,0x0457,0x0477,0x05A5,0x0643,0x057B,0x0481, + 0x02B3,0x0179,0x0415,0x03BD,0x0188,0xFFE8,0xFE97,0xFEC6, + 0x0006,0x0016,0xFE60,0xFBD4,0xF9E2,0xFA53,0xFB7A,0xFBBD, + 0xFB16,0xF9AB,0xF873,0xF833,0xF8C4,0xF933,0xF95C,0xF841, + 0xF872,0xF9C9,0xFAE2,0xFAF2,0xF988,0xF927,0xFAE5,0xFD7E, + 0xFE75,0xFD7E,0xFC1B,0xFBE9,0xFD9D,0xFF20,0x0063,0x005D, + 0xFF3F,0xFDCB,0xFDE5,0xFEDF,0xFFC8,0xFED9,0xFC13,0xF8FE, + 0xF708,0xF742,0xF7D8,0xF7DB,0xF7BB,0xF70A,0xF745,0xF914, + 0xFB32,0xFCBF,0xFD99,0xFDFB,0xFF42,0x0024,0x01E5,0x0227, + 0x017D,0x01C1,0x01EE,0x01B7,0x0183,0x0181,0x01F2,0x02B0, + 0x0482,0x06A6,0x0827,0x0859,0x07AD,0x07FB,0x08EA,0x08DA, + 0x07FE,0x066C,0x05DF,0x066E,0x0516,0x030B,0x01C5,0x01EA, + 0x0174,0x0126,0x0133,0x01D6,0x01BA,0x0083,0xFF62,0xFEE9, + 0xFF7B,0xFF80,0xFD88,0xFC00,0xFBF3,0xFBB4,0xFAB0,0xF9A3, + 0xF90D,0xF952,0xF9AA,0xF89C,0xF748,0xF83B,0xF8FF,0xF8B1, + 0xF81E,0xF763,0xF6D8,0xF5FB,0xF522,0xF406,0xF34C,0xF253, + 0xF14F,0xF0D8,0xF098,0xF19B,0xF272,0xF2C2,0xF308,0xF35E, + 0xF433,0xF3EE,0xF38B,0xF38F,0xF35E,0xF3DF,0xF429,0xF3A4, + 0xF2EE,0xF274,0xF242,0xF218,0xF1B2,0xF16C,0xF0E0,0xF075, + 0xEF82,0xEECD,0xEEC1,0xEE2B,0xED37,0xECE8,0xECC5,0xEBF5, + 0xEB6A,0xEB00,0xEAA0,0xEA4B,0xE9E1,0xE9D0,0xE9E5,0xE970, + 0xE961,0xE910,0xE8EE,0xE8F2,0xE8BD,0xE84F,0xE82B,0xE811, + 0xE7C1,0xE797,0xE7D2,0xE7A8,0xE799,0xE77B,0xE812,0xE843, + 0xE830,0xE86F,0xE8C1,0xE83D,0xE873,0xE958,0xE96F,0xE9BF, + 0xEB8D,0xE9D8,0xEA91,0xEB6D,0xEB61,0xEB74,0xEB71,0xEB98, + 0xEC08,0xECD1,0xED24,0xED87,0xEDC7,0xEE1C,0xEE51,0xEF15, + 0xEFB0,0xEFF5,0xEFDB,0xEFE8,0xF09F,0xF19A,0xF218,0xF213, + 0xF230,0xF2E2,0xF33B,0xF42D,0xF4E6,0xF4ED,0xF54A,0xF579, + 0xF606,0xF692,0xF713,0xF73D,0xF770,0xF7F0,0xF8C1,0xF96B, + 0xF9B3,0xF9BD,0xFA59,0xFABD,0xFB46,0xFBE1,0xFC01,0xFC26, + 0xFC69,0xFCE5,0xFD8E,0xFDE5,0xFEB5,0xFF19,0xFF1C,0xFF69, + 0x005B,0x011C,0x0130,0x0193,0x01B4,0x01FE,0x01D6,0x0165, + 0x000F,0x0041,0x00E5,0x01A8,0x0266,0x02EE,0x0315,0x0317, + 0x0355,0x03D8,0x043A,0x04C3,0x04B4,0x0512,0x05B5,0x064D, + 0x064D,0x06E0,0x074A,0x0680,0x06F8,0x07D9,0x0848,0x083D, + 0x08AF,0x08F5,0x090A,0x09B4,0x0A20,0x0A00,0x0A39,0x0A63, + 0x0A96,0x0B67,0x0C06,0x0BAD,0x0B93,0x0BEB,0x0C2D,0x0C24, + 0x0C8E,0x0CCF,0x0C91,0x0DC0,0x0DE0,0x0CAB,0x0CC4,0x0D2B, + 0x0DB4,0x0DFD,0x0E2F,0x0E1F,0x0DDE,0x0DF0,0x0E35,0x0ED8, + 0x0F38,0x0F61,0x0FFF,0x102B,0x0FBF,0x0F7C,0x0F5D,0x0F54, + 0x0FCC,0x0FC7,0x0F93,0x0F52,0x0F96,0x0FB4,0x0FC0,0x0F9D, + 0x0F8A,0x0F65,0x0F4C,0x0F46,0x0F63,0x0F95,0x0F41,0x0EB0, + 0x0E81,0x0EB4,0x0EAC,0x0E99,0x0EAB,0x0E89,0x0E58,0x0E22, + 0x0E27,0x0E25,0x0E03,0x0D9C,0x0D70,0x0D3E,0x0D32,0x0D22, + 0x0D1F,0x0CE2,0x0CA8,0x0CFD,0x0D2C,0x0D0B,0x0CED,0x0CD0, + 0x0CCA,0x0CE6,0x0CF4,0x0CDF,0x0CB8,0x0C7E,0x0C4A,0x0CA9, + 0x0C99,0x0BF7,0x0BCB,0x0C11,0x0C30,0x0C0B,0x0C61,0x0C94, + 0x0A4F,0x0A81,0x0BC4,0x0ADD,0x0B7E,0x0BB8,0x0B53,0x0B0D, + 0x0B27,0x0B54,0x0B25,0x0B3F,0x0AD1,0x0AA0,0x0A55,0x0A89, + 0x0AEC,0x0AB4,0x0AAA,0x0AB5,0x0AAC,0x0ACD,0x0A90,0x0A36, + 0x0A22,0x09FB,0x09E6,0x098C,0x0959,0x098F,0x09C3,0x094F, + 0x0890,0x086B,0x08E1,0x08D6,0x08B5,0x0904,0x08BD,0x0886, + 0x08AB,0x08CD,0x086D,0x085B,0x0824,0x07F0,0x07D7,0x07BF, + 0x07AF,0x0779,0x0769,0x079E,0x07AC,0x075C,0x06A2,0x0619, + 0x0640,0x069D,0x06CD,0x06BA,0x06E2,0x0777,0x08A5,0x082F, + 0x085D,0x0815,0x07E1,0x07A5,0x0779,0x0734,0x0723,0x074E, + 0x07BA,0x078E,0x0753,0x06D4,0x06C9,0x064F,0x064B,0x0604, + 0x05C5,0x0547,0x0623,0x0696,0x05CC,0x0527,0x0532,0x0551, + 0x04CE,0x04B9,0x04FF,0x04FA,0x0476,0x043A,0x048A,0x04A5, + 0x0475,0x049E,0x0422,0x042A,0x03FF,0x03EC,0x03AF,0x036C, + 0x0370,0x03A5,0x0390,0x0280,0x02DA,0x03B3,0x0408,0x03D4, + 0x035E,0x030A,0x02DE,0x02CA,0x0279,0x0262,0x01DD,0x0196, + 0x0186,0x010C,0x009D,0x00AA,0x009D,0xFFEC,0xFF38,0xFD51, + 0xFD8E,0xFDD4,0xFDDE,0xFDC9,0xFDD0,0xFE4A,0xFF14,0xFFC4, + 0xFF3B,0xFE95,0xFF00,0x0079,0x0236,0x02DF,0x0255,0x01CB, + 0x02A3,0x0451,0x055C,0x065D,0x0761,0x07D3,0x07EC,0x089F, + 0x097A,0x099B,0x0A01,0x09E7,0x0A6C,0x0B08,0x0B68,0x0AF5, + 0x0A75,0x0B43,0x0CC6,0x0E80,0x0DA1,0x0C12,0x0B85,0x0CFC, + 0x0EF1,0x10C4,0x12B6,0x1166,0x10E0,0x1126,0x11FE,0x1359, + 0x1350,0x1259,0x132A,0x1501,0x15B0,0x15A0,0x1522,0x15AB, + 0x1774,0x194C,0x1997,0x196A,0x1915,0x1820,0x1814,0x190A, + 0x1AC5,0x1B0B,0x194B,0x1820,0x1957,0x1AB2,0x1A3B,0x18E2, + 0x18E8,0x1999,0x1A40,0x1969,0x186C,0x1822,0x186D,0x1841, + 0x17E7,0x1795,0x17BF,0x171E,0x157A,0x1579,0x1692,0x16C3, + 0x155E,0x1366,0x1319,0x1458,0x14CC,0x13F1,0x11BF,0x10AC, + 0x1152,0x11D7,0x116F,0x109B,0x1062,0x1041,0x0F77,0x0E6E, + 0x0E59,0x0F3B,0x0F52,0x0D7C,0x0BE3,0x0B6E,0x0BD0,0x0C46, + 0x0A5A,0x0942,0x09B3,0x09FC,0x0982,0x089A,0x07DB,0x0484, + 0x0386,0x02B9,0xFFCB,0xFCC8,0xF759,0xF0D1,0xEC45,0xEC17, + 0xEEE1,0xF08B,0xF077,0xEFB2,0xEFE1,0xF195,0xF306,0xF41F, + 0xF3D8,0xF2BF,0xF104,0xEEDC,0xEE8E,0xEF4A,0xF012,0xF2EE, + 0xF6F8,0xFB0D,0xFE19,0xFF73,0x0115,0x03E7,0x06AC,0x081C, + 0x0838,0x07A5,0x06D3,0x06A2,0x0767,0x0A25,0x0CBB,0x0E63, + 0x0F19,0x1090,0x13C3,0x15A7,0x155A,0x1384,0x123D,0x1219, + 0x1170,0x0F98,0x0D3A,0x0ADC,0x0995,0x0A45,0x0BFA,0x0C06, + 0x0A37,0x0776,0x0630,0x05CA,0x062F,0x050B,0xFFC0,0xFB8A, + 0xF92C,0xF74A,0xF511,0xF32C,0xF1C7,0xF031,0xEF15,0xEEDE, + 0xEE80,0xECC9,0xEA8D,0xE858,0xE6AE,0xE61A,0xE485,0xE13B, + 0xDF09,0xE072,0xE21E,0xE1FB,0xE0E9,0xE184,0xE277,0xE3A6, + 0xE4E4,0xE51C,0xE4BA,0xE486,0xE439,0xE4AC,0xE5AE,0xE685, + 0xE78D,0xE858,0xEA18,0xEC76,0xEF54,0xF0CE,0xF145,0xF247, + 0xF429,0xF575,0xF536,0xF519,0xF583,0xF644,0xF7AE,0xF9DD, + 0xFB12,0xFA79,0xF983,0xFA25,0xFBFF,0xFD6D,0xFD64,0xFB6D, + 0xF898,0xF78B,0xF947,0xFA98,0xF954,0xF660,0xF489,0xF4A6, + 0xF620,0xF78B,0xF771,0xF588,0xF332,0xF23F,0xF2D7,0xF2A1, + 0xF0F4,0xEEAA,0xED75,0xED3B,0xED5E,0xEC31,0xEA5A,0xE9EA, + 0xEA56,0xEAFC,0xEB0F,0xEADF,0xE98E,0xE739,0xE624,0xE72B, + 0xE8D7,0xE890,0xE635,0xE463,0xE4FA,0xE66D,0xE7F8,0xE92C, + 0xE950,0xE927,0xE8CB,0xE9EB,0xEBD0,0xEC5D,0xEBC4,0xEAA7, + 0xEB45,0xED8C,0xEF07,0xEEE1,0xEE60,0xEFED,0xF28B,0xF415, + 0xF455,0xF3CE,0xF489,0xF62D,0xF728,0xF606,0xF7E5,0xF85D, + 0xF76E,0xF861,0xF830,0xF8D5,0xF9DC,0xFA21,0xFA5A,0xFB66, + 0xFB09,0xFA5A,0xF97F,0xF94E,0xFA50,0xFAAB,0xF9DD,0xF8FC, + 0xF81D,0xF7DD,0xF80F,0xF826,0xF879,0xF8A0,0xF852,0xF6DF, + 0xF649,0xF58E,0xF4E8,0xF46C,0xF430,0xF539,0xF4C3,0xF2D4, + 0xF150,0xF1C4,0xF394,0xF4E2,0xF48D,0xF328,0xF21D,0xF1F6, + 0xF21E,0xF2D1,0xF447,0xF46A,0xF366,0xF255,0xF284,0xF3C5, + 0xF4B7,0xF5CD,0xF6C8,0xF6B5,0xF66B,0xF6C5,0xF718,0xF73E, + 0xF6F8,0xF5C4,0xF303,0xEE0D,0xE7BF,0xE17D,0xD858,0xCC9D, + 0xC1D4,0xBEB5,0xBEDB,0xBFF0,0xC7AC,0xCB83,0xCC04,0xCC8D, + 0xCF87,0xD44B,0xD87B,0xDA30,0xD81D,0xD3C5,0xD0EE,0xD258, + 0xD800,0xDDC5,0xE3EF,0xED1F,0xF844,0x02A8,0x09D2,0x0E79, + 0x1316,0x18EC,0x1F0E,0x2285,0x2213,0x2020,0x2045,0x244E, + 0x2BBD,0x3407,0x3AAF,0x3F35,0x3FEF,0x3FFF,0x4007,0x3FF8, + 0x4009,0x4059,0x40AD,0x4029,0x3CAF,0x381D,0x358F,0x34FE, + 0x35F2,0x3624,0x3544,0x32B6,0x2E3A,0x2A11,0x2695,0x23E2, + 0x1F55,0x1763,0x0DA2,0x059A,0x001B,0xFC94,0xFA37,0xF804, + 0xF579,0xF252,0xEF4B,0xECF7,0xEADF,0xE7A2,0xE3D6,0xDF5A, + 0xDBA8,0xD7E2,0xD446,0xD1D4,0xD116,0xD2DF,0xD4B8,0xD615, + 0xD79B,0xD8F3,0xDAE0,0xDC4A,0xDE0D,0xDFE8,0xE0F7,0xE0B3, + 0xE101,0xE312,0xE662,0xE936,0xEC65,0xF04E,0xF5FE,0xFBB3, + 0xFED4,0x00E0,0x0381,0x0745,0x0ABE,0x0C2E,0x0C8B,0x0D91, + 0x0F55,0x112F,0x1314,0x158A,0x17EB,0x1AAB,0x1BFE,0x1C6D, + 0x1C8B,0x1DD4,0x1D47,0x1B69,0x1A03,0x19D7,0x179C,0x13DA, + 0x1384,0x11D3,0x1115,0x1111,0x0F79,0x0E26,0x0C4E,0x09CF, + 0x0684,0x03C5,0x01CE,0xFF1D,0xFB9A,0xF773,0xF47B,0xF344, + 0xF175,0xF031,0xEFC2,0xEF67,0xEE3A,0xEBB6,0xEA46,0xE9CD, + 0xE88C,0xE69E,0xE545,0xE543,0xE54F,0xE42B,0xE310,0xE387, + 0xE557,0xE6DF,0xE83E,0xE991,0xEAD1,0xEBD0,0xECAB,0xEDD1, + 0xEF69,0xF057,0xF11F,0xF255,0xF4A0,0xF73F,0xF873,0xF97B, + 0xFBBB,0xFEC3,0x022A,0x0490,0x059D,0x0562,0x0608,0x07D4, + 0x09A9,0x0A69,0x0B0F,0x0B92,0x0E96,0x107E,0x10A1,0x1116, + 0x113E,0x116F,0x11D3,0x11C2,0x113F,0x0F68,0x0DE5,0x0D31, + 0x0CBC,0x0CA7,0x0BEB,0x09C1,0x072B,0x069C,0x079D,0x0786, + 0x0601,0x0428,0x019B,0xFF83,0xFF54,0xFEDC,0xFCE3,0xFAD0, + 0xF963,0xF8AB,0xF845,0xF784,0xF66F,0xF601,0xF607,0xF60C, + 0xF52D,0xF3E5,0xF29F,0xF22C,0xF2B7,0xF360,0xF354,0xF31E, + 0xF2AE,0xF238,0xF338,0xF657,0xF7D1,0xF6EF,0xF737,0xF8EA, + 0xFB12,0xFB41,0xF9CB,0xF9C0,0xFAD9,0xFA82,0xF748,0xF19B, + 0xE9B1,0xE1B7,0xD83A,0xCCAA,0xC1CC,0xBE42,0xBE14,0xC164, + 0xCBD3,0xD1F9,0xD31B,0xD201,0xD3C8,0xDA09,0xE035,0xE20F, + 0xDD82,0xD738,0xD460,0xD6DB,0xDD1F,0xE4AC,0xEDFC,0xF874, + 0x0329,0x0C89,0x1446,0x1B0D,0x20C1,0x253C,0x28DF,0x2B9D, + 0x2C41,0x2AEF,0x2A11,0x2DB0,0x3699,0x3DD8,0x3E4F,0x3E84, + 0x3EA3,0x3E92,0x3E88,0x3E7E,0x3EA4,0x3E8F,0x3E4F,0x3E58, + 0x3E86,0x3E20,0x3C0F,0x3B87,0x3B88,0x3A35,0x3947,0x3886, + 0x35EE,0x3081,0x2A89,0x24B0,0x1E23,0x1684,0x0F2C,0x04AB, + 0xFEC0,0xFBE0,0xF8DF,0xF627,0xF382,0xF192,0xEFC4,0xEDEA, + 0xE982,0xE574,0xE14E,0xDD2B,0xD90A,0xD4D0,0xD0EB,0xCE7B, + 0xCEA3,0xD024,0xD2E8,0xD576,0xD7BC,0xD9F4,0xDBD6,0xDCF7, + 0xDE67,0xDFEB,0xE19D,0xE299,0xE27C,0xE2C9,0xE5A2,0xEAC6, + 0xF09B,0xF612,0xFA7D,0xFED5,0x02BA,0x05D0,0x09C3,0x0D24, + 0x0EC0,0x0F18,0x0F17,0x107F,0x1368,0x1583,0x16B8,0x18CB, + 0x1C3F,0x1FA0,0x20EB,0x20E6,0x20D1,0x219D,0x21D7,0x2075, + 0x1D54,0x1AAB,0x18F0,0x17AB,0x15F3,0x138B,0x1056,0x0F13, + 0x0D66,0x0C98,0x0BE0,0x09FE,0x065A,0x018B,0xFDB8,0xFB40, + 0xF8B5,0xF500,0xF170,0xEF4C,0xEF0A,0xEE20,0xEC04,0xEB44, + 0xEAC0,0xE966,0xE894,0xE72D,0xE5C6,0xE3C0,0xE19A,0xE067, + 0xE0B3,0xE2C1,0xE396,0xE2B0,0xE25D,0xE43C,0xE7AD,0xEA9C, + 0xEBE2,0xEC0E,0xEC7E,0xED14,0xEEB4,0xF0DA,0xF2BC,0xF412, + 0xF591,0xF8DE,0xFBB1,0xFCBE,0xFE60,0x0073,0x02E9,0x05AF, + 0x0815,0x08E5,0x0926,0x0991,0x0A92,0x0C69,0x0E7C,0x1056, + 0x114E,0x10C3,0x10FC,0x11D2,0x12E9,0x1372,0x131E,0x1263, + 0x115C,0x10B2,0x100C,0x0E81,0x0D10,0x0BC0,0x0B1A,0x0B69, + 0x0ACD,0x0910,0x0694,0x0482,0x03BE,0x03F9,0x02E6,0x00EA, + 0xFEE7,0xFCBD,0xFADD,0xF90C,0xF84F,0xF800,0xF7C3,0xF69B, + 0xF551,0xF3F4,0xF2EF,0xF2D1,0xF39E,0xF45E,0xF3A6,0xF179, + 0xEFFD,0xF085,0xF2C7,0xF3B8,0xF351,0xF297,0xF345,0xF500, + 0xF6F1,0xF7BD,0xF822,0xF87F,0xF908,0xFA15,0xFB6A,0xFC1D, + 0xFC0B,0xF9A4,0xF51B,0xEF94,0xEA11,0xE3DF,0xD81E,0xCB7F, + 0xC1D3,0xBFDB,0xBFB0,0xC65A,0xCFEF,0xD2DA,0xD2B6,0xD448, + 0xD953,0xDF24,0xE1AA,0xE005,0xDD05,0xDA1E,0xD93B,0xDACE, + 0xDE64,0xE584,0xEFD3,0xFC2C,0x081B,0x1094,0x15DD,0x1991, + 0x2001,0x27F6,0x2D8E,0x2DA5,0x2A74,0x2880,0x2AAB,0x310F, + 0x3A17,0x3F20,0x3F03,0x3F34,0x3F4F,0x3F4B,0x3F36,0x3F4B, + 0x3F38,0x3F3C,0x3F2D,0x3F28,0x3F3B,0x3DB9,0x3AE3,0x3BCD, + 0x3D81,0x3E9E,0x3CD7,0x37BC,0x3209,0x2E24,0x2ABC,0x25E5, + 0x1EB3,0x14D0,0x0B1A,0x04F2,0x01CE,0xFD63,0xFA6F,0xF872, + 0xF69F,0xF40D,0xF0DC,0xECDE,0xE8E3,0xE582,0xE235,0xDE2B, + 0xD908,0xD3E5,0xD074,0xCE8D,0xCF34,0xD188,0xD429,0xD5B3, + 0xD82E,0xDA03,0xDABF,0xDB05,0xDC62,0xDEC1,0xE0CB,0xE1D3, + 0xE143,0xE12D,0xE458,0xEA12,0xF0A4,0xF57B,0xF8BC,0xFC8B, + 0x0084,0x0446,0x0744,0x0AAA,0x0C5B,0x0CF1,0x0D8D,0x0F1C, + 0x10CF,0x11BF,0x1490,0x1804,0x1AE5,0x1D9B,0x1F96,0x1FDF, + 0x1F06,0x1E2E,0x1DC4,0x1C9F,0x1A59,0x17EC,0x1542,0x1290, + 0x0F62,0x0E5F,0x0EC6,0x0EB9,0x0DB8,0x0B0F,0x075E,0x0470, + 0x026A,0x001C,0xFD16,0xF99C,0xF5B7,0xF28D,0xF045,0xEF0F, + 0xEDE3,0xEC87,0xEB2C,0xE9EF,0xE98D,0xE90A,0xE69E,0xE399, + 0xE233,0xE212,0xE24D,0xE1CD,0xDFA3,0xDE62,0xDEBE,0xE0C9, + 0xE333,0xE57B,0xE679,0xE72E,0xE83A,0xEA81,0xED08,0xEE7E, + 0xEE33,0xEE63,0xF02B,0xF30D,0xF614,0xF7AB,0xF8CB,0xFA4E, + 0xFCEA,0x00A1,0x03AC,0x0619,0x0639,0x0616,0x078B,0x0996, + 0x0AB0,0x0B84,0x0B84,0x0B9D,0x0C57,0x0F75,0x10B6,0x0F73, + 0x100D,0x0F6B,0x0FA1,0x100C,0x0FAA,0x0E32,0x0D0B,0x0B99, + 0x0A56,0x0955,0x090E,0x083E,0x06EF,0x05CA,0x048A,0x03D5, + 0x02FB,0x00EC,0xFE7F,0xFD7F,0xFD58,0xFC25,0xF972,0xF71E, + 0xF648,0xF5CD,0xF5EA,0xF609,0xF4E0,0xF320,0xF1BF,0xF213, + 0xF40A,0xF48F,0xF2D1,0xF0DD,0xF054,0xF1A0,0xF360,0xF3D5, + 0xF359,0xF321,0xF3F6,0xF4C8,0xF555,0xF6A5,0xF809,0xF914, + 0xF9D7,0xFA1E,0xFA60,0xFA64,0xF7E1,0xF312,0xED59,0xE79D, + 0xDFCC,0xD3D4,0xC548,0xBFA1,0xBFE3,0xBF01,0xC702,0xCFA7, + 0xD19A,0xD0CF,0xD1EC,0xD717,0xDE42,0xE225,0xE087,0xDAEC, + 0xD5E2,0xD575,0xD96B,0xE112,0xEA40,0xF57F,0x00B9,0x0A80, + 0x116F,0x174A,0x1D75,0x23AB,0x298B,0x2E47,0x2F31,0x2BE6, + 0x28C3,0x2B38,0x3381,0x3D56,0x3FB8,0x3FB0,0x3FCA,0x3FE5, + 0x3FD9,0x3FE3,0x3FD6,0x3FE5,0x3FDC,0x3FE0,0x4004,0x3FE7, + 0x4053,0x3FCF,0x3D65,0x3CCD,0x3CE8,0x3C4E,0x38A4,0x3267, + 0x2C39,0x273A,0x231A,0x1CDE,0x1411,0x09CD,0x01EB,0xFD54, + 0xFB1F,0xF8CE,0xF66F,0xF477,0xF211,0xEF2F,0xEB32,0xE5FB, + 0xE1F7,0xDEFD,0xDB8B,0xD78E,0xD280,0xCEE6,0xCD23,0xCDBC, + 0xD083,0xD40E,0xD76F,0xD975,0xD9E4,0xDA6A,0xDC02,0xDE5D, + 0xDFBD,0xE01E,0xE059,0xE15E,0xE3DE,0xE750,0xEBB6,0xF148, + 0xF723,0xFC81,0x0146,0x0478,0x06A2,0x07E6,0x0AA4,0x0E3E, + 0x10FE,0x118F,0x10A1,0x10BF,0x1393,0x1826,0x1C6C,0x1EDF, + 0x2005,0x20BF,0x20C0,0x209A,0x2100,0x2086,0x1E99,0x1B6D, + 0x19CB,0x182B,0x1605,0x1371,0x1263,0x11A9,0x1222,0x1417, + 0x0FBD,0x0A3A,0x0657,0x0436,0x0377,0x0199,0xFD10,0xF7C2, + 0xF384,0xF1EE,0xF110,0xEFA9,0xEE9C,0xEE18,0xEC87,0xEA72, + 0xE865,0xE7E5,0xE738,0xE494,0xE261,0xE14D,0xE17B,0xE189, + 0xE0E9,0xDFCD,0xE14E,0xE4B4,0xE7B5,0xE933,0xE91A,0xE904, + 0xE9E3,0xEBE2,0xEE34,0xEFCC,0xF013,0xEFEE,0xF11E,0xF36B, + 0xF736,0xFAB3,0xFD7B,0xFEDA,0x0067,0x02D7,0x0561,0x06C8, + 0x0714,0x07CC,0x091F,0x0993,0x0963,0x0A38,0x0C00,0x0D65, + 0x0E10,0x0EC0,0x101C,0x13A1,0x140E,0x11CD,0x108C,0x1033, + 0x0F73,0x0DE2,0x0C89,0x0B5E,0x0A4A,0x0841,0x06E3,0x06EB, + 0x06CE,0x0670,0x0524,0x0374,0x015A,0xFEC0,0xFC33,0xFAD9, + 0xFB48,0xFA45,0xF7AA,0xF585,0xF3BD,0xF203,0xF25A,0xF36C, + 0xF379,0xF236,0xF0DD,0xEFF6,0xEFB2,0xEF6A,0xEF29,0xEEEE, + 0xEF20,0xEF04,0xEEA8,0xEF54,0xF0A5,0xF22F,0xF344,0xF3F4, + 0xF413,0xF4A9,0xF6EF,0xF7D8,0xF7A1,0xF823,0xF9A8,0xF95C, + 0xF601,0xF145,0xEB67,0xE42A,0xDA21,0xCE3A,0xC232,0xBE12, + 0xBE25,0xBF8F,0xC903,0xCF62,0xD0C1,0xD03C,0xD1DF,0xD6B4, + 0xDC8A,0xE03A,0xDE9F,0xD8F0,0xD3A2,0xD401,0xD9FD,0xE22C, + 0xEAEA,0xF4D1,0xFFB4,0x09C5,0x1137,0x1717,0x1CC1,0x2295, + 0x271E,0x2990,0x2946,0x287C,0x285C,0x2ADE,0x31BC,0x3A7D, + 0x3E71,0x3E44,0x3E5F,0x3EA1,0x3EAA,0x3E7D,0x3E85,0x3E96, + 0x3E94,0x3E74,0x3E76,0x3DA9,0x39A8,0x3786,0x3784,0x3884, + 0x390F,0x3780,0x331C,0x2DCA,0x2879,0x23FB,0x1EF9,0x17B2, + 0x0E0A,0x04DC,0xFE79,0xFA51,0xF83B,0xF7CB,0xF318,0xF0D6, + 0xEEF6,0xEBD4,0xE75F,0xE2C9,0xDF46,0xDCCA,0xD95A,0xD471, + 0xCF8E,0xCBC8,0xCBA2,0xCE72,0xD2EC,0xD619,0xD6AC,0xD5E4, + 0xD76F,0xDB05,0xDDD6,0xDF25,0xDEE9,0xDEC0,0xE044,0xE24D, + 0xE450,0xE7B7,0xEBF5,0xF1EC,0xF822,0xFD3D,0x00CE,0x034A, + 0x04D7,0x0703,0x0B2A,0x0F18,0x1136,0x0FF1,0x0E2D,0x0F86, + 0x14BF,0x1A86,0x1CB8,0x1CD0,0x1D54,0x1EEC,0x202E,0x20B7, + 0x1FEE,0x1E19,0x1C26,0x1A50,0x194E,0x1876,0x15BF,0x129B, + 0x10F7,0x11EE,0x12AA,0x107F,0x0B9E,0x065F,0x047C,0x036A, + 0x0138,0xFDBF,0xF97C,0xF5E4,0xF370,0xF299,0xF116,0xEE76, + 0xEB84,0xEA5E,0xEB31,0xEBBC,0xEA3A,0xE6B5,0xE483,0xE395, + 0xE3AF,0xE3FF,0xE406,0xE30E,0xE1F4,0xE2A3,0xE4CB,0xE74B, + 0xEA1F,0xEAA5,0xEA3A,0xEB11,0xECFF,0xEF86,0xF11E,0xF24C, + 0xF356,0xF50C,0xF65D,0xF7C8,0xF9F1,0xFC77,0xFFD9,0x024B, + 0x0516,0x068F,0x068E,0x0756,0x08E2,0x0B64,0x0CDE,0x0DCA, + 0x0D76,0x0D2F,0x0E60,0x0FD5,0x107B,0x10F0,0x1218,0x134F, + 0x1327,0x12B7,0x1120,0x0F2C,0x0E18,0x0DD1,0x0D42,0x0C63, + 0x0B1A,0x0943,0x0733,0x0655,0x0697,0x063F,0x046D,0x01BF, + 0xFFBA,0xFED3,0xFE6E,0xFD29,0xFAB0,0xF88E,0xF740,0xF6EB, + 0xF6C9,0xF59C,0xF3B9,0xF2C3,0xF316,0xF41D,0xF4A0,0xF32B, + 0xF101,0xF002,0xF061,0xF203,0xF312,0xF293,0xF0B2,0xF025, + 0xF25B,0xF59E,0xF6B0,0xF595,0xF509,0xF67E,0xF929,0xFAA0, + 0xFA18,0xF9C1,0xF9C5,0xF939,0xF6AF,0xF22E,0xEAC3,0xE276, + 0xD8F9,0xCCF7,0xC200,0xC02A,0xC048,0xC243,0xCD9B,0xD446, + 0xD422,0xD3CA,0xD5A1,0xDA2E,0xDFB9,0xE264,0xDFF7,0xD9F4, + 0xD578,0xD61D,0xDBDE,0xE533,0xEF67,0xF9BB,0x03CE,0x0C8F, + 0x13CE,0x199C,0x1F71,0x253B,0x2A13,0x2C7E,0x2B9C,0x29D5, + 0x2A06,0x2D81,0x3541,0x3D90,0x3F5C,0x3F6C,0x3F67,0x3F3B, + 0x3F47,0x3F51,0x3F46,0x3F42,0x3F40,0x3F4B,0x3F37,0x3DED, + 0x3D56,0x3C98,0x3B80,0x3A95,0x39A3,0x37D4,0x33AA,0x2E33, + 0x28CD,0x2396,0x1D09,0x15A5,0x0D15,0x0404,0xFCC0,0xF89B, + 0xF73C,0xF67C,0xF486,0xF2A7,0xEE9C,0xEBF2,0xE94E,0xE4FC, + 0xE05A,0xDB94,0xD714,0xD35A,0xD0A5,0xCF34,0xCE81,0xCEE8, + 0xD0F7,0xD446,0xD6FB,0xD86D,0xD967,0xDA32,0xDAFE,0xDD70, + 0xDF6A,0xDFD6,0xE037,0xE1A3,0xE3F3,0xE7FD,0xECF4,0xF288, + 0xF76D,0xFC33,0x0008,0x02DA,0x0522,0x0770,0x09F7,0x0C20, + 0x0DA9,0x0EA5,0x0F3D,0x10A9,0x12F1,0x166F,0x1AB6,0x1D1C, + 0x1D79,0x1E38,0x1E75,0x1E48,0x1EA7,0x1E0E,0x1B94,0x188A, + 0x162E,0x14A0,0x1320,0x1175,0x1017,0x0F81,0x0E30,0x0BA4, + 0x08E8,0x062E,0x039D,0x00EC,0xFDBB,0xF9D5,0xF616,0xF38A, + 0xF109,0xEE3D,0xEC51,0xEBA1,0xEB1F,0xEA16,0xE837,0xE63F, + 0xE4CC,0xE3EA,0xE34D,0xE23A,0xE032,0xDEB5,0xDD99,0xDE4E, + 0xDFEA,0xE167,0xE228,0xE260,0xE2FB,0xE4D6,0xE771,0xE8DE, + 0xE90A,0xE986,0xEAC0,0xED22,0xEF20,0xF03E,0xF161,0xF3BB, + 0xF711,0xFA01,0xFC22,0xFDEB,0x000E,0x01E9,0x0455,0x05C8, + 0x06BB,0x072D,0x07EB,0x08B8,0x09DC,0x0B2D,0x0C5C,0x0CBE, + 0x0D40,0x0E06,0x0E9A,0x0E0C,0x0F0F,0x0D7B,0x0B66,0x0C74, + 0x0BA4,0x0ABE,0x0934,0x0792,0x066C,0x065D,0x05D6,0x0552, + 0x0403,0x0256,0x016E,0x0002,0xFEAF,0xFD99,0xFC9F,0xFAA8, + 0xF8B5,0xF6AE,0xF594,0xF573,0xF551,0xF4D3,0xF3EF,0xF25A, + 0xF1B0,0xF1F0,0xF176,0xF1A6,0xF250,0xF1F9,0xF0FE,0xEF79, + 0xEF9C,0xF200,0xF429,0xF4C5,0xF392,0xF2A4,0xF3CD,0xF5AE, + 0xF79B,0xF8FF,0xF9DE,0xFA2B,0xFA4A,0xFA42,0xF941,0xF696, + 0xF1D1,0xEC9D,0xE690,0xDD99,0xD215,0xC7FF,0xC51C,0xCAE3, + 0xD3DC,0xD9F9,0xDBB7,0xDB13,0xDA9D,0xDDDF,0xE489,0xE8AD, + 0xE761,0xE1E4,0xDDDD,0xDDBE,0xE149,0xE74B,0xEDDB,0xF4F1, + 0xFDA6,0x0701,0x0F62,0x1597,0x19FE,0x1E73,0x23A6,0x26E8, + 0x2786,0x2645,0x24EB,0x2638,0x2B75,0x32E8,0x3A09,0x3EBE, + 0x3FBA,0x3FAE,0x3FC1,0x3FD4,0x3F91,0x3FB9,0x3FD9,0x3F6E, + 0x3B9A,0x381F,0x350B,0x3304,0x3234,0x3285,0x330F,0x3238, + 0x30A1,0x2B75,0x2560,0x217D,0x1E25,0x1866,0x1055,0x07A3, + 0x007C,0xFD17,0xFC3F,0xFB75,0xF89F,0xF4AC,0xF2C8,0xF23A, + 0xF12C,0xEEDD,0xEA52,0xE4ED,0xE042,0xDDA7,0xDC4A,0xDAA8, + 0xD7BF,0xD610,0xD7C1,0xDBFB,0xDFB7,0xE124,0xE124,0xE13A, + 0xE384,0xE660,0xE798,0xE70B,0xE602,0xE6BA,0xE9A7,0xEDEC, + 0xF23A,0xF5F4,0xF8C3,0xFC26,0x0065,0x0513,0x08DB,0x0A04, + 0x0A38,0x0B13,0x0D12,0x0ECA,0x0F3B,0x0F38,0x1044,0x135D, + 0x1752,0x19AF,0x1946,0x18D2,0x19C7,0x1BEC,0x1CD9,0x1B79, + 0x1855,0x14D0,0x12E0,0x12F8,0x134B,0x11CC,0x0E99,0x0CE3, + 0x0C3B,0x0D53,0x0D07,0x0B66,0x0598,0x0082,0x0079,0xFFB0, + 0xFE05,0xF9F7,0xF4AE,0xF101,0xF10F,0xF25A,0xF209,0xEF99, + 0xED06,0xEC93,0xECDC,0xEC15,0xE9CD,0xE727,0xE679,0xE6DD, + 0xE758,0xE751,0xE61E,0xE49D,0xE4D7,0xE75D,0xEB5E,0xEE89, + 0xEE1F,0xEBF6,0xEB3B,0xED8E,0xF1EA,0xF51F,0xF4AF,0xF2DF, + 0xF2D4,0xF5DC,0xF9B1,0xFCBD,0xFE21,0xFEE0,0xFFD4,0x0184, + 0x03AA,0x054A,0x0602,0x061E,0x064D,0x080C,0x09EB,0x0A15, + 0x08F8,0x08D6,0x0ADA,0x0D59,0x0D61,0x0BDB,0x0B17,0x0B39, + 0x0BA9,0x0B1E,0x0C6B,0x0C3E,0x0A40,0x091D,0x087B,0x07D0, + 0x067B,0x05D1,0x0521,0x0482,0x0368,0x01D6,0x007E,0xFFC0, + 0xFE40,0xFBF5,0xFA4B,0xF9D5,0xF929,0xF7D9,0xF6A0,0xF63C, + 0xF50C,0xF467,0xF512,0xF590,0xF496,0xF367,0xF1CE,0xF108, + 0xF1AC,0xF273,0xF2E9,0xF288,0xF208,0xF284,0xF3D1,0xF501, + 0xF577,0xF542,0xF68E,0xF863,0xF8BD,0xF8E1,0xF9AE,0xF96C, + 0xF9AC,0xFB37,0xFB16,0xFAA0,0xF956,0xF822,0xF60D,0xF2DD, + 0xEE78,0xEA75,0xE958,0xEC0F,0xF016,0xF30A,0xF2FA,0xF1B3, + 0xF1AD,0xF444,0xF7BB,0xF860,0xF6D5,0xF4F8,0xF3E8,0xF45E, + 0xF590,0xF714,0xF8C2,0xFB89,0xFF4A,0x028E,0x053B,0x0738, + 0x087D,0x093E,0x0A61,0x0BC7,0x0C50,0x0B8E,0x09CF,0x0986, + 0x0B83,0x0ED9,0x104F,0x103A,0x1113,0x135E,0x15AC,0x16A1, + 0x149A,0x124D,0x111F,0x10C0,0x103A,0x0F08,0x0D7C,0x0C27, + 0x0BB0,0x0BB7,0x0B94,0x0C1D,0x0BB0,0x09B4,0x07DB,0x0664, + 0x0527,0x0309,0xFFC7,0xFC81,0xFAF6,0xFAC6,0xF9C6,0xF797, + 0xF710,0xF841,0xF86B,0xF7B6,0xF747,0xF3AD,0xF40B,0xF509, + 0xF43F,0xF276,0xF106,0xEF1A,0xEF0C,0xF0AD,0xF250,0xF386, + 0xF39D,0xF3B3,0xF49D,0xF5E7,0xF666,0xF6BD,0xF6BB,0xF727, + 0xF7F8,0xF8BF,0xF955,0xF962,0xF95C,0xFA6C,0xFE18,0x013E, + 0x02E4,0x022E,0x0124,0x01B4,0x042F,0x05F7,0x05A3,0x042E, + 0x0325,0x03C8,0x0578,0x0745,0x0884,0x081E,0x0774,0x07E5, + 0x0973,0x0B22,0x0AE7,0x08B9,0x06E8,0x0657,0x06D2,0x0666, + 0x0524,0x0417,0x0372,0x02E5,0x02AC,0x01BD,0x006A,0xFF22, + 0xFDF8,0xFD1E,0xFBC5,0xF930,0xF4F6,0xF416,0xF4AE,0xF679, + 0xF793,0xF660,0xF528,0xF4AD,0xF5C7,0xF6CE,0xF702,0xF66E, + 0xF553,0xF529,0xF587,0xF55D,0xF520,0xF4CD,0xF38F,0xF224, + 0xF233,0xF2A4,0xF238,0xF13B,0xF0AA,0xF07E,0xEFCD,0xEF8D, + 0xEECA,0xEDE7,0xEDC7,0xED89,0xED11,0xEC99,0xEC42,0xEBA0, + 0xEB82,0xEB73,0xEB59,0xEAF4,0xEA65,0xE9BF,0xE99E,0xEA90, + 0xEA93,0xE949,0xE8BC,0xE87D,0xE8A3,0xE909,0xE8D3,0xE853, + 0xE850,0xE819,0xE8C2,0xE8FD,0xE937,0xE954,0xE95A,0xE8CB, + 0xE8D8,0xE90D,0xE9A4,0xE940,0xE943,0xE95F,0xE97B,0xEA0B, + 0xEA37,0xEA3E,0xEA58,0xEA7C,0xEA7D,0xEB26,0xEBA5,0xEBB6, + 0xEC41,0xECF2,0xEDAF,0xEDD0,0xEDC4,0xEDF3,0xEE92,0xEF61, + 0xF018,0xF08E,0xF08A,0xF054,0xF0B6,0xF178,0xF225,0xF291, + 0xF29F,0xF2C3,0xF32E,0xF3C1,0xF405,0xF4E4,0xF552,0xF567, + 0xF5AB,0xF5FC,0xF67C,0xF6C5,0xF744,0xF788,0xF825,0xF8EE, + 0xF918,0xF93C,0xF98E,0xF9E7,0xFA61,0xFA03,0xFA65,0xFACF, + 0xFB29,0xFB1F,0xFB9B,0xFCF1,0xFB59,0xFCA1,0xFD8D,0xFCBB, + 0xFDA6,0xFE2D,0xFE3F,0xFE79,0xFEEC,0xFF47,0xFFE5,0x003F, + 0x007B,0x00EF,0x0138,0x01E6,0x0235,0x026D,0x026D,0x02B5, + 0x0344,0x03D1,0x044A,0x0475,0x0483,0x04E5,0x0507,0x059A, + 0x05A8,0x05A8,0x05CE,0x064D,0x0670,0x06D1,0x06F8,0x06D3, + 0x0717,0x078A,0x07F8,0x0819,0x0865,0x08EB,0x08C5,0x08B4, + 0x095E,0x09E9,0x0A23,0x09DD,0x09E2,0x09FC,0x09F7,0x0A18, + 0x0A7E,0x0AA5,0x0A96,0x0A72,0x0A9A,0x0AC7,0x0B66,0x0BC8, + 0x0C27,0x0D14,0x0F20,0x0E4E,0x0E40,0x0E57,0x0E1B,0x0E1F, + 0x0E62,0x0EDC,0x0F28,0x0E83,0x0E63,0x0EA7,0x0ED7,0x0E8F, + 0x0EC9,0x0EC2,0x0EA2,0x0E78,0x0E40,0x0E1E,0x0EC5,0x0EFE, + 0x0DFC,0x0D84,0x0E0A,0x0DFE,0x0DDD,0x0E1F,0x0DA2,0x0DD8, + 0x0DFC,0x0DDB,0x0DD1,0x0D8F,0x0D63,0x0DD6,0x0D86,0x0D64, + 0x0D68,0x0D57,0x0D02,0x0D0A,0x0D0D,0x0DA1,0x0D45,0x0C08, + 0x0C81,0x0D61,0x0D29,0x0CFE,0x0CC8,0x0C99,0x0C86,0x0CCF, + 0x0D38,0x0CB0,0x0BA4,0x0B08,0x0AF8,0x0A6F,0x0A07,0x0A7B, + 0x0A80,0x0A3B,0x0A0A,0x0A6A,0x0A79,0x0A9A,0x0A5F,0x0A0F, + 0x09F2,0x0A46,0x0A3C,0x0A3C,0x0A2A,0x09FA,0x0A33,0x09ED, + 0x0A00,0x09DD,0x09AD,0x095C,0x0905,0x092D,0x0933,0x08FD, + 0x0923,0x0942,0x08E6,0x0876,0x08C8,0x090F,0x08D2,0x0913, + 0x094A,0x094E,0x090D,0x08F2,0x08E0,0x0863,0x0823,0x0831, + 0x0838,0x081C,0x07F4,0x0819,0x079D,0x0797,0x0779,0x07AF, + 0x0778,0x074F,0x070B,0x0700,0x070D,0x0773,0x0717,0x073E, + 0x0746,0x0777,0x0709,0x08C9,0x082E,0x06E0,0x07D9,0x075B, + 0x0754,0x0748,0x077B,0x06E7,0x0778,0x0753,0x0743,0x06FD, + 0x06CA,0x073A,0x074D,0x070F,0x06B8,0x0767,0x06E6,0x06AD, + 0x06E4,0x0746,0x0732,0x0715,0x066A,0x061C,0x065E,0x06A3, + 0x068C,0x0601,0x05BE,0x061B,0x064D,0x063A,0x067E,0x0675, + 0x062D,0x05F0,0x0601,0x0688,0x0688,0x061F,0x05B4,0x058A, + 0x0544,0x0561,0x05A2,0x05B7,0x0540,0x04F5,0x0555,0x055A, + 0x0546,0x0574,0x0532,0x04D3,0x0466,0x040F,0x0443,0x04BB, + 0x0485,0x04E2,0x0436,0x02CF,0x0178,0x01E8,0x0209,0x022B, + 0x0212,0x02A5,0x02D6,0x0342,0x0333,0x02C7,0x02F9,0x02DF, + 0x02FA,0x02FF,0x02EF,0x0330,0x0342,0x036E,0x028B,0x0250, + 0x02F6,0x039F,0x0378,0x0373,0x0322,0x02FB,0x027A,0x01FC, + 0x0294,0x02E2,0x02CE,0x02F0,0x02D9,0x027A,0x0243,0x021E, + 0x0268,0x0279,0x026F,0x0235,0x0228,0x0203,0x026C,0x038E, + 0x02BA,0x0207,0x021C,0x01E1,0x020E,0x0248,0x01F3,0x0221, + 0x0206,0x0203,0x02A3,0x0345,0x0350,0x0383,0x0349,0x02B3, + 0x02AD,0x02E4,0x02ED,0x02CE,0x026A,0x0244,0x0209,0x0271, + 0x0244,0x021F,0x0256,0x0284,0x0295,0x022E,0x0168,0x00FB, + 0x0117,0x00F0,0x0108,0x0142,0x0111,0x00C0,0xFFDE,0xFFE9, + 0xFFB6,0xFF90,0xFF9A,0xFF8D,0xFFDA,0xFFE3,0xFF38,0xFEE6, + 0xFF40,0xFF79,0xFF81,0xFF66,0xFF98,0x0076,0x0108,0x01CE, + 0x02AB,0x0324,0x0375,0x0429,0x0569,0x07C3,0x0A03,0x0B24, + 0x0BC9,0x0C08,0x0C5F,0x0CF1,0x0D33,0x0CE9,0x0C6F,0x0C63, + 0x0C35,0x0C7E,0x0CA8,0x0D0B,0x0C92,0x0C69,0x0CB0,0x0D16, + 0x0DED,0x0DF0,0x0DC8,0x0E5B,0x0F8B,0x1128,0x116D,0x10CC, + 0x1124,0x1190,0x1288,0x1388,0x13EA,0x13F0,0x1389,0x145C, + 0x1665,0x1684,0x170C,0x1701,0x168E,0x1600,0x1588,0x1491, + 0x1350,0x12C3,0x12D9,0x134F,0x1167,0x0C65,0x06E7,0x0371, + 0x0347,0x04A5,0x0535,0x03F4,0x02FD,0x02C0,0x03BF,0x0743, + 0x0C77,0x1125,0x1526,0x1933,0x1CFA,0x1FEB,0x2291,0x250D, + 0x2892,0x2BBE,0x2CD1,0x2C68,0x2A96,0x27A6,0x2537,0x2392, + 0x2191,0x1FEA,0x1D3A,0x197A,0x14EC,0x1066,0x0EE0,0x0F2F, + 0x0EA9,0x0D1E,0x0AF2,0x08DD,0x07AD,0x06CF,0x0547,0x048D, + 0x03AF,0x0214,0x002B,0xFDA2,0xFBDB,0xFAFE,0xFA36,0xF9D2, + 0xF931,0xF8D6,0xF960,0xF9DA,0xFA68,0xFB1B,0xFCC6,0x004E, + 0x037F,0x0518,0x05D7,0x06EA,0x0902,0x0B76,0x0D40,0x0E37, + 0x0E2F,0x0DC8,0x0C59,0x0AB7,0x08B7,0x074D,0x06E2,0x0523, + 0x021E,0xFF5C,0xFD26,0xFB5B,0xF9F8,0xF899,0xF6AE,0xF4F2, + 0xF3C3,0xF341,0xF327,0xF275,0xF110,0xEF84,0xEFB5,0xF0DF, + 0xF152,0xF053,0xEE4A,0xED40,0xED6D,0xEE87,0xEFAA,0xF0CB, + 0xF068,0xF01D,0xF010,0xF171,0xF39C,0xF60F,0xF73C,0xF798, + 0xF7D4,0xFB50,0xFBDE,0xFAC7,0xFBD6,0xFC62,0xFE04,0xFE43, + 0xFCC3,0xFB01,0xFA2F,0xF908,0xF800,0xF706,0xF71A,0xF5DA, + 0xF2F5,0xF0B7,0xEF5C,0xEF3D,0xEEDE,0xEE01,0xECE1,0xEC5E, + 0xEB9B,0xEAD1,0xEA69,0xEADD,0xEB24,0xEAEA,0xEAF8,0xEB57, + 0xEC00,0xEC28,0xEB87,0xEB1F,0xEC59,0xEE33,0xEF0F,0xEF92, + 0xEF66,0xEF55,0xEFA1,0xF128,0xF308,0xF491,0xF539,0xF4EB, + 0xF468,0xF49F,0xF55F,0xF68B,0xF71C,0xF688,0xF57A,0xF44E, + 0xF377,0xF38A,0xF340,0xF1F8,0xF0D6,0xEFF9,0xEF18,0xEDC2, + 0xEC9C,0xEAA3,0xE991,0xE9B7,0xE98D,0xE946,0xE963,0xE9B2, + 0xE996,0xE94E,0xE9A4,0xEAE1,0xEBFF,0xEBE9,0xEB7F,0xEC11, + 0xED18,0xEE2C,0xEF3E,0xEFEF,0xEF36,0xEF88,0xF17F,0xF28F, + 0xF289,0xF30A,0xF3C3,0xF3D3,0xF446,0xF55A,0xF5DC,0xF62A, + 0xF609,0xF560,0xF584,0xF620,0xF5CE,0xF4F2,0xF4FF,0xF5BA, + 0xF5AE,0xF403,0xF2F1,0xF2D6,0xF310,0xF3FD,0xF25F,0xF147, + 0xF158,0xF093,0xF011,0xF08E,0xF1C2,0xF26E,0xF215,0xF1A7, + 0xF1A8,0xF2CC,0xF427,0xF5C1,0xF5FF,0xF538,0xF541,0xF5DA, + 0xF619,0xF643,0xF4AF,0xF0DB,0xED0B,0xEBA8,0xEACD,0xE73B, + 0xDEA6,0xD150,0xC400,0xC073,0xC097,0xC069,0xC068,0xC039, + 0xC062,0xC09B,0xC1F8,0xD01C,0xE271,0xF1CF,0xFEB1,0x0C12, + 0x1A43,0x273D,0x326E,0x3C93,0x401E,0x3FBC,0x4011,0x4001, + 0x3FB1,0x400A,0x3D79,0x364B,0x311D,0x2B56,0x22F5,0x183A, + 0x0D5D,0x05F7,0x0222,0x0000,0xFDE7,0xFAF6,0xF6E8,0xF311, + 0xEFB4,0xECFC,0xEBA0,0xEA52,0xE926,0xE5F1,0xE13A,0xDC5F, + 0xD8DE,0xD4A6,0xD2D2,0xD578,0xD63F,0xD737,0xD8B0,0xDA75, + 0xDF45,0xE6DA,0xEFA3,0xF947,0x0252,0x0A70,0x11BA,0x17B3, + 0x1DD5,0x24D4,0x2B5B,0x2F80,0x2FB8,0x2D3D,0x2A4C,0x2717, + 0x238C,0x1F96,0x19CF,0x134B,0x0C53,0x05C9,0x0030,0xFACD, + 0xF605,0xF1FA,0xEEF2,0xEC93,0xEA99,0xE878,0xE688,0xE51E, + 0xE448,0xE40B,0xE451,0xE457,0xE341,0xE182,0xE060,0xE074, + 0xE1F5,0xE38F,0xE587,0xE7DC,0xE93E,0xEAFB,0xEE7C,0xF3F9, + 0xF9F5,0xFE91,0x0370,0x0830,0x0CC5,0x10C6,0x147E,0x19D8, + 0x1CDD,0x1DCF,0x1DFB,0x1CF5,0x1AAE,0x17CA,0x1478,0x112C, + 0x0DF8,0x0ACC,0x066E,0x012A,0xFB7E,0xF73D,0xF4D6,0xF33D, + 0xF12B,0xEE90,0xEB79,0xE9FA,0xEABF,0xEA51,0xE97E,0xE9EB, + 0xEA1E,0xEA11,0xEB51,0xECA2,0xED0C,0xED4D,0xEDDA,0xEFF7, + 0xF2BF,0xF506,0xF723,0xF87E,0xFA05,0xFC91,0xFF71,0x0379, + 0x0708,0x0985,0x0AFE,0x0C59,0x0C7D,0x0DD0,0x106C,0x11E8, + 0x122B,0x1109,0x0ED5,0x0C4D,0x0A16,0x0806,0x060C,0x039E, + 0x009C,0xFDEB,0xFA6F,0xF603,0xF2D0,0xF1D2,0xF1A4,0xF185, + 0xEFF9,0xEDCC,0xECBC,0xECE6,0xEE6C,0xEF96,0xF040,0xF068, + 0xF0A7,0xF1F1,0xF421,0xF5D6,0xF6A1,0xF746,0xF890,0xFAA0, + 0xFCF3,0xFE9D,0xFFD8,0x00F3,0x01E5,0x0449,0x0745,0x091A, + 0x0891,0x080A,0x08D0,0x0AFE,0x0C91,0x0C00,0x0991,0x0762, + 0x06FE,0x06A7,0x05FF,0x0486,0x020B,0xFE9F,0xFC43,0xFA8F, + 0xFA0C,0xF8F8,0xF6BF,0xF50B,0xF488,0xF479,0xF442,0xF3A9, + 0xF31D,0xF3FD,0xF55D,0xF6B6,0xF75F,0xF7B3,0xF864,0xF881, + 0xFA22,0xFD8A,0xFD6B,0xFF01,0xFE2F,0xF9F5,0xF496,0xF079, + 0xEF2A,0xEFA2,0xEBF6,0xDCC8,0xC70E,0xBF14,0xBFAF,0xBF4B, + 0xBF5A,0xBF34,0xBEF9,0xBF60,0xBFAC,0xC0FD,0xD2CC,0xEA5B, + 0xFE56,0x10AD,0x220A,0x3471,0x3F0C,0x3EF3,0x3F35,0x3F62, + 0x3F4A,0x3F6D,0x3F65,0x3F68,0x3F5D,0x3F63,0x3F3C,0x3F0F, + 0x3E54,0x3155,0x1EF6,0x11A8,0x0A68,0x07D5,0x06F9,0x044B, + 0xFE1C,0xF6EA,0xF226,0xF10D,0xF0C0,0xEE76,0xEAE4,0xE72F, + 0xE3CA,0xDF37,0xD8DA,0xD278,0xCE42,0xCD45,0xCF67,0xD2C8, + 0xD437,0xD320,0xD5BC,0xDCEB,0xE8CA,0xF79B,0x051D,0x0F53, + 0x16E5,0x1F0D,0x2976,0x34C4,0x3D7F,0x3EFF,0x3EC8,0x3EFC, + 0x3F36,0x3F19,0x3A5B,0x3268,0x2A7F,0x243C,0x1E4A,0x1697, + 0x0CA3,0x01F8,0xFA52,0xF652,0xF501,0xF356,0xEF26,0xE9AE, + 0xE4FB,0xE38D,0xE4EB,0xE6D0,0xE6B9,0xE4A7,0xE1E2,0xE0BA, + 0xE0DC,0xE0C8,0xE014,0xE028,0xE34D,0xE644,0xE812,0xEAA6, + 0xEDAA,0xF1EA,0xF7EA,0xFFEB,0x0829,0x0F7A,0x14FD,0x19E0, + 0x1EAB,0x23A8,0x28AA,0x2C89,0x2D70,0x2C65,0x29D5,0x2618, + 0x226A,0x1E70,0x1916,0x1337,0x0D59,0x087E,0x0390,0xFD14, + 0xF683,0xF194,0xEE5D,0xEDD1,0xED71,0xEBA5,0xE892,0xE574, + 0xE536,0xE7B0,0xE9CA,0xEA2F,0xE962,0xE8F6,0xEA2A,0xEC5B, + 0xEDBE,0xEF13,0xF0EE,0xF374,0xF596,0xF78A,0xFB60,0xFF38, + 0x021D,0x04A4,0x0826,0x0CCE,0x118D,0x1484,0x15B0,0x16DA, + 0x18A3,0x1AE3,0x1B6B,0x1A37,0x1877,0x15D5,0x121D,0x0F17, + 0x0C8A,0x0997,0x050B,0x009F,0xFCD4,0xF90A,0xF655,0xF438, + 0xF2B8,0xEE99,0xEE3E,0xEDCA,0xEC80,0xECD2,0xED1D,0xEDA4, + 0xEEC4,0xEFB1,0xF06E,0xF1BC,0xF31E,0xF48E,0xF6AB,0xF829, + 0xF9B8,0xFBB6,0xFD94,0xFF60,0x0198,0x0443,0x0645,0x07CD, + 0x093F,0x0B7A,0x0DC3,0x0F27,0x1008,0x10D1,0x10D1,0x104A, + 0x0F92,0x0EA0,0x0D5F,0x0BCA,0x09DD,0x0714,0x0452,0x01FA, + 0xFF53,0xFCB9,0xFA5E,0xF8F8,0xF731,0xF4A4,0xF2B9,0xF1CE, + 0xF1E7,0xF213,0xF1E1,0xF1C5,0xF261,0xF386,0xF4C3,0xF54B, + 0xF5D3,0xF6B4,0xF84A,0xFA3B,0xFC3C,0xFDEC,0xFF55,0x010C, + 0xFFC6,0xFD72,0xF954,0xF582,0xF3DB,0xF1A9,0xEA6F,0xDABC, + 0xC6F8,0xBFD1,0xC033,0xBFC8,0xBFC2,0xBFAD,0xBFB2,0xC010, + 0xBFE3,0xC3FB,0xD979,0xF1A6,0x0500,0x14BB,0x23F6,0x358F, + 0x3F0F,0x3ED9,0x3F34,0x3F4B,0x3F1A,0x3F1F,0x3F02,0x3F05, + 0x3F01,0x3EF9,0x3EA2,0x3EEB,0x3B9F,0x2C76,0x1BA3,0x0E8E, + 0x0802,0x06DA,0x0736,0x03E9,0xFC0B,0xF538,0xF254,0xF1B5, + 0xF14C,0xEFB2,0xEC04,0xE796,0xE282,0xDCF9,0xD7AD,0xD213, + 0xCDEA,0xCC7D,0xCD64,0xCFDE,0xD2C9,0xD455,0xD695,0xDCA3, + 0xE7DF,0xF7BE,0x0517,0x0EB3,0x1682,0x1E86,0x2806,0x3234, + 0x3A82,0x3E07,0x3E23,0x3E56,0x3D5E,0x394A,0x33DD,0x2CF4, + 0x255F,0x1E07,0x1715,0x0FF2,0x0716,0xFD1C,0xF46F,0xF01E, + 0xEF72,0xEECC,0xEB10,0xE536,0xE07F,0xDEF6,0xE0A5,0xE227, + 0xE179,0xDF2E,0xDCE1,0xDBCB,0xDC04,0xDC76,0xDC70,0xDC95, + 0xDE2F,0xE0BD,0xE439,0xE763,0xEAE8,0xEF58,0xF5BA,0xFCE0, + 0x049A,0x0B4B,0x1124,0x157A,0x1A5F,0x1F89,0x235D,0x2419, + 0x26DF,0x267E,0x2352,0x2102,0x1C59,0x180B,0x13C0,0x0F03, + 0x0917,0x03D5,0xFE11,0xF8C9,0xF3A9,0xEFCD,0xEDCB,0xEC2D, + 0xEA04,0xE781,0xE611,0xE5B5,0xE64A,0xE6C0,0xE745,0xE775, + 0xE869,0xE9CC,0xEAC2,0xEB00,0xEBDD,0xEDD1,0xEFBA,0xF2BF, + 0xF589,0xF83B,0xFAE8,0xFD3E,0x0047,0x046A,0x09FE,0x0E8E, + 0x10CB,0x1259,0x147E,0x1706,0x18EE,0x19EA,0x1A31,0x1946, + 0x1728,0x1437,0x119C,0x0F56,0x0BC7,0x06EB,0x02BE,0xFFC0, + 0xFD2F,0xF95E,0xF564,0xF25C,0xF03A,0xEEFD,0xEE79,0xED6E, + 0xEB72,0xE9D0,0xEA74,0xEB28,0xEC8B,0xEE0E,0xEF79,0xF0FC, + 0xF266,0xF3B4,0xF524,0xF638,0xF836,0xFA78,0xFCBC,0xFEC2, + 0x00CB,0x02EB,0x04F9,0x059C,0x07CC,0x0B0F,0x0D74,0x0E27, + 0x0E92,0x0F6C,0x104A,0x0FEF,0x0F98,0x0F78,0x0E4F,0x0C6A, + 0x09FC,0x0713,0x042D,0x021F,0x00B4,0xFF4C,0xFCD2,0xF93C, + 0xF63F,0xF4F4,0xF474,0xF425,0xF4B9,0xF375,0xF260,0xF1EE, + 0xF271,0xF3B1,0xF563,0xF68D,0xF7A2,0xF95B,0xFB6B,0xFD48, + 0xFDF0,0xFF1B,0x0242,0x044E,0x024B,0xFD27,0xF74A,0xF3FD, + 0xF449,0xF342,0xEA03,0xD666,0xC315,0xC0AB,0xC0F9,0xC074, + 0xC07C,0xC075,0xC077,0xC0F2,0xC068,0xCA1E,0xE07F,0xF437, + 0x0615,0x18A2,0x2BDC,0x3C21,0x4010,0x3FFE,0x4026,0x4028, + 0x4028,0x4017,0x4007,0x3FF5,0x3FDA,0x3FD3,0x3F7D,0x4004, + 0x399C,0x2904,0x19F4,0x0FDF,0x0B46,0x08F5,0x0600,0x0177, + 0xFCFC,0xF9CA,0xF6BA,0xF399,0xEFF5,0xED87,0xEB1A,0xE8FD, + 0xE5A9,0xDF85,0xD6E2,0xD089,0xCE05,0xCFD2,0xD3D4,0xD6C2, + 0xD5A5,0xD52E,0xDBF5,0xE581,0xF2D4,0x0021,0x0A53,0x1325, + 0x1C1B,0x2679,0x30F1,0x39A3,0x3EB4,0x3F70,0x3F8B,0x3F5C, + 0x3FA3,0x3D4E,0x3523,0x2D76,0x268B,0x2096,0x19B0,0x10DC, + 0x06BF,0xFDD0,0xF7BA,0xF467,0xF2E4,0xEFC0,0xEA2C,0xE5AE, + 0xE426,0xE41E,0xE4C2,0xE35E,0xE14B,0xE005,0xDFD4,0xDF4E, + 0xDEA7,0xDD77,0xDD81,0xDED2,0xE0EF,0xE3F0,0xE721,0xE9D5, + 0xEC92,0xF122,0xF835,0x00DF,0x08CF,0x0E36,0x1277,0x16BE, + 0x1C16,0x2209,0x2620,0x2753,0x2684,0x24D4,0x2592,0x243A, + 0x1FA3,0x1A01,0x13E1,0x0EF5,0x0A05,0x042B,0xFDD5,0xF7E1, + 0xF2FD,0xEF32,0xED5A,0xEC2A,0xEA75,0xE745,0xE419,0xE487, + 0xE65A,0xE74A,0xE746,0xE6C6,0xE66D,0xE70A,0xE8B6,0xEA86, + 0xEBBF,0xED55,0xEF30,0xF0E2,0xF3DD,0xF73C,0xFA45,0xFCE0, + 0xFFF4,0x04A1,0x0969,0x0CBB,0x0E08,0x1024,0x1384,0x1683, + 0x17DB,0x17B7,0x166C,0x1491,0x12D2,0x125C,0x0FC7,0x0C1F, + 0x081A,0x040C,0x006E,0xFCEE,0xF92F,0xF533,0xF176,0xEEA0, + 0xEDF0,0xED43,0xEAEC,0xE8BD,0xE7D1,0xE8D2,0xEA5B,0xEAD3, + 0xEB13,0xECAE,0xEE8E,0xEF6B,0xF05E,0xF236,0xF4F3,0xF6E3, + 0xF807,0xF9B3,0xFB7B,0xFD6F,0xFF25,0x0098,0x0313,0x0642, + 0x088D,0x09D1,0x0A33,0x0ABB,0x0BF7,0x0D47,0x0E86,0x0E72, + 0x0CDE,0x0B5B,0x09D1,0x084E,0x0702,0x04EC,0x02F1,0x0065, + 0xFD07,0xFA24,0xF883,0xF6C6,0xF527,0xF3BA,0xF28D,0xF1CA, + 0xF110,0xF101,0xF083,0xF020,0xF0A0,0xF248,0xF45F,0xF547, + 0xF55B,0xF591,0xF6B8,0xF878,0xFADF,0xFCC2,0xFC0A,0xF96B, + 0xF5F3,0xEEEC,0xED72,0xEE89,0xEBAD,0xE07F,0xCB41,0xBF18, + 0xBF9F,0xBF39,0xBF0E,0xBF1C,0xBF09,0xBF5D,0xBFE5,0xBFBE, + 0xCDB4,0xE6BF,0xFB28,0x0C14,0x1BEC,0x2E9F,0x3D26,0x3F27, + 0x3F3B,0x3F3E,0x3F5B,0x3F5B,0x3F61,0x3F48,0x3F60,0x3F57, + 0x3F59,0x3F13,0x3E7D,0x32FF,0x2232,0x12DF,0x097B,0x0753, + 0x0703,0x044A,0xFE13,0xF7AD,0xF3E7,0xF248,0xF038,0xED08, + 0xEAB0,0xE8CD,0xE63A,0xE126,0xDA80,0xD3BE,0xCF5E,0xCE33, + 0xD054,0xD437,0xD6EE,0xD6B4,0xD6BC,0xDBFC,0xE7A5,0xF5E4, + 0x01CE,0x0BC4,0x1456,0x1CA2,0x2620,0x30B9,0x39DF,0x3E6A, + 0x3EB4,0x3ED2,0x3EF9,0x3D27,0x37AB,0x30B2,0x28F2,0x2211, + 0x1C6F,0x1668,0x0C6D,0xFFEE,0xF6FB,0xF34A,0xF2A8,0xF14A, + 0xED5F,0xE7DE,0xE396,0xE1D8,0xE257,0xE390,0xE469,0xE3DD, + 0xE145,0xDEAF,0xDE5D,0xDFA4,0xE097,0xE039,0xE09B,0xE32F, + 0xE773,0xEB4C,0xED3D,0xF0B9,0xF662,0xFD5A,0x052D,0x0C5E, + 0x120E,0x1640,0x19F3,0x1E1D,0x23B1,0x28D2,0x2BD7,0x2AC2, + 0x274B,0x2471,0x2279,0x1F44,0x1A31,0x1410,0x0E99,0x0957, + 0x0361,0xFD24,0xF712,0xF2AE,0xF08F,0xEF94,0xED87,0xEA5A, + 0xE761,0xE540,0xE5D9,0xE765,0xE8F4,0xE9B0,0xE949,0xE95D, + 0xE9B8,0xEB54,0xED70,0xEF5E,0xF087,0xF274,0xF507,0xF782, + 0xFA4F,0xFD12,0x008A,0x0470,0x089E,0x0C1B,0x0EA9,0x1105, + 0x1340,0x15A4,0x175D,0x17B2,0x17EB,0x17CF,0x16E1,0x14A2, + 0x1109,0x0E34,0x0B82,0x0811,0x0406,0xFFF7,0xFC4B,0xF913, + 0xF618,0xF23D,0xF00B,0xEE80,0xED4F,0xEC9E,0xECA2,0xED43, + 0xEB1C,0xECA8,0xEE38,0xEE86,0xF110,0xF33F,0xF3BE,0xF3A8, + 0xF449,0xF627,0xF927,0xFB68,0xFD6F,0xFED0,0xFF7D,0x0076, + 0x02BF,0x066A,0x08B9,0x09C8,0x0A72,0x0B41,0x0D01,0x0EBC, + 0x0EAF,0x0DF0,0x0D63,0x0D47,0x0C6A,0x0AAE,0x0856,0x058A, + 0x02F4,0x00E2,0xFFE6,0xFDC9,0xFA42,0xF6D9,0xF4A5,0xF42A, + 0xF427,0xF29E,0xF0AB,0xEF88,0xEF95,0xF0AE,0xF1BA,0xF17A, + 0xF1A8,0xF348,0xF4E9,0xF659,0xF72B,0xF802,0xF9B2,0xFB2C, + 0xFD2F,0xFEC4,0xFEB8,0xFB48,0xF589,0xF219,0xF40C,0xF334, + 0xED1D,0xDDCC,0xC869,0xBFDF,0xC08C,0xC010,0xC00D,0xBFE9, + 0xBFE7,0xC032,0xC02C,0xC1AF,0xD3EB,0xEB23,0xFE6F,0x1000, + 0x20DE,0x332A,0x3ECC,0x3FA6,0x3F74,0x3F52,0x3F65,0x3F4F, + 0x3F4C,0x3F48,0x3F1D,0x3F1B,0x3EEB,0x3ED5,0x3D79,0x305C, + 0x1E72,0x0F87,0x07D5,0x075C,0x0747,0x03D5,0xFCF2,0xF67F, + 0xF313,0xF19F,0xEF8E,0xEBA5,0xEA78,0xE8F1,0xE4E0,0xDF21, + 0xD89C,0xD293,0xCE4E,0xCD07,0xCEB3,0xD1FC,0xD342,0xD35E, + 0xD58B,0xDC2F,0xE799,0xF563,0x0202,0x0C78,0x1619,0x1F6F, + 0x2866,0x3086,0x3882,0x3DBD,0x3E09,0x3E0B,0x3E31,0x3C50, + 0x35F9,0x2F6B,0x286E,0x21E4,0x1BA8,0x12F6,0x08E0,0xFFBE, + 0xF90C,0xF4CB,0xF173,0xEE9D,0xEBC3,0xE874,0xE579,0xE298, + 0xE1AD,0xE214,0xE241,0xE217,0xE033,0xDE67,0xDD0A,0xDC79, + 0xDCBA,0xDDAE,0xDFAC,0xE24F,0xE4A2,0xE672,0xE9BF,0xEF10, + 0xF5BA,0xFCC1,0x0319,0x0A16,0x0FC8,0x14F2,0x1977,0x1E10, + 0x231B,0x26D9,0x2769,0x25C1,0x234C,0x20B5,0x1CBC,0x1A5C, + 0x1568,0x0E53,0x09B7,0x0336,0xFDC5,0xF95A,0xF48E,0xEF75, + 0xEC27,0xEA69,0xE98F,0xE7B3,0xE585,0xE3A3,0xE39D,0xE529, + 0xE668,0xE6A3,0xE636,0xE727,0xE834,0xE9DF,0xEB44,0xEC71, + 0xEDAA,0xEF96,0xF27A,0xF5C3,0xF930,0xFBAE,0xFEE0,0x0262, + 0x06FF,0x0B2D,0x0E5B,0x10DC,0x12E6,0x150D,0x170F,0x1811, + 0x1823,0x17B5,0x1611,0x13B3,0x10AF,0x0DEB,0x0AEA,0x0775, + 0x03C6,0xFFCB,0xFC14,0xF921,0xF701,0xF43B,0xF10C,0xEEA3, + 0xED08,0xECEF,0xED8D,0xED99,0xECEE,0xEC6A,0xECFE,0xECCC, + 0xEE40,0xF03F,0xF13F,0xF27F,0xF3A4,0xF501,0xF71C,0xF977, + 0xFB0E,0xFD06,0xFF1C,0x01B1,0x03FB,0x0515,0x068A,0x0988, + 0x0CC6,0x0EBB,0x0DA6,0x0CCD,0x0E3A,0x0FED,0x0F99,0x0EC9, + 0x0DA7,0x0BD1,0x0967,0x06EE,0x051B,0x03E1,0x01A5,0xFE92, + 0xFB44,0xF941,0xF85A,0xF784,0xF5BE,0xF3B8,0xF28B,0xF2FD, + 0xF3A7,0xF39F,0xF3F2,0xF4FB,0xF4BC,0xF58C,0xF77B,0xF958, + 0xFA5C,0xFAC6,0xFB6F,0xFD40,0xFF7A,0x014C,0x00B4,0xFC9A, + 0xF784,0xF50F,0xF517,0xF35A,0xEA97,0xD8E4,0xC4D1,0xC08D, + 0xC11A,0xC0BA,0xC070,0xC059,0xC08A,0xC10A,0xC092,0xC58A, + 0xDA6C,0xEFEB,0x02B0,0x1484,0x26EF,0x3915,0x405F,0x3FE9, + 0x403C,0x4043,0x403D,0x401A,0x402C,0x401C,0x4021,0x4005, + 0x3FBB,0x403C,0x3BE6,0x2B72,0x1B9C,0x0F54,0x09BE,0x080C, + 0x0640,0x01A1,0xFBF8,0xF701,0xF3BD,0xF1B3,0xEF54,0xEC88, + 0xEA2C,0xE7BC,0xE4E2,0xDEF4,0xD76A,0xD019,0xCCD4,0xCE20, + 0xD249,0xD47A,0xD482,0xD4CA,0xD841,0xE15F,0xEF83,0xFC9E, + 0x0704,0x120F,0x19BD,0x2298,0x2C3A,0x357F,0x3CFD,0x3FA8, + 0x3F62,0x3FAB,0x3F34,0x3B43,0x356E,0x2E1F,0x2718,0x20BE, + 0x199C,0x1111,0x078F,0xFE44,0xF736,0xF272,0xEF60,0xEDC4, + 0xEB67,0xE7A3,0xE2C4,0xE037,0xE0FF,0xE249,0xE205,0xE0AF, + 0xDEE9,0xDDBD,0xDD06,0xDC0D,0xDBE3,0xDD3E,0xDF16,0xE144, + 0xE3F4,0xE736,0xEBBF,0xF077,0xF578,0xFC5E,0x0474,0x0B97, + 0x115D,0x15D2,0x1A35,0x1F35,0x22DE,0x254F,0x261F,0x2588, + 0x2392,0x1FC1,0x1B51,0x1778,0x12FC,0x0FD7,0x0A8D,0x041F, + 0xFE56,0xF899,0xF385,0xEFF2,0xEDC7,0xEBBE,0xE9D9,0xE7C3, + 0xE681,0xE670,0xE6BD,0xE6F3,0xE73A,0xE731,0xE7BF,0xE957, + 0xEA5E,0xEADF,0xEC70,0xED71,0xEED6,0xF19D,0xF495,0xF713, + 0xFA51,0xFD80,0x0026,0x035B,0x0714,0x0BDC,0x1023,0x1230, + 0x1375,0x14DC,0x16F1,0x185C,0x17D8,0x1693,0x1571,0x1316, + 0x0FE9,0x0C5B,0x07EF,0x0432,0x01F4,0xFE3F,0xFA2F,0xF6AF, + 0xF3B5,0xF102,0xEE9A,0xED36,0xEC6F,0xEB5A,0xE9E3,0xE99A, + 0xEA71,0xEAD2,0xEB98,0xEC60,0xED7C,0xEFA4,0xF17F,0xF242, + 0xF344,0xF4C1,0xF70F,0xF9BE,0xFBA9,0xFD26,0xFF80,0x0145, + 0x0369,0x0597,0x07ED,0x09B4,0x0A8A,0x0BA6,0x0D53,0x0E8D, + 0x0ED8,0x0D9D,0x0BF7,0x0B79,0x0B5A,0x09F6,0x0710,0x034F, + 0x0057,0xFECD,0xFD8D,0xFB37,0xF841,0xF53B,0xF2C3,0xF152, + 0xF146,0xF153,0xF0A7,0xEEE8,0xEE64,0xEF3B,0xF080,0xF18B, + 0xF1CE,0xF25B,0xF34E,0xF549,0xF6CF,0xF7FE,0xF852,0xF8E7, + 0xFAFB,0xFC8C,0xFB59,0xF882,0xF703,0xF7B9,0xF8C2,0xF759, + 0xEDB2,0xE4E2,0xDEFE,0xDD83,0xE08D,0xE41B,0xE318,0xDFA3, + 0xDDA2,0xE1DB,0xEB9C,0xF58C,0xFD81,0x0394,0x0A0E,0x1170, + 0x1870,0x1E36,0x232F,0x27BC,0x2B1C,0x2C6C,0x2C55,0x2A50, + 0x257F,0x1F57,0x1A63,0x1905,0x1806,0x1423,0x0C97,0x0576, + 0x0181,0x0103,0x015E,0x009F,0xFF23,0xFD77,0xFBD7,0xFAE1, + 0xFAF8,0xFB30,0xFAD7,0xF994,0xF82A,0xF74A,0xF6E8,0xF3F5, + 0xEF80,0xED40,0xEE65,0xF14C,0xF2CA,0xF1F9,0xF173,0xF2D6, + 0xF685,0xFC61,0x0283,0x070A,0x0A12,0x0BED,0x0D89,0x0FE4, + 0x14CC,0x1740,0x178F,0x17A2,0x1846,0x1836,0x1505,0x10B2, + 0x0DCB,0x0BF0,0x0A7D,0x0820,0x045C,0x0004,0xFC9A,0xFA0A, + 0xF9CF,0xFA06,0xF932,0xF898,0xF6C6,0xF4C4,0xF472,0xF611, + 0xF7D4,0xF792,0xF66C,0xF575,0xF588,0xF624,0xF601,0xF51E, + 0xF523,0xF6DD,0xF881,0xF95F,0xFA14,0xFAE4,0xFC2F,0xFEEC, + 0x01CB,0x04FC,0x0912,0x0AC0,0x09FF,0x0ADA,0x0D8F,0x0FF0, + 0x1043,0x0F9A,0x0EFA,0x0E34,0x0D7D,0x0C18,0x09B2,0x07A7, + 0x063A,0x0536,0x033D,0x0047,0xFD2A,0xFAE9,0xF9FE,0xF9AE, + 0xF8F8,0xF826,0xF74F,0xF6D6,0xF6F8,0xF760,0xF7EA,0xF85F, + 0xF826,0xF7CD,0xF810,0xF8FC,0xFA13,0xFA66,0xFA8B,0xFB0B, + 0xFC46,0xFDB5,0xFE90,0xFEA5,0xFF4F,0x00E7,0x029B,0x03AC, + 0x0519,0x0603,0x06D6,0x07D8,0x0901,0x09AC,0x0955,0x0837, + 0x073C,0x0723,0x07A5,0x06B7,0x046C,0x0237,0x0102,0x002B, + 0xFF3D,0xFD8A,0xFC24,0xFB7F,0xFAA9,0xF9F8,0xF8B0,0xF84C, + 0xF82C,0xF85D,0xF849,0xF77B,0xF6E7,0xF716,0xF764,0xF509, + 0xF610,0xF6DC,0xF579,0xF553,0xF4CE,0xF474,0xF473,0xF3F8, + 0xF221,0xEE90,0xEC6B,0xEDC7,0xF138,0xF3BF,0xF3CE,0xF1A3, + 0xEFBD,0xF076,0xF2BF,0xF48D,0xF489,0xF411,0xF39C,0xF3E2, + 0xF439,0xF461,0xF3EC,0xF31E,0xF2AA,0xF257,0xF1B5,0xF0A1, + 0xEFBF,0xEF49,0xEEC6,0xEE58,0xEE51,0xEDD1,0xED6E,0xECB0, + 0xEC7A,0xEC47,0xEC35,0xEC5D,0xEC0E,0xEBD1,0xEB74,0xEB2F, + 0xEAAA,0xEA7C,0xEAB2,0xEA48,0xE9EC,0xEA07,0xE9C1,0xE991, + 0xE931,0xE98C,0xEA12,0xEA7F,0xEBC9,0xEDD8,0xECAD,0xEC4A, + 0xEC00,0xEBC5,0xEBE6,0xEBDE,0xEB93,0xEB78,0xEB84,0xEAE9, + 0xEAF0,0xEBC9,0xEC32,0xEC55,0xEC64,0xEC84,0xEC6E,0xEC36, + 0xEC30,0xECFF,0xEDA7,0xED4A,0xED17,0xED7E,0xED4C,0xED73, + 0xEDEF,0xEE55,0xEF1C,0xEF67,0xEFE7,0xF0B4,0xF111,0xF10B, + 0xF1C0,0xF270,0xF2E6,0xF2C4,0xF33E,0xF379,0xF3C0,0xF3E9, + 0xF466,0xF45F,0xF3B9,0xF4C5,0xF679,0xF6EB,0xF6DC,0xF715, + 0xF7B8,0xF86D,0xF89F,0xF8D1,0xF952,0xF90F,0xF8CF,0xF95A, + 0xF95C,0xF8FE,0xF981,0xF9FB,0xFABB,0xFB2B,0xFB52,0xFBA0, + 0xFC28,0xFC9E,0xFD0A,0xFDC9,0xFE2C,0xFEB8,0xFEC5,0xFED9, + 0xFF5E,0xFF77,0xFFFB,0x0053,0x00D7,0x0153,0x017F,0x01B9, + 0x01FE,0x0218,0x02B0,0x0335,0x03A2,0x03E0,0x03F7,0x0419, + 0x0440,0x04AF,0x04B1,0x050B,0x056E,0x059C,0x0562,0x05CD, + 0x0617,0x067C,0x068F,0x072A,0x0797,0x0794,0x07B7,0x0788, + 0x0768,0x0756,0x0804,0x087A,0x090F,0x0923,0x08F0,0x0933, + 0x0995,0x09FC,0x0A7B,0x0AD0,0x0B28,0x0A67,0x0C07,0x0BBF, + 0x0B3B,0x0C56,0x0BD0,0x0C4A,0x0C7C,0x0C9A,0x0C63,0x0CD4, + 0x0C9B,0x0D0F,0x0D01,0x0D1E,0x0D43,0x0D4D,0x0D82,0x0D47, + 0x0CFA,0x0D5B,0x0D98,0x0D8B,0x0DB2,0x0DF3,0x0DBD,0x0DB3, + 0x0DF1,0x0E17,0x0E30,0x0E41,0x0E28,0x0E04,0x0E2C,0x0E45, + 0x0DF0,0x0E19,0x0E71,0x0E94,0x0EB3,0x0EE2,0x0EF2,0x0ED4, + 0x0F0E,0x0EEB,0x0EAC,0x0ED2,0x0EA9,0x0E42,0x0E09,0x0E75, + 0x0EB6,0x0EAA,0x0E7D,0x0EDE,0x0EF1,0x0E5C,0x0E2F,0x0E2E, + 0x0DE4,0x0DD1,0x0DD6,0x0D9C,0x0D3C,0x0CAE,0x0AB8,0x0A1A, + 0x0AE2,0x0AF0,0x0B30,0x0BB1,0x0B95,0x0B6D,0x0B31,0x0B2F, + 0x0B4E,0x0BA7,0x0BD9,0x0BBF,0x0B95,0x0B95,0x0B88,0x0B8E, + 0x0C41,0x0B9F,0x0BA3,0x0C54,0x0C26,0x0BCB,0x0BAF,0x0BFB, + 0x0C13,0x0BEA,0x0BF1,0x0C26,0x0C22,0x0C1E,0x0C01,0x0C26, + 0x0C14,0x0C0E,0x0BE4,0x0BD1,0x0BA8,0x0B75,0x0B2A,0x0B29, + 0x0ABD,0x0B6C,0x0CDF,0x0BE9,0x0AA0,0x0A0C,0x0A33,0x0A51, + 0x0A79,0x0A71,0x0A2A,0x0A59,0x0A61,0x0AAD,0x0A88,0x0A88, + 0x0AFE,0x0B4B,0x0B9B,0x0B54,0x0A96,0x0A34,0x09C7,0x09F3, + 0x0A00,0x0A03,0x09FF,0x095D,0x0913,0x090C,0x092B,0x098E, + 0x0995,0x0975,0x08EF,0x0880,0x0863,0x07D3,0x07D8,0x0785, + 0x0733,0x072F,0x076E,0x0799,0x0769,0x0735,0x06DC,0x0697, + 0x06BE,0x06ED,0x06CA,0x06BA,0x0695,0x060F,0x060F,0x0679, + 0x0693,0x068E,0x065A,0x0637,0x0624,0x0616,0x05AF,0x05B0, + 0x05E2,0x05B4,0x0588,0x05B3,0x053D,0x0517,0x0493,0x0483, + 0x03E0,0x041F,0x0463,0x0424,0x03CA,0x0465,0x0346,0x0236, + 0x045C,0x03C9,0x033B,0x03A8,0x0361,0x0334,0x030C,0x02AD, + 0x02D6,0x02A8,0x0234,0x0274,0x02C3,0x02B7,0x022F,0x01FA, + 0x0256,0x0269,0x02A0,0x0290,0x02B2,0x028D,0x0217,0x024B, + 0x01FB,0x01DA,0x01B0,0x01A4,0x013E,0x0125,0x017D,0x015B, + 0x017B,0x013A,0x0148,0x0127,0x010F,0x010C,0x0136,0x0159, + 0x015E,0x0103,0x011D,0x013E,0x011B,0x00F6,0x00C9,0x008E, + 0xFEE4,0xFF54,0xFF5E,0xFF20,0xFED8,0xFEA3,0xFEB4,0xFEED, + 0xFEED,0xFEFD,0xFEC1,0xFE8A,0xFEE5,0xFECB,0xFEE1,0xFEC5, + 0xFEF0,0xFEB7,0xFE64,0xFE5B,0xFE67,0xFE99,0xFD42,0xFDCA, + 0xFEB7,0xFE85,0xFEB7,0xFEDF,0xFE98,0xFEAA,0xFEBB,0xFEA2, + 0xFE55,0xFD5B,0xFD39,0xFCDC,0xFC53,0xFBF8,0xFC81,0xFC71, + 0xFC36,0xFC4A,0xFC81,0xFC65,0xFC3E,0xFC99,0xFCB8,0xFCB4, + 0xFCEA,0xFD0C,0xFCE9,0xFD3C,0xFD22,0xFCB6,0xFC9A,0xFCA0, + 0xFCE0,0xFCFA,0xFD0D,0xFD75,0xFDBE,0xFD8A,0xFDD3,0xFE4C, + 0xFF4D,0x007C,0x0101,0x01A0,0x023C,0x02F1,0x0337,0x0349, + 0x042A,0x0502,0x0587,0x0654,0x068F,0x066A,0x064A,0x069E, + 0x070A,0x077D,0x07B1,0x07DA,0x0848,0x0806,0x07EC,0x0897, + 0x097A,0x09A1,0x09F1,0x0A53,0x0B91,0x0BF3,0x0C7F,0x0D60, + 0x0DEB,0x0D57,0x0F6A,0x0F8C,0x0F32,0x114B,0x11A8,0x1183, + 0x115F,0x1192,0x11F7,0x1350,0x1398,0x13CB,0x13FD,0x1466, + 0x14F9,0x14D3,0x14FC,0x157A,0x15F5,0x1646,0x1694,0x1613, + 0x1613,0x1652,0x169C,0x161A,0x1627,0x165F,0x168B,0x16B4, + 0x16EA,0x1726,0x16F7,0x16B0,0x15BF,0x15D1,0x1612,0x1685, + 0x1663,0x15F2,0x15C9,0x158D,0x1539,0x1499,0x1439,0x141E, + 0x13E0,0x13A0,0x136D,0x1336,0x135C,0x12AA,0x1207,0x118A, + 0x113B,0x112A,0x114D,0x1144,0x113B,0x10DC,0x1004,0x0EC7, + 0x0E1A,0x0D16,0x0B28,0x0A1A,0x0A6F,0x0AE8,0x0B39,0x0A18, + 0x08B4,0x07EC,0x0814,0x081A,0x082B,0x0813,0x0712,0x05AC, + 0x0402,0x025D,0x012D,0x010C,0x00DC,0xFD7D,0xF968,0xF638, + 0xF2AD,0xEF2C,0xECF3,0xEBAC,0xEB05,0xEA54,0xE9E7,0xE92D, + 0xE929,0xE9C6,0xEBB4,0xEE83,0xF201,0xF678,0xFBA4,0x00B3, + 0x04CA,0x0866,0x0BA7,0x0EEB,0x1424,0x184D,0x1B45,0x1E11, + 0x1F66,0x1F4D,0x1E44,0x1D16,0x1BD9,0x1A26,0x1840,0x1622, + 0x13D7,0x10BB,0x0CB1,0x08C4,0x05E0,0x0229,0xFE50,0xFBA5, + 0xF8FD,0xF69C,0xF528,0xF34F,0xF0BC,0xEEC8,0xEDE6,0xED28, + 0xEC3A,0xEC51,0xECB9,0xEC19,0xEAB1,0xE996,0xE8E3,0xE8EB, + 0xE91C,0xE916,0xE8D3,0xE84A,0xE7D6,0xE7D0,0xE869,0xE901, + 0xE9FD,0xEA92,0xEABF,0xEB93,0xED8E,0xEFEE,0xF2D8,0xF527, + 0xF70B,0xF8B8,0xF9A9,0xFB94,0xFDF3,0x003C,0x0223,0x0327, + 0x037C,0x0363,0x0380,0x036D,0x0316,0x0267,0x00D4,0xFEDE, + 0xFCF9,0xFB4B,0xF9D3,0xF73E,0xF49A,0xF20B,0xEEE3,0xECA3, + 0xEB51,0xEBD0,0xE9F3,0xE749,0xE7A3,0xE560,0xE3F9,0xE407, + 0xE4B1,0xE5D5,0xE68D,0xE6AF,0xE63E,0xE642,0xE74E,0xE7E5, + 0xE821,0xE881,0xE976,0xEB4E,0xECDD,0xED57,0xED6D,0xED70, + 0xEDF3,0xEEB6,0xF009,0xF18E,0xF35D,0xF4D3,0xF52A,0xF4F6, + 0xF61A,0xF759,0xF804,0xF902,0xFA3C,0xFACA,0xFB73,0xFB94, + 0xFBE7,0xFC4C,0xFB87,0xFAD8,0xFA8B,0xFA2C,0xFA05,0xF951, + 0xF7DD,0xF67D,0xF480,0xF2F9,0xF1BE,0xF0F3,0xEFF6,0xEEF7, + 0xEE0B,0xED41,0xEBCD,0xEA86,0xEA6A,0xEA34,0xEA5E,0xEAA9, + 0xECE6,0xED58,0xED41,0xED48,0xED71,0xEDEE,0xEEB7,0xEF38, + 0xF02E,0xF170,0xF360,0xF491,0xF4B0,0xF494,0xF4CD,0xF56E, + 0xF647,0xF734,0xF847,0xF842,0xF82C,0xF94B,0xF925,0xF8B4, + 0xF9B3,0xFA9F,0xFAE7,0xFAFF,0xFAB0,0xFA14,0xFA61,0xFAD8, + 0xFAE7,0xFA73,0xF9B0,0xFA5E,0xFA2D,0xF900,0xF87F,0xF867, + 0xF7EA,0xF662,0xF54A,0xF53D,0xF46E,0xF482,0xF461,0xF419, + 0xF3AD,0xF2A7,0xF1DC,0xF1B6,0xF20B,0xF20F,0xF1E8,0xF1DC, + 0xF172,0xF13A,0xF17D,0xF1ED,0xF1AB,0xF269,0xF31F,0xF3A2, + 0xF402,0xF4B4,0xF5AD,0xF609,0xF685,0xF762,0xF810,0xF876, + 0xF8CB,0xF83D,0xF608,0xF38A,0xF1DB,0xF0E2,0xF0A8,0xEEEA, + 0xE94E,0xE051,0xD61E,0xCD75,0xC7ED,0xC5F5,0xC589,0xC479, + 0xC21F,0xBF2C,0xBE89,0xBE5E,0xC1DF,0xC9B0,0xD265,0xDC4D, + 0xE70B,0xF22A,0xFD2B,0x0806,0x12B8,0x1CF6,0x2670,0x2FB0, + 0x3970,0x3E32,0x3E1A,0x3E4D,0x3E5A,0x3E2F,0x3E4E,0x3E76, + 0x3E64,0x3E83,0x3C56,0x355C,0x2C91,0x22A0,0x19CE,0x12DE, + 0x0BF1,0x0614,0x0193,0xFA73,0xF66F,0xF34B,0xEF64,0xEC38, + 0xE94E,0xE68F,0xE568,0xE59B,0xE654,0xE77A,0xE72D,0xE609, + 0xE40A,0xE282,0xE1C9,0xE261,0xE384,0xE444,0xE3E9,0xE331, + 0xE265,0xE2A0,0xE42D,0xE69A,0xE9CE,0xECFA,0xF069,0xF3F0, + 0xF7DD,0xFC99,0x0254,0x07AF,0x0CA8,0x1165,0x1698,0x1C83, + 0x215C,0x2517,0x277B,0x2855,0x27DA,0x27BF,0x2839,0x2871, + 0x270A,0x23E5,0x1EFC,0x197E,0x14C4,0x1023,0x0B61,0x06E4, + 0x020A,0xFC5D,0xF742,0xF313,0xEF7B,0xEC6E,0xE951,0xE63D, + 0xE457,0xE2F1,0xE12C,0xE222,0xE23C,0xE250,0xE2ED,0xE36D, + 0xE4DE,0xE6D9,0xE977,0xEBDF,0xED96,0xEE54,0xEEF6,0xF0BB, + 0xF2E8,0xF52E,0xF744,0xF986,0xFADF,0xFBF8,0xFEAF,0x013B, + 0x02E4,0x0483,0x066F,0x086E,0x0AA2,0x0E00,0x10A3,0x1234, + 0x12B0,0x12DA,0x1355,0x13F7,0x14CB,0x1519,0x1543,0x13D7, + 0x1162,0x0EC1,0x0C60,0x0A8A,0x08BA,0x074C,0x0348,0xFF3E, + 0xFC54,0xF97E,0xF6F1,0xF4A5,0xF1ED,0xEF7E,0xEE09,0xED63, + 0xED74,0xED84,0xED8E,0xED38,0xED93,0xEDA8,0xEEE3,0xF09C, + 0xF220,0xF3E6,0xF5C2,0xF774,0xF918,0xFA88,0xFC11,0xFE05, + 0xFF7A,0x0168,0x02B2,0x03A4,0x04CB,0x0592,0x0660,0x0785, + 0x089D,0x0977,0x09BE,0x09F0,0x0AA0,0x0C19,0x0D22,0x0D1A, + 0x0CB1,0x0BCE,0x0B63,0x0B38,0x0B73,0x0BD6,0x0BB1,0x09FF, + 0x075C,0x055E,0x042F,0x03DD,0x033A,0x020C,0x00A7,0xFE1F, + 0xFB82,0xF995,0xF8BB,0xF833,0xF7F0,0xF793,0xF6D7,0xF55A, + 0xF47E,0xF45D,0xF4A6,0xF467,0xF47B,0xF591,0xF69F,0xF7C5, + 0xF987,0xFB75,0xFA2B,0xFBD8,0xFD22,0xFD6C,0xFF92,0x01FA, + 0x039A,0x040B,0x03E6,0x03AC,0x03B7,0x037E,0x01D8,0xFF52, + 0xFDBD,0xFCE5,0xFB52,0xF7DC,0xF09C,0xE69E,0xDB15,0xD165, + 0xCB7B,0xC903,0xC84E,0xC6F7,0xC399,0xC067,0xBF94,0xBF9D, + 0xC49F,0xCDB5,0xD7C0,0xE307,0xEE52,0xF9CD,0x0622,0x12B6, + 0x1ED2,0x2A30,0x3544,0x3DC3,0x3F0A,0x3EF6,0x3F46,0x3F41, + 0x3F34,0x3F2D,0x3F12,0x3F1E,0x3F22,0x3ED8,0x3EE4,0x3D95, + 0x350C,0x2B09,0x21AC,0x18F9,0x1144,0x0A5E,0x046C,0x0035, + 0xFD43,0xF806,0xF3B8,0xF013,0xEDAF,0xEBA9,0xE9F0,0xE97B, + 0xE9EE,0xEA14,0xE97C,0xE80E,0xE6C9,0xE59D,0xE4A9,0xE374, + 0xE360,0xE417,0xE42D,0xE36E,0xE36D,0xE40B,0xE51F,0xE653, + 0xE955,0xEC64,0xF10E,0xF6E1,0xFB5A,0xFFC4,0x04AA,0x0A74, + 0x10A0,0x1668,0x1B63,0x2034,0x2501,0x2896,0x2B2F,0x2D10, + 0x2E7F,0x2E5D,0x2CB7,0x2AB2,0x283A,0x24B6,0x2149,0x1D81, + 0x185D,0x12A2,0x0CE6,0x074C,0x01C9,0xFCD2,0xF755,0xF207, + 0xED2E,0xE9F2,0xE7F8,0xE574,0xE273,0xE186,0xE10F,0xE124, + 0xE161,0xE1CE,0xE2FE,0xE3FC,0xE520,0xE67E,0xE853,0xEA62, + 0xEC6C,0xEDC8,0xEF39,0xF123,0xF2D5,0xF46F,0xF65F,0xF867, + 0xFA83,0xFC68,0xFE38,0x0036,0x02D7,0x05CA,0x0855,0x0AAA, + 0x0C59,0x0E54,0x1042,0x121C,0x136F,0x145C,0x1603,0x176A, + 0x16D5,0x15AA,0x14BA,0x13CB,0x12BD,0x1067,0x0E47,0x0BEE, + 0x091D,0x05BF,0x0219,0xFEE8,0xFBF8,0xF8EA,0xF55B,0xF2B4, + 0xF062,0xEEED,0xED67,0xEC65,0xEAD0,0xE9AF,0xE91C,0xE9CD, + 0xE9F2,0xECCC,0xEDB3,0xED7B,0xEFA6,0xF04E,0xF1A4,0xF368, + 0xF668,0xF8C8,0xFAA8,0xFC03,0xFD9F,0xFE91,0x0043,0x0207, + 0x03DA,0x0544,0x0602,0x073F,0x082C,0x096F,0x09F0,0x0A74, + 0x0A73,0x0A8A,0x0B42,0x0C84,0x0D7A,0x0D31,0x0BED,0x0A97, + 0x09C1,0x08E3,0x08F7,0x08B0,0x07FA,0x0677,0x0455,0x0238, + 0x0079,0xFF2D,0xFDA6,0xFC0C,0xF9ED,0xF851,0xF6FA,0xF623, + 0xF537,0xF366,0xF17B,0xF05E,0xF01C,0xF0F3,0xF1B9,0xF261, + 0xF2E1,0xF35C,0xF397,0xF39E,0xF4A4,0xF626,0xF8C1,0xFACF, + 0xFB9B,0xFB0C,0xFBDE,0xFE4A,0xFF4C,0x0005,0x010F,0x0254, + 0x031A,0x02A6,0x0064,0xFD41,0xFB7A,0xFA87,0xF900,0xF59D, + 0xEDEE,0xE359,0xD8C0,0xD0C7,0xCA95,0xC7C2,0xC786,0xC636, + 0xC31A,0xC00E,0xBF92,0xC116,0xC82B,0xD144,0xDB2A,0xE696, + 0xF238,0xFE74,0x0B14,0x178F,0x2359,0x2DAA,0x37C2,0x3F0A, + 0x3FDC,0x3FD6,0x3FFC,0x4001,0x4023,0x40AB,0x4010,0x3FE4, + 0x3FD2,0x3FAA,0x3FDE,0x3DBC,0x33F4,0x28F8,0x1F0B,0x17B4, + 0x11FF,0x0C0C,0x05D8,0x00D4,0xFCE8,0xF8D8,0xF4F1,0xF172, + 0xEE3A,0xEC17,0xEB57,0xEBAD,0xEC73,0xED77,0xEC8F,0xEA77, + 0xE6C6,0xE48A,0xE3F8,0xE444,0xE589,0xE5E1,0xE54B,0xE3EE, + 0xE23D,0xE1FE,0xE3D0,0xE6F3,0xEAF0,0xEEA0,0xF23D,0xF668, + 0xFAF6,0x0073,0x0670,0x0C66,0x11E7,0x16BC,0x1BC8,0x2108, + 0x266E,0x2A83,0x2CA6,0x2D38,0x2D1C,0x2CFE,0x2C8B,0x2B56, + 0x28DC,0x2521,0x2031,0x1AF2,0x159E,0x1007,0x0AAF,0x04CF, + 0xFF02,0xF9CE,0xF55E,0xF16F,0xEE78,0xEB07,0xE740,0xE43A, + 0xE30D,0xE13F,0xE12F,0xE4A6,0xE4C7,0xE464,0xE4B5,0xE53A, + 0xE691,0xE874,0xEA60,0xEC96,0xEE8C,0xF05C,0xF1D7,0xF2A7, + 0xF420,0xF630,0xF7FB,0xF98D,0xFBC6,0xFE5B,0x00E9,0x02EB, + 0x04B0,0x0680,0x0802,0x0980,0x0C01,0x0F88,0x12BB,0x14B5, + 0x1597,0x155D,0x153B,0x15E2,0x15FC,0x160B,0x15E2,0x14DC, + 0x12DF,0x0FC4,0x0CB7,0x0A91,0x07F7,0x046C,0x0084,0xFCEA, + 0xFABE,0xF84F,0xF560,0xF24F,0xEF5D,0xEC7E,0xEA34,0xE9A3, + 0xE9F4,0xEAD6,0xEAA7,0xE94D,0xE8AD,0xE9E1,0xEC3A,0xF093, + 0xF2AD,0xF3DC,0xF511,0xF5E9,0xF70B,0xF8FD,0xFB50,0xFDA0, + 0xFF11,0x0059,0x01A3,0x032C,0x04C2,0x0651,0x072B,0x0721, + 0x07C8,0x0937,0x0A00,0x0B21,0x0C72,0x0C19,0x0BA4,0x0BE9, + 0x0C22,0x0BF7,0x0C14,0x0BD9,0x0B0A,0x0A30,0x098D,0x08A2, + 0x072B,0x050F,0x0364,0x0192,0x008F,0xFF76,0xFE62,0xFC61, + 0xFA36,0xF821,0xF634,0xF536,0xF3B9,0xF2FF,0xF3A5,0xF3A2, + 0xF2E0,0xF214,0xF1DA,0xF203,0xF32A,0xF491,0xF5AF,0xF614, + 0xF71F,0xF7F2,0xF954,0xF99C,0xFAA3,0xFC63,0xFE77,0x003F, + 0x018B,0x0279,0x02A5,0x025E,0x008B,0xFDBC,0xFBA7,0xFAF3, + 0xFB09,0xF9E1,0xF48E,0xEB7D,0xDFF5,0xD48C,0xCCBB,0xC98B, + 0xC8DC,0xC832,0xC5E8,0xC29A,0xBFF0,0xBEB7,0xC1F6,0xC970, + 0xD32F,0xDDBD,0xE8CC,0xF4D3,0x013F,0x0D73,0x193B,0x23BF, + 0x2E29,0x3922,0x3E66,0x3E65,0x3E9B,0x3EC4,0x3E84,0x3E87, + 0x3E82,0x3EA5,0x3E87,0x3E59,0x3E41,0x3E16,0x371F,0x2C98, + 0x227E,0x196D,0x119C,0x0B27,0x0535,0xFFE0,0xFB13,0xF68C, + 0xF2E3,0xF0CF,0xEBD3,0xE94A,0xE790,0xE7AB,0xE876,0xE996, + 0xE99C,0xE83D,0xE691,0xE453,0xE2DD,0xE224,0xE2F7,0xE3AF, + 0xE3B7,0xE311,0xE2FB,0xE33E,0xE40A,0xE47B,0xE6BC,0xEA68, + 0xEEC5,0xF400,0xF920,0xFEB7,0x03E7,0x0872,0x0D31,0x12B6, + 0x18D2,0x1F55,0x24C3,0x297E,0x2CC1,0x2EBE,0x2F48,0x2E66, + 0x2D59,0x2C1C,0x2ADF,0x288B,0x24C1,0x1F7E,0x19DE,0x1435, + 0x0E1A,0x0847,0x029D,0xFE13,0xF936,0xF4A5,0xF00D,0xEC58, + 0xE9B2,0xE687,0xE429,0xE346,0xE303,0xE32C,0xE342,0xE3C0, + 0xE3C8,0xE290,0xE39B,0xE51A,0xE727,0xE9EB,0xEC44,0xED91, + 0xEED7,0xF0BA,0xF27C,0xF45C,0xF5EC,0xF737,0xF960,0xFB85, + 0xFDE3,0x0013,0x02FE,0x0516,0x05E6,0x0809,0x0AA2,0x0D2A, + 0x0F93,0x11EF,0x13F8,0x14FD,0x1658,0x160C,0x158C,0x160F, + 0x1612,0x1598,0x1409,0x11DF,0x0FD0,0x0D5B,0x0A19,0x069B, + 0x0303,0x0021,0xFDA0,0xFACD,0xF929,0xF5FA,0xF24A,0xEEDA, + 0xEC04,0xEAA9,0xEA73,0xEA74,0xEA89,0xEB26,0xEBA1,0xEBE3, + 0xEBFF,0xED5E,0xEFD1,0xF371,0xF50B,0xF62E,0xF795,0xF91E, + 0xFAAC,0xFC1D,0xFE3B,0x0013,0x0162,0x0205,0x0422,0x05F5, + 0x0747,0x080A,0x0809,0x07E7,0x083B,0x0938,0x0A37,0x0B4A, + 0x0BC1,0x0BA8,0x0B24,0x0ABE,0x0A78,0x0AE2,0x0B58,0x0AA5, + 0x08FC,0x0802,0x06DF,0x05C4,0x04BF,0x0384,0x01B9,0xFF8A, + 0xFD63,0xFB79,0xFAB2,0xFA79,0xF8A4,0xF610,0xF499,0xF39E, + 0xF265,0xF1B7,0xF1DD,0xF2E6,0xF349,0xF208,0xF0DE,0xF1A9, + 0xF378,0xF4FE,0xF5B4,0xF6B0,0xF8A6,0xFA49,0xFAE5,0xFBFD, + 0xFE7F,0xFDDB,0xFFD8,0x01AA,0x01DE,0x03A7,0x0489,0x0390, + 0x0101,0xFE4A,0xFC50,0xFB8E,0xFB41,0xF94A,0xF38C,0xE8FC, + 0xDCDD,0xD1F2,0xCB62,0xC8FC,0xC8A8,0xC74F,0xC417,0xC069, + 0xBF9E,0xBF87,0xC27F,0xCB1B,0xD4EC,0xDF6B,0xEA4A,0xF658, + 0x0358,0x1036,0x1BD4,0x2621,0x3011,0x3A04,0x3EF7,0x3F24, + 0x3F21,0x3F46,0x3F22,0x3F48,0x3F3F,0x3F12,0x3F50,0x3F12, + 0x3F0C,0x3DC4,0x34A2,0x29B8,0x2031,0x1815,0x10E5,0x0AAA, + 0x0479,0xFEC6,0xF9AA,0xF5B0,0xF234,0xEE80,0xEC93,0xEC01, + 0xEA16,0xE990,0xE9F2,0xEA9A,0xEA67,0xE8BF,0xE5CA,0xE3DC, + 0xE344,0xE31C,0xE386,0xE3E5,0xE37E,0xE357,0xE29D,0xE1F7, + 0xE2AB,0xE462,0xE780,0xEBEE,0xF099,0xF4F7,0xF927,0xFDE5, + 0x0238,0x0749,0x0DB7,0x1415,0x19CB,0x1F79,0x2443,0x2789, + 0x29A0,0x2AF9,0x2C18,0x2C0E,0x2BBC,0x2A79,0x2906,0x260E, + 0x219C,0x1BFD,0x1672,0x1023,0x094A,0x0520,0x00FE,0xFC57, + 0xF718,0xF200,0xEC83,0xE83A,0xE556,0xE393,0xE275,0xE13B, + 0xDFFE,0xDFAB,0xDF54,0xDEC7,0xDF33,0xE0AE,0xE274,0xE424, + 0xE57D,0xE6CB,0xE867,0xE9E0,0xEB19,0xECBD,0xEEA8,0xF07C, + 0xF260,0xF42F,0xF5BB,0xF7CC,0xFA8D,0xFC9C,0xFE7F,0x00BD, + 0x0352,0x05EB,0x07E3,0x0A3D,0x0CC4,0x0EFE,0x108F,0x116E, + 0x1252,0x12C8,0x1262,0x1215,0x11E9,0x11A4,0x103E,0x0DB2, + 0x0A65,0x07A7,0x04F3,0x01F9,0xFF3D,0xFCF3,0xF9CF,0xF5FF, + 0xF1FA,0xEEFB,0xED3E,0xEB8A,0xE9AE,0xE7DD,0xE78E,0xE70D, + 0xE6E7,0xE733,0xE82D,0xE8AE,0xE9C7,0xEB89,0xED1B,0xEE31, + 0xF1F0,0xF3A3,0xF3E7,0xF664,0xF77C,0xF9A0,0xFB9C,0xFD99, + 0xFF24,0x010E,0x025D,0x0360,0x03EF,0x04E3,0x05E6,0x06C3, + 0x0814,0x099D,0x0B18,0x0B9E,0x0B58,0x0ACE,0x0B3A,0x0C0E, + 0x0C95,0x0CAE,0x0CFF,0x0D06,0x0B84,0x093E,0x0729,0x0694, + 0x05F8,0x055D,0x0392,0x019E,0xFFDD,0xFE17,0xFBF5,0xFA54, + 0xF8DE,0xF746,0xF5D8,0xF4E2,0xF4AB,0xF4AD,0xF405,0xF31F, + 0xF301,0xF2BA,0xF2E6,0xF433,0xF5FC,0xF782,0xF8AE,0xF93D, + 0xFA1E,0xFB45,0xFC79,0xFE27,0xFFB9,0x0131,0x02D7,0x040C, + 0x032C,0x02C9,0x0349,0x026D,0x0067,0xFDBE,0xFC62,0xFC05, + 0xFB00,0xF788,0xF01A,0xE548,0xD9AB,0xD041,0xCACB,0xC886, + 0xC7E8,0xC6E4,0xC451,0xC014,0xBF16,0xBFC8,0xC4EF,0xCD94, + 0xD834,0xE3A5,0xEF3D,0xFB33,0x075F,0x1361,0x1EE2,0x2922, + 0x3427,0x3DFF,0x3FC6,0x3FA8,0x4015,0x3FF2,0x3FFD,0x3FED, + 0x400B,0x401C,0x3FE3,0x3FE7,0x40A9,0x3E34,0x3381,0x295C, + 0x20FA,0x18E2,0x11DC,0x0BF3,0x0655,0x0138,0xFC2D,0xF7B4, + 0xF3AE,0xF05D,0xEE28,0xEC51,0xEB8D,0xEB40,0xEBBA,0xEB2D, + 0xE9E8,0xE7C3,0xE605,0xE4DB,0xE3F6,0xE3CE,0xE451,0xE4B6, + 0xE409,0xE2FC,0xE21E,0xE1F9,0xE33E,0xE5B2,0xE87D,0xEC0F, + 0xF0BC,0xF5B0,0xF9FE,0xFED8,0x0418,0x09AE,0x0F40,0x1541, + 0x1B20,0x2061,0x24E3,0x2837,0x2B30,0x2D18,0x2D77,0x2CE6, + 0x2BDE,0x2A84,0x28A5,0x2541,0x2169,0x1CD2,0x1764,0x110A, + 0x0AD3,0x0596,0x00EE,0xFC61,0xF794,0xF2F9,0xEE72,0xEAF6, + 0xE7B6,0xE55B,0xE370,0xE2A7,0xE1E6,0xE1B1,0xE22C,0xE400, + 0xE34A,0xE39F,0xE66E,0xE6CF,0xE8B7,0xEB8E,0xED61,0xEE80, + 0xEFD3,0xF109,0xF260,0xF3FF,0xF6B0,0xF978,0xFB8B,0xFCE4, + 0xFE27,0x0046,0x02A9,0x0569,0x07FF,0x0A71,0x0CAC,0x0E1D, + 0x0F9A,0x11AE,0x13B0,0x158F,0x15CF,0x1577,0x153C,0x14DD, + 0x14F9,0x142C,0x1238,0x0FB1,0x0C8C,0x0957,0x065D,0x040A, + 0x0234,0xFF9C,0xFB5C,0xF6F1,0xF324,0xEFE7,0xEE6A,0xED4D, + 0xEBD7,0xEA48,0xE89B,0xE743,0xE705,0xE767,0xE7D4,0xE921, + 0xEA43,0xEC07,0xEDD5,0xEF38,0xF0AD,0xF25F,0xF702,0xF93B, + 0xFACE,0xFCE8,0xFEF4,0x001D,0x0110,0x01F8,0x0387,0x04F0, + 0x05EF,0x070E,0x084F,0x0929,0x0A2D,0x0ACC,0x0B46,0x0BA9, + 0x0BBD,0x0AE5,0x0B3E,0x0C72,0x0C80,0x0B61,0x0AC7,0x0A23, + 0x08A1,0x0711,0x05E5,0x0526,0x0441,0x0214,0xFF9D,0xFDCA, + 0xFC31,0xFB73,0xF975,0xF71B,0xF582,0xF456,0xF31F,0xF1CF, + 0xF0D7,0xF0A1,0xF08F,0xEEAB,0xED70,0xEEE8,0xF091,0xF1B3, + 0xF269,0xF2F2,0xF3D3,0xF57D,0xF726,0xF85A,0xF953,0xFA3B, + 0xFB21,0xFC4B,0xFD3B,0xFEEE,0x00B5,0x0107,0xFE9F,0xFC2C, + 0xFA53,0xF9B1,0xFA5E,0xF99F,0xF5BF,0xEE10,0xE455,0xDA23, + 0xD320,0xD027,0xCFDE,0xCF45,0xCCA1,0xC904,0xC618,0xC55B, + 0xC8BA,0xCED3,0xD6AB,0xDF37,0xE7D7,0xF1F3,0xFCF6,0x088A, + 0x1383,0x1CAF,0x24F5,0x2D63,0x3712,0x3E0D,0x3E6E,0x3E4C, + 0x3E74,0x3E79,0x3EA3,0x3EA6,0x3E65,0x3E66,0x3DBE,0x37F1, + 0x2FE6,0x276D,0x1F16,0x16CB,0x101E,0x0A6E,0x054E,0xFFF7, + 0xFBAB,0xF867,0xF5CA,0xF25D,0xEFD6,0xED7B,0xEAFE,0xEB2D, + 0xECF4,0xEB9A,0xECA7,0xEC1B,0xEA20,0xE814,0xE694,0xE5D3, + 0xE6C5,0xE704,0xE72B,0xE720,0xE6A5,0xE665,0xE641,0xE779, + 0xE99E,0xECEB,0xF04D,0xF3FE,0xF851,0xFD36,0x01B8,0x05B6, + 0x0A61,0x0F42,0x1491,0x19AA,0x1E86,0x225A,0x2552,0x26D5, + 0x2780,0x280F,0x282C,0x27D5,0x2601,0x23D8,0x202F,0x1C2A, + 0x1745,0x1263,0x0D6F,0x08CD,0x03EC,0xFF74,0xFB37,0xF6CE, + 0xF301,0xEF7D,0xEC8F,0xEA01,0xE809,0xE6B3,0xE5CA,0xE63A, + 0xE700,0xE773,0xE79F,0xE826,0xE8DC,0xEA45,0xEB9D,0xEC34, + 0xEC80,0xEE2D,0xEF1D,0xEFB5,0xF12B,0xF2E6,0xF4DA,0xF6F5, + 0xF8B0,0xFA6F,0xFB8C,0xFC8C,0xFE46,0x00A2,0x02E9,0x050D, + 0x06EA,0x09C2,0x0B89,0x0C81,0x0E81,0x1040,0x10EB,0x113F, + 0x111F,0x118B,0x11F4,0x1274,0x1117,0x0EF5,0x0CD8,0x0AAE, + 0x0871,0x0622,0x03A7,0x01B3,0xFEC4,0xFB9C,0xF91D,0xF683, + 0xF44D,0xF2A4,0xF11D,0xF0BA,0xEFA1,0xEDB4,0xED93,0xED9C, + 0xEDB9,0xEE18,0xEED4,0xEFA3,0xF041,0xF215,0xF4B4,0xF741, + 0xF8E9,0xFA0F,0xFBEE,0xFD29,0xFE5F,0xFFAD,0x0139,0x0252, + 0x03C4,0x0523,0x060B,0x06FE,0x077B,0x07FC,0x089F,0x0951, + 0x09FA,0x0AB7,0x0B3E,0x0B6F,0x0B85,0x0B3B,0x0A63,0x0974, + 0x0988,0x0A28,0x0A60,0x096A,0x07B1,0x05F2,0x04A8,0x039F, + 0x0260,0x012B,0x003C,0xFEDF,0xFCC7,0xFA89,0xF975,0xF8FE, + 0xF7D6,0xF637,0xF512,0xF47A,0xF48F,0xF46D,0xF3C5,0xF3BD, + 0xF46E,0xF4E0,0xF578,0xF63D,0xF83E,0xF941,0xF9BC,0xF9F1, + 0xFAD2,0xFB95,0xFD73,0xFFA4,0x00FB,0x022D,0x037F,0x0428, + 0x024C,0x0415,0x04C0,0x0370,0x034B,0x0316,0x02C6,0x024D, + 0x0044,0xFC6C,0xF821,0xF442,0xF189,0xEFC8,0xEF67,0xEEE9, + 0xED52,0xEB5E,0xE98A,0xE930,0xEA7A,0xECCA,0xEF58,0xF299, + 0xF6D2,0xFA77,0xFE05,0x01B4,0x0583,0x0959,0x0CFD,0x1050, + 0x13A5,0x175B,0x1AAB,0x1C82,0x1C85,0x1B06,0x199F,0x18C3, + 0x185B,0x17A1,0x15D0,0x1334,0x101B,0x0C8C,0x09BD,0x07A6, + 0x056D,0x02FB,0x00C5,0xFF29,0xFE61,0xFD1E,0xFBC7,0xFB20, + 0xFA52,0xF9C2,0xF935,0xF8AF,0xF935,0xFAF8,0xFC6A,0xFAB4, + 0xF9AF,0xF927,0xF85C,0xF74B,0xF725,0xF761,0xF712,0xF6B0, + 0xF668,0xF669,0xF642,0xF618,0xF664,0xF738,0xF909,0xFB59, + 0xFC84,0xFD20,0xFF29,0x0098,0x0144,0x0343,0x0669,0x0859, + 0x09CC,0x0AC5,0x0BDC,0x0CDE,0x0CF3,0x0CFF,0x0D26,0x0CCE, + 0x0BCF,0x0B64,0x0A1B,0x08DB,0x06F1,0x049A,0x026E,0x0081, + 0xFF09,0xFEBC,0xFD37,0xFB08,0xF9FB,0xF919,0xF7C3,0xF6C1, + 0xF617,0xF5CD,0xF648,0xF644,0xF5FB,0xF551,0xF4D0,0xF511, + 0xF4D8,0xF4CA,0xF501,0xF5CB,0xF5E9,0xF628,0xF5E7,0xF5B1, + 0xF5C2,0xF56C,0xF50E,0xF4F4,0xF520,0xF55A,0xF4ED,0xF51E, + 0xF4C5,0xF485,0xF456,0xF27B,0xEE6F,0xE922,0xE523,0xE419, + 0xE57A,0xE757,0xE873,0xE771,0xE467,0xE1B6,0xE000,0xDFD8, + 0xE05B,0xE12E,0xE194,0xE1A6,0xE146,0xE154,0xE173,0xE157, + 0xE174,0xE105,0xE10C,0xE122,0xE1B8,0xE1C4,0xE186,0xE17E, + 0xE0FB,0xE0C1,0xE067,0xE0CE,0xE17C,0xE224,0xE23E,0xE254, + 0xE292,0xE385,0xE3D0,0xE439,0xE50C,0xE5BD,0xE5A6,0xE7E9, + 0xE778,0xE712,0xE8C2,0xE83B,0xE899,0xE96F,0xEA26,0xEB08, + 0xEC0A,0xEC11,0xEC77,0xEC57,0xEC49,0xEC79,0xED5C,0xEE7B, + 0xEF55,0xEFB3,0xEFCF,0xF024,0xF03C,0xF0DF,0xF1B2,0xF2BB, + 0xF359,0xF39B,0xF401,0xF443,0xF4CA,0xF4EE,0xF553,0xF5EF, + 0xF64A,0xF6B6,0xF74E,0xF7B8,0xF81D,0xF842,0xF855,0xF8D1, + 0xF984,0xFA82,0xFB49,0xFBD6,0xFBB6,0xFBFE,0xFC5D,0xFCCC, + 0xFD44,0xFE10,0xFECC,0xFF13,0xFF3D,0xFFD0,0x001D,0x0094, + 0x011B,0x0128,0x0192,0x0225,0x0281,0x0315,0x0317,0x01B4, + 0x01A4,0x02E8,0x02F6,0x0316,0x02CA,0x02CA,0x0349,0x03AD, + 0x03F0,0x0476,0x04EE,0x0596,0x05E0,0x0637,0x0685,0x06D9, + 0x07A0,0x08A3,0x0823,0x078D,0x08CF,0x0958,0x093E,0x096F, + 0x09E3,0x0A20,0x0A20,0x0A6F,0x0AEA,0x0B99,0x0B7A,0x0BBC, + 0x0C82,0x0CD2,0x0D51,0x0DF2,0x0E08,0x0DB1,0x0DC4,0x0E1B, + 0x0E9B,0x0E55,0x0E95,0x0F7B,0x0E41,0x0E0E,0x0E0E,0x0E3B, + 0x0E9B,0x0ED2,0x0ED2,0x0ED9,0x0F48,0x0FFF,0x10DC,0x10B2, + 0x10B4,0x112B,0x108D,0x0FF9,0x0FCD,0x1013,0x1034,0x1063, + 0x1093,0x10AF,0x10EE,0x111C,0x111F,0x114F,0x116C,0x1157, + 0x1128,0x1143,0x1153,0x1089,0x1016,0x1005,0x1010,0x1030, + 0x10D8,0x1137,0x1117,0x113A,0x10CB,0x1070,0x1005,0x0F9D, + 0x0FC6,0x103F,0x1066,0x0FDA,0x0F61,0x0F29,0x0F20,0x0F91, + 0x0F51,0x0F9F,0x0FED,0x0FCD,0x0F81,0x0F04,0x0EC4,0x0E6C, + 0x0E63,0x0E27,0x0E45,0x0E7B,0x0E6E,0x0E69,0x0E64,0x0EA0, + 0x0E4D,0x0DA0,0x0DE7,0x0DE0,0x0D8C,0x0D74,0x0DD0,0x0C28, + 0x0B7C,0x0D60,0x0C92,0x0C80,0x0CF1,0x0CCD,0x0C7C,0x0C13, + 0x0BC9,0x0BE8,0x0BE6,0x0BE3,0x0B2D,0x0B44,0x0B2C,0x0B06, + 0x0AC6,0x0ACD,0x0ABE,0x0AD3,0x0ACB,0x0A67,0x09ED,0x0986, + 0x09C5,0x09D5,0x0952,0x0957,0x0999,0x096E,0x0912,0x08FE, + 0x08DC,0x08BA,0x08AE,0x08E3,0x08B1,0x087D,0x0827,0x07F5, + 0x0795,0x07CB,0x076D,0x0773,0x07D8,0x077E,0x07B2,0x0724, + 0x0702,0x0724,0x0757,0x06CD,0x0705,0x06D4,0x06B5,0x06BC, + 0x0626,0x0625,0x065B,0x068A,0x06C2,0x095A,0x0976,0x0894, + 0x0884,0x082E,0x0789,0x076E,0x0762,0x078B,0x07BF,0x07BF, + 0x07A3,0x073B,0x06A3,0x0688,0x067A,0x0624,0x05CF,0x05C6, + 0x0586,0x0567,0x05EF,0x05BC,0x050F,0x050F,0x053B,0x04B0, + 0x04F4,0x04CB,0x04A9,0x0463,0x0414,0x0397,0x039E,0x0381, + 0x034E,0x0331,0x034D,0x0306,0x02DF,0x0305,0x02C9,0x02B0, + 0x0293,0x02D8,0x01E5,0x012C,0x026F,0x0307,0x0276,0x0249, + 0x0223,0x01EB,0x0197,0x0188,0x0159,0x00CB,0x00C2,0x00D6, + 0x007F,0xFF78,0xFF14,0xFF1E,0xFE79,0xFF0B,0xFFC2,0xFF37, + 0xFEA9,0xFEF0,0xFEE3,0xFE85,0xFE76,0xFE33,0xFE75,0xFE9B, + 0xFE6F,0xFEBF,0xFEC4,0xFE96,0xFEA5,0xFDCC,0xFE0A,0xFDF3, + 0xFE13,0xFE47,0xFDFD,0xFDDA,0xFE53,0xFDED,0xFCB8,0xFD4F, + 0xFE5A,0xFEA4,0xFE6F,0xFE3F,0xFE92,0xFE36,0xFE09,0xFE4C, + 0xFE3B,0xFD8D,0xFD07,0xFD26,0xFCDE,0xFC2B,0xFC2C,0xFC5C, + 0xFC89,0xFC34,0xFC7E,0xFC9F,0xFC9F,0xFCD4,0xFCF5,0xFD0D, + 0xFD1E,0xFD09,0xFD31,0xFD6E,0xFDA7,0xFD8F,0xFDBC,0xFD88, + 0xFD67,0xFDA5,0xFD7B,0xFD7B,0xFD90,0xFD60,0xFD30,0xFD34, + 0xFD5D,0xFD39,0xFD5C,0xFD4A,0xFD7C,0xFD9F,0xFD74,0xFD99, + 0xFDAE,0xFD89,0xFDDD,0xFD83,0xFD1E,0xFD3C,0xFD83,0xFD47, + 0xFD35,0xFD34,0xFD59,0xFD56,0xFD57,0xFD1A,0xFD9C,0xFD83, + 0xFDDE,0xFDFA,0xFE0F,0xFEB0,0xFFC4,0x0057,0x00A1,0x010A, + 0x0297,0x02C8,0x04D3,0x05CE,0x049B,0x0678,0x0750,0x08C8, + 0x0A2E,0x0B1F,0x0B5E,0x0C27,0x0C0B,0x0CAC,0x0CE3,0x0CF5, + 0x0D24,0x0D2C,0x0DA6,0x0DBD,0x0DE6,0x0DE1,0x0E2F,0x0E6A, + 0x0F20,0x0FF4,0x107F,0x102B,0x0FA2,0x1071,0x11AB,0x130E, + 0x143B,0x14CC,0x148C,0x1439,0x1466,0x1578,0x165F,0x16D1, + 0x1747,0x1785,0x17A6,0x17C9,0x182F,0x18F8,0x1988,0x19A6, + 0x19EF,0x19F3,0x1A77,0x1B34,0x1AFD,0x1AF8,0x1A78,0x1AD3, + 0x1B0E,0x1B21,0x1A6A,0x1A49,0x1ADE,0x1AFD,0x1A02,0x18DF, + 0x190D,0x1A09,0x18FD,0x1770,0x1744,0x170B,0x1730,0x1706, + 0x16CD,0x16CA,0x1688,0x15B7,0x14E1,0x14FD,0x156E,0x14CD, + 0x13BA,0x131F,0x137D,0x142E,0x14B0,0x133C,0x11A0,0x1201, + 0x122D,0x1218,0x1224,0x1221,0x1114,0x1032,0x0F8F,0x0F86, + 0x1020,0x107A,0x0F25,0x0D19,0x0C49,0x0D27,0x0DD4,0x0D45, + 0x0BC8,0x0AEB,0x0A77,0x0AEB,0x0AAB,0x0A78,0x0B86,0x09B0, + 0x073E,0x066F,0x077E,0x0865,0x076C,0x05C7,0x03FC,0x034E, + 0x0417,0x0528,0x0558,0x04E4,0x046B,0x032B,0x0256,0x0253, + 0x0263,0x0172,0x0089,0xFFCD,0xFFB3,0xFF8E,0xFEB4,0xFDD1, + 0xFC50,0xFAF0,0xF904,0xF6B8,0xF41B,0xF020,0xEAE3,0xE593, + 0xE1E3,0xE0E9,0xE121,0xE2BD,0xE46D,0xE52C,0xE50F,0xE538, + 0xE6BD,0xE96E,0xEC29,0xEE5E,0xEF07,0xEDD5,0xEC38,0xEB7F, + 0xEB91,0xEC29,0xED41,0xEEC5,0xF13E,0xF426,0xF709,0xF99E, + 0xFC43,0xFF4F,0x02D0,0x063C,0x08DF,0x0AC2,0x0B1C,0x09ED, + 0x0897,0x08B5,0x097E,0x09BC,0x08F0,0x094C,0x09B6,0x09C6, + 0x09BB,0x0ABC,0x0B7F,0x0AD7,0x0CFC,0x0B8B,0x09D5,0x08C6, + 0x061A,0x02D8,0xFFD7,0xFDDF,0xFBE3,0xF99B,0xF6B7,0xF45C, + 0xF253,0xF0C2,0xEF64,0xEE91,0xEE59,0xED53,0xEBC7,0xEA6D, + 0xE8BD,0xE6E6,0xE539,0xE336,0xE0FA,0xDEF8,0xDD85,0xDC5C, + 0xDB6E,0xDAEC,0xDA90,0xDA56,0xDAE6,0xDC0A,0xDD43,0xDE25, + 0xDF87,0xDFF4,0xDFED,0xDFEA,0xE07E,0xE180,0xE282,0xE322, + 0xE32C,0xE3A1,0xE495,0xE5A9,0xE72D,0xE8CD,0xEBA5,0xEE21, + 0xEF97,0xF044,0xF102,0xF267,0xF438,0xF4F3,0xF4DC,0xF5BB, + 0xF8F6,0xFA16,0xF8AD,0xF8CE,0xF963,0xFA93,0xFB25,0xFAF2, + 0xFB1D,0xFB0E,0xFB40,0xFB40,0xFB81,0xFB91,0xFB83,0xFA9B, + 0xF8ED,0xF6BD,0xF5BE,0xF511,0xF456,0xF442,0xF32E,0xF13B, + 0xF0AA,0xF003,0xEEAE,0xEE61,0xEE14,0xED57,0xEC9D,0xEC80, + 0xEC77,0xEB4E,0xE8F7,0xE730,0xE71B,0xE810,0xE877,0xE7C1, + 0xE675,0xE5E1,0xE5E5,0xE6D6,0xE7D4,0xE81B,0xE822,0xE8E2, + 0xE8BD,0xE945,0xEA8F,0xEB90,0xEBA4,0xEB41,0xEBE2,0xEC85, + 0xECDB,0xED60,0xEE53,0xEEFB,0xEF46,0xF04B,0xF1C4,0xF32A, + 0xF3EC,0xF42A,0xF545,0xF6F3,0xF809,0xF876,0xF7BB,0xF7C6, + 0xF85C,0xF9D4,0xFAF2,0xFABA,0xFA72,0xFA2A,0xFA36,0xFAEA, + 0xFB5B,0xFB8F,0xFB50,0xFACE,0xFA64,0xFA82,0xFB52,0xFB3E, + 0xF99B,0xF8D2,0xF907,0xF9C9,0xF97D,0xF8D7,0xF7F1,0xF6FC, + 0xF68E,0xF65B,0xF6B3,0xF764,0xF694,0xF56D,0xF463,0xF4C6, + 0xF570,0xF4DA,0xF3D8,0xF2EE,0xF31F,0xF30A,0xF32E,0xF2BE, + 0xF2DA,0xF2DC,0xF372,0xF4E2,0xF597,0xF4FD,0xF4AC,0xF4B0, + 0xF4E9,0xF669,0xF94B,0xF77D,0xF6BB,0xF748,0xF7F0,0xF921, + 0xF9CF,0xFA2F,0xFA52,0xFB6E,0xFBB8,0xFBA7,0xFB41,0xFB6C, + 0xFB4F,0xFB87,0xFB70,0xFBA9,0xFBD4,0xFB0C,0xFA8C,0xFAE6, + 0xFBEC,0xFD78,0xFE48,0xFE34,0xFE83,0xFEDA,0xFEF2,0xFFD2, + 0x002A,0xFF98,0xFF52,0xFF9A,0x0012,0x00A8,0x0078,0x0028, + 0xFF80,0xFF99,0x007A,0x0117,0x015C,0x01AC,0x01B2,0x0130, + 0x00B7,0x0049,0x0033,0xFF7E,0xFE24,0xFD9B,0xFD2E,0xFCB7, + 0xFB9C,0xFAA9,0xFA04,0xF93C,0xF8C2,0xF830,0xF7A7,0xF6D2, + 0xF604,0xF4F8,0xF299,0xF262,0xF330,0xF305,0xF23E,0xF1B9, + 0xF19A,0xF0FA,0xF069,0xEFC2,0xEF57,0xEF31,0xEEE3,0xEEB1, + 0xEE1F,0xED95,0xED88,0xED39,0xECB8,0xEB4D,0xEB6F,0xEBB4, + 0xEADD,0xE9B3,0xE952,0xE978,0xE963,0xE92D,0xE8F9,0xE8A4, + 0xE86E,0xE81B,0xE7E4,0xE804,0xE811,0xE863,0xE859,0xE7BC, + 0xE7EA,0xE75A,0xE766,0xE7B2,0xE7D0,0xE8F1,0xE960,0xE7E8, + 0xE77F,0xE76D,0xE776,0xE7C0,0xE889,0xE8C5,0xE910,0xE8CF, + 0xE93B,0xE9A2,0xE9D5,0xEA3B,0xEB14,0xEB7C,0xEB6F,0xEBA0, + 0xEBF7,0xEC3D,0xECA8,0xED1A,0xED27,0xED74,0xEE12,0xEE41, + 0xEEB8,0xEEEF,0xEF21,0xEFB0,0xF05C,0xF122,0xF191,0xF1D0, + 0xF1FD,0xF289,0xF2D8,0xF3B2,0xF4AA,0xF508,0xF535,0xF538, + 0xF541,0xF574,0xF62E,0xF6B0,0xF70B,0xF73F,0xF7C5,0xF85E, + 0xF8C9,0xF935,0xF992,0xFA1E,0xFA9E,0xFAF1,0xFB44,0xFBEE, + 0xFBF4,0xFC43,0xFCD6,0xFD67,0xFDCC,0xFE87,0xFEAD,0xFE9F, + 0xFEAD,0xFF5B,0x0009,0xFFDE,0xFFDB,0x00BD,0x0109,0x0108, + 0x0163,0x02B2,0x0174,0x0232,0x0401,0x031E,0x03D5,0x04AE, + 0x04EB,0x0535,0x0577,0x0588,0x0600,0x0650,0x064D,0x06C6, + 0x06CC,0x0752,0x076F,0x07EB,0x0862,0x089F,0x08BE,0x08FE, + 0x0907,0x093D,0x0986,0x09D7,0x09F2,0x0A1F,0x09F2,0x0A59, + 0x0A88,0x0AF2,0x0B5E,0x0B79,0x0BC2,0x0BF3,0x0C16,0x0C84, + 0x0C80,0x0CC7,0x0C53,0x0BFB,0x0C74,0x0CBF,0x0D22,0x0D32, + 0x0CFC,0x0D45,0x0D43,0x0CF8,0x0D33,0x0D5C,0x0D7C,0x0D6F, + 0x0D16,0x0D8F,0x0DC0,0x0DD3,0x0DD0,0x0E49,0x0EB6,0x0FBB, + 0x11C5,0x1111,0x10CA,0x1073,0x109A,0x10D4,0x1094,0x106D, + 0x1076,0x1084,0x1053,0x0FF9,0x1070,0x10DA,0x108F,0x1039, + 0x101A,0x0FFB,0x0FF6,0x0F3A,0x0FC9,0x1087,0x0FE8,0x0F31, + 0x0F80,0x0F72,0x0F3C,0x0F6A,0x0F14,0x0F1E,0x0F6E,0x0F62, + 0x0F61,0x0F57,0x0EA9,0x0EA7,0x0EB0,0x0F15,0x0F7B,0x0F68, + 0x0F26,0x0E92,0x0E43,0x0EB2,0x0ECC,0x0DB4,0x0DBC,0x0ED1, + 0x0E97,0x0E83,0x0E3D,0x0E3B,0x0E6D,0x0E41,0x0E02,0x0DC4, + 0x0D53,0x0D27,0x0D28,0x0CDD,0x0C7F,0x0CB5,0x0C47,0x0C53, + 0x0C63,0x0BEB,0x0BE2,0x0BDE,0x0C1D,0x0BD6,0x0B54,0x0B42, + 0x0B47,0x0B39,0x0AD7,0x0ABA,0x0AB1,0x0A4C,0x09C4,0x09CC, + 0x0A6B,0x0A7F,0x0A0D,0x09FB,0x09F9,0x09DF,0x09C3,0x099A, + 0x093B,0x0922,0x092C,0x0917,0x0923,0x0987,0x0985,0x091C, + 0x0910,0x0922,0x095E,0x0934,0x0970,0x0936,0x08CC,0x08F5, + 0x0902,0x08AF,0x0894,0x0888,0x081B,0x0890,0x087D,0x0870, + 0x083D,0x0801,0x0863,0x0907,0x08BD,0x084F,0x081F,0x086D, + 0x0771,0x0895,0x091A,0x0756,0x0832,0x080E,0x07CD,0x0793, + 0x0806,0x07B8,0x076F,0x0780,0x07B9,0x0785,0x07A6,0x0727, + 0x071B,0x0767,0x0793,0x07E7,0x07CF,0x07A8,0x074D,0x071F, + 0x06C3,0x06D5,0x06EF,0x06F0,0x0707,0x0701,0x0732,0x0722, + 0x06D3,0x0710,0x06EB,0x06B2,0x06CC,0x06C7,0x06AE,0x06C4, + 0x06D2,0x0700,0x06B7,0x068A,0x064D,0x065E,0x0634,0x0610, + 0x0650,0x0615,0x05EA,0x0625,0x061B,0x064C,0x0628,0x05F9, + 0x061B,0x060D,0x059C,0x05AB,0x056B,0x0546,0x05A2,0x055E, + 0x04BB,0x039B,0x0258,0x02C3,0x02FA,0x02D6,0x02EF,0x0306, + 0x0311,0x0375,0x0370,0x03AB,0x03F3,0x03A9,0x03C6,0x03A6, + 0x0362,0x0351,0x0351,0x0362,0x0300,0x0310,0x0386,0x0383, + 0x0336,0x02EA,0x0339,0x032B,0x0328,0x036B,0x038B,0x03AA, + 0x039A,0x0370,0x039A,0x0368,0x0365,0x03BA,0x03EC,0x03E8, + 0x0375,0x034F,0x0334,0x036A,0x0343,0x04B7,0x0440,0x0363, + 0x0319,0x0234,0x0251,0x02A3,0x02C8,0x0270,0x029D,0x02F4, + 0x0366,0x037E,0x037C,0x041E,0x043A,0x0423,0x03E5,0x0377, + 0x035F,0x0362,0x0360,0x034D,0x0365,0x038D,0x035F,0x0347, + 0x02F2,0x02C6,0x026E,0x0259,0x023A,0x0235,0x0247,0x02A9, + 0x0284,0x021B,0x018C,0x0184,0x01DE,0x0218,0x01C2,0x01EB, + 0x01FC,0x0156,0x013C,0x0161,0x016A,0x014D,0x0143,0x0123, + 0x00DB,0x0122,0x0112,0x012C,0x0105,0x0149,0x0179,0x0170, + 0x0101,0x00FE,0x009F,0x007B,0x0094,0xFFC1,0x0014,0x0063, + 0x0093,0x002F,0x0037,0x0081,0x0148,0x01FE,0x0212,0x0225, + 0x0262,0x02C8,0x03B5,0x048F,0x04AE,0x043D,0x0428,0x0531, + 0x06F0,0x0759,0x075E,0x0836,0x099F,0x0BA2,0x0D15,0x0E04, + 0x0EC8,0x0F09,0x0F72,0x0FAA,0x0FF7,0x0FE1,0x0F65,0x0F2A, + 0x0F54,0x1092,0x1102,0x10A0,0x0F56,0x0E8F,0x0EF3,0x1044, + 0x108B,0x0F8F,0x0F4A,0x0FB7,0x1077,0x11B1,0x12D1,0x1308, + 0x1289,0x12B6,0x1411,0x151C,0x156F,0x1577,0x152A,0x1540, + 0x15E1,0x171F,0x1866,0x18A6,0x1866,0x187A,0x1934,0x1996, + 0x18A1,0x17D4,0x1721,0x184D,0x1B26,0x1D89,0x1AF4,0x17DC, + 0x18B1,0x18F5,0x1A9E,0x1B2A,0x19F7,0x185D,0x1793,0x1787, + 0x185E,0x19A1,0x1AAB,0x1A4A,0x1889,0x17C1,0x17CE,0x1759, + 0x14D2,0x108F,0x0D0F,0x09DD,0x0556,0xFE72,0xF839,0xF4E5, + 0xF728,0xFDC0,0x0452,0x064D,0x02D1,0xFBB2,0xF528,0xF26F, + 0xF3F9,0xF718,0xF8D1,0xF992,0xFB83,0xFF5B,0x03DE,0x06AD, + 0x0713,0x07DB,0x086C,0x0879,0x0828,0x0855,0x09DE,0x0DF9, + 0x150D,0x1CB5,0x21AB,0x2200,0x1E71,0x1B1C,0x1B1F,0x1EE1, + 0x22ED,0x2442,0x2341,0x22F8,0x270C,0x2AEA,0x2DA9,0x2E32, + 0x2BC8,0x27C7,0x244C,0x2166,0x1EC0,0x1DA5,0x1E05,0x1F15, + 0x203F,0x1F68,0x1C20,0x1709,0x11FB,0x0DFD,0x0B83,0x08EC, + 0x064A,0x038E,0xFF81,0xFC70,0xFCCD,0xFD51,0xFB4F,0xF74A, + 0xF233,0xEE43,0xEA55,0xE6B3,0xE483,0xE4B0,0xE5AD,0xE5ED, + 0xE428,0xE2AA,0xE119,0xDF56,0xDDD7,0xDD1E,0xDCFD,0xDD59, + 0xDC9A,0xDAD2,0xDB8E,0xE028,0xE321,0xE3BC,0xE2F2,0xE2B7, + 0xE357,0xE3EC,0xE42A,0xE54A,0xE70B,0xE970,0xEB6F,0xEC78, + 0xED62,0xEEC5,0xEFF0,0xF127,0xF2C6,0xF43C,0xF4C7,0xF4BB, + 0xF51E,0xF6E0,0xF934,0xFB56,0xFBC8,0xFB61,0xFA74,0xF959, + 0xF8D0,0xF899,0xF8E4,0xF944,0xF924,0xF7DF,0xF65D,0xF529, + 0xF553,0xF5D1,0xF54E,0xF375,0xF0F3,0xEE58,0xEC4E,0xEBFE, + 0xECCF,0xED3D,0xEC1E,0xEA1D,0xE8A6,0xE7AE,0xE633,0xE47E, + 0xE26D,0xE1A6,0xE1D4,0xE169,0xE0CB,0xE052,0xDFB0,0xDEEF, + 0xDE56,0xDEA6,0xDFA3,0xDEC7,0xDCF0,0xDC85,0xDDDF,0xE048, + 0xE1A9,0xE12E,0xE1A9,0xE34F,0xE3A9,0xE3EC,0xE48F,0xE296, + 0xE4B3,0xE6C3,0xE8BD,0xEAB3,0xEB63,0xEB3B,0xEBC3,0xED68, + 0xEFF5,0xF206,0xF128,0xF001,0xEFBE,0xF1A0,0xF42A,0xF615, + 0xF73A,0xF770,0xF70B,0xF6A7,0xF761,0xF825,0xF885,0xF833, + 0xF823,0xF892,0xF8C2,0xF7DB,0xF6E9,0xF76D,0xF920,0xFA5A, + 0xF947,0xF6E9,0xF3F9,0xF385,0xF4B0,0xF662,0xF6EA,0xF618, + 0xF3F3,0xF284,0xF223,0xF2BA,0xF31F,0xF217,0xF101,0xF093, + 0xF0C1,0xF06F,0xEF99,0xEEEE,0xEF22,0xEF2B,0xEF46,0xEFA4, + 0xEF5C,0xEE35,0xECFA,0xEC91,0xEDC2,0xEE4D,0xED18,0xECDE, + 0xED0B,0xEDA1,0xEDE6,0xEE8E,0xEEF0,0xEF90,0xF09C,0xF136, + 0xF238,0xF2A0,0xF2AE,0xF281,0xF243,0xF338,0xF3A2,0xF35D, + 0xF12F,0xEE67,0xEDAE,0xEF42,0xF237,0xF510,0xF693,0xF6D3, + 0xF5DF,0xF4C5,0xF313,0xF28A,0xF3E4,0xF625,0xF7FD,0xF829, + 0xF7DA,0xF83C,0xFA7F,0xFC79,0xFD7D,0xFD10,0xFBF2,0xFAF6, + 0xFB77,0xFE09,0xFFDC,0xFFF0,0x005C,0x0159,0x0324,0x0412, + 0x0385,0x0231,0x0115,0x0113,0x0303,0x0504,0x0611,0x065F, + 0x05F6,0x060F,0x06D6,0x06ED,0x05E9,0x04B4,0x0300,0x0252, + 0x025F,0x0334,0x0465,0x049F,0x0406,0x039D,0x035B,0x029F, + 0x00F8,0xFE91,0xFD7B,0xFE66,0xFF77,0xFF41,0xFD7A,0xFBF3, + 0xFC57,0xFD7F,0xFE77,0xFD4C,0xFACC,0xF7E8,0xF6EF,0xF847, + 0xF9F0,0xFA9A,0xFAFB,0xFB34,0xFADB,0xF99E,0xF986,0xF9DA, + 0xF973,0xF905,0xF8E3,0xF9D5,0xFA9F,0xFA12,0xF97F,0xFA62, + 0xFD08,0xFED7,0xFE89,0xFCE2,0xFBFE,0xFC2B,0xFCDB,0xFCC5, + 0xFCE3,0xFD09,0xFC25,0xFBDE,0xFB8B,0xFAD0,0xF80F,0xF8EE, + 0xF898,0xF70E,0xF729,0xF782,0xF7ED,0xF797,0xF72B,0xF786, + 0xF7E0,0xF778,0xF70D,0xF6D7,0xF676,0xF5DA,0xF53D,0xF4D2, + 0xF4EC,0xF4C1,0xF416,0xF39B,0xF2EF,0xF235,0xF1F4,0xF179, + 0xF0DC,0xF017,0xEF0E,0xEE7B,0xEE2E,0xED69,0xED1B,0xEC3E, + 0xEB91,0xEB32,0xEAAE,0xEA05,0xE9EE,0xE999,0xE8B1,0xE84E, + 0xE7DE,0xE763,0xE708,0xE6C4,0xE6BF,0xE617,0xE595,0xE597, + 0xE54E,0xE53E,0xE56E,0xE562,0xE570,0xE542,0xE54A,0xE4E7, + 0xE508,0xE576,0xE5D0,0xE72A,0xE8F7,0xE85F,0xE8B3,0xE88C, + 0xE896,0xE885,0xE876,0xE8CE,0xE8F9,0xE96F,0xE9D9,0xEA02, + 0xEA17,0xEA1B,0xEA9B,0xEAE8,0xEB32,0xEBD0,0xEC0D,0xEC10, + 0xED36,0xED95,0xED5B,0xED89,0xEE41,0xEE47,0xEEA9,0xEF51, + 0xEF9A,0xEFF0,0xF04C,0xF0A8,0xF168,0xF1D1,0xF20E,0xF264, + 0xF28F,0xF34B,0xF3B2,0xF444,0xF4D6,0xF50C,0xF545,0xF594, + 0xF5A7,0xF514,0xF65F,0xF7A8,0xF7FC,0xF8B7,0xF8CC,0xF922, + 0xF99A,0xF9C3,0xFA07,0xF9FA,0xFA48,0xFB09,0xFB60,0xFBC2, + 0xFBF3,0xFCD1,0xFD0E,0xFD31,0xFD69,0xFDC1,0xFE12,0xFE97, + 0xFF76,0xFFC8,0x000F,0x006F,0x009E,0x0135,0x01DB,0x0248, + 0x0244,0x025C,0x02BA,0x0306,0x0338,0x03DD,0x045D,0x045D, + 0x04A1,0x0576,0x0601,0x05EE,0x061F,0x065F,0x0698,0x0732, + 0x078D,0x07BB,0x07E8,0x0820,0x085A,0x088C,0x08FF,0x0928, + 0x0943,0x0985,0x0999,0x09D3,0x0A42,0x0A59,0x0A72,0x0B0F, + 0x0B01,0x0BCE,0x0BB4,0x0B98,0x0B66,0x0B57,0x0BB0,0x0CBE, + 0x0C82,0x0C68,0x0CD3,0x0D3B,0x0C74,0x0E9C,0x0E30,0x0D37, + 0x0E3C,0x0DC2,0x0E6F,0x0E7B,0x0E97,0x0EA1,0x0EA3,0x0E72, + 0x0F01,0x0F2F,0x0F68,0x0F2E,0x0F23,0x0F74,0x0FA5,0x0FDB, + 0x0FF3,0x1047,0x0FFF,0x1017,0x1002,0x0FF8,0x101D,0x0FFC, + 0x0FE8,0x1033,0x1076,0x1076,0x106F,0x103F,0x1081,0x103B, + 0x1092,0x10E2,0x10E1,0x10C5,0x10CD,0x10FD,0x1115,0x10F9, + 0x1091,0x1107,0x1140,0x1167,0x1133,0x111C,0x10AA,0x108D, + 0x10AC,0x1115,0x10ED,0x10E7,0x110E,0x10F9,0x10B4,0x1090, + 0x10B3,0x1080,0x1060,0x105C,0x0F81,0x0DA1,0x0CD0,0x0D64, + 0x0DDF,0x0DF9,0x0DF2,0x0DEA,0x0E09,0x0DB4,0x0DB3,0x0DD7, + 0x0D8A,0x0D68,0x0D53,0x0D79,0x0DB0,0x0DDA,0x0DE7,0x0DCC, + 0x0CA8,0x0C3E,0x0D1B,0x0D7C,0x0CC3,0x0CDB,0x0D0C,0x0CC4, + 0x0CFB,0x0D43,0x0CF2,0x0D1B,0x0CC4,0x0C8E,0x0C79,0x0C3D, + 0x0C54,0x0C9C,0x0CFB,0x0D64,0x0D85,0x0CD1,0x0C49,0x0BB6, + 0x0CCA,0x0D5D,0x0BCF,0x0BD3,0x0B9E,0x0B3B,0x0B86,0x0BD8, + 0x0B73,0x0BA6,0x0B7A,0x0B98,0x0BFE,0x0BDB,0x0B95,0x0C7F, + 0x0CA3,0x0C66,0x0C81,0x0C45,0x0C34,0x0C12,0x0BCC,0x0BA0, + 0x0B9E,0x0B46,0x0B2B,0x0AFE,0x0B27,0x0B22,0x0AE4,0x0A6C, + 0x0A4E,0x09F0,0x099E,0x097F,0x098D,0x0954,0x08C0,0x0856, + 0x0860,0x0841,0x088B,0x08AA,0x086A,0x082C,0x0801,0x07FE, + 0x07C3,0x07DA,0x07CF,0x07AB,0x073D,0x06CB,0x0714,0x0744, + 0x06BF,0x0682,0x0655,0x0606,0x05F9,0x0642,0x062D,0x0607, + 0x05DF,0x05CB,0x0595,0x0517,0x054F,0x0572,0x04D5,0x0459, + 0x049A,0x046B,0x0489,0x0443,0x0513,0x041D,0x03EE,0x05C5, + 0x0498,0x0442,0x04B3,0x04C3,0x047D,0x0490,0x0442,0x0448, + 0x03E4,0x03F4,0x0418,0x0411,0x03B4,0x03C4,0x03D2,0x03A4, + 0x03E6,0x03F1,0x041E,0x03D1,0x0359,0x0363,0x03BE,0x0344, + 0x0390,0x0325,0x0323,0x0330,0x0306,0x02B7,0x02CF,0x02EB, + 0x02B2,0x02B7,0x02A4,0x024B,0x0241,0x01E0,0x01F6,0x022C, + 0x022B,0x01DE,0x01DC,0x01DE,0x01B7,0x01E7,0x022A,0x0210, + 0x01D5,0x0144,0x0152,0x0165,0x018F,0x018B,0x01B2,0x01BF, + 0x0192,0x01D9,0x026B,0x047E,0x0484,0x03C4,0x0390,0x0327, + 0x036E,0x03B7,0x0338,0x035D,0x032E,0x02F0,0x02D9,0x029B, + 0x02AB,0x0325,0x028D,0x024D,0x0207,0x01D3,0x0152,0x0112, + 0x01E9,0x01AA,0x0110,0x0109,0x0147,0x00C7,0x00E6,0x00C0, + 0xFF40,0xFFBA,0xFF3F,0xFF71,0xFF3A,0xFF03,0xFF01,0xFF05, + 0xFE90,0xFE96,0xFE5F,0xFE83,0xFE92,0xFE5E,0xFE46,0xFE40, + 0xFDF6,0xFDBF,0xFD80,0xFDDF,0xFE56,0xFD0C,0xFC00,0xFD5A, + 0xFDFA,0xFDD9,0xFDEE,0xFDD4,0xFDBD,0xFD21,0xFD20,0xFD32, + 0xFCB2,0xFC38,0xFBC8,0xFBD6,0xFB6D,0xFB66,0xFB47,0xFB83, + 0xFB71,0xFB18,0xFB41,0xFB1B,0xFAEC,0xFADC,0xFAFB,0xFAFE, + 0xFB16,0xFAE4,0xFB0E,0xFB3D,0xFB3B,0xFBF5,0xFC49,0xFCA5, + 0xFD23,0xFD33,0xFDAE,0xFE2A,0xFE56,0xFEC2,0xFF5F,0x0038, + 0x01F5,0x03B2,0x04B1,0x0534,0x0571,0x05A6,0x0577,0x059A, + 0x05F5,0x0585,0x0599,0x05F9,0x05E2,0x060B,0x05B7,0x0581, + 0x0506,0x055A,0x0614,0x05FD,0x0633,0x0688,0x07B1,0x0908, + 0x09F1,0x0A1A,0x0B2E,0x0C2F,0x0CAF,0x0BF8,0x0C8E,0x0D91, + 0x0E51,0x0E32,0x10F6,0x105C,0x1022,0x1105,0x10FF,0x1196, + 0x1296,0x1304,0x12B3,0x13C1,0x141D,0x1461,0x13E6,0x1431, + 0x148A,0x14BC,0x14EC,0x1571,0x1606,0x1645,0x16CB,0x16C0, + 0x16B0,0x164C,0x15C9,0x15C2,0x1627,0x16CF,0x1701,0x16CB, + 0x167C,0x165D,0x1612,0x157A,0x15A1,0x15DA,0x1545,0x14C5, + 0x12FE,0x1086,0x0D1B,0x084D,0x02DF,0xFD93,0xF825,0xF638, + 0xF92B,0x003F,0x0997,0x1007,0x1187,0x0CEE,0x03B8,0xF9BF, + 0xF303,0xF2DD,0xFA1D,0x0685,0x13B5,0x1DB3,0x21E5,0x1F8F, + 0x1830,0x0E6F,0x057E,0x038D,0x084F,0x1163,0x1C2D,0x25DA, + 0x2B91,0x2A6F,0x23FD,0x1B36,0x12B6,0x0DEF,0x0D93,0x1138, + 0x172E,0x1C4B,0x1EA4,0x1D90,0x1956,0x11E9,0x0B58,0x063B, + 0x02B3,0x013A,0x0167,0x01C9,0x01DD,0x01C3,0x00B6,0xFE50, + 0xFAEF,0xF6F8,0xF409,0xF1F4,0xEFBD,0xEECE,0xEF06,0xEFFD, + 0xF15D,0xF271,0xF31D,0xF3B6,0xF31B,0xF2C9,0xF291,0xF0ED, + 0xF0F6,0xF19D,0xF311,0xF605,0xF9F3,0xFD4A,0xFFE2,0x00A4, + 0xFF99,0xFDE8,0xFC70,0xFC48,0xFDD2,0x0002,0x02E5,0x05BD, + 0x0716,0x0726,0x062D,0x039A,0x009F,0xFDA8,0xFC24,0xFBC3, + 0xFC48,0xFD48,0xFE79,0xFEEA,0xFD90,0xFA7B,0xF6E4,0xF3A0, + 0xF12A,0xEEE2,0xEE0B,0xEE88,0xEF2F,0xEEE5,0xEDC4,0xECEF, + 0xECA5,0xEB23,0xE94B,0xE818,0xE733,0xE6EC,0xE713,0xE7D9, + 0xE9E1,0xEB95,0xEC57,0xEC07,0xEC35,0xEC64,0xEBBF,0xEB45, + 0xEBEF,0xED19,0xEE5F,0xF05B,0xF2B2,0xF448,0xF572,0xF538, + 0xF46E,0xF351,0xF2AA,0xF1CB,0xF19E,0xF2F1,0xF510,0xF775, + 0xF953,0xFA83,0xF71E,0xF5F3,0xF48B,0xF0C2,0xEFE5,0xF024, + 0xF1CA,0xF3AE,0xF464,0xF3FA,0xF205,0xEF8C,0xED53,0xEB8C, + 0xEABA,0xEA97,0xEB2C,0xEB86,0xEC07,0xEC46,0xEB9C,0xEAC0, + 0xE979,0xE8AD,0xE845,0xE8A0,0xE906,0xE9DA,0xEB38,0xEC16, + 0xECA4,0xED1A,0xED97,0xEEEC,0xEF67,0xEF9A,0xEFF1,0xF04F, + 0xF0AA,0xF12E,0xF22D,0xF3DF,0xF555,0xF5B0,0xF564,0xF57C, + 0xF5C9,0xF581,0xF4C1,0xF541,0xF60D,0xF6A0,0xF71E,0xF74B, + 0xF780,0xF758,0xF639,0xF4A3,0xF3B0,0xF445,0xF4AC,0xF58A, + 0xF85C,0xF89A,0xF824,0xF6E9,0xF573,0xF46D,0xF380,0xF2A4, + 0xF21E,0xF2D2,0xF440,0xF529,0xF4F0,0xF4DD,0xF48D,0xF2F2, + 0xF215,0xF20A,0xF2BE,0xF327,0xF417,0xF561,0xF599,0xF5CF, + 0xF6B0,0xF671,0xF553,0xF5CC,0xF696,0xF6D1,0xF70F,0xF7CF, + 0xF912,0xFA1D,0xF961,0xF833,0xF56D,0xEFF4,0xE64C,0xD8DC, + 0xC8ED,0xBF3C,0xBF4B,0xBF8D,0xC007,0xD08A,0xE9B1,0xFADB, + 0xFD36,0xEF2D,0xD434,0xC089,0xC01D,0xBF44,0xC7E4,0xECCF, + 0x1126,0x2AF8,0x3422,0x2AAF,0x141F,0xFB4B,0xEA40,0xE77F, + 0xF591,0x11D2,0x33DF,0x3E46,0x3D26,0x3D33,0x3DD2,0x2BBC, + 0x11FF,0x068C,0x09E5,0x19C3,0x2F5F,0x3D2F,0x3D85,0x3DCF, + 0x3332,0x1D6D,0x0A04,0xFC36,0xF53D,0xF4DC,0xF931,0xFF63, + 0x037C,0x02EE,0xFD51,0xF468,0xEA36,0xE067,0xD95A,0xD5F1, + 0xD510,0xD5D9,0xD6DB,0xD888,0xDC0A,0xE08E,0xE54B,0xE87E, + 0xE8DB,0xE5F6,0xE0FB,0xDD04,0xDC68,0xE0E0,0xEAB4,0xF766, + 0x041A,0x0D81,0x1193,0x10CA,0x0BCD,0x0500,0x0014,0xFF74, + 0x03D7,0x0F7A,0x1C46,0x253F,0x2BE5,0x2A14,0x21FF,0x16B9, + 0x0C48,0x05E9,0x05AE,0x09FA,0x117C,0x170B,0x18DA,0x16D8, + 0x10A2,0x07B5,0xFD3B,0xF4CC,0xEF72,0xEDB4,0xEF20,0xF1FE, + 0xF4BE,0xF60D,0xF435,0xEF0E,0xE989,0xE465,0xE038,0xDE2B, + 0xDE4C,0xE064,0xE3EA,0xE79C,0xEB92,0xEE2B,0xEF18,0xEEE9, + 0xEDC6,0xECCE,0xECF5,0xEEA5,0xF20A,0xF6A7,0xFBB4,0x008C, + 0x04DE,0x0828,0x0934,0x08E1,0x07EE,0x06E5,0x0660,0x07AA, + 0x0A4B,0x0E15,0x126B,0x15B8,0x1645,0x13E2,0x101B,0x0BA5, + 0x0844,0x04AA,0x0359,0x04C4,0x0627,0x0706,0x064A,0x04B2, + 0x01F3,0xFDC0,0xF89A,0xF485,0xF1CC,0xF113,0xF1E1,0xF351, + 0xF4DF,0xF5A6,0xF4E6,0xF38D,0xF03D,0xEDA4,0xECCE,0xEC7E, + 0xED12,0xEF15,0xF220,0xF561,0xF814,0xF996,0xFA64,0xFA1A, + 0xF941,0xF85B,0xF92F,0xFBA7,0xFEE6,0x02C7,0x0608,0x083D, + 0x09A1,0x096F,0x08EE,0x08C0,0x0915,0x0A85,0x09FA,0x0963, + 0x0A8C,0x0C45,0x0D4D,0x0DED,0x0DB4,0x0C29,0x097F,0x0650, + 0x04D9,0x0422,0x0471,0x05B2,0x06BF,0x0641,0x04FA,0x0313, + 0x003B,0xFD66,0xFB01,0xF948,0xF817,0xF844,0xF904,0xFA10, + 0xFAAF,0xFA66,0xF904,0xF6BC,0xF4B7,0xF43E,0xF510,0xF6FF, + 0xF8B8,0xFA79,0xFBC5,0xFC96,0xFCAF,0xFC6B,0xFCDB,0xFE09, + 0xFF5E,0x0002,0x00AF,0x017D,0x02D4,0x030A,0x021D,0xFE68, + 0xF6CA,0xEA79,0xD834,0xC53F,0xBFD8,0xC096,0xC07E,0xC25D, + 0xDCB8,0xFC00,0x0D49,0x09DB,0xF117,0xCCF7,0xBFBA,0xC1FB, + 0xC00C,0xCF9E,0x016D,0x2D78,0x3DF7,0x3E5C,0x379B,0x1856, + 0xFA3F,0xE8D8,0xEB0C,0x0502,0x2C92,0x3F87,0x3EBC,0x3F9B, + 0x3E92,0x4001,0x32F0,0x1750,0x0E78,0x1830,0x2FC2,0x3EF9, + 0x3F09,0x3EF1,0x3F13,0x3CD6,0x2718,0x0EEC,0x0008,0xFA00, + 0xFC59,0x030F,0x0A64,0x0EDD,0x0C98,0x03FE,0xF7E1,0xEADB, + 0xDF5C,0xD6CD,0xD25B,0xD0A0,0xD1D7,0xD4EF,0xD94F,0xDEDE, + 0xE4F0,0xE971,0xEA3F,0xE719,0xE1AA,0xDBE9,0xD85C,0xDA02, + 0xE22B,0xEFF8,0x0080,0x0F35,0x1793,0x193D,0x14F1,0x0D07, + 0x04A3,0x0067,0x02F5,0x0C5F,0x1A3B,0x293D,0x34BB,0x3A8A, + 0x3743,0x2AB1,0x1BF8,0x0F70,0x099F,0x0B19,0x1299,0x1C44, + 0x2428,0x26DB,0x21D8,0x16AD,0x082F,0xFB72,0xF254,0xED5A, + 0xEDFB,0xF254,0xF716,0xF9AE,0xFA50,0xF5A8,0xEDD6,0xE4E1, + 0xDDCA,0xD9C8,0xD9C7,0xDCF7,0xE1A5,0xE643,0xEA00,0xEBDC, + 0xEC0E,0xEB8D,0xEB43,0xEAFC,0xEB86,0xED45,0xF029,0xF499, + 0xF93E,0xFDC5,0x0332,0x0801,0x0A89,0x0B4E,0x0C5D,0x0BB7, + 0x0A78,0x09E2,0x0B08,0x0E11,0x124A,0x16D2,0x1A05,0x1AAC, + 0x181D,0x13A7,0x0DA6,0x0711,0x032F,0x02D8,0x0481,0x07CF, + 0x0ABD,0x0B55,0x08F6,0x038D,0xFC2E,0xF4E8,0xEFB1,0xED30, + 0xEDAE,0xEFD1,0xF345,0xF5FF,0xF6AD,0xF4F2,0xF057,0xEAB6, + 0xE649,0xE4B4,0xE569,0xE898,0xEE14,0xF2B9,0xF57C,0xF60F, + 0xF53D,0xF418,0xF2FE,0xF375,0xF566,0xF7BE,0xFB43,0xFF36, + 0x028E,0x0515,0x05F6,0x05EF,0x05F9,0x065C,0x070C,0x0874, + 0x09B8,0x0B2C,0x0B82,0x0B1E,0x0A95,0x0AE2,0x0AEF,0x0B2A, + 0x0B08,0x09F2,0x0824,0x05CA,0x02E5,0x01A8,0x015C,0x007D, + 0xFF86,0x011F,0xFE0E,0xFC68,0xFB29,0xF927,0xF72E,0xF58F, + 0xF449,0xF44D,0xF54B,0xF600,0xF728,0xF739,0xF638,0xF50F, + 0xF44E,0xF3E2,0xF49F,0xF5F1,0xF759,0xF950,0xFA70,0xFB6B, + 0xFC3E,0xFD5A,0xFECE,0xFFF0,0x00C0,0x019A,0x01F0,0x0293, + 0x0313,0x0374,0x02C4,0xFECF,0xF64A,0xE871,0xD5ED,0xC397, + 0xBF55,0xC043,0xBFAA,0xC722,0xE5C1,0x017F,0x0E32,0x067F, + 0xEA04,0xC73A,0xBF4E,0xC1B4,0xBFD2,0xD8D7,0x0C45,0x32BF, + 0x3DD1,0x3E49,0x3089,0x0FEA,0xF532,0xE8BD,0xF0D2,0x0C6E, + 0x32B3,0x3E92,0x3D39,0x3E38,0x3DB4,0x3EBB,0x2A7A,0x11BE, + 0x0E7C,0x1BF7,0x3484,0x3EF9,0x3E55,0x3E61,0x3EFE,0x371E, + 0x1F61,0x0BA3,0x001F,0xFBDA,0xFD27,0x0361,0x0A2B,0x0D59, + 0x0A45,0x01F5,0xF698,0xEA12,0xDF41,0xD842,0xD489,0xD3A6, + 0xD49B,0xD703,0xDA44,0xDF54,0xE562,0xEB13,0xED54,0xEACF, + 0xE45F,0xDD4C,0xD91F,0xDA5D,0xE4E6,0xF435,0x03CC,0x113C, + 0x18F4,0x1A0A,0x14E6,0x0C6D,0x04C3,0x017A,0x04BA,0x0F2F, + 0x1EBD,0x2E25,0x392F,0x3D2C,0x36D9,0x2A0C,0x1B0B,0x0EE8, + 0x09FE,0x0D37,0x164A,0x201B,0x264E,0x269A,0x2053,0x1553, + 0x07E9,0xFB55,0xF24F,0xEE97,0xEF12,0xF30A,0xF826,0xFB97, + 0xFA5E,0xF506,0xED6F,0xE4DF,0xDE10,0xDAE7,0xDB7E,0xDE6F, + 0xE22A,0xE5B4,0xE89A,0xEB3A,0xED21,0xEE3D,0xEDCD,0xED40, + 0xEC6A,0xEC2E,0xEDD6,0xF1E4,0xF87F,0xFF56,0x0577,0x09E8, + 0x0CC4,0x0DCC,0x0CA5,0x0AD7,0x08FE,0x0827,0x0917,0x0C52, + 0x1208,0x17DA,0x1B9A,0x1BFB,0x1909,0x1371,0x0C93,0x0791, + 0x05DA,0x04A6,0x07B5,0x0B80,0x0C6E,0x0C4B,0x090D,0x03AC, + 0xFD70,0xF76C,0xF310,0xF09E,0xF0A7,0xF1E5,0xF3BE,0xF4DE, + 0xF4D4,0xF36D,0xF0C5,0xED86,0xEB20,0xE987,0xE8DA,0xEA06, + 0xECDE,0xF042,0xF37E,0xF5B4,0xF6C5,0xF710,0xF6F7,0xF6D2, + 0xF75D,0xF872,0xFA8B,0xFD0C,0x0001,0x03A5,0x067D,0x0862, + 0x09F7,0x0A0E,0x0997,0x08FB,0x088E,0x0906,0x0994,0x0A7D, + 0x0C37,0x0D9E,0x0D8A,0x0C1E,0x0ACC,0x0942,0x0753,0x0539, + 0x034A,0x0221,0x013F,0x011C,0x00D5,0x0087,0x00DC,0x0185, + 0xFE6D,0xFB70,0xF8F6,0xF734,0xF5E4,0xF608,0xF6ED,0xF7B8, + 0xF7E4,0xF78E,0xF732,0xF6BE,0xF5A8,0xF532,0xF531,0xF574, + 0xF6AE,0xF891,0xFAAB,0xFD4F,0xFE67,0xFD28,0xFC2C,0xFCC9, + 0xFDCC,0xFF75,0x01DA,0x0401,0x053F,0x048E,0x018C,0xFBA4, + 0xF118,0xE210,0xCE73,0xC010,0xBF52,0xBFE6,0xBEE0,0xCE48, + 0xEED0,0x05E5,0x0C79,0xFCFB,0xDA4D,0xC07A,0xBFFB,0xC0AA, + 0xC133,0xE502,0x16DE,0x37B1,0x3D0F,0x3D47,0x2760,0x058B, + 0xEC87,0xE454,0xF189,0x11D8,0x36F4,0x3E2F,0x3D56,0x3DA4, + 0x3D86,0x3B32,0x1FFB,0x0CC7,0x0DB1,0x1F65,0x3889,0x3E49, + 0x3D7C,0x3D98,0x3E23,0x30FB,0x17C2,0x0506,0xFA18,0xF811, + 0xFCE5,0x0533,0x0B9C,0x0CA3,0x079A,0xFD4F,0xEFF8,0xE31B, + 0xD9A8,0xD4F6,0xD2D8,0xD2B6,0xD3CA,0xD66D,0xDADF,0xE057, + 0xE5EC,0xE9EB,0xEA83,0xE6C4,0xE09B,0xDB5D,0xD8F0,0xDCA8, + 0xE723,0xF5BF,0x05EF,0x122D,0x18CF,0x185B,0x1237,0x0987, + 0x01E5,0xFFDB,0x05AE,0x11CA,0x219D,0x3008,0x38C0,0x37CD, + 0x30A3,0x2368,0x136F,0x0B50,0x08BF,0x0D67,0x1677,0x200E, + 0x25D3,0x253A,0x1D23,0x0F98,0x00F1,0xF52C,0xEE4F,0xED59, + 0xF07E,0xF5EE,0xFAED,0xFB40,0xF73F,0xEFBA,0xE818,0xE111, + 0xDC10,0xDA7E,0xDC6B,0xE09A,0xE49D,0xE7B0,0xEA00,0xEBAF, + 0xEBFB,0xEBE3,0xEC05,0xECBA,0xED9E,0xEEE1,0xF12E,0xF4FE, + 0xFA2F,0xFFE3,0x05B9,0x09E6,0x0C50,0x0C7A,0x0B7D,0x09AC, + 0x087C,0x0901,0x0B79,0x0FE1,0x145C,0x18D7,0x1B11,0x1A5E, + 0x16E9,0x11BC,0x0B8C,0x073C,0x0506,0x056F,0x07C2,0x0A9F, + 0x0BA5,0x0946,0x0598,0xFF08,0xF801,0xF1F7,0xEEC6,0xEE85, + 0xF030,0xF259,0xF3A0,0xF3FA,0xF2D9,0xEF9E,0xEC83,0xE974, + 0xE6EB,0xE669,0xE78E,0xE995,0xED60,0xF1FE,0xF49D,0xF538, + 0xF51C,0xF502,0xF528,0xF5D5,0xF77C,0xF982,0xFC1C,0xFF0C, + 0x02A4,0x0611,0x07DE,0x08B8,0x0919,0x0933,0x08FA,0x084A, + 0x0846,0x0A26,0x0BA7,0x0CF0,0x0F1A,0x0F10,0x0E10,0x0CD4, + 0x0AB3,0x0859,0x066D,0x0461,0x0293,0x0232,0x0366,0x04D8, + 0x04F4,0x03FB,0x0200,0xFEE0,0xFB97,0xF8C5,0xF7C8,0xF7FA, + 0xF8EE,0xF950,0xF898,0xF7AE,0xF750,0xF676,0xF5A2,0xF57C, + 0xF59D,0xF5C9,0xF678,0xF7D5,0xF9B5,0xFB43,0xFC38,0xFC6C, + 0xFC7E,0xFD43,0xFE87,0x0015,0x01CF,0x035F,0x03EB,0x03E4, + 0x02BF,0xFF4B,0xF91D,0xEEB4,0xDF4D,0xCB2D,0xC01C,0xC07F, + 0xC0CD,0xC0F0,0xD620,0xF6D1,0x0ABA,0x0B9D,0xF677,0xD247, + 0xC008,0xC1FC,0xC070,0xC8D3,0xF5E4,0x23EC,0x3C0F,0x3E65, + 0x3AAC,0x1F14,0xFEB4,0xE941,0xE709,0xF9A7,0x1FFF,0x3E77, + 0x3F30,0x3EAE,0x3F1D,0x405B,0x3645,0x1889,0x0CA2,0x12C6, + 0x2841,0x3CEF,0x3F57,0x3F0D,0x3F08,0x3E12,0x2B98,0x12A0, + 0x0155,0xF866,0xF84E,0xFEB5,0x0764,0x0DC6,0x0D7D,0x064B, + 0xFA18,0xEC9F,0xE0DA,0xD8B5,0xD425,0xD254,0xD1F2,0xD353, + 0xD678,0xDBBA,0xE238,0xE828,0xEB5A,0xE9CE,0xE45F,0xDD62, + 0xD82F,0xD810,0xDEEA,0xEBCF,0xFB39,0x09B6,0x13A6,0x189D, + 0x1705,0x1017,0x06AF,0x004B,0xFFF4,0x063C,0x125C,0x2202, + 0x2F9E,0x36BC,0x34CD,0x2AF7,0x1D55,0x10DE,0x0A9A,0x09AC, + 0x0DD8,0x1686,0x1F78,0x2373,0x21A9,0x19E0,0x0D40,0xFFF1, + 0xF410,0xEC7A,0xEA8A,0xEE27,0xF3E7,0xF897,0xF9E0,0xF73A, + 0xF0B4,0xE744,0xDF22,0xDB2C,0xD9CE,0xDAEA,0xDE4F,0xE298, + 0xE65A,0xE96E,0xEB5C,0xEC60,0xECAC,0xEC51,0xEC2F,0xEC3F, + 0xECF3,0xEFBD,0xF4D8,0xFACF,0x00BD,0x06DA,0x0B29,0x0D76, + 0x0CE6,0x0AEB,0x08FC,0x06D3,0x060E,0x09DD,0x0F53,0x156F, + 0x1A36,0x1C1B,0x1A9C,0x1597,0x0F24,0x08C9,0x03AC,0x01A7, + 0x02B5,0x056F,0x074D,0x07EC,0x06DE,0x0386,0xFE80,0xF869, + 0xF250,0xEDC4,0xEBC0,0xEBB6,0xED1F,0xEFF0,0xF264,0xF2ED, + 0xF09C,0xECEC,0xE90F,0xE652,0xE54C,0xE608,0xE8DA,0xECAF, + 0xF02C,0xF256,0xF40B,0xF548,0xF5EE,0xF55A,0xF54F,0xF5DF, + 0xF6BE,0xF917,0xFC32,0x000B,0x03FA,0x06BC,0x0870,0x090A, + 0x0848,0x0796,0x06CD,0x067F,0x0692,0x07AA,0x0A47,0x0C9F, + 0x0D8F,0x0D7F,0x0C6B,0x09BA,0x0604,0x01ED,0x0003,0xFFD1, + 0x017E,0x031F,0x047A,0x03C3,0x01AD,0xFDF4,0xF971,0xF688, + 0xF72D,0xF52D,0xF5B5,0xF725,0xF764,0xF7C7,0xF728,0xF637, + 0xF54A,0xF49B,0xF34C,0xF371,0xF435,0xF603,0xF817,0xFA1E, + 0xFB9D,0xFC7A,0xFCB0,0xFCA2,0xFCF8,0xFDE7,0xFF48,0x0065, + 0x01D8,0x0334,0x04EE,0x0591,0x044A,0xFFC8,0xF73D,0xEA2D, + 0xD8A5,0xC5C5,0xBF55,0xC04F,0xBFCE,0xC392,0xDDC8,0xFAF9, + 0x0B69,0x07F2,0xEEEA,0xCBC5,0xBF86,0xC1AD,0xBF9F,0xCFD7, + 0x017B,0x2C61,0x3D23,0x3EA0,0x3632,0x15A9,0xF89A,0xE81E, + 0xEB7E,0x02F1,0x2AE9,0x3FCF,0x3E9E,0x3F67,0x3E79,0x3FBF, + 0x2D54,0x111F,0x0A9E,0x157E,0x2F2D,0x3EED,0x3E3D,0x3E27, + 0x3ED3,0x3A4C,0x228C,0x0C7A,0xFF06,0xFA11,0xFD0A,0x0400, + 0x0B60,0x0F5D,0x0C82,0x02E5,0xF699,0xEA13,0xDEE7,0xD7A9, + 0xD4D8,0xD471,0xD4E6,0xD605,0xD892,0xDCEB,0xE390,0xE97A, + 0xEC55,0xEAA0,0xE51D,0xDE59,0xD9FE,0xDAFC,0xE2B8,0xEFE9, + 0xFF70,0x0D98,0x178A,0x1C08,0x198C,0x0FBE,0x0641,0x005C, + 0x015C,0x0A1B,0x196B,0x2A40,0x378E,0x3C45,0x3789,0x2B28, + 0x1BB1,0x0F35,0x0A12,0x0BAD,0x1305,0x1D11,0x24AC,0x26BC, + 0x21BF,0x16D9,0x08AB,0xFB64,0xF224,0xEDDD,0xEEFE,0xF37F, + 0xF8AA,0xFB79,0xFA59,0xF4E7,0xECAE,0xE47D,0xDE98,0xDC2A, + 0xDC95,0xDF36,0xE2AC,0xE55D,0xE81B,0xEA8B,0xEC9A,0xEDD4, + 0xEE0E,0xED30,0xEC60,0xECA0,0xEE8B,0xF253,0xF73B,0xFCD7, + 0x0246,0x0711,0x0A8A,0x0C20,0x0C5B,0x0B9E,0x09A8,0x07D0, + 0x086C,0x0B3A,0x1028,0x1643,0x1A42,0x1B30,0x1833,0x12FB, + 0x0CB8,0x0617,0x02FC,0x0329,0x04F2,0x074A,0x0980,0x0AB3, + 0x06DB,0x0383,0xFDE4,0xF563,0xEF72,0xECC5,0xECE3,0xEF59, + 0xF2AD,0xF4D9,0xF481,0xF148,0xEC7B,0xE8B1,0xE68E,0xE5BB, + 0xE6AF,0xE964,0xEC6E,0xEF4B,0xF17F,0xF2E9,0xF423,0xF462, + 0xF43C,0xF483,0xF5E5,0xF808,0xFA2D,0xFC6D,0xFEEF,0x0160, + 0x03C7,0x05CE,0x07CA,0x09CD,0x0A73,0x09B2,0x083F,0x070A, + 0x0734,0x088D,0x0ADF,0x0CD1,0x0DEB,0x0DED,0x0BFA,0x091C, + 0x0626,0x0361,0x00E7,0xFFB7,0xFFC9,0x005A,0x0111,0x01D9, + 0x00FC,0xFED6,0xFB5C,0xF785,0xF40A,0xF2E9,0xF4EA,0xF596, + 0xF767,0xF922,0xFA0A,0xF889,0xF6AB,0xF597,0xF407,0xF2D5, + 0xF3B1,0xF5C4,0xF804,0xFA2B,0xFBBB,0xFCFB,0xFD92,0xFD8B, + 0xFD1E,0xFCE8,0xFE8B,0x00A6,0x0119,0x021A,0x03D2,0x0455, + 0x031E,0xFEB2,0xF5E7,0xE960,0xD8DA,0xC5EE,0xBEF5,0xC02A, + 0xBF5D,0xCC91,0xEA02,0x02F6,0x0DA5,0x0414,0xE7F0,0xC771, + 0xBF22,0xC10C,0xC09E,0xDBF4,0x0AA0,0x2F14,0x3D25,0x3C6C, + 0x2820,0x098D,0xF06F,0xE54C,0xED3D,0x0703,0x2C88,0x3E80, + 0x3D70,0x3D7F,0x3D6F,0x3B02,0x2166,0x0BCC,0x083B,0x148B, + 0x2C12,0x3CB9,0x3D9B,0x3D3C,0x3E2D,0x31A3,0x18FF,0x05ED, + 0xFA5C,0xF733,0xFAE0,0x0214,0x0887,0x0AF3,0x081C,0xFFD5, + 0xF4AC,0xE8C5,0xDE7D,0xD80C,0xD4D6,0xD45B,0xD5A2,0xD875, + 0xDCFF,0xE1DF,0xE659,0xE9FF,0xEB15,0xE881,0xE349,0xDDDD, + 0xDB4D,0xDD33,0xE457,0xF11A,0xFFA9,0x0C54,0x1466,0x1618, + 0x115D,0x093D,0x0125,0xFD13,0x001A,0x09E8,0x17E4,0x2606, + 0x2FC6,0x32C3,0x2CEA,0x210D,0x13DD,0x09A4,0x04AF,0x0969, + 0x10FF,0x1824,0x1F55,0x209F,0x1B7C,0x1121,0x0414,0xF849, + 0xF149,0xEE7A,0xF04D,0xF40C,0xF8CD,0xFB68,0xFA0C,0xF528, + 0xEE29,0xE6E0,0xE0F8,0xDE58,0xDEE0,0xE1ED,0xE568,0xE8E7, + 0xEB93,0xEE28,0xEF93,0xF057,0xF090,0xEFEF,0xEF59,0xEEA6, + 0xEF59,0xF21E,0xF736,0xFDDD,0x046A,0x0950,0x0C05,0x0CCC, + 0x0B1F,0x086A,0x0667,0x057E,0x06D8,0x0A99,0x0FAF,0x1620, + 0x1A25,0x1A8C,0x1768,0x1185,0x09DA,0x0423,0x01FA,0x0372, + 0x072E,0x0AE5,0x0C14,0x0B13,0x07D4,0x024A,0xFC10,0xF582, + 0xF0BE,0xEF25,0xEE93,0xF087,0xF35C,0xF63B,0xF666,0xF403, + 0xF084,0xED0E,0xEA43,0xE8DB,0xE961,0xEBEC,0xEEFD,0xF1D0, + 0xF3EB,0xF6BF,0xF785,0xF78B,0xF830,0xF769,0xF63E,0xF6CF, + 0xF9B8,0xFD9E,0x024D,0x0639,0x0882,0x0940,0x08D5,0x0845, + 0x07B9,0x0708,0x068F,0x06DC,0x0871,0x0AE9,0x0D50,0x0EB6, + 0x0F41,0x0E0F,0x0B7D,0x089F,0x0458,0x01C2,0x010F,0x0175, + 0x02BA,0x0470,0x0597,0x04E7,0x0256,0xFE95,0xFA9D,0xF6F6, + 0xF4C4,0xF529,0xF744,0xF999,0xFBCC,0xFC98,0xFC46,0xFA32, + 0xF7B5,0xF5CD,0xF46D,0xF48B,0xF603,0xF830,0xFADE,0xFD5D, + 0xFF6C,0x00CE,0x00CE,0xFFE8,0xFEAC,0xFDA3,0xFDCE,0xFFCF, + 0x0245,0x050F,0x06CF,0x06BF,0x0460,0xFF1E,0xF85B,0xF08B, + 0xE842,0xE1D3,0xDFD4,0xE4ED,0xEFD5,0xFD5B,0x0879,0x0C05, + 0x0557,0xF6E7,0xE674,0xDAF7,0xDA41,0xE498,0xF5BC,0x09BD, + 0x19B3,0x1FE4,0x1B6F,0x0F3E,0x00FD,0xF608,0xF1D2,0xF698, + 0x0313,0x137A,0x2453,0x2DED,0x2DA6,0x2443,0x167E,0x081E, + 0xFF89,0x0135,0x07C6,0x1257,0x1C61,0x2124,0x203C,0x1A42, + 0x110D,0x0750,0xFF81,0xFBC6,0xFC12,0xFE7D,0x01FB,0x04B7, + 0x05B9,0x03C9,0xFF1F,0xFA3B,0xF64B,0xF3F5,0xF238,0xF077, + 0xEF69,0xEF45,0xEF87,0xF15A,0xF513,0xF8B2,0xFA91,0xFA68, + 0xF79F,0xF3DA,0xF028,0xEF4B,0xF16B,0xF53B,0xFAC8,0x00C6, + 0x0582,0x0814,0x0743,0x0476,0x0041,0xFC49,0xFA93,0xFC14, + 0x014C,0x0843,0x0E7E,0x11B9,0x1142,0x0DC7,0x085D,0x027F, + 0xFEA0,0xFDC7,0xFFEF,0x03DE,0x083B,0x0C99,0x0E3E,0x0B66, + 0x0682,0x00BD,0xFBB2,0xF80F,0xF71A,0xF89A,0xFB78,0xFE1B, + 0xFF76,0xFED6,0xFC4E,0xF8A3,0xF4EC,0xF31B,0xF26B,0xF269, + 0xF2D5,0xF452,0xF7A6,0xF9C8,0xF9EB,0xFA24,0xF9D9,0xF7D7, + 0xF65E,0xF63A,0xF7B0,0xF9DF,0xFBDA,0xFD46,0xFE9F,0x00EB, + 0x023F,0x030B,0x0354,0x02EC,0x018C,0x0061,0x002F,0x01A8, + 0x045A,0x06E2,0x07CF,0x0727,0x0732,0x0633,0x0404,0x01D9, + 0x00D1,0x00C8,0x01B3,0x0265,0x035E,0x0332,0x0221,0x00CA, + 0xFED2,0xFC46,0xFAEE,0xF9BE,0xF8BD,0xF7F4,0xF732,0xF6B6, + 0xF645,0xF5CC,0xF4C9,0xF3EA,0xF2C2,0xF1BE,0xF0D7,0xF0C3, + 0xF245,0xF509,0xF7AD,0xF908,0xF88E,0xF7D3,0xF70F,0xF6E6, + 0xF741,0xF7CE,0xF837,0xF864,0xF81B,0xF7BF,0xF7EA,0xF77C, + 0xF6FB,0xF695,0xF656,0xF565,0xF475,0xF406,0xF35F,0xF313, + 0xF2A4,0xF20B,0xF161,0xF0D6,0xF013,0xEF54,0xEE27,0xED4E, + 0xEC4C,0xEBF7,0xEB5C,0xEB97,0xEB25,0xEADD,0xEA10,0xE8DD, + 0xE87E,0xE899,0xE7FA,0xE77B,0xE78D,0xE710,0xE682,0xE807, + 0xE5E1,0xE627,0xE6D3,0xE68A,0xE649,0xE677,0xE615,0xE636, + 0xE649,0xE648,0xE6A0,0xE6BD,0xE6FB,0xE6FC,0xE78C,0xE79E, + 0xE7A3,0xE805,0xE89B,0xE88B,0xE8FD,0xE95F,0xE990,0xE9EF, + 0xE9F8,0xE9FB,0xEA24,0xEA44,0xEABE,0xEB3D,0xEBD2,0xEC16, + 0xEC88,0xED18,0xED43,0xEDD6,0xEE41,0xEE26,0xEE4C,0xEEB7, + 0xEF65,0xF003,0xF08A,0xF125,0xF15E,0xF171,0xF1E9,0xF23C, + 0xF29D,0xF302,0xF3B2,0xF438,0xF4B5,0xF52D,0xF5C8,0xF5FE, + 0xF683,0xF71F,0xF7FA,0xF843,0xF8C6,0xF92A,0xF906,0xF796, + 0xF7D6,0xF8EA,0xF9BD,0xFA22,0xFB5C,0xFBEA,0xFBFB,0xFC3C, + 0xFC7E,0xFD3A,0xFD8C,0xFDED,0xFEBC,0xFF29,0xFFDB,0x004A, + 0x00CA,0x00DA,0x0087,0x0158,0x027A,0x0262,0x021B,0x02F1, + 0x03A7,0x0409,0x0454,0x0493,0x04AF,0x04DC,0x0545,0x05E3, + 0x0633,0x0638,0x0649,0x06AF,0x070C,0x07C3,0x0837,0x088E, + 0x08CD,0x088E,0x0946,0x09F3,0x0928,0x08E9,0x093E,0x0970, + 0x09D2,0x09D9,0x0A2B,0x0AB3,0x0AD2,0x0B6E,0x0C56,0x0CCF, + 0x0D65,0x0DF1,0x0DA4,0x0DA1,0x0DB5,0x0DE9,0x0DE0,0x0E42, + 0x0E86,0x0E32,0x0E3D,0x0E6F,0x0DE4,0x0DFB,0x0E51,0x0E39, + 0x0E5B,0x0E31,0x0E00,0x0E04,0x0D8A,0x0D69,0x0DE1,0x0DB6, + 0x0DB1,0x0E15,0x0DDA,0x0D5E,0x0D7E,0x0D2A,0x0D6A,0x0E0B, + 0x0E9F,0x0ED6,0x0E7C,0x0E1D,0x0DB7,0x0D83,0x0D8A,0x0E00, + 0x0DCC,0x0DD0,0x0DF2,0x0DE4,0x0DE1,0x0DE9,0x0DDB,0x0E10, + 0x0E7A,0x0E90,0x0E14,0x0DFF,0x0E19,0x0DE8,0x0E05,0x0E27, + 0x0D09,0x0CDF,0x0D3F,0x0D45,0x0D44,0x0D19,0x0D96,0x0B8C, + 0x0C3C,0x0D8D,0x0CB9,0x0CF2,0x0D03,0x0C7E,0x0CE3,0x0CB8, + 0x0CAA,0x0CB5,0x0CC6,0x0CC1,0x0C6B,0x0C43,0x0C46,0x0C74, + 0x0C68,0x0C11,0x0BB5,0x0BD6,0x0C19,0x0BC3,0x0BC6,0x0BDF, + 0x0C2F,0x0C7A,0x0BF7,0x0C06,0x0B9B,0x0B64,0x0B2D,0x0ABF, + 0x0AA9,0x0AD3,0x0ADD,0x0B0A,0x0AB5,0x0A66,0x09E1,0x09E3, + 0x0A22,0x09E2,0x0A28,0x09E7,0x0964,0x0960,0x0952,0x0907, + 0x08DE,0x08E7,0x0934,0x0926,0x08ED,0x08EE,0x0934,0x08CA, + 0x08A3,0x0920,0x0962,0x09CC,0x0A2D,0x0BC8,0x0ADD,0x0A67, + 0x0A1F,0x09BB,0x09A7,0x09B2,0x09CB,0x0977,0x090F,0x08A7, + 0x08B8,0x08B7,0x089B,0x08C2,0x08E4,0x08C8,0x0858,0x0795, + 0x074D,0x07EA,0x0830,0x07B1,0x0774,0x07C8,0x0766,0x0702, + 0x06B5,0x06B2,0x0687,0x0683,0x0638,0x0630,0x0623,0x05FB, + 0x0607,0x05A5,0x05A7,0x05BF,0x05B0,0x05AF,0x059D,0x0539, + 0x053A,0x0492,0x038D,0x0457,0x058C,0x05B9,0x0568,0x04E0, + 0x049F,0x040E,0x0432,0x043D,0x0424,0x03C7,0x0347,0x030D, + 0x025E,0x01FC,0x0269,0x022C,0x0262,0x02A7,0x0299,0x029A, + 0x0235,0x01B3,0x01A8,0x018F,0x01D9,0x0253,0x024C,0x023B, + 0x01FD,0x01E8,0x01B8,0x0184,0x01AC,0x01D5,0x021E,0x01CB, + 0x0206,0x021D,0x01AA,0x0177,0x0197,0x01D9,0x01EF,0x01DE, + 0x01B0,0x019E,0x0193,0x0134,0x00EE,0x0160,0x01FF,0x01E1, + 0x017E,0x0197,0x0138,0x011B,0x0113,0x0155,0x0173,0x0175, + 0x0115,0x00EA,0x011E,0x0136,0x0158,0x00ED,0x00BA,0x0109, + 0x014C,0x0101,0x0105,0x0150,0x0143,0x00EB,0x0264,0x0264, + 0x0112,0x0225,0x012F,0x00D1,0x00B1,0x010E,0x0122,0x017E, + 0x0196,0x0196,0x0169,0x0129,0x015F,0x0144,0x013B,0x00EF, + 0x00D3,0x00A4,0x0080,0xFEFA,0xFF8F,0x0167,0x042D,0x05FC, + 0x0544,0x06D9,0x04EB,0x0261,0x022C,0x0191,0x01C6,0x01EA, + 0x0205,0x012B,0x002B,0x002A,0x0130,0x01E2,0x02A1,0x0303, + 0x02EC,0x02E5,0x041F,0x05CD,0x0714,0x076C,0x0554,0x02FB, + 0x02C2,0x0502,0x093D,0x0E11,0x10C4,0x1047,0x0F51,0x0F2A, + 0x0E49,0x0D5C,0x0F0B,0x1240,0x14F8,0x1586,0x15D1,0x1626, + 0x160C,0x143B,0x1169,0x1111,0x1352,0x15CD,0x1681,0x165B, + 0x181C,0x1B0F,0x1BE5,0x1A55,0x19BF,0x1B79,0x1C65,0x1AE6, + 0x1B2E,0x1F80,0x23A2,0x2292,0x1E65,0x1C07,0x1C39,0x1C5D, + 0x1C89,0x1B7B,0x1BC2,0x1B35,0x188B,0x1661,0x16DA,0x19E8, + 0x1CBC,0x1C46,0x18DF,0x1717,0x1818,0x198C,0x1B4C,0x1D2A, + 0x1ED6,0x1DA4,0x199F,0x1514,0x1197,0x11FC,0x1459,0x1581, + 0x15C8,0x15F1,0x1538,0x1341,0x12A4,0x1495,0x15E3,0x14B8, + 0x13D2,0x136D,0x1363,0x125E,0x103E,0x0EBE,0x0E5F,0x0DA3, + 0x0B0B,0x0932,0x0B00,0x0D8B,0x0E2E,0x0E5C,0x0D64,0x0D64, + 0x0B77,0x07B2,0x0607,0x0852,0x0B1A,0x0B38,0x098A,0x0933, + 0x090B,0x0746,0x049E,0x02F6,0x03DA,0x0670,0x07E3,0x0788, + 0x0721,0x07C5,0x068F,0x029B,0xFF47,0xFF38,0x011F,0x0275, + 0x0318,0x02DD,0x0229,0x0024,0xFC4F,0xF8AE,0xF6F5,0xF817, + 0xFB49,0xFE13,0xFF2D,0xFF7B,0xFF04,0xFCF1,0xF9A3,0xF672, + 0xF658,0xF8BF,0xFB1E,0xFBF9,0xFB80,0xF9D3,0xF772,0xF494, + 0xF2DE,0xF374,0xF456,0xF4F8,0xF3C3,0xF2B2,0xF2F0,0xF42D, + 0xF525,0xF4FD,0xF4B1,0xF37F,0xF1F0,0xF11F,0xF1A8,0xF30D, + 0xF433,0xF44F,0xF211,0xEFA1,0xEFEA,0xF007,0xEFB5,0xEF54, + 0xEF41,0xED41,0xECD8,0xF020,0xF00D,0xF00F,0xF051,0xF04B, + 0xEF0F,0xED63,0xECD2,0xEE74,0xF119,0xF1DE,0xF026,0xED6D, + 0xEB0B,0xE988,0xE8ED,0xE96D,0xED1F,0xF10E,0xF12C,0xEE75, + 0xED4C,0xED92,0xED74,0xEC7A,0xEBDB,0xECE4,0xEE63,0xEEA1, + 0xEDDB,0xED38,0xEE02,0xEE6A,0xEBB7,0xE930,0xE9B2,0xEC93, + 0xEE8A,0xEF1A,0xEEBC,0xEF24,0xEEEA,0xEE07,0xED38,0xEDC8, + 0xEF0F,0xEEA6,0xEC1C,0xE9D3,0xEA8A,0xED6B,0xEECB,0xEE09, + 0xECA1,0xEB20,0xEA23,0xE9A8,0xEAD8,0xEE4E,0xF176,0xF367, + 0xF188,0xEFDF,0xEED4,0xEEE6,0xF072,0xF1BB,0xF16D,0xEF41, + 0xEDDF,0xEE89,0xEEBB,0xEE61,0xEE23,0xEEEF,0xEEE5,0xED8D, + 0xECA1,0xEE6F,0xF11D,0xF2D7,0xF36E,0xF286,0xF146,0xEF4F, + 0xED1A,0xECAF,0xEF19,0xF096,0xF098,0xF014,0xEFA0,0xF078, + 0xF075,0xEFAC,0xEEBB,0xEF04,0xEFA7,0xEF9E,0xF0D7,0xF382, + 0xF555,0xF545,0xF36B,0xF16A,0xEFAF,0xEEE9,0xF047,0xF1F8, + 0xF3F3,0xF556,0xF4A4,0xF286,0xF097,0xF005,0xF03E,0xF060, + 0xF0C2,0xF209,0xF368,0xF397,0xF381,0xF2DF,0xF27A,0xF221, + 0xF16D,0xF1C2,0xF2F0,0xF58E,0xF780,0xF75E,0xF673,0xF472, + 0xF31B,0xF220,0xF18E,0xF254,0xF466,0xF5DB,0xF5C8,0xF4FE, + 0xF4A1,0xF403,0xF324,0xF2B9,0xF349,0xF530,0xF701,0xF7FC, + 0xF8D2,0xF948,0xF7D8,0xF57F,0xF3CB,0xF3DC,0xF4F2,0xF69A, + 0xF807,0xF7FB,0xF802,0xF710,0xF54C,0xF4B1,0xF5C5,0xF78C, + 0xF8A5,0xF943,0xF9B7,0xFA31,0xFA8C,0xFA54,0xF9F8,0xF9F0, + 0xF94F,0xF8C5,0xF92C,0xFA56,0xFAF0,0xFB4D,0xFA93,0xF8FF, + 0xF8E1,0xF9CA,0xF88F,0xFB5C,0xFC38,0xFC28,0xFBE2,0xFBB2, + 0xFB5C,0xFB80,0xFBCF,0xFBAD,0xFB3B,0xFAA0,0xFADF,0xFAD1, + 0xFB2D,0xFB67,0xFBB0,0xFB19,0xFA83,0xF9FE,0xFA06,0xFB30, + 0xFC29,0xFCEE,0xFD22,0xFCBC,0xFBD1,0xFB15,0xFB27,0xFC05, + 0xFD31,0xFDA8,0xFD00,0xFC2B,0xFB7B,0xFAE5,0xFADC,0xFAC3, + 0xFA9C,0xFA60,0xFAC4,0xFA6F,0xFA85,0xFA10,0xF962,0xF8FF, + 0xF8AE,0xF7C2,0xF6A6,0xF5EA,0xF56C,0xF494,0xF3E7,0xF372, + 0xF2E5,0xF236,0xF19C,0xF1BB,0xF1EF,0xF218,0xF218,0xF21B, + 0xF0B4,0xEEC6,0xEF3A,0xEFCF,0xEFBA,0xEF2E,0xEF07,0xEF02, + 0xEEEB,0xEE05,0xED5C,0xECDB,0xEC91,0xEC11,0xEB68,0xEB47, + 0xEB50,0xEB28,0xEADF,0xE9CC,0xE8C3,0xE8C7,0xE943,0xE8F9, + 0xE8A8,0xE81A,0xE82F,0xE823,0xE826,0xE80B,0xE80F,0xE82E, + 0xE815,0xE860,0xE82D,0xE82E,0xE821,0xE80D,0xE7E5,0xE81D, + 0xE836,0xE895,0xE8DD,0xE8AF,0xEA1D,0xEA42,0xE967,0xE929, + 0xE9C7,0xEA59,0xEA75,0xEACB,0xEB40,0xEB7D,0xEB88,0xEBFA, + 0xECD0,0xED63,0xEDFE,0xEE8E,0xEE5C,0xEEA3,0xEF64,0xEFE2, + 0xF05B,0xF07D,0xF0FB,0xF1B1,0xF1A8,0xF1F1,0xF2C9,0xF33F, + 0xF312,0xF322,0xF3B3,0xF3C1,0xF402,0xF457,0xF4FC,0xF5A9, + 0xF643,0xF6D5,0xF704,0xF745,0xF7A5,0xF81B,0xF85D,0xF893, + 0xF969,0xF9A6,0xF9DC,0xF9EB,0xFA1B,0xFA69,0xFAFD,0xFB65, + 0xFBDF,0xFCCD,0xFD26,0xFD56,0xFDC3,0xFE35,0xFE5F,0xFEA1, + 0xFEB8,0xFF34,0xFFA3,0x0007,0x0071,0x0058,0x0062,0x00F7, + 0x018C,0x0224,0x01E3,0x02D9,0x037A,0x0409,0x0430,0x047D, + 0x04FD,0x0324,0x0501,0x05A1,0x051A,0x05C2,0x065E,0x0680, + 0x06FC,0x0717,0x0706,0x0742,0x07C6,0x07F2,0x0873,0x08BE, + 0x08E6,0x0918,0x0978,0x09A2,0x09D5,0x09FC,0x0A7B,0x0A94, + 0x0AEC,0x0AE6,0x0B34,0x0B18,0x0B34,0x0B9B,0x0BC6,0x0C08, + 0x0C9E,0x0CC2,0x0C98,0x0CB5,0x0CC3,0x0CED,0x0D25,0x0D21, + 0x0D59,0x0D65,0x0D65,0x0D70,0x0D38,0x0D22,0x0D15,0x0D65, + 0x0D80,0x0D4A,0x0D89,0x0D81,0x0E06,0x0E16,0x0DC6,0x0DF4, + 0x0E3E,0x0E43,0x0E8D,0x0E9F,0x0EAD,0x0ED8,0x1058,0x11A4, + 0x1061,0x1076,0x10F9,0x110F,0x10ED,0x1086,0x1090,0x108A, + 0x1094,0x1087,0x1049,0x1084,0x1085,0x1066,0x0FF4,0x102A, + 0x0FDE,0x0F31,0x0EDD,0x0FDB,0x107B,0x0FD4,0x0FB2,0x1017, + 0x0F95,0x0F4C,0x0F44,0x0EF3,0x0EE5,0x0ED9,0x0EFE,0x0F2C, + 0x0F20,0x0EE9,0x0ED6,0x0EB8,0x0EAC,0x0E76,0x0E91,0x0E22, + 0x0DFD,0x0DC1,0x0DE4,0x0D4C,0x0BED,0x0D1D,0x0DB9,0x0DDE, + 0x0E07,0x0DFD,0x0DE6,0x0D9C,0x0D47,0x0D08,0x0C6F,0x0C55, + 0x0C68,0x0C2B,0x0B56,0x0B27,0x0B43,0x0B5C,0x0B73,0x0B6E, + 0x0B2F,0x0B48,0x0AF9,0x0B15,0x0ACA,0x0A8D,0x0A7C,0x0A88, + 0x0AAD,0x0AAD,0x0ABF,0x0ABF,0x0A79,0x0A6E,0x0A21,0x0A8D, + 0x0AA8,0x0A78,0x0A45,0x09DD,0x097C,0x099A,0x09C1,0x0A10, + 0x0A12,0x0A32,0x0A00,0x09E9,0x0A25,0x09F2,0x09C0,0x0996, + 0x0952,0x097E,0x0993,0x09CB,0x09C6,0x09E3,0x098B,0x092D, + 0x08D4,0x0941,0x08E6,0x0839,0x0866,0x087D,0x088A,0x07F0, + 0x07F6,0x0885,0x0918,0x08DC,0x08B3,0x08BA,0x0878,0x078E, + 0x08E4,0x0826,0x071E,0x0859,0x07CD,0x07D5,0x078F,0x07CB, + 0x0760,0x0779,0x0730,0x077A,0x0785,0x0767,0x0762,0x0758, + 0x0742,0x074A,0x06C5,0x069D,0x06B8,0x0668,0x064C,0x065E, + 0x068E,0x0653,0x0663,0x0633,0x05F6,0x057F,0x0593,0x05A2, + 0x05C6,0x05DF,0x05AC,0x05A6,0x05AD,0x05D6,0x05E2,0x05E6, + 0x0586,0x057B,0x057F,0x0574,0x0599,0x053C,0x056C,0x0560, + 0x0554,0x054B,0x0541,0x053C,0x0517,0x04B2,0x04B7,0x04EF, + 0x04D6,0x052C,0x053A,0x04AA,0x0498,0x0518,0x04C9,0x0439, + 0x0285,0x01E7,0x0287,0x029D,0x028F,0x02B7,0x031A,0x032C, + 0x02DB,0x0262,0x0251,0x0272,0x020C,0x02AF,0x0337,0x0359, + 0x0323,0x035A,0x0370,0x020F,0x0220,0x02FA,0x030F,0x0257, + 0x0261,0x02CD,0x02EE,0x02E8,0x0319,0x02C4,0x0338,0x02F9, + 0x02F5,0x02EC,0x028A,0x02D7,0x02D1,0x0296,0x02B2,0x02FC, + 0x02FA,0x0317,0x02CF,0x0312,0x02F8,0x01AD,0x0159,0x018C, + 0x01F8,0x0202,0x0207,0x0240,0x0238,0x0220,0x0267,0x02C6, + 0x0341,0x039F,0x03F6,0x0430,0x03F1,0x03B0,0x03AF,0x03EF, + 0x03BF,0x035F,0x033E,0x02EC,0x0280,0x02C0,0x026F,0x029C, + 0x02CB,0x025A,0x0223,0x01BF,0x016B,0x0169,0x0150,0x0155, + 0x012C,0x010F,0x00CD,0x00A7,0x00F9,0x009F,0x009A,0x00A5, + 0x00E4,0x00BA,0x0073,0xF8EC,0xF548,0xFD45,0x024A,0xFA38, + 0xF3AC,0xFE87,0x0E67,0x0DE3,0x0286,0x03B7,0x0C5D,0x0F7A, + 0x0F75,0x1004,0x12E2,0x1228,0x0BCC,0x088C,0x0C93,0x0FB1, + 0x0C61,0x05A0,0x06DC,0x0CEC,0x0BD0,0x07AE,0x0774,0x0EEE, + 0x11BC,0x0D2D,0x0B86,0x12C6,0x1840,0x1397,0x0B9A,0x0D5F, + 0x1844,0x1C18,0x16E8,0x13E8,0x17CA,0x1CA3,0x19BD,0x1396, + 0x16D3,0x1DA8,0x1D83,0x18E7,0x1884,0x1DF8,0x20C2,0x1CC1, + 0x1902,0x1B35,0x1FB7,0x2005,0x1D92,0x1A03,0x1AE2,0x209A, + 0x21DC,0x1C12,0x1946,0x1AB1,0x1D20,0x1F4A,0x1E6A,0x1B6D, + 0x1B3F,0x1DB9,0x1CBB,0x1898,0x1728,0x19EF,0x1D1B,0x1B9F, + 0x17F9,0x1585,0x194A,0x1CDE,0x1A68,0x161D,0x1457,0x1722, + 0x1B1D,0x19C8,0x14FF,0x138C,0x17A4,0x1A09,0x1630,0x12A9, + 0x128B,0x13AA,0x1365,0x10CC,0x11CC,0x14DC,0x1324,0x0EE9, + 0x0D1F,0x1041,0x13FA,0x102F,0x093C,0x07AE,0x0CBA,0x11CF, + 0x0DE1,0x0605,0x067A,0x0A4F,0x0A24,0x0788,0x05CF,0x0851, + 0x098B,0x038D,0xFEE3,0x029E,0x079C,0x04A8,0x0010,0xFFE9, + 0x02D4,0x03CC,0x00ED,0xFDB6,0xFDC5,0x00A4,0x0178,0xFE73, + 0xFDDF,0xFE73,0xFBF6,0xF9D0,0xFAF0,0xFD1D,0xFDC3,0xFCD7, + 0xF99B,0xF917,0xFC42,0xFBB0,0xF602,0xF5C2,0xF7B9,0xF83B, + 0xFACA,0xFB4A,0xF7E8,0xF51D,0xF5C5,0xF7F8,0xF712,0xF508, + 0xF61A,0xF68A,0xF3B9,0xF1CE,0xF272,0xF3C5,0xF40B,0xF3B6, + 0xF37C,0xF286,0xF1CE,0xF179,0xF0B2,0xF0EB,0xF109,0xF05A, + 0xEFB4,0xF0C6,0xF16D,0xEF59,0xEEB1,0xF041,0xF101,0xF0EA, + 0xEFF4,0xEE0E,0xED93,0xEEF1,0xF007,0xF0DE,0xF06C,0xED87, + 0xEAA0,0xEB94,0xF0B5,0xF2BF,0xEFEF,0xED08,0xECB6,0xECB3, + 0xEBE9,0xEDC5,0xEF20,0xEE1D,0xEE02,0xEDED,0xEC38,0xEBE1, + 0xEF36,0xF17E,0xEEDC,0xEAE7,0xEED4,0xF49C,0xF20E,0xE9C2, + 0xE935,0xF226,0xF5E4,0xEEB9,0xE9EA,0xEF2C,0xF318,0xEF2A, + 0xEA29,0xECE6,0xF2A5,0xF377,0xEE88,0xEA0A,0xEBF8,0xF0EE, + 0xF19B,0xEDD5,0xECBE,0xEF64,0xF176,0xEEEB,0xEA72,0xEBCF, + 0xF0DE,0xF1FE,0xEF22,0xEE14,0xF02F,0xF066,0xEC1A,0xEA6B, + 0xEFBC,0xF48C,0xF130,0xEA45,0xE9C7,0xF06D,0xF461,0xEF24, + 0xEA79,0xEE01,0xF260,0xF010,0xEB40,0xEC5A,0xF2BD,0xF2D3, + 0xED03,0xEBB4,0xF01F,0xF2D1,0xEF34,0xEAC2,0xEC44,0xF248, + 0xF374,0xED54,0xEA53,0xEEFC,0xF348,0xEFF9,0xED25,0xF0C5, + 0xF3F7,0xF157,0xECE9,0xED5B,0xF2F8,0xF424,0xEF4E,0xECEA, + 0xF0D6,0xF4A5,0xF2A3,0xEDDD,0xEE63,0xF2E8,0xF44E,0xF275, + 0xF10F,0xF20C,0xF246,0xF0B5,0xEFA6,0xF280,0xF55C,0xF46B, + 0xF18F,0xF0F3,0xF34C,0xF4E4,0xF2E4,0xF1A1,0xF259,0xF3CD, + 0xF481,0xF40C,0xF394,0xF365,0xF321,0xF34A,0xF508,0xF63A, + 0xF5B9,0xF3D8,0xF248,0xF356,0xF5C0,0xF774,0xF622,0xF4C0, + 0xF539,0xF662,0xF596,0xF73B,0xF7DA,0xF501,0xF5FC,0xF6A1, + 0xF7F9,0xF89C,0xF82F,0xF5FB,0xF647,0xF781,0xF8F5,0xF877, + 0xF7BB,0xF718,0xF76A,0xF7A3,0xF760,0xF774,0xF7FF,0xF81A, + 0xF727,0xF6A5,0xF835,0xFA4C,0xFA40,0xF76A,0xF614,0xF8AC, + 0xFB47,0xFACB,0xF8D9,0xF8C3,0xF95F,0xF941,0xF930,0xF9EE, + 0xFAC3,0xFA6E,0xFA2A,0xFA83,0xFB33,0xFAD2,0xF93E,0xF883, + 0xFA6E,0xFCAE,0xFD03,0xFBD4,0xFB19,0xFB1E,0xFB7F,0xFB9D, + 0xFC3F,0xFCE7,0xFCB9,0xFB61,0xFA74,0xFB86,0xFCC3,0xFC9D, + 0xFBDF,0xFC25,0xFD10,0xFC0C,0xFA60,0xF9E0,0xF96E,0xFA5A, + 0xFB55,0xFC46,0xFCE5,0xFD52,0xFCEB,0xFB50,0xFAE6,0xFC11, + 0xFD8F,0xFE72,0xFD83,0xFC9E,0xFCC4,0xFDDD,0xFD41,0xFC84, + 0xFD8E,0xFDF2,0xFD3F,0xFCC6,0xFC48,0xFBAA,0xFAB9,0xFA21, + 0xF9CA,0xFA6D,0xFABD,0xFA03,0xF957,0xF85C,0xF79F,0xF852, + 0xF959,0xF88C,0xF716,0xF639,0xF66B,0xF717,0xF80F,0xF88A, + 0xF6EE,0xF625,0xF666,0xF708,0xF6E9,0xF613,0xF4FE,0xF45D, + 0xF3C7,0xF374,0xF3CE,0xF34C,0xF27D,0xF24F,0xF1A8,0xF117, + 0xF07C,0xEFB3,0xEF09,0xEE6C,0xEE0E,0xED4E,0xECDB,0xEC7A, + 0xEBE5,0xEB48,0xEB57,0xEB22,0xEA71,0xE9AA,0xE956,0xE91E, + 0xE8F7,0xE8D8,0xE861,0xE7D3,0xE78B,0xE799,0xE75A,0xE71C, + 0xE73B,0xE727,0xE719,0xE72B,0xE793,0xE79E,0xE7C1,0xE79A, + 0xE7F1,0xE851,0xE88C,0xE8BC,0xE862,0xE83A,0xE8A0,0xE960, + 0xE9AB,0xEA47,0xEA80,0xEA6C,0xEAB6,0xEAEA,0xEB46,0xEBC5, + 0xEBC7,0xEC23,0xECA4,0xED1B,0xED32,0xECF4,0xED7F,0xEE19, + 0xEE69,0xEF20,0xF0B0,0xF02B,0xEF37,0xF19B,0xF1A8,0xF23A, + 0xF32B,0xF349,0xF364,0xF36E,0xF40A,0xF4A1,0xF4E2,0xF50F, + 0xF5C6,0xF611,0xF64C,0xF6CB,0xF743,0xF791,0xF7F1,0xF83D, + 0xF8E9,0xF9A9,0xFA09,0xFA15,0xFA7E,0xFB4F,0xFBDF,0xFC4D, + 0xFC92,0xFC54,0xFCA9,0xFD27,0xFD61,0xFE55,0xFF4A,0xFF54, + 0xFFA2,0xFFF3,0x0041,0x0085,0x00FC,0x01A4,0x0231,0x021F, + 0x0290,0x029C,0x036C,0x042F,0x049B,0x04C8,0x04DE,0x050A, + 0x0587,0x05BB,0x05B8,0x0615,0x064D,0x067A,0x078F,0x07E3, + 0x082E,0x0A45,0x0AA9,0x09FA,0x0A7C,0x0AE4,0x0B64,0x0B37, + 0x0AF6,0x0B04,0x0B4D,0x0BB6,0x0C11,0x0BCA,0x0BC6,0x0BED, + 0x0BF5,0x0C0E,0x0C29,0x0C41,0x0C07,0x0BB5,0x0D0A,0x0DA1, + 0x0CE4,0x0D37,0x0D77,0x0D45,0x0DB3,0x0DE9,0x0DE0,0x0DE9, + 0x0E35,0x0DED,0x0E1C,0x0E66,0x0E56,0x0DC9,0x0DF5,0x0E17, + 0x0EAF,0x0EA7,0x0E3D,0x0E2D,0x0DD9,0x0E0A,0x0DB0,0x0D5B, + 0x0EE1,0x0F97,0x0F6A,0x0FAB,0x0F8F,0x0F8C,0x0F42,0x0ED9, + 0x0EB9,0x0EA4,0x0E46,0x0E03,0x0DE9,0x0D41,0x0D10,0x0D62, + 0x0DC3,0x0DCD,0x0DAF,0x0D65,0x0CFD,0x0CF0,0x0D59,0x0D6A, + 0x0D49,0x0D36,0x0D38,0x0D41,0x0D5A,0x0DC5,0x0DAA,0x0D31, + 0x0D68,0x0D92,0x0DD2,0x0DE1,0x0D55,0x0CE4,0x0D2F,0x0D50, + 0x0D95,0x0DAA,0x0D66,0x0D2D,0x0D4C,0x0D50,0x0D45,0x0D12, + 0x0D1F,0x0D3C,0x0D3C,0x0D1B,0x0D23,0x0D2A,0x0CDD,0x0C64, + 0x0C67,0x0C96,0x0CB2,0x0CCA,0x0CAB,0x0C4C,0x0BF6,0x0BC2, + 0x0BAA,0x0BA9,0x0B8C,0x0B30,0x0BD0,0x0C97,0x0C3E,0x0BE4, + 0x0BFC,0x0BAD,0x0BB8,0x0D5C,0x0B82,0x0BA0,0x0BF9,0x0BE0, + 0x0BC9,0x0BE3,0x0BF1,0x0B90,0x0BC6,0x0BA9,0x0B79,0x0B32, + 0x0B7F,0x0B38,0x0ABE,0x0AAB,0x0B22,0x0B39,0x0B04,0x0B03, + 0x0AF1,0x0AF5,0x0AF0,0x0AA3,0x0A15,0x0A09,0x09D8,0x0A04, + 0x0A12,0x09E4,0x09FE,0x09EE,0x0998,0x0940,0x095A,0x0999, + 0x099D,0x096C,0x097B,0x0954,0x0990,0x095F,0x0914,0x0937, + 0x0943,0x0921,0x08F9,0x08C9,0x088E,0x08A7,0x088C,0x0839, + 0x0867,0x0861,0x0838,0x07EC,0x0828,0x0834,0x0851,0x082E, + 0x07E7,0x07B5,0x06F2,0x04C9,0x04F3,0x05CB,0x066E,0x0617, + 0x0591,0x056A,0x0557,0x0546,0x0525,0x0535,0x057C,0x05BC, + 0x05A9,0x0535,0x0537,0x04FE,0x0557,0x04FB,0x0433,0x04A5, + 0x054D,0x0557,0x04D0,0x04D3,0x0560,0x0536,0x0568,0x0589, + 0x0581,0x059D,0x059B,0x04F2,0x0509,0x050B,0x0534,0x05BF, + 0x056D,0x0538,0x052C,0x0532,0x04F4,0x04BF,0x0571,0x061C, + 0x04DE,0x0421,0x03E5,0x03F9,0x0431,0x047A,0x044B,0x0488, + 0x0489,0x04F6,0x05B0,0x0565,0x0595,0x063A,0x05EB,0x05C6, + 0x05EA,0x05CE,0x0599,0x05AB,0x05B5,0x05C9,0x05C5,0x0562, + 0x0559,0x0561,0x0552,0x0540,0x04A9,0x047F,0x043F,0x0433, + 0x0419,0x0388,0x0375,0x0347,0x0335,0x0328,0x0330,0x0328, + 0x039E,0x0392,0x0347,0x0320,0x02F3,0x02E8,0x0299,0x0282, + 0x02B2,0x0272,0x0272,0x0275,0x0246,0x0253,0x0269,0x0244, + 0x01BB,0x01CD,0x01B8,0x0214,0x020E,0x01A7,0x0197,0x016D, + 0x0114,0x014B,0x0162,0x0197,0x012B,0x00BE,0x0111,0x0107, + 0x0119,0x0146,0x01E6,0x0007,0x005A,0x0043,0x0088,0x00A2, + 0x01D6,0x0159,0x0044,0x001D,0x004D,0x00B2,0x00C9,0x0085, + 0x0054,0x00AD,0x00A8,0x00F4,0x011E,0x0176,0x01FA,0x0227, + 0x01EB,0x0197,0x01C8,0x0200,0x01B0,0x01B1,0x01D9,0x019D, + 0x017D,0x01CF,0x01BB,0x0161,0x017A,0x01CA,0x020A,0x02DD, + 0x037C,0x03F3,0x04A2,0x0584,0x0687,0x06F7,0x06DE,0x0595, + 0x04DA,0x06B6,0x0A71,0x0E09,0x119D,0x13A6,0x1461,0x14DF, + 0x1512,0x14D7,0x15A1,0x1756,0x18CB,0x1A0C,0x1ABA,0x1B81, + 0x1B2A,0x1932,0x1756,0x162B,0x1650,0x172F,0x18E8,0x1C3F, + 0x1E63,0x1E35,0x1B1E,0x18A6,0x1834,0x18B4,0x1902,0x1A84, + 0x1CD7,0x1E9C,0x1E73,0x1CE8,0x1A73,0x1858,0x1B85,0x1CC2, + 0x1C2E,0x1D68,0x1E81,0x1E4E,0x1BE2,0x196B,0x180A,0x1749, + 0x17B1,0x1946,0x1BFE,0x1ECB,0x1F4B,0x1DAA,0x1A5C,0x166C, + 0x12FF,0x11E5,0x1326,0x165E,0x1AF2,0x1D9E,0x1D18,0x1997, + 0x1420,0x101F,0x0E5A,0x0F33,0x11C7,0x14E2,0x163C,0x157D, + 0x1395,0x12F3,0x1252,0x10CA,0x0F1C,0x0E6F,0x0DDE,0x0DB2, + 0x0E0A,0x0FE5,0x1199,0x1135,0x0E6F,0x0B0B,0x087F,0x076B, + 0x0838,0x0A39,0x0CE8,0x0D9C,0x0B86,0x08AD,0x0647,0x0560, + 0x04D3,0x04B5,0x06F5,0x09A0,0x0972,0x083C,0x0641,0x0483, + 0x026F,0x0012,0xFF2E,0x0130,0x0415,0x0596,0x0511,0x02DA, + 0x0092,0xFD74,0xFA7E,0xF996,0xFB32,0xFD60,0xFE1B,0xFE28, + 0xFDE1,0xFD18,0xFC2D,0xFAEA,0xF841,0xF690,0xF5CF,0xF546, + 0xF658,0xF94C,0xFBBA,0xFC49,0xFA19,0xF69A,0xF381,0xF21D, + 0xF1C8,0xF325,0xF5ED,0xF818,0xF782,0xF576,0xF438,0xF278, + 0xF08F,0xF0E7,0xF15E,0xF0B7,0xF0BB,0xF0DA,0xF1FD,0xF411, + 0xF48B,0xF250,0xEEE7,0xEC4B,0xEBD5,0xECE7,0xEE9A,0xF0C9, + 0xF1FE,0xF112,0xEED5,0xED4B,0xED28,0xEE49,0xEE87,0xED80, + 0xEC28,0xEC1D,0xED35,0xEF17,0xF0A0,0xF135,0xF023,0xED3B, + 0xEA0C,0xE944,0xEB07,0xEE10,0xF034,0xF059,0xEEFF,0xECC3, + 0xEB60,0xEB0C,0xEBDF,0xECAC,0xEC37,0xEB80,0xEAEE,0xEBC5, + 0xED99,0xEF5D,0xEF50,0xEDDE,0xEB70,0xE97D,0xE94C,0xEA8D, + 0xECB4,0xEE9A,0xEEDF,0xED2D,0xEB23,0xEAA0,0xEB9D,0xED3A, + 0xEE2A,0xED7B,0xECB9,0xEB63,0xEB30,0xEC37,0xEE6D,0xEF73, + 0xEE73,0xECF6,0xEB4B,0xEABA,0xEEA7,0xEF8B,0xEF8F,0xEFB2, + 0xEDB7,0xEC30,0xEC1A,0xEDCB,0xEFE2,0xF118,0xF08D,0xEF6A, + 0xEE3E,0xEE2B,0xEF45,0xF105,0xF202,0xF13A,0xEFC2,0xEE87, + 0xEEC0,0xEF6C,0xF065,0xF0E0,0xF154,0xF18C,0xF17C,0xF181, + 0xF136,0xF101,0xF08B,0xEEFF,0xEDD4,0xEEF7,0xF13C,0xF384, + 0xF44D,0xF3B2,0xF258,0xF0A9,0xEF87,0xEF35,0xF07E,0xF2B9, + 0xF41F,0xF3D8,0xF2B7,0xF1C2,0xF188,0xF163,0xF1F6,0xF2C4, + 0xF39E,0xF434,0xF45C,0xF382,0xF379,0xF384,0xF2BE,0xF19F, + 0xF1E6,0xF3A4,0xF5B5,0xF65B,0xF494,0xF2E7,0xF172,0xEFBB, + 0xEF7E,0xF0F0,0xF35C,0xF50A,0xF608,0xF62C,0xF63A,0xF524, + 0xF3D5,0xF351,0xF3B1,0xF45E,0xF52D,0xF653,0xF773,0xF6F5, + 0xF6D8,0xF71F,0xF6AE,0xF5AA,0xF5B6,0xF685,0xF7FB,0xF8D2, + 0xF889,0xF7FF,0xF727,0xF6A4,0xF685,0xF78A,0xF82B,0xF917, + 0xF94D,0xF95F,0xF9B3,0xF971,0xF93C,0xF8FA,0xF81C,0xF8C8, + 0xFA4D,0xF9FF,0xFAB5,0xFB26,0xFAB8,0xF9AA,0xF92C,0xF8A0, + 0xF8D8,0xF986,0xF9D2,0xFAB0,0xFB67,0xFC64,0xFD21,0xFCC2, + 0xFCFC,0xFCD0,0xFC16,0xFB42,0xFB33,0xFBC1,0xFC74,0xFC69, + 0xFC82,0xFCF6,0xFD16,0xFCAD,0xFC5A,0xFC0B,0xFC29,0xFBCB, + 0xFB41,0xFB2A,0xFBAE,0xFD1E,0xFDE4,0xFDCA,0xFCFF,0xFC40, + 0xFAEC,0xFA1A,0xFA57,0xFB74,0xFD2A,0xFDC4,0xFD2E,0xFC25, + 0xFC5B,0xFC91,0xFBBD,0xFB4B,0xFB6F,0xFB33,0xFB3D,0xFADD, + 0xFAED,0xFAEB,0xFA34,0xF922,0xF863,0xF836,0xF76B,0xF682, + 0xF60A,0xF50B,0xF421,0xF447,0xF418,0xF3F8,0xF472,0xF4C2, + 0xF3A2,0xF2F2,0xF281,0xF2CD,0xF19C,0xF2BC,0xF4CF,0xF349, + 0xF33D,0xF2D7,0xF20C,0xF177,0xF0F0,0xF07B,0xF017,0xEF58, + 0xEECE,0xEE23,0xED8F,0xED3A,0xEC5B,0xEB89,0xEB83,0xEB3E, + 0xEB27,0xEA75,0xE9DF,0xE962,0xE841,0xE7B6,0xE779,0xE73F, + 0xE768,0xE7CB,0xE732,0xE6C3,0xE6C6,0xE60D,0xE5B0,0xE5DE, + 0xE5AB,0xE580,0xE581,0xE5BC,0xE5EC,0xE5B8,0xE61A,0xE5E4, + 0xE561,0xE53D,0xE59E,0xE61D,0xE687,0xE6FB,0xE6C5,0xE6FF, + 0xE732,0xE76D,0xE762,0xE7CF,0xE804,0xE856,0xE88B,0xE8EE, + 0xE9B1,0xEB13,0xED83,0xED66,0xED10,0xED7E,0xEDE2,0xEE4A, + 0xEE6C,0xEEC5,0xEF60,0xEFAE,0xEFCF,0xF01B,0xF0CF,0xF0F7, + 0xF17F,0xF1C2,0xF204,0xF24D,0xF2A8,0xF294,0xF35C,0xF43A, + 0xF463,0xF46D,0xF534,0xF620,0xF68A,0xF70A,0xF757,0xF7D8, + 0xF7E0,0xF7D0,0xF877,0xF8EE,0xF950,0xF9E4,0xFA56,0xFABA, + 0xFAD9,0xFB66,0xFBF1,0xFC43,0xFC25,0xFC91,0xFCF6,0xFC6E, + 0xFCD3,0xFED2,0xFF65,0xFF80,0x0001,0x0010,0x005D,0x00FF, + 0x01CB,0x0225,0x0230,0x0216,0x0200,0x0267,0x0213,0x028F, + 0x0338,0x0382,0x03FD,0x0408,0x0464,0x04F1,0x0552,0x05A7, + 0x05C6,0x0664,0x0686,0x0714,0x0764,0x0780,0x078A,0x0804, + 0x0832,0x0862,0x08CF,0x098C,0x0990,0x08F8,0x08F2,0x0908, + 0x09C9,0x0A21,0x0ACA,0x0B3B,0x0B68,0x0B73,0x0B7E,0x0BCD, + 0x0BDE,0x0C0E,0x0BDF,0x0BF1,0x0C8A,0x0CAB,0x0CDC,0x0D70, + 0x0D52,0x0D29,0x0D28,0x0DDF,0x0DEF,0x0DF5,0x0DC5,0x0DC2, + 0x0DEB,0x0DCB,0x0E3D,0x0E69,0x0E6F,0x0F38,0x0F71,0x0F33, + 0x0F06,0x0F13,0x0E1D,0x0F89,0x107A,0x0EE1,0x0FF5,0x102B, + 0x1036,0x0FB7,0x105C,0x0FDD,0x0FC5,0x0FE7,0x1053,0x108D, + 0x10A0,0x10A4,0x105F,0x102F,0x0FFB,0x1045,0x1050,0x107C, + 0x1077,0x1083,0x1052,0x106F,0x1059,0x102B,0x1030,0x106E, + 0x10C8,0x10CB,0x10A3,0x108E,0x10D4,0x1087,0x10A5,0x1030, + 0x0FE2,0x0FF7,0x101E,0x1060,0x107B,0x102E,0x0FE2,0x0FB4, + 0x0F6D,0x0F99,0x0FAF,0x0FB6,0x0F64,0x0F4D,0x0F43,0x0F3D, + 0x0F41,0x0F3B,0x0EDF,0x0ED3,0x0EF8,0x0EDD,0x0F08,0x0E99, + 0x0E75,0x0DCB,0x0D75,0x0C75,0x0B05,0x0BB7,0x0C67,0x0CC8, + 0x0CA9,0x0C35,0x0BDD,0x0BCD,0x0BAA,0x0BDF,0x0BF6,0x0BD1, + 0x0BD5,0x0BB5,0x0B5C,0x0B61,0x0B7A,0x0C13,0x0B58,0x0AA1, + 0x0B25,0x0B6A,0x0AD4,0x0AD6,0x0AE8,0x0B20,0x0B53,0x0BCA, + 0x0BD5,0x0B97,0x0B89,0x0B71,0x0B7A,0x0B4F,0x0B5B,0x0BB3, + 0x0BC3,0x0BA0,0x0B73,0x0B32,0x0B36,0x0AD3,0x0A50,0x0BA5, + 0x0BB4,0x0A9A,0x09D0,0x0946,0x0915,0x0921,0x0994,0x09F6, + 0x0A3F,0x0A43,0x0ABA,0x0A67,0x09EE,0x0AB4,0x0B1D,0x0AC3, + 0x0A5E,0x0A3F,0x09DF,0x09A9,0x0960,0x0951,0x091D,0x0929, + 0x0915,0x0927,0x08FD,0x08EA,0x08A9,0x0849,0x082B,0x07D7, + 0x07B9,0x0805,0x07BA,0x0771,0x0740,0x06D0,0x067B,0x06E2, + 0x06D2,0x06E1,0x073C,0x0703,0x06A5,0x0669,0x062E,0x0651, + 0x0643,0x0657,0x067F,0x0635,0x05C0,0x058C,0x057E,0x05A2, + 0x0569,0x0527,0x054D,0x055F,0x05A3,0x0541,0x059C,0x0504, + 0x046A,0x0439,0x04DA,0x04EC,0x0495,0x0386,0x03A2,0x03DB, + 0x0393,0x0392,0x0495,0x0452,0x02BF,0x041D,0x038B,0x02CB, + 0x0306,0x0311,0x0307,0x0366,0x02F3,0x02C6,0x0272,0x023F, + 0x0247,0x0249,0x028E,0x0308,0x0313,0x02B5,0x02A5,0x0265, + 0x02A5,0x0230,0x02D5,0x0338,0x030E,0x028A,0x0249,0x0209, + 0x019F,0x01D4,0x01BC,0x0239,0x023C,0x0218,0x022A,0x01C1, + 0x01AC,0x01A0,0x015C,0x0175,0x0190,0x0219,0x01F2,0x0190, + 0x017B,0x017A,0x015F,0x012F,0x011B,0x0126,0x0112,0x00DB, + 0x00FC,0x009B,0x00BF,0x00CA,0x0106,0x00D0,0x008D,0x00F9, + 0x0104,0x029B,0x03D1,0x02D2,0x02F5,0x0315,0x026A,0x0202, + 0x01E3,0x01D5,0x01C6,0x0162,0x0174,0x018C,0x0162,0x01A2, + 0x015D,0x00D3,0x00FB,0x0134,0x00B5,0x00E9,0x01FB,0x020A, + 0x011D,0x00D4,0x00DB,0x007E,0xFF2C,0xFDAA,0xFC87,0xFDBE, + 0xFE1A,0xFE3F,0xFE46,0xFE28,0xFE47,0xFE65,0xFE0A,0xFE1C, + 0xFE4F,0xFE34,0xFE41,0xFEC3,0xFF49,0xFF27,0xFF4D,0xFF5B, + 0xFEF7,0xFED9,0x0050,0x016F,0x01D9,0x0237,0x02EB,0x0348, + 0x03F7,0x057A,0x062C,0x0755,0x08DF,0x09D7,0x0AAE,0x0B22, + 0x0BC3,0x0C2F,0x0C16,0x0C3C,0x0C93,0x0CD4,0x0CB4,0x0C3B, + 0x0CBF,0x0F25,0x0F24,0x0EE8,0x0ECE,0x0F0E,0x0FD2,0x1016, + 0x1033,0x10A4,0x10DE,0x114B,0x12CB,0x14A9,0x166C,0x1726, + 0x1674,0x154B,0x15AA,0x1698,0x1862,0x1920,0x1871,0x17E6, + 0x1735,0x173B,0x182E,0x1941,0x1A5C,0x1B19,0x1A7C,0x198E, + 0x18E4,0x18C1,0x184A,0x1808,0x17F7,0x198B,0x1B01,0x1ADA, + 0x1972,0x1829,0x17A3,0x1794,0x1818,0x1868,0x18A5,0x17DF, + 0x16B5,0x1620,0x15EA,0x164F,0x1622,0x15B8,0x1542,0x1519, + 0x1459,0x131A,0x1222,0x1172,0x113A,0x124B,0x13B8,0x1430, + 0x130B,0x10ED,0x0F1A,0x0E0E,0x0E91,0x0F43,0x1001,0x0ED9, + 0x0DB2,0x0CAE,0x0C1F,0x0CB5,0x0D83,0x0B3B,0x0886,0x0A25, + 0x0A0B,0x094D,0x08E2,0x07ED,0x06F3,0x041D,0xFF14,0xF9A1, + 0xF3B3,0xEDF7,0xE9C6,0xE8EE,0xEDFC,0xF7B7,0x018B,0x072C, + 0x06C1,0x01F6,0xFB66,0xF6BC,0xF658,0xFB05,0x0266,0x09B2, + 0x0F54,0x12CE,0x1481,0x14E3,0x13D0,0x1135,0x0E65,0x0C96, + 0x0ABB,0x083F,0x057D,0x03FE,0x0473,0x0634,0x0810,0x0845, + 0x04B3,0xFD1D,0xF3D2,0xEC5A,0xE910,0xE974,0xEBDF,0xEE7D, + 0xF080,0xF124,0xF082,0xEDF8,0xEBB6,0xE9E8,0xE93F,0xEA3D, + 0xEC29,0xEED5,0xF1E3,0xF616,0xF8BE,0xFA8D,0xFE27,0x00FB, + 0x018F,0xFFFD,0xFCE3,0xFA49,0xF958,0xFAD4,0xFDEB,0x00FD, + 0x0296,0x01EE,0xFF66,0xFB83,0xF70E,0xF336,0xEFCA,0xEDF6, + 0xEE76,0xEE12,0xED94,0xED5D,0xED18,0xEA6C,0xE833,0xE6A6, + 0xE688,0xE70A,0xE6AC,0xE5F8,0xE586,0xE5FC,0xE84C,0xECB5, + 0xF0EF,0xF2C2,0xF203,0xF09C,0xEFB5,0xEF8A,0xF122,0xF317, + 0xF439,0xF514,0xF786,0xF930,0xF9A2,0xF95A,0xF885,0xF69E, + 0xF4D8,0xF369,0xF1DE,0xF073,0xEF81,0xEF0D,0xEEE2,0xEDAE, + 0xED15,0xEC8D,0xEABB,0xE88A,0xE6AD,0xE595,0xE582,0xE639, + 0xE6FC,0xE80F,0xE8DE,0xE9EF,0xEAEA,0xEC1A,0xEC8C,0xEC98, + 0xECAC,0xED0A,0xEE6D,0xEFA2,0xF135,0xF341,0xF544,0xF5F1, + 0xF5AB,0xF5F4,0xF666,0xF64C,0xF51D,0xF456,0xF3E7,0xF3EB, + 0xF3EE,0xF3F1,0xF499,0xF44E,0xF30B,0xF1C0,0xF090,0xF047, + 0xEF55,0xEDE5,0xECC0,0xECBE,0xEDEC,0xEF9D,0xF05E,0xEF49, + 0xEE21,0xEDF6,0xEE13,0xEF2B,0xF085,0xF205,0xF334,0xF376, + 0xF30D,0xF4B9,0xF703,0xF851,0xF7BF,0xF94E,0xF875,0xF932, + 0xF974,0xF7E4,0xF757,0xF87D,0xF9F0,0xFAFA,0xFB75,0xFA4D, + 0xF885,0xF587,0xF4A3,0xF4F5,0xF5D0,0xF55B,0xF475,0xF417, + 0xF412,0xF3C3,0xF328,0xF2BE,0xF2F1,0xF33C,0xF298,0xF2AD, + 0xF37A,0xF397,0xF362,0xF405,0xF526,0xF706,0xF820,0xF83C, + 0xF824,0xF785,0xF781,0xF7FF,0xF94D,0xFA32,0xFA9E,0xFB2F, + 0xFBA9,0xFB7E,0xFB15,0xFA4B,0xFA24,0xFA3A,0xFA04,0xF9D9, + 0xFA1E,0xFA72,0xF9C3,0xF8BA,0xF7D3,0xF805,0xF867,0xF8A9, + 0xF80C,0xF77B,0xF6CF,0xF6F0,0xF752,0xF64D,0xF686,0xF510, + 0xF0BC,0xE9E6,0xDFC3,0xD1A9,0xC259,0xBEBF,0xBF6E,0xBF22, + 0xC2A4,0xDC4C,0xF87C,0x06CF,0x0500,0xF661,0xE684,0xDE62, + 0xE25C,0xF2D6,0x088E,0x1C48,0x2A52,0x340C,0x39AB,0x3B8D, + 0x3A57,0x3664,0x3055,0x29CB,0x22D3,0x1C7E,0x1876,0x187A, + 0x1C30,0x22AB,0x263E,0x2345,0x1650,0x0185,0xEAFC,0xDA1D, + 0xD3CD,0xD74C,0xDECF,0xE744,0xEC24,0xEC1B,0xE94B,0xE60D, + 0xE323,0xE108,0xE161,0xE414,0xE865,0xEEDC,0xF700,0x012A, + 0x0C43,0x16EA,0x1F9E,0x235F,0x21CB,0x1BE9,0x14D6,0x102D, + 0x1137,0x1784,0x202E,0x2715,0x2934,0x2594,0x1CFA,0x1250, + 0x0842,0x008D,0xFAC4,0xF681,0xF315,0xF128,0xF03A,0xEFE0, + 0xEF1D,0xEE26,0xEBFD,0xE916,0xE565,0xE0C3,0xDD0E,0xDC04, + 0xDEC9,0xE54A,0xEF84,0xFA49,0x0225,0x048E,0x02B1,0xFFF7, + 0xFEEE,0x007E,0x051F,0x0AB2,0x1009,0x1417,0x170F,0x185D, + 0x1960,0x1935,0x161B,0x115F,0x0C94,0x0864,0x0442,0x0094, + 0xFE83,0xFD89,0xFD6C,0xFE31,0xFDC2,0xF8F9,0xF420,0xED6D, + 0xE62E,0xE379,0xE430,0xE7A0,0xEC3A,0xEF75,0xF173,0xF292, + 0xF361,0xF40E,0xF52E,0xF6E8,0xF9BC,0xFC9F,0xFEF3,0x0144, + 0x0442,0x0874,0x0CE1,0x101B,0x11C7,0x1208,0x102A,0x0D71, + 0x096A,0x0728,0x0698,0x07BD,0x0919,0x0858,0x0688,0x0390, + 0x0027,0xFBE1,0xF768,0xF469,0xF219,0xF043,0xEF24,0xEEE8, + 0xF04F,0xF137,0xF17D,0xF1CF,0xF25F,0xF27C,0xF266,0xF1AB, + 0xF239,0xF49C,0xF87C,0xFC84,0xFFAD,0x0272,0x0472,0x058F, + 0x0619,0x06B9,0x07C8,0x09A6,0x098D,0x0A78,0x0B9F,0x0C7F, + 0x0C6C,0x0B66,0x09C7,0x0852,0x0655,0x0405,0x0140,0xFE4F, + 0xFBF2,0xFAF4,0xFA8F,0xFA7D,0xFA92,0xF960,0xF784,0xF6C9, + 0xF63F,0xF4F8,0xF417,0xF43B,0xF510,0xF75A,0xFA57,0xFC75, + 0xFE08,0xFEE2,0xFF41,0xFF8F,0x0063,0x0189,0x02F1,0x03C5, + 0x0529,0x0689,0x07DB,0x08F6,0x0958,0x08BB,0x0841,0x06B4, + 0x0450,0x0387,0x0389,0x02E1,0x0219,0x01DF,0x0109,0xFFC6, + 0xFE74,0xFCF1,0xFB4D,0xF9C5,0xF832,0xF6BC,0xF572,0xF499, + 0xF5F2,0xF735,0xF5E2,0xEFB2,0xE524,0xD7DC,0xC7C3,0xBE98, + 0xBE46,0xBF15,0xBE14,0xC9C7,0xEBDC,0x060D,0x10B1,0x0942, + 0xF6A7,0xE65F,0xE220,0xED35,0x026F,0x1A13,0x2C37,0x3921, + 0x3E52,0x3E17,0x3E31,0x3E68,0x3C53,0x34BB,0x2D52,0x251E, + 0x1E45,0x1A71,0x1B39,0x1FAA,0x257B,0x27CF,0x211A,0x101C, + 0xF7A3,0xDFA0,0xD07B,0xCD98,0xD477,0xDFB6,0xE8E9,0xED33, + 0xEC7A,0xE7EA,0xE362,0xE138,0xE180,0xE38A,0xE7BB,0xECF1, + 0xF4D2,0xFF2B,0x09C6,0x133A,0x1EEA,0x26C0,0x2858,0x270F, + 0x203D,0x1910,0x152B,0x1727,0x1E0E,0x2705,0x2D5E,0x2E3D, + 0x27B4,0x1C23,0x0FB9,0x05A9,0xFEAD,0xF91A,0xF542,0xF237, + 0xF0EC,0xEF2C,0xEDEA,0xED29,0xEC54,0xEAA4,0xE741,0xE2D2, + 0xDEB6,0xDD4C,0xDED5,0xE368,0xEB7D,0xF5C6,0xFF83,0x0614, + 0x07E9,0x0758,0x0635,0x05F9,0x083D,0x0C8C,0x1214,0x16EF, + 0x1A0D,0x1C39,0x1DF2,0x1DD6,0x1C28,0x1802,0x12A1,0x0D2D, + 0x07BD,0x0334,0xFFDC,0xFE75,0xFE5D,0xFDEA,0xFCFC,0xFB16, + 0xF6D0,0xF014,0xE94D,0xE402,0xE1AD,0xE2E4,0xE7FE,0xEC5E, + 0xEF36,0xF070,0xF1E8,0xF43F,0xF693,0xF877,0xF9AD,0xFB0A, + 0xFD34,0x0011,0x04D3,0x0A37,0x0E94,0x121C,0x1402,0x1343, + 0x1217,0x1109,0x0E59,0x0AB3,0x086C,0x0829,0x09E4,0x0B69, + 0x0AEA,0x07AE,0x02D6,0xFDC4,0xF9AD,0xF6C0,0xF428,0xF236, + 0xF0CA,0xF03B,0xF0B2,0xF1C3,0xF2C0,0xF374,0xF418,0xF47D, + 0xF5E8,0xF5C1,0xF545,0xF632,0xF870,0xFC9D,0x018A,0x05EB, + 0x095F,0x0B38,0x0B7C,0x0B78,0x0BE7,0x0CA2,0x0E10,0x0F78, + 0x0FBB,0x0FD5,0x0F88,0x0E84,0x0D8F,0x0C50,0x0A57,0x07CB, + 0x0516,0x0276,0xFFEF,0xFD8E,0xFB9B,0xFAE6,0xFB10,0xFBF1, + 0xFC2E,0xFA84,0xF780,0xF53D,0xF4A8,0xF5E2,0xF83A,0xFABB, + 0xFC71,0xFD67,0xFE45,0x0002,0x01C1,0x0364,0x057F,0x0699, + 0x0739,0x0797,0x0840,0x0937,0x0A39,0x0AFB,0x0BBF,0x0C5F, + 0x0C8A,0x0C06,0x0A08,0x06E7,0x0481,0x0364,0x032A,0x0388, + 0x02F0,0x016E,0xFF1A,0xFD52,0xFBFC,0xFAD3,0xF9CA,0xF991, + 0xF94A,0xF898,0xF8BD,0xF9F4,0xFA40,0xF8CF,0xF7E5,0xF1B7, + 0xE7B9,0xDAE8,0xC9BE,0xBFC5,0xC009,0xC095,0xC0DB,0xD73F, + 0xFA58,0x108F,0x14F8,0x0882,0xF51A,0xE7EF,0xE7AC,0xF4FD, + 0x0A8D,0x20B5,0x321F,0x3CC4,0x3F43,0x3F52,0x3F64,0x3F56, + 0x3B59,0x331B,0x2B83,0x243E,0x1EF1,0x1B67,0x1C5C,0x2114, + 0x272D,0x2812,0x1FB1,0x0D45,0xF4E6,0xDDFB,0xD02E,0xCF58, + 0xD887,0xE4A4,0xED7E,0xF146,0xF002,0xEADF,0xE4AF,0xE129, + 0xE1BD,0xE5C8,0xEAA2,0xF04E,0xF898,0x02BE,0x0DB5,0x17FF, + 0x210D,0x2824,0x2BF5,0x28F4,0x2057,0x1896,0x159B,0x18FA, + 0x206C,0x292D,0x2E47,0x2DA4,0x25E4,0x1AAF,0x0EDA,0x047D, + 0xFC21,0xF6AE,0xF337,0xF1E1,0xF1C3,0xF13D,0xEFBE,0xEE79, + 0xEBE9,0xE88B,0xE580,0xE2AA,0xDFA7,0xDE76,0xDF75,0xE461, + 0xED9A,0xF8EA,0x02A6,0x07DB,0x0871,0x072A,0x04E7,0x042C, + 0x0641,0x0A95,0x1055,0x1574,0x1954,0x1C4D,0x1CFC,0x1A56, + 0x15B0,0x1215,0x0DB5,0x08A5,0x035D,0xFF3A,0xFCDA,0xFB96, + 0xFB75,0xFBAB,0xFA1E,0xF68D,0xF118,0xEA13,0xE342,0xDF3B, + 0xDEBB,0xE1F1,0xE5F9,0xE9C4,0xEC2D,0xEE9A,0xF122,0xF3BA, + 0xF4C6,0xF4A7,0xF4ED,0xF67A,0xFA5E,0xFF7A,0x04B6,0x08F9, + 0x0B98,0x0C6F,0x0D80,0x0EB4,0x0F0C,0x0D02,0x094D,0x05F9, + 0x0415,0x0409,0x0508,0x0554,0x0478,0x01DA,0xFD81,0xFA33, + 0xF763,0xF3CC,0xEF24,0xEB9D,0xEAB1,0xEC9B,0xEEB9,0xEF88, + 0xEF1F,0xEED9,0xEE86,0xEE48,0xEF38,0xF0E0,0xF25C,0xF3AE, + 0xF5EF,0xF967,0xFD45,0x006E,0x02E4,0x04C2,0x067C,0x0719, + 0x075D,0x0771,0x0619,0x0526,0x07DA,0x07D6,0x089A,0x090F, + 0x0785,0x05BF,0x031F,0xFFBE,0xFCE7,0xFBA0,0xF9BE,0xF7A6, + 0xF63C,0xF73F,0xF817,0xF792,0xF4B8,0xF1DF,0xF0F4,0xF176, + 0xF280,0xF359,0xF4D5,0xF574,0xF5BB,0xF742,0xFA13,0xFD57, + 0xFF2B,0xFF85,0xFF33,0xFF8A,0x0100,0x02E3,0x0394,0x0508, + 0x0746,0x08BC,0x0932,0x08BE,0x079D,0x066D,0x049B,0x02C8, + 0x0210,0x01BD,0x0171,0x006A,0xFF1A,0xFDB2,0xFCB6,0xFB11, + 0xF9BE,0xF8D8,0xF86C,0xF811,0xF720,0xF64B,0xF668,0xF7CC, + 0xF89B,0xF784,0xF46A,0xED72,0xE0CE,0xD131,0xC20B,0xBEBF, + 0xBF6F,0xBF54,0xC239,0xDE70,0xFE0A,0x0F8D,0x0F3B,0x006A, + 0xEF0D,0xE538,0xE854,0xF72D,0x0D71,0x2370,0x3486,0x3D8D, + 0x3F1D,0x3F77,0x3F2F,0x3F54,0x3A66,0x314A,0x288A,0x20FD, + 0x1B9B,0x1AE4,0x1F12,0x265C,0x2BC4,0x2873,0x1A8D,0x044C, + 0xEC95,0xDA06,0xD180,0xD404,0xDDD1,0xE83E,0xEE75,0xF1D6, + 0xF043,0xEB25,0xE706,0xE468,0xE44B,0xE6CD,0xEB51,0xF1F0, + 0xFB58,0x06AB,0x133B,0x1E8E,0x2729,0x2B79,0x2AEC,0x24C2, + 0x1CFB,0x1714,0x16AA,0x1B6F,0x235A,0x2B34,0x2FD9,0x2E3A, + 0x25A6,0x188A,0x0BE7,0x0221,0xFB52,0xF724,0xF51A,0xF3BE, + 0xF269,0xF12B,0xF07B,0xF07B,0xEF72,0xEC58,0xE771,0xE215, + 0xDF04,0xDF4A,0xE30E,0xEA52,0xF3F8,0xFDB3,0x057E,0x09D3, + 0x0ACD,0x0912,0x067C,0x0547,0x07A0,0x0D49,0x1499,0x1A91, + 0x1E2E,0x1F9C,0x1F44,0x1D13,0x1968,0x14F5,0x106A,0x0BB2, + 0x06B8,0x02A1,0x0049,0xFF62,0xFEB6,0xFD57,0xFBE7,0xF95C, + 0xF466,0xEDC8,0xE850,0xE597,0xE3C1,0xE64D,0xEAEC,0xEE73, + 0xF32A,0xF60F,0xF753,0xF835,0xF90C,0xF9C1,0xFB6A,0xFDE8, + 0x01B2,0x0537,0x092A,0x0CC4,0x103B,0x1354,0x1457,0x13C7, + 0x11E9,0x0FC6,0x0CF0,0x0A85,0x09BC,0x09E9,0x097C,0x089A, + 0x07AB,0x05EC,0x026D,0xFD59,0xF886,0xF51A,0xF2EA,0xF0C7, + 0xF08E,0xF0B8,0xF162,0xF195,0xF22B,0xF2AE,0xF325,0xF33E, + 0xF3F2,0xF47C,0xF5F4,0xF799,0xF9E1,0xFCF1,0x0082,0x04F1, + 0x083F,0x09D7,0x09CC,0x08EE,0x078E,0x0745,0x08D3,0x0B15, + 0x0CBE,0x0D0E,0x0DBC,0x0C2A,0x0AE0,0x087C,0x062C,0x0377, + 0x00F3,0xFEBC,0xFC30,0xFA7F,0xF9C2,0xF92D,0xF8BC,0xF86D, + 0xF83D,0xF84B,0xF6B1,0xF4CB,0xF3B2,0xF3DA,0xF5C4,0xF810, + 0xF97F,0xFB5A,0xFE66,0xFFDD,0x001D,0xFFCB,0x005C,0x01B8, + 0x0422,0x05BE,0x0773,0x0884,0x083D,0x0784,0x06ED,0x0773, + 0x07F0,0x06FE,0x04AB,0x0228,0x003E,0xFFE8,0xFF04,0xFCEC, + 0xFCDB,0xFCE7,0xFC04,0xFA99,0xF807,0xF5FF,0xF52E,0xF4FB, + 0xF4D4,0xF3FC,0xF474,0xF4F4,0xF3AA,0xEE08,0xE4D2,0xD8D1, + 0xC908,0xBEC1,0xBE35,0xBEBD,0xBE54,0xC47C,0xE323,0x0172, + 0x103C,0x0BBD,0xF95F,0xE7A9,0xE145,0xE98A,0xFC7D,0x1330, + 0x2751,0x36B2,0x3DB7,0x3E26,0x3E17,0x3E5B,0x3CE1,0x3437, + 0x2B3D,0x244F,0x1E76,0x1A42,0x197A,0x1D7E,0x243F,0x280B, + 0x235C,0x1339,0xFBAC,0xE2A4,0xD150,0xCBF4,0xD258,0xDE43, + 0xE86D,0xED01,0xECD7,0xEA0D,0xE6F3,0xE3E8,0xE0A8,0xDFAB, + 0xE20A,0xE87C,0xF21C,0xFD62,0x08AC,0x138B,0x1BE3,0x22D4, + 0x274D,0x2706,0x20AC,0x1975,0x12B5,0x1069,0x1853,0x2274, + 0x2A6F,0x2C36,0x2728,0x1CA8,0x1035,0x0410,0xFBB1,0xF631, + 0xF211,0xEFA7,0xEE41,0xEE44,0xEDFA,0xED68,0xEB53,0xE8CA, + 0xE5CF,0xE2D6,0xDF1D,0xDC5C,0xDCF0,0xE145,0xE965,0xF335, + 0xFD04,0x0409,0x07AC,0x079B,0x05BB,0x0419,0x0510,0x0897, + 0x0D08,0x1228,0x1715,0x1BA6,0x1D88,0x1C5B,0x1904,0x14C3, + 0x1013,0x0BC5,0x0788,0x034B,0xFFAE,0xFCED,0xFB8F,0xFB23, + 0xFB55,0xFA09,0xF586,0xEF23,0xE894,0xE41D,0xE292,0xE3B4, + 0xE62B,0xE928,0xEC3B,0xEDCC,0xF064,0xF3B8,0xF4F1,0xF4F3, + 0xF576,0xF721,0xFA07,0xFE34,0x02E4,0x0758,0x0AD1,0x0D70, + 0x1001,0x11DB,0x118A,0x0FAD,0x0C06,0x09B3,0x07BA,0x06ED, + 0x0810,0x087E,0x07D9,0x059B,0x0248,0xFDFA,0xF9EA,0xF63C, + 0xF2F5,0xF0CD,0xEF72,0xEF51,0xF010,0xF0D7,0xF1DA,0xF2E1, + 0xF3B0,0xF41F,0xF401,0xF421,0xF543,0xF63A,0xF83F,0xFCDC, + 0x002A,0x0441,0x07FE,0x0A6D,0x0A8C,0x0A3A,0x0A09,0x09EC, + 0x0A18,0x0B13,0x0CCC,0x0E06,0x0DB9,0x0D77,0x0CBF,0x0AE8, + 0x080A,0x04CE,0x01AC,0xFF72,0xFD7F,0xFBC2,0xFA2C,0xF9E2, + 0xF96A,0xF90C,0xF899,0xF81D,0xF6B4,0xF48E,0xF2C4,0xF311, + 0xF51B,0xF705,0xF851,0xF9F3,0xFC10,0xFE42,0x0019,0x0129, + 0x01D4,0x02C1,0x03E3,0x0478,0x04E1,0x0613,0x0732,0x08BA, + 0x09F9,0x0A7F,0x0A7C,0x08E7,0x0615,0x0394,0x0223,0x014A, + 0x00F4,0x0089,0xFFF3,0xFF7B,0xFF08,0xFD7B,0xFB94,0xF965, + 0xF7C9,0xF603,0xF637,0xF772,0xF7E6,0xF723,0xF685,0xF61D, + 0xF4BE,0xF11A,0xE990,0xDC51,0xC9AC,0xC0BB,0xC00C,0xC06E, + 0xBFC9,0xCF19,0xF1D7,0x0BD3,0x14ED,0x0B23,0xF75D,0xE6AE, + 0xE28B,0xED81,0x0303,0x1A8E,0x2DF1,0x3A76,0x3EE7,0x3F44, + 0x3F36,0x3F47,0x3B37,0x32E7,0x2AE8,0x23BC,0x1D77,0x1923, + 0x1934,0x1E66,0x257E,0x28A9,0x21DE,0x1012,0xF7AB,0xDF77, + 0xCEF5,0xCB99,0xD3D8,0xE0D7,0xEB56,0xEFCB,0xEE72,0xEA95, + 0xE5AF,0xE219,0xE0FC,0xE268,0xE6B9,0xECA4,0xF48D,0xFE8E, + 0x09AA,0x14A7,0x1ECE,0x25B6,0x27D2,0x253A,0x1EC3,0x169D, + 0x11FA,0x14D9,0x1C45,0x257C,0x2D6B,0x2F65,0x2947,0x1D47, + 0x0F67,0x044E,0xFC4A,0xF750,0xF446,0xF1E1,0xF0C0,0xF00A, + 0xEFE1,0xEF2B,0xED91,0xEA7A,0xE5DF,0xE186,0xDF25,0xDD69, + 0xDDE6,0xE2E5,0xEBDD,0xF67F,0x00C4,0x0736,0x08A9,0x0669, + 0x037B,0x0247,0x0469,0x0948,0x0EE3,0x13F0,0x17C1,0x1A5C, + 0x1BE4,0x1B41,0x1864,0x132C,0x0D35,0x079C,0x02C8,0xFF3A, + 0xFE5D,0xFD0F,0xFB45,0xF9E2,0xF90A,0xF776,0xF492,0xEEC8, + 0xE6F3,0xDFAB,0xDC8C,0xDF4A,0xE57F,0xEB01,0xEF62,0xF07D, + 0xF0E5,0xF22F,0xF31A,0xF435,0xF55E,0xF7F8,0xFBA1,0x0064, + 0x052F,0x0933,0x0C69,0x0E6E,0x1005,0x1108,0x1154,0x0F67, + 0x0C1F,0x0872,0x05F1,0x0579,0x0724,0x08DF,0x090B,0x0624, + 0x013A,0xFC95,0xF851,0xF4F3,0xF201,0xEF5D,0xEE65,0xEEDB, + 0xF073,0xF22D,0xF36D,0xF37B,0xF240,0xF126,0xF1B6,0xF333, + 0xF50C,0xF663,0xF77B,0xFA3D,0xFEAB,0x0394,0x06E3,0x0888, + 0x0893,0x07B2,0x07E0,0x087F,0x09F0,0x0AAE,0x0A0F,0x09EC, + 0x0A9B,0x0ABA,0x09D8,0x09D4,0x0480,0x00F8,0xFE7B,0xFC30, + 0xFB94,0xFB34,0xFA07,0xF89B,0xF77F,0xF68E,0xF6CD,0xF69B, + 0xF634,0xF49C,0xF3E2,0xF445,0xF54A,0xF678,0xF827,0xFA33, + 0xFCDA,0xFF24,0x001A,0x010B,0x01B4,0x0252,0x02B3,0x03C5, + 0x0575,0x07BF,0x0890,0x088B,0x083C,0x087F,0x08B5,0x07CB, + 0x05F7,0x0436,0x02B9,0x01D5,0x011B,0x0088,0xFFB9,0xFE48, + 0xFCBA,0xFBC1,0xFB1A,0xFA43,0xF877,0xF6B3,0xF5CF,0xF5E7, + 0xF753,0xF930,0xFA20,0xF909,0xF59E,0xEF99,0xE786,0xDD07, + 0xCFC9,0xC24F,0xBF9F,0xBEDF,0xC396,0xDC63,0xF882,0x0BCD, + 0x0EB9,0x030B,0xF2D5,0xE879,0xE998,0xF5FC,0x0841,0x1A7E, + 0x2866,0x318C,0x377A,0x39D3,0x3987,0x3517,0x2D88,0x2695, + 0x20D1,0x1BDD,0x173E,0x14EF,0x15C8,0x19C0,0x1F1A,0x20DB, + 0x19A3,0x093C,0xF3D4,0xE106,0xD723,0xD86D,0xE13B,0xEB8E, + 0xF1C6,0xF394,0xF288,0xEFE6,0xECDE,0xEA4B,0xE970,0xEB3D, + 0xEE69,0xF483,0xFC32,0x0418,0x0BEF,0x1415,0x1BEF,0x2202, + 0x242F,0x20BD,0x18D7,0x10E6,0x0E57,0x12D5,0x1AE1,0x22EA, + 0x273C,0x2514,0x1DC8,0x13FA,0x0A2C,0x023D,0xFC00,0xF6AC, + 0xF3A6,0xF346,0xF3C2,0xF352,0xF192,0xEF9C,0xEEAF,0xEE0C, + 0xEC29,0xE8BD,0xE4AC,0xE270,0xE3C6,0xE930,0xF18D,0xFB27, + 0x02BF,0x06CD,0x0737,0x05B2,0x043C,0x0377,0x0479,0x073E, + 0x0BAC,0x10B4,0x14BB,0x16B6,0x16BD,0x15B4,0x134C,0x0EF5, + 0x0AFC,0x06F3,0x0309,0xFED1,0xFC05,0xFB83,0xFC03,0xFC20, + 0xFAEA,0xF882,0xF544,0xF07B,0xEB13,0xE76C,0xE65C,0xE77E, + 0xEB04,0xEFD2,0xF42A,0xF584,0xF7BA,0xF89F,0xF6F9,0xF794, + 0xF974,0xFC1F,0xFEF3,0x0147,0x04A2,0x07B5,0x0AC8,0x0D43, + 0x0E39,0x0E12,0x0D69,0x0BCC,0x08A7,0x05BF,0x0487,0x04E9, + 0x04D5,0x0487,0x0358,0x01E1,0xFF27,0xFC27,0xF842,0xF514, + 0xF338,0xF1CC,0xF09B,0xF0CA,0xF210,0xF313,0xF31D,0xF2F8, + 0xF364,0xF431,0xF4C6,0xF507,0xF535,0xF67F,0xF8F5,0xFBC5, + 0xFEE7,0x01E7,0x04BD,0x0697,0x0778,0x06CA,0x0564,0x0522, + 0x05AA,0x0616,0x0754,0x084E,0x08C4,0x081A,0x05FD,0x03EE, + 0x0366,0x0389,0x00A4,0xFE85,0xFCF9,0xFB83,0xFA2C,0xF9AA, + 0xF969,0xF938,0xF893,0xF7B4,0xF6FD,0xF63F,0xF56A,0xF508, + 0xF545,0xF6EC,0xF986,0xFC00,0xFDC2,0xFFE5,0x00FA,0x00A5, + 0xFFF0,0x005A,0x0153,0x02DE,0x04D0,0x0576,0x05A8,0x0616, + 0x05DC,0x0634,0x0608,0x04B5,0x03B1,0x01EB,0x0089,0xFF13, + 0xFDFE,0xFD9D,0xFD52,0xFC91,0xFC6D,0xFB79,0xF970,0xF7A2, + 0xF76E,0xF6D4,0xF6A2,0xF74A,0xF6B6,0xF6B2,0xF795,0xF813, + 0xF6A7,0xF25A,0xECEC,0xE791,0xE23A,0xDF16,0xE1FC,0xE994, + 0xF4A5,0xFF3F,0x0563,0x056F,0x015A,0xFBF6,0xF90D,0xFA2C, + 0xFF39,0x05F0,0x0BA9,0x0FB1,0x12C3,0x1569,0x16F5,0x168B, + 0x1406,0x100D,0x0C3F,0x08EB,0x0626,0x03D8,0x03AA,0x050B, + 0x06CE,0x07FF,0x07F9,0x04BB,0xFE92,0xF631,0xEF28,0xED13, + 0xEF42,0xF2E8,0xF61D,0xF84E,0xF8FC,0xF90A,0xF8FB,0xF943, + 0xF99C,0xF8BC,0xF817,0xF97F,0xFCFB,0x00A7,0x04EC,0x088E, + 0x0AB6,0x0C26,0x0CD7,0x0C9E,0x0BE7,0x09D6,0x072C,0x0651, + 0x067C,0x06E5,0x0ADF,0x0D47,0x0B17,0x096D,0x053F,0x0186, + 0xFF25,0xFD6D,0xFBBB,0xFA6F,0xF969,0xF8BE,0xF7F1,0xF729, + 0xF687,0xF58A,0xF48C,0xF358,0xF22A,0xF141,0xF113,0xF1CD, + 0xF364,0xF5C8,0xF884,0xFB19,0xFBF4,0xFBE7,0xFC15,0xFC3C, + 0xFC53,0xFCA1,0xFCC8,0xFD4C,0xFDA6,0xFDDB,0xFDFF,0xFDCF, + 0xFD28,0xFBF3,0xFB64,0xFAB8,0xF999,0xF8A7,0xF77F,0xF6A3, + 0xF5E5,0xF53C,0xF45E,0xF3C8,0xF2CF,0xF1DE,0xF082,0xEF85, + 0xEF25,0xEE60,0xEDFD,0xED5B,0xED58,0xEC93,0xEC13,0xEBB8, + 0xEB60,0xEADE,0xE8C8,0xE6EB,0xE74F,0xE752,0xE7A1,0xE7DD, + 0xE7F0,0xE80A,0xE82C,0xE77B,0xE70E,0xE6BD,0xE67F,0xE679, + 0xE637,0xE5ED,0xE609,0xE650,0xE6F3,0xE641,0xE587,0xE610, + 0xE6B7,0xE674,0xE69C,0xE6F1,0xE708,0xE6F0,0xE771,0xE7D6, + 0xE86E,0xE881,0xE8AE,0xE93B,0xE9C1,0xE9E4,0xEA61,0xEB12, + 0xEB4B,0xEBCB,0xEC1C,0xEC9D,0xED37,0xEDD4,0xEF2D,0xEE76, + 0xEE35,0xEEAF,0xEEC6,0xEF45,0xEFE8,0xF079,0xF0A2,0xF122, + 0xF214,0xF2F5,0xF3ED,0xF455,0xF54F,0xF5D0,0xF59A,0xF5BE, + 0xF5EB,0xF656,0xF694,0xF6E7,0xF7D7,0xF85F,0xF866,0xF898, + 0xF8CC,0xF971,0xFA11,0xFAB5,0xFAEF,0xFB77,0xFBE6,0xFC82, + 0xFCFE,0xFD22,0xFD62,0xFE36,0xFE67,0xFEDA,0xFF7D,0xFFB2, + 0xFFB5,0x0000,0x005C,0x00CB,0x0127,0x0185,0x0234,0x0278, + 0x025B,0x0292,0x029D,0x031D,0x0358,0x039B,0x03AE,0x03D7, + 0x0411,0x04C1,0x04C7,0x0520,0x052D,0x05E0,0x0652,0x0669, + 0x0692,0x06A7,0x06CD,0x074F,0x071F,0x07F8,0x0842,0x0883, + 0x08BC,0x0954,0x08C1,0x07FB,0x0A23,0x09A0,0x09AC,0x0A7F, + 0x0A77,0x0A9A,0x0A9D,0x0AA6,0x0AAF,0x0ACB,0x0B23,0x0B2C, + 0x0B31,0x0B2A,0x0B17,0x0B40,0x0B71,0x0B5F,0x0B91,0x0C02, + 0x0C6C,0x0C12,0x0C27,0x0C3C,0x0C2B,0x0CD4,0x0CF5,0x0CF8, + 0x0D44,0x0D14,0x0CB0,0x0C98,0x0CEB,0x0D10,0x0D24,0x0D43, + 0x0D30,0x0CFA,0x0CF6,0x0D34,0x0D45,0x0DB6,0x0D7B,0x0D7C, + 0x0D46,0x0DA1,0x0D81,0x0D07,0x0D5C,0x0D88,0x0DA6,0x0D53, + 0x0D65,0x0D29,0x0D02,0x0CE8,0x0CF7,0x0CFC,0x0D6D,0x0DAB, + 0x0F4F,0x100A,0x0F5C,0x0EF4,0x0EDB,0x0EBF,0x0E96,0x0E77, + 0x0E8A,0x0EBE,0x0E6D,0x0E62,0x0E64,0x0E50,0x0E93,0x0E6C, + 0x0DF2,0x0E32,0x0DF7,0x0D3C,0x0D28,0x0DCD,0x0DDF,0x0CFE, + 0x0CF6,0x0D2F,0x0C8E,0x0C8E,0x0CB6,0x0CC6,0x0C90,0x0C6A, + 0x0C0A,0x0BEC,0x0BCA,0x0BAC,0x0BA2,0x0BA4,0x0B26,0x0B2F, + 0x0AFD,0x0AC9,0x0ABA,0x0AB5,0x0ABC,0x09FC,0x095D,0x0A77, + 0x0AF3,0x0AD2,0x0AC8,0x0AE2,0x0A87,0x0AD2,0x0AC1,0x0A48, + 0x09D1,0x0944,0x08C6,0x0900,0x0830,0x07FC,0x0855,0x081E, + 0x082C,0x0821,0x07AA,0x07E0,0x07E8,0x07BA,0x07AF,0x07CA, + 0x0778,0x0769,0x07B5,0x076F,0x07E6,0x0820,0x079A,0x0762, + 0x0774,0x073B,0x06F4,0x06CD,0x06F3,0x0707,0x073E,0x0770, + 0x06F2,0x06C2,0x06FC,0x0678,0x0635,0x0632,0x05B3,0x05F3, + 0x05FF,0x0632,0x065E,0x05F6,0x05F3,0x061C,0x0631,0x05F7, + 0x05AC,0x0550,0x0512,0x0471,0x0422,0x041F,0x0442,0x041D, + 0x0413,0x0433,0x0429,0x0433,0x046C,0x0435,0x0415,0x0426, + 0x03AC,0x035D,0x05A5,0x040E,0x0471,0x04FE,0x0430,0x03F5, + 0x03ED,0x03EB,0x03BA,0x0408,0x03F5,0x0428,0x0409,0x03F6, + 0x03DB,0x0416,0x03F0,0x0372,0x0391,0x03D6,0x03B6,0x0355, + 0x0379,0x03BF,0x03EB,0x03D9,0x0382,0x036B,0x03C8,0x03C3, + 0x03CF,0x0384,0x0300,0x0307,0x035F,0x038C,0x0319,0x0350, + 0x0291,0x02BE,0x02D0,0x02A1,0x02D1,0x02CE,0x028D,0x0290, + 0x0296,0x0209,0x0226,0x021E,0x025E,0x0209,0x021F,0x01DA, + 0x01C3,0x01CB,0x0246,0x01F0,0x01D1,0x0191,0x01AB,0x01DC, + 0x01D1,0x0109,0xFF3A,0x008F,0xFF91,0xFFAB,0xFFF6,0xFF82, + 0xFFB0,0xFF42,0xFF56,0xFEEC,0xFE83,0xFEAA,0xFEDF,0xFEE4, + 0xFEFC,0xFF1C,0xFF25,0xFF5D,0xFED8,0xFF23,0xFEF1,0xFECF, + 0xFEF2,0xFF11,0xFE8E,0xFDEE,0xFEEE,0xFF49,0xFF35,0xFF6D, + 0xFF9B,0xFF5B,0xFF80,0xFF70,0xFF84,0xFF45,0xFECB,0xFF2E, + 0xFEAC,0xFDBE,0xFD9D,0xFDD4,0xFDDA,0xFDCC,0xFDFE,0xFDF0, + 0xFDE0,0xFDEA,0xFDDD,0xFD7E,0xFD9E,0xFDC0,0xFDA7,0xFD94, + 0xFDD0,0xFE58,0xFEB3,0xFE91,0xFDEF,0xFE3F,0xFE46,0xFE9D, + 0xFEBD,0xFE44,0xFE62,0xFE89,0xFEC4,0xFEAC,0xFED1,0xFEF1, + 0xFF31,0xFF0C,0xFECB,0xFEF8,0xFF19,0xFF22,0xFEE1,0xFED5, + 0xFF21,0xFF3D,0xFEF7,0xFEEC,0xFEDA,0xFEA8,0xFE5A,0xFE8A, + 0xFE8C,0xFE3F,0xFDFE,0xFE4D,0xFE23,0xFE81,0xFEA9,0xFE93, + 0xFEB1,0xFEBE,0xFE47,0xFE3A,0xFE68,0xFDBC,0xFE07,0xFF6E, + 0xFDA4,0xFE8F,0xFEDD,0xFE48,0xFE01,0xFE84,0xFE4C,0xFE3D, + 0xFE45,0xFE74,0xFEBE,0xFE7C,0xFE76,0xFE67,0xFE9C,0xFE93, + 0xFEDC,0xFEBD,0xFEBA,0xFEDC,0xFE84,0xFE0B,0xFE24,0xFE2B, + 0xFDB4,0xFD4B,0xFCE9,0xFD07,0xFCB7,0xFCAD,0xFC84,0xFC6A, + 0xFC37,0xFC32,0xFC09,0xFBC9,0xFC19,0xFBB2,0xFB48,0xFB63, + 0xFB7E,0xFB10,0xFB31,0xFB3C,0xFAE4,0xFAC5,0xFACF,0xFABC, + 0xFAF0,0xFABD,0xFAC9,0xFAA9,0xFA98,0xFA78,0xFA21,0xFA13, + 0xFA63,0xFA18,0xF9DE,0xF9C4,0xFA0E,0xFA40,0xF8B7,0xF70C, + 0xF774,0xF796,0xF7C3,0xF823,0xF888,0xF8A1,0xF8EF,0xF8FF, + 0xF8D5,0xF8CF,0xF8EA,0xF8B3,0xF8AD,0xF8D8,0xF91C,0xF950, + 0xF9BB,0xF9BA,0xF8D6,0xF9A0,0xFA6B,0xFA7E,0xFA5A,0xFAD0, + 0xFAB3,0xFA96,0xFAFF,0xFB31,0xFB96,0xFB95,0xFB85,0xFC1A, + 0xFC18,0xFC45,0xFC46,0xFC67,0xFC3D,0xFC8A,0xFCE2,0xFD31, + 0xFD47,0xFD38,0xFE79,0xFE43,0xFD00,0xFD12,0xFD33,0xFDC6, + 0xFDEA,0xFDD7,0xFD86,0xFE1B,0xFE67,0xFE91,0xFF08,0xFF7E, + 0x0026,0x00BB,0x0064,0x008F,0x0057,0x0018,0x004C,0x001E, + 0x002F,0x0047,0x004C,0x0085,0x0054,0x007E,0x00CD,0x00E2, + 0x00BF,0x00FF,0x014A,0x0150,0x0128,0x0107,0x00B4,0x011C, + 0x016F,0x0155,0x0185,0x0165,0x0124,0x0107,0x010B,0x011B, + 0x0109,0x0125,0x0111,0x0171,0x019B,0x0164,0x0169,0x0166, + 0x013A,0x0138,0x0157,0x0165,0x01CF,0x0200,0x0223,0x0252, + 0x023D,0x0243,0x0234,0x02B2,0x02DC,0x02D3,0x0280,0x0255, + 0x027D,0x02C7,0x0311,0x02FD,0x02B5,0x0344,0x03C5,0x01E2, + 0x0337,0x040C,0x0301,0x0320,0x033C,0x02EA,0x02C3,0x02D8, + 0x031B,0x031B,0x02F8,0x02CC,0x02C7,0x027F,0x027B,0x027C, + 0x0271,0x027B,0x02A7,0x02E0,0x028D,0x0252,0x0252,0x0278, + 0x0276,0x023C,0x021C,0x025A,0x0230,0x01FF,0x0209,0x0262, + 0x01FC,0x02A4,0x028E,0x0224,0x0222,0x0295,0x0280,0x0234, + 0x020F,0x0206,0x020E,0x01DA,0x01D0,0x01C5,0x01EF,0x01DD, + 0x0192,0x0167,0x0197,0x01D4,0x017F,0x01C0,0x01DC,0x01FF, + 0x01BC,0x01AA,0x01D3,0x0245,0x032B,0x0575,0x0463,0x03CF, + 0x036E,0x0350,0x036B,0x0334,0x0332,0x0311,0x02EA,0x0286, + 0x02A0,0x025F,0x022F,0x0210,0x0201,0x01EF,0x01F9,0x018F, + 0x011D,0x01F5,0x0272,0x0191,0x0123,0x0189,0x0189,0x019E, + 0x0189,0x013A,0x014E,0x0165,0x0128,0x0118,0x0103,0x00CA, + 0x011D,0x0096,0x0026,0x001F,0x0036,0x0037,0xFFFA,0xFFB7, + 0x0029,0xFFD9,0xFED0,0xFF0C,0xFFFE,0x0062,0x00A6,0x00AD, + 0x0081,0x0038,0x0017,0xFFD3,0xFF95,0xFEFE,0xFED9,0xFF44, + 0xFE6C,0xFE3A,0xFE45,0xFE76,0xFE0A,0xFE10,0xFE03,0xFE2E, + 0xFE26,0xFE5C,0xFE4F,0xFE39,0xFE26,0xFE33,0xFEA8,0xFE97, + 0xFE73,0xFEA0,0xFE4D,0xFE34,0xFE14,0xFE53,0xFE81,0xFE4F, + 0xFE60,0xFE56,0xFE1E,0xFE5D,0xFE01,0xFE12,0xFE69,0xFE5E, + 0xFE66,0xFE79,0xFEB2,0xFE8B,0xFE63,0xFE3B,0xFE7F,0xFE7B, + 0xFE31,0xFE1B,0xFE2F,0xFE5E,0xFDAE,0xFDC1,0xFDE5,0xFDC0, + 0xFDE9,0xFD81,0xFDF2,0xFE21,0xFE15,0xFDDE,0xFDBD,0xFDFD, + 0xFE6F,0xFE53,0xFE8D,0xFEB7,0xFEC7,0xFDBC,0xFFC8,0xFF3A, + 0xFE13,0xFF2D,0xFF17,0xFF24,0xFF3C,0xFF67,0xFF7E,0xFF92, + 0xFF7C,0xFF8B,0xFF88,0xFF7D,0xFF7C,0x000F,0xFFEF,0xFFBD, + 0xFFED,0x004C,0x0047,0xFFF3,0x003E,0x003C,0xFFD5,0xFFDE, + 0xFF8D,0xFFD3,0xFFE8,0xFFE2,0xFFC1,0xFFF1,0xFFEB,0x0022, + 0x000C,0x0058,0x0042,0xFFE3,0xFFEF,0x001B,0x0048,0x0052, + 0x00A6,0x00DC,0x00A2,0x003F,0x0000,0x0048,0x0015,0x0018, + 0x004A,0x0095,0x004B,0x00D2,0x00BC,0x0051,0x0098,0x0078, + 0x005E,0x0062,0x005E,0x0070,0x0026,0xFFE9,0xFE33,0xFD11, + 0xFDF1,0xFE44,0xFE8A,0xFEB5,0xFEB2,0xFEAB,0xFED7,0xFEF6, + 0xFEDF,0xFF12,0xFF1C,0xFF79,0xFF9F,0xFF81,0xFF66,0xFFA2, + 0x0037,0xFF79,0xFF0A,0xFFC2,0xFFEA,0xFFE4,0x000A,0x001E, + 0xFFFD,0x002B,0x0026,0x0024,0x004A,0x004B,0x0088,0x0077, + 0x002B,0x0048,0x0079,0x007B,0x00D2,0x0106,0x00CB,0x00F6, + 0x010D,0x010A,0x01FA,0x00FE,0xFFFD,0xFF99,0xFFFB,0x0013, + 0x0016,0xFFEE,0xFFF5,0x0054,0x00C7,0x015E,0x0153,0x01AF, + 0x0249,0x020C,0x01AE,0x0171,0x016F,0x01BA,0x01E5,0x0238, + 0x022F,0x01B2,0x00FF,0x0139,0x0131,0x014E,0x0102,0x00E5, + 0x00C1,0x00CB,0x00B7,0x00AA,0x0095,0x0095,0x0084,0x0056, + 0x004A,0x0097,0x0095,0x0077,0x00C6,0x005F,0xFFF6,0x000D, + 0x004F,0x003A,0x0065,0x0065,0x0051,0x0029,0x0024,0xFFAF, + 0xFF82,0xFF5B,0xFF31,0xFF22,0xFF51,0xFF9E,0xFF8F,0xFF7A, + 0xFF43,0xFF5C,0xFF37,0xFFB4,0xFF7E,0xFF60,0xFF83,0xFF5D, + 0xFEFF,0xFF56,0xFF91,0xFF46,0xFF4E,0x000A,0xFF5D,0xFEB9, + 0x00B7,0xFF7E,0xFEFD,0xFF14,0xFF1D,0xFF22,0xFF15,0xFECB, + 0xFEA2,0xFEE5,0xFEB2,0xFE7B,0xFE66,0xFE54,0xFE23,0xFE6D, + 0xFE52,0xFE1E,0xFE48,0xFE7D,0xFEAC,0xFE81,0xFE75,0xFE9D, + 0xFE7C,0xFE6C,0xFE89,0xFEA6,0xFEB3,0xFE9D,0xFE65,0xFEA2, + 0xFE92,0xFEBD,0xFE9A,0xFE94,0xFE94,0xFF0B,0xFEDF,0xFE5E, + 0xFE39,0xFE2B,0xFE55,0xFE8E,0xFE6F,0xFE49,0xFDB2,0xFE2F, + 0xFE58,0xFE03,0xFDE7,0xFE1E,0xFE22,0xFDFA,0xFDCF,0xFE1A, + 0xFE22,0xFDC5,0xFE6B,0xFECF,0x00C5,0x0119,0x00A1,0x002E, + 0x003E,0x0018,0xFFFF,0x0012,0xFF8F,0xFFDA,0xFFB9,0xFFD6, + 0x0009,0xFFAC,0xFF97,0xFFB6,0xFFB9,0xFF8B,0xFFAF,0xFF61, + 0xFF4B,0x003A,0xFFD6,0xFEE6,0xFF42,0xFF54,0xFEC2,0xFE90, + 0xFE64,0xFECD,0xFF0A,0xFEFC,0xFED7,0xFF0F,0xFEB3,0xFE9A, + 0xFE71,0xFE3E,0xFE5A,0xFE64,0xFE6A,0xFE47,0xFE39,0xFE0B, + 0xFE0E,0xFD66,0xFD10,0xFE62,0xFEB2,0xFE86,0xFE92,0xFE44, + 0xFE3E,0xFE49,0xFE7D,0xFE10,0xFE3A,0xFDD7,0xFDAD,0xFD6B, + 0xFCA1,0xFCC4,0xFD39,0xFD4B,0xFCB9,0xFCBD,0xFCE0,0xFCBF, + 0xFCA5,0xFCAB,0xFD08,0xFCCD,0xFCAB,0xFCFB,0xFCFE,0xFCE9, + 0xFD03,0xFCB3,0xFCEA,0xFD24,0xFD48,0xFD9B,0xFDA2,0xFDB5, + 0xFDD3,0xFDD1,0xFDEB,0xFDC4,0xFD83,0xFD40,0xFD0F,0xFD4E, + 0xFD6A,0xFD4F,0xFD1E,0xFD65,0xFD47,0xFD59,0xFD89,0xFD6D, + 0xFDAB,0xFDB2,0xFD73,0xFD35,0xFD21,0xFD31,0xFD9D,0xFDEB, + 0xFE0D,0xFDB0,0xFDB4,0xFDBE,0xFDC7,0xFD84,0xFDD6,0xFE05, + 0xFE3F,0xFDD4,0xFE03,0xFE64,0xFDEE,0xFE38,0xFFE4,0xFDFE, + 0xFE85,0xFEF5,0xFED3,0xFF1C,0xFF57,0xFF5D,0xFF53,0xFF5B, + 0xFF34,0xFF79,0xFFAF,0xFFB4,0xFFEA,0x004B,0xFFFF,0xFFE8, + 0xFF8A,0xFF76,0xFF5B,0xFF4D,0xFF97,0xFF88,0xFFC1,0xFF98, + 0xFFDF,0xFFA6,0xFF88,0xFFD0,0xFFD2,0xFFCD,0xFFD9,0x002D, + 0x0016,0xFFF8,0xFFA3,0xFFDD,0xFFBF,0xFFBF,0xFFAD,0xFFB7, + 0xFFD5,0xFFEC,0xFFE2,0xFF7C,0xFF73,0xFF3C,0xFF8C,0xFF52, + 0xFF35,0xFF72,0xFF5C,0xFF60,0xFEEF,0xFEDC,0xFF39,0xFF3F, + 0xFECA,0xFF2C,0xFF0F,0xFEFE,0xFF04,0xFE54,0xFC45,0xFCC0, + 0xFCFD,0xFCFC,0xFD4E,0xFD75,0xFD97,0xFDC6,0xFDD8,0xFDBB, + 0xFD83,0xFDCA,0xFDD9,0xFDFF,0xFE40,0xFE1A,0xFE4A,0xFECA, + 0xFE8D,0xFDA9,0xFE51,0xFF20,0xFEE6,0xFEE1,0xFF12,0xFED7, + 0xFE9B,0xFF16,0xFECC,0xFECB,0xFF48,0xFF40,0xFF3E,0xFF5F, + 0xFF55,0xFF9A,0xFFC5,0xFFCF,0xFFB6,0xFFA6,0xFFA6,0x0018, + 0xFFB7,0x00C9,0x0105,0xFFC8,0xFF83,0xFF8A,0xFFB4,0xFFA1, + 0xFFEC,0x001A,0x0022,0x0045,0x00FA,0x0142,0x0130,0x01BB, + 0x0241,0x021E,0x01BB,0x01FE,0x0198,0x018D,0x0169,0x014D, + 0x015B,0x0176,0x016B,0x0155,0x00FB,0x00FA,0x0121,0x00EF, + 0x0120,0x0137,0x00DF,0x00AC,0x0086,0x00E6,0x00E1,0x00BD, + 0x00E8,0x00D5,0x00D4,0x00AE,0x0091,0x00F8,0x00E7,0x00CA, + 0x008A,0x005B,0x0065,0x0086,0x0070,0x005D,0x002F,0xFFF9, + 0xFFCA,0xFFF5,0xFFE1,0xFFCC,0x0061,0x004A,0x003C,0x0026, + 0x000B,0x002F,0x0049,0xFFFE,0x003D,0x0020,0xFFC6,0xFF93, + 0xFF97,0xFFC5,0xFFDB,0xFFAB,0x000C,0x001B,0xFE66,0xFFD0, + 0x002D,0xFF08,0xFF4E,0xFF73,0xFF6F,0xFF59,0xFF4B,0xFEFC, + 0xFF1F,0xFEEA,0xFF28,0xFEF9,0xFF06,0xFF14,0xFF18,0xFEBA, + 0xFED0,0xFE8B,0xFE69,0xFE9C,0xFE69,0xFE65,0xFE8F,0xFEE8, + 0xFEE3,0xFEE0,0xFEBF,0xFEBB,0xFEB6,0xFE9F,0xFE74,0xFEA3, + 0xFEC1,0xFEB6,0xFE3F,0xFE6B,0xFED7,0xFF0E,0xFECB,0xFEFC, + 0xFF27,0xFED4,0xFF1B,0xFF17,0xFF05,0xFEED,0xFEE2,0xFEF8, + 0xFF57,0xFF8F,0xFF63,0xFEE0,0xFF16,0xFF01,0xFF18,0xFEEB, + 0xFEF4,0xFF44,0xFF65,0x0099,0x0233,0x0174,0x0115,0x00D1, + 0x00D5,0x00E1,0x00C4,0x00BF,0x00D7,0x00D2,0x0087,0x0086, + 0x00A4,0x00CE,0x006A,0x0016,0x0040,0x0059,0xFFF1,0xFF8E, + 0x000A,0x0079,0xFFA6,0xFF29,0xFF9C,0xFFB6,0xFF68,0xFF32, + 0xFEE3,0xFF20,0xFF46,0xFF5A,0xFF1D,0xFEE5,0xFEC0,0xFEDD, + 0xFEC6,0xFEDD,0xFEAF,0xFE83,0xFE55,0xFE21,0xFE2F,0xFEAA, + 0xFD85,0xFCE6,0xFE4A,0xFEE5,0xFF20,0xFEA8,0xFEAB,0xFEB2, + 0xFE3B,0xFE1B,0xFDF3,0xFDC1,0xFD80,0xFCFC,0xFD30,0xFCEC, + 0xFC72,0xFC88,0xFCAA,0xFCEF,0xFCBC,0xFC78,0xFC46,0xFCB4, + 0xFC9C,0xFC58,0xFCDC,0xFCFD,0xFCE9,0xFD08,0xFD20,0xFD7F, + 0xFD4E,0xFD2C,0xFD37,0xFD16,0xFD69,0xFD6D,0xFD08,0xFD7A, + 0xFDC4,0xFDD7,0xFDF0,0xFDFE,0xFDD5,0xFD9A,0xFD7D,0xFDA8, + 0xFDC4,0xFDC0,0xFDB1,0xFDB3,0xFE1D,0xFE20,0xFDF3,0xFE48, + 0xFE2A,0xFDE9,0xFE00,0xFE10,0xFE1A,0xFE13,0xFE0E,0xFDC5, + 0xFD60,0xFD64,0xFD8E,0xFE04,0xFE21,0xFE10,0xFDED,0xFE58, + 0xFDB7,0xFDF7,0xFE0C,0xFE2D,0xFD70,0xFF33,0xFE8A,0xFD2D, + 0xFE60,0xFE2A,0xFDFF,0xFDBC,0xFDF9,0xFDF7,0xFE44,0xFE27, + 0xFE5A,0xFE74,0xFEB6,0xFE78,0xFEA6,0xFEE3,0xFEF9,0xFF1A, + 0xFEFE,0xFF16,0xFED9,0xFF56,0xFF31,0xFF44,0xFF9D,0xFFA7, + 0xFF60,0xFF02,0xFEC4,0xFEC3,0xFED6,0xFE63,0xFED2,0xFEE9, + 0xFEDB,0xFE8F,0xFEB7,0xFE9A,0xFEBC,0xFF05,0xFF25,0xFF6C, + 0xFF54,0xFEFF,0xFF47,0xFF45,0xFEB8,0xFEEB,0xFEDB,0xFECC, + 0xFEEF,0xFEE7,0xFED8,0xFEBC,0xFEBE,0xFEE2,0xFEEB,0xFEC7, + 0xFE6A,0xFE65,0xFE88,0xFEE8,0xFE4F,0xFC40,0xFB95,0xFCD8, + 0xFCF9,0xFCD5,0xFD07,0xFD1E,0xFD60,0xFD74,0xFD79,0xFD59, + 0xFD8E,0xFD4B,0xFD85,0xFDC3,0xFE0B,0xFE2C,0xFE2E,0xFEB5, + 0xFE4D,0xFDE6,0xFE61,0xFE83,0xFE76,0xFEA2,0xFEB9,0xFEEE, + 0xFFB0,0xFFA1,0xFF74,0xFFE7,0x0005,0x0015,0x0041,0x000E, + 0x001C,0x0045,0x0041,0x006D,0x0077,0x00A4,0x005D,0x0108, + 0x01D9,0x00B6,0x000D,0xFFF8,0xFFDD,0x0002,0x0035,0x00AB, + 0x00D4,0x00C8,0x00B7,0x00AF,0x00D2,0x010B,0x0143,0x01F2, + 0x01F0,0x01A2,0x01C3,0x0193,0x01CB,0x01CA,0x0209,0x01C4, + 0x0198,0x01A5,0x01CF,0x01C0,0x019C,0x01B6,0x01D8,0x0150, + 0x0143,0x015E,0x011F,0x0108,0x00C5,0x00A6,0x00AA,0x00F3, + 0x00E5,0x010A,0x0105,0x00D7,0x00C8,0x006E,0x0045,0x0080, + 0x008A,0x0089,0x0063,0x006A,0x0029,0x001D,0x0047,0x0048, + 0x0042,0x001F,0xFFED,0x003D,0x0038,0x0000,0xFFD1,0x002C, + 0x0050,0x0023,0xFFF5,0xFFE1,0xFFC8,0xFFC9,0xFF59,0xFF11, + 0xFFB9,0x001B,0xFFEB,0xFFAE,0x00BE,0xFEF9,0xFE98,0x008B, + 0xFFC6,0xFF7A,0xFFD8,0xFFB2,0xFFB3,0xFFDA,0xFFCB,0xFFD2, + 0xFFB6,0xFF91,0xFFDC,0xFFC3,0xFFB2,0xFFAD,0xFFBA,0xFF9F, + 0xFFBF,0xFFEF,0xFFB8,0xFF7F,0xFF69,0xFF7D,0xFF98,0xFF6E, + 0xFF04,0xFF31,0xFF90,0xFF90,0xFF79,0xFF9F,0xFF66,0xFECF, + 0xFEFF,0xFF50,0xFF92,0xFFBA,0xFFDF,0x0054,0x0010,0xFF60, + 0xFFB7,0xFFF5,0xFFB7,0xFF93,0xFF3B,0xFF51,0xFF2E,0xFEED, + 0xFF16,0xFF2F,0xFF35,0xFEEF,0xFF23,0xFEEA,0xFF25,0xFF4B, + 0xFF09,0xFF3D,0xFFC4,0x01AA,0x01E9,0x0146,0x014C,0x00F6, + 0x00C1,0x00BD,0x00B2,0x009B,0x0096,0x00EB,0x00B3,0x00C3, + 0x0035,0x002D,0x003F,0x0063,0xFFEE,0xFFE9,0xFF87,0xFF9E, + 0x0042,0xFF8B,0xFE92,0xFF29,0xFFA3,0xFF2C,0xFF2C,0xFF25, + 0xFEFF,0xFEE5,0xFEBF,0xFE9A,0xFEA7,0xFE66,0xFE21,0xFE6D, + 0xFEA6,0xFE9E,0xFEA2,0xFE9F,0xFE70,0xFE0B,0xFE51,0xFE6E, + 0xFDA1,0xFD97,0xFE51,0xFE73,0xFE9F,0xFE63,0xFE2D,0xFDE1, + 0xFDFF,0xFE5B,0xFE72,0xFDAC,0xFD2E,0xFCFC,0xFD13,0xFCAF, + 0xFCC6,0xFCFA,0xFCEC,0xFCF9,0xFCDA,0xFCF5,0xFCAC,0xFD06, + 0xFD75,0xFD36,0xFD5D,0xFCD0,0xFCD8,0xFD4C,0xFCF4,0xFCEE, + 0xFCEF,0xFD27,0xFCD3,0xFCC4,0xFC6E,0xFCEE,0xFC90,0xFC87, + 0xFD03,0xFD18,0xFCD4,0xFCE9,0xFD4F,0xFD54,0xFD3C,0xFD1A, + 0xFD48,0xFD4A,0xFD50,0xFD29,0xFD02,0xFD06,0xFCFD,0xFD52, + 0xFD0B,0xFCD6,0xFD33,0xFD02,0xFD26,0xFD0D,0xFD5A,0xFCF1, + 0xFC71,0xFCDE,0xFD0B,0xFD6C,0xFD3D,0xFCCA,0xFCF5,0xFDE8, + 0xFDA6,0xFDD6,0xFE1F,0xFD96,0xFD9F,0xFF29,0xFD10,0xFDB8, + 0xFDD7,0xFDD1,0xFDC6,0xFDF1,0xFDCE,0xFDC8,0xFE1D,0xFE2F, + 0xFE2A,0xFDD6,0xFDFB,0xFE44,0xFEAC,0xFE2B,0xFE85,0xFEC7, + 0xFEF4,0xFE9C,0xFEDB,0xFEBD,0xFE88,0xFE93,0xFE9D,0xFE7E, + 0xFE7F,0xFEB4,0xFE6D,0xFE74,0xFE79,0xFE95,0xFEA1,0xFEBF, + 0xFE7B,0xFE94,0xFE86,0xFEDA,0xFEB9,0xFE5F,0xFE9F,0xFE8F, + 0xFE67,0xFEBF,0xFE75,0xFE84,0xFF18,0xFF10,0xFEB2,0xFF02, + 0xFF4C,0xFEE3,0xFF24,0xFF3C,0xFF30,0xFF89,0xFFC0,0x0030, + 0xFFD8,0xFFBE,0xFFCA,0xFFA6,0xFE8B,0xFCAB,0xFCD4,0xFD09, + 0xFD2B,0xFDB2,0xFE14,0xFE41,0xFE3B,0xFE34,0xFE4B,0xFE39, + 0xFE1C,0xFDF4,0xFE3A,0xFE01,0xFE4B,0xFE25,0xFF08,0xFEFA, + 0xFE5A,0xFEA1,0xFF5D,0xFF54,0xFF68,0xFFC8,0xFFCE,0xFFBF, + 0xFFBE,0xFFD2,0x0000,0x0002,0xFFF2,0x0005,0x000E,0x0056, + 0x000F,0xFFFC,0x0006,0x0088,0x004C,0x0008,0x0059,0x0075, + 0x0130,0x0176,0x0095,0x0019,0x005F,0x002F,0x0071,0x00A5, + 0x00BE,0x0111,0x015C,0x01D1,0x01B6,0x01C8,0x021B,0x028C, + 0x02A7,0x023B,0x0211,0x022C,0x01F7,0x01DC,0x0241,0x020F, + 0x01F7,0x01F5,0x01B9,0x017C,0x0184,0x0147,0x0163,0x015E, + 0x0195,0x01F1,0x0167,0x0165,0x016A,0x0140,0x0113,0x010E, + 0x0107,0x0117,0x0155,0x0119,0x0145,0x0100,0x0103,0x00B5, + 0x00D5,0x010C,0x00B4,0x0083,0x007E,0x0068,0x0023,0x006A, + 0x0095,0x008F,0x0082,0x0071,0x0085,0x00A8,0x0061,0x00B1, + 0x00B3,0x008E,0x007D,0x0034,0x0076,0x00B0,0x0024,0x0010, + 0x0067,0x001C,0x004E,0x00B6,0x00A8,0xFED0,0x0053,0x003C, + 0xFF99,0xFFEB,0x003D,0x0005,0xFFF2,0xFFE0,0x0012,0x0040, + 0x003B,0x000D,0xFFEC,0xFFC5,0xFFEC,0xFFC9,0xFFFA,0xFFC5, + 0xFFC0,0xFFAF,0xFFE5,0x0056,0xFFEB,0xFF95,0xFF74,0xFFBD, + 0xFF8E,0xFF66,0xFF80,0xFF27,0xFF57,0xFFA1,0xFFAA,0xFF7B, + 0xFF69,0xFF76,0xFF8F,0xFFB4,0xFF75,0xFF68,0xFF20,0xFEF8, + 0xFF09,0xFF39,0xFF52,0xFF1D,0xFF19,0xFEA1,0xFED2,0xFEB0, + 0xFECD,0xFEB3,0xFE68,0xFE92,0xFE6D,0xFEC7,0xFEB7,0xFEDA, + 0xFF0B,0xFF4B,0x0060,0x0200,0x00F6,0x00CD,0x0060,0x0026, + 0x004E,0x0057,0x002A,0x000C,0x003B,0xFFF9,0xFFD1,0xFFA2, + 0xFFBD,0xFFE0,0xFF84,0xFFB3,0xFFBF,0xFF9B,0xFF2E,0xFFE6, + 0x0032,0xFF32,0xFE87,0xFED9,0xFEBE,0xFEB8,0xFE8E,0xFE95, + 0xFEC9,0xFE8D,0xFE75,0xFE64,0xFEA0,0xFE7E,0xFE85,0xFE23, + 0xFE30,0xFE8D,0xFE9A,0xFEAD,0xFE7C,0xFED1,0xFF27,0xFE6C, + 0xFD3E,0xFE13,0xFEFD,0xFF3C,0xFF7A,0xFF2F,0xFF05,0xFEE6, + 0xFEE5,0xFEEC,0xFE46,0xFDAB,0xFDA4,0xFD91,0xFCFA,0xFCAE, + 0xFD08,0xFD27,0xFCFB,0xFCB4,0xFCCA,0xFC7D,0xFC66,0xFC7D, + 0xFC8B,0xFC7F,0xFCBA,0xFCAF,0xFCF4,0xFD49,0xFD29,0xFD3D, + 0xFD35,0xFCFD,0xFD2F,0xFD6B,0xFD97,0xFDBE,0xFDD7,0xFDD0, + 0xFD9A,0xFDAB,0xFD60,0xFD88,0xFDB7,0xFD61,0xFD81,0xFD92, + 0xFD84,0xFD7A,0xFD6B,0xFDD5,0xFDD8,0xFD7D,0xFD88,0xFDB1, + 0xFD9D,0xFD47,0xFD4D,0xFD59,0xFD80,0xFD74,0xFD99,0xFD27, + 0xFD21,0xFD35,0xFD51,0xFD60,0xFD28,0xFD81,0xFE1B,0xFE0D, + 0xFE31,0xFE59,0xFE58,0xFD8B,0xFF6D,0xFE5B,0xFDB9,0xFED5, + 0xFE80,0xFE2C,0xFE76,0xFE7F,0xFE79,0xFF03,0xFEC8,0xFF02, + 0xFEA7,0xFE77,0xFEDB,0xFEE3,0xFEB3,0xFECF,0xFF01,0xFF00, + 0xFF93,0xFF6C,0xFF09,0xFEDF,0xFEDF,0xFF22,0xFF3A,0xFF03, + 0xFF35,0xFF64,0xFEA8,0xFF02,0xFF48,0xFF56,0xFF38,0xFF0F, + 0xFF1A,0xFF16,0xFEEF,0xFF10,0xFF1C,0xFF19,0xFF25,0xFF32, + 0xFF86,0xFFA5,0xFFA4,0xFFC9,0x000D,0xFFD8,0xFF74,0xFF75, + 0xFFD4,0xFFEA,0xFF9F,0xFF62,0xFF5D,0xFF68,0xFF96,0xFF61, + 0xFF6E,0xFF81,0xFF65,0xFEFB,0xFCDF,0xFBEE,0xFCE2,0xFD33, + 0xFD2D,0xFD46,0xFD68,0xFD88,0xFD93,0xFDA5,0xFDEA,0xFE31, + 0xFE31,0xFE2F,0xFE0D,0xFE6F,0xFEA0,0xFEF1,0xFF82,0xFE6B, + 0xFE46,0xFF13,0xFF60,0xFF3A,0xFF82,0xFFB3,0xFF47,0xFF46, + 0xFFE9,0xFF68,0xFFA0,0xFFBA,0x0007,0x004B,0x001C,0x0025, + 0xFFDA,0xFFB7,0x0022,0x005D,0x0047,0x0094,0x0046,0x00C4, + 0x01D5,0x00DD,0x001D,0xFFE7,0x000C,0xFFD1,0x000B,0x005D, + 0x0061,0x00A0,0x00D7,0x0196,0x017E,0x0190,0x0201,0x01C2, + 0x0175,0x0176,0x018A,0x0160,0x0150,0x014F,0x00FF,0x0100, + 0x00EA,0x0106,0x00F1,0x0101,0x010D,0x00ED,0x00C5,0x00C3, + 0x008E,0x0090,0x0082,0x00DE,0x0093,0x005D,0x0063,0x0029, + 0x000B,0xFFA3,0xFF78,0xFF51,0xFFC4,0xFFE1,0xFFBC,0xFF63, + 0xFF86,0xFF95,0xFF42,0xFF34,0xFF66,0xFF43,0xFF29,0xFFA6, + 0xFF3D,0xFEEB,0xFF4C,0xFF5C,0xFF36,0xFF57,0xFF6F,0xFFB5, + 0xFF4C,0xFF37,0xFF6D,0xFFAE,0xFF56,0xFF38,0xFF49,0xFF58, + 0xFF6B,0xFF2D,0xFF35,0x0024,0xFF00,0xFE4F,0x0017,0xFF55, + 0xFF4B,0xFFD1,0xFF8C,0xFF94,0xFF62,0xFF5F,0xFEFF,0xFF62, + 0xFF5D,0xFF66,0xFF18,0xFF2A,0xFF38,0xFF1F,0xFEF2,0xFEE3, + 0xFEE7,0xFF14,0xFED3,0xFECF,0xFF22,0xFECB,0xFECC,0xFEFC, + 0xFF0F,0xFECE,0xFECD,0xFEA3,0xFEB8,0xFEF6,0xFED3,0xFED4, + 0xFE94,0xFECE,0xFE7E,0xFEA8,0xFEEB,0xFEF8,0xFF02,0xFF28, + 0xFF41,0xFF08,0xFEDD,0xFEDD,0xFEEE,0xFEF6,0xFEB9,0xFED7, + 0xFEDC,0xFED3,0xFEFF,0xFE60,0xFE60,0xFE42,0xFE47,0xFE90, + 0xFEBC,0xFEEC,0x012C,0x0169,0x0097,0x0096,0x0068,0x0051, + 0x0032,0x0038,0x006C,0x0070,0x004E,0x00D9,0x0099,0x0034, + 0x0065,0x0045,0x0008,0xFFFC,0xFF9D,0xFF0A,0xFF06,0xFFD7, + 0xFFCA,0xFF02,0xFEFF,0xFF2E,0xFF06,0xFF15,0xFEB5,0xFEEB, + 0xFF18,0xFEDC,0xFE92,0xFEF4,0xFE94,0xFEB6,0xFEAB,0xFEA7, + 0xFEB5,0xFE92,0xFEE4,0xFF05,0xFE60,0xFE82,0xFE95,0xFD9D, + 0xFCDA,0xFE12,0xFE79,0xFEC5,0xFEDE,0xFE6D,0xFEAA,0xFE65, + 0xFE23,0xFDE1,0xFDAE,0xFD4C,0xFD95,0xFCF1,0xFC88,0xFCE3, + 0xFCA3,0xFCA9,0xFC97,0xFCBC,0xFCDA,0xFCB4,0xFC82,0xFCDB, + 0xFD15,0xFD63,0xFD86,0xFD42,0xFD1F,0xFD98,0xFDFB,0xFDFA, + 0xFDDC,0xFDFC,0xFE00,0xFE30,0xFE41,0xFE40,0xFE3C,0xFE2A, + 0xFE59,0xFE27,0xFE31,0xFE36,0xFE2F,0xFE69,0xFE63,0xFE36, + 0xFE2B,0xFE1F,0xFE6F,0xFE44,0xFE35,0xFE65,0xFE7B,0xFE3E, + 0xFE56,0xFE5B,0xFE09,0xFDEF,0xFDF4,0xFDED,0xFDCE,0xFD98, + 0xFDFC,0xFE57,0xFE83,0xFE78,0xFE78,0xFF01,0xFEF9,0xFE89, + 0xFEE0,0xFF53,0xFE94,0xFF05,0x008B,0xFEDB,0xFFA0,0xFFCF, + 0xFF7E,0xFF6B,0xFF47,0xFF2E,0xFF60,0xFF9A,0xFFA1,0xFFE1, + 0xFFA1,0x0035,0x002F,0x0054,0xFFC2,0x001A,0x0027,0x0022, + 0x0026,0x001B,0x0045,0x0035,0x0031,0xFFF6,0x0077,0x00A1, + 0x009D,0x00C3,0x0115,0x0155,0x0189,0x0256,0x037D,0x04C9, + 0x0566,0x0608,0x06AC,0x0711,0x0780,0x08E5,0x0A97,0x0BB4, + 0x0C72,0x0D20,0x0D95,0x0E20,0x0DF0,0x0DD4,0x0E18,0x0DF7, + 0x0E5A,0x0EC0,0x0F54,0x0F98,0x0F3D,0x0EF2,0x0F57,0x0F92, + 0x1083,0x11B9,0x11D7,0x1043,0x0E15,0x0F18,0x1033,0x11D7, + 0x12EB,0x13BA,0x148A,0x1531,0x1525,0x14FE,0x1487,0x14B1, + 0x15A9,0x16F3,0x1828,0x1935,0x191E,0x197E,0x1944,0x18C3, + 0x18CF,0x18C6,0x1951,0x19D8,0x1A51,0x1ABB,0x1AB5,0x1B6A, + 0x1B7C,0x1B55,0x1B0B,0x1B26,0x1BA8,0x1AB1,0x190A,0x18C2, + 0x1A47,0x1B87,0x1B2E,0x19F4,0x1964,0x18FF,0x18D8,0x19E4, + 0x18C4,0x174D,0x171D,0x16D8,0x1741,0x1710,0x1699,0x1566, + 0x1473,0x1486,0x15FB,0x16C7,0x15F6,0x152D,0x13EF,0x1240, + 0x1088,0x0D55,0x04EE,0xF57A,0xDC88,0xC45B,0xC0BC,0xC0D5, + 0xC0BD,0xC256,0xC09B,0xD5E5,0x0B8D,0x2677,0x1D26,0xFC65, + 0xDA25,0xC9C1,0xD56E,0xF7B7,0x248E,0x3F16,0x3F71,0x402A, + 0x4048,0x4049,0x4049,0x4010,0x4026,0x4030,0x4007,0x403C, + 0x3F66,0x3DC1,0x4020,0x402B,0x3F65,0x3F66,0x34D8,0x0B65, + 0xD98E,0xC093,0xC19D,0xC03D,0xC38C,0xD464,0xDE06,0xDD27, + 0xD5E8,0xCB78,0xC26B,0xC025,0xC075,0xC076,0xCA1D,0xDB09, + 0xED81,0xFFAA,0x1173,0x22CE,0x3120,0x3CF2,0x3E37,0x3338, + 0x2460,0x1981,0x18BF,0x2497,0x375C,0x3FA6,0x3EE0,0x3F9B, + 0x35AB,0x1CB3,0x06F2,0xF4E1,0xE890,0xE160,0xDDEA,0xDBE4, + 0xDA09,0xD78B,0xD362,0xCDAA,0xC70C,0xC190,0xBF9F,0xBF9B, + 0xBF92,0xBFB2,0xBFF5,0xBFD2,0xCEA3,0xE3E2,0xF281,0xF8F5, + 0xF7C8,0xF3AF,0xF06C,0xF1CB,0xF8AE,0x03BF,0x0FC7,0x19B7, + 0x2171,0x2594,0x2544,0x2055,0x18D5,0x1098,0x0899,0x0094, + 0xF838,0xF19C,0xEE21,0xEC9F,0xEBF7,0xEA29,0xE5D5,0xDEA7, + 0xD469,0xC94B,0xC22E,0xC080,0xC0A2,0xC030,0xC312,0xCBD7, + 0xD294,0xD701,0xD901,0xD965,0xDA6C,0xDBA0,0xDE76,0xE402, + 0xEBBE,0xF3D7,0xFBDD,0x0319,0x094A,0x0E0F,0x11C5,0x11AC, + 0x0DAA,0x08B0,0x04C5,0x0188,0xFF9C,0xFFEC,0x011A,0x0155, + 0xFF0D,0xFA1D,0xF309,0xEA94,0xE173,0xD995,0xD476,0xD228, + 0xD299,0xD357,0xD3B1,0xD3F6,0xD479,0xD55E,0xD511,0xD43B, + 0xD59E,0xD713,0xD85B,0xDBEC,0xE20C,0xEA2B,0xF1E8,0xF790, + 0xFB84,0xFDF7,0xFEB1,0xFF1B,0xFF95,0xFF95,0x0024,0x0197, + 0x02E7,0x0546,0x0742,0x06D4,0x0365,0xFE59,0xF9F8,0xF629, + 0xF1DE,0xED22,0xE98D,0xE744,0xE606,0xE580,0xE497,0xE3EE, + 0xE1B8,0xDE98,0xDBDE,0xDAFF,0xDB68,0xDC82,0xDDBD,0xE06F, + 0xE4C9,0xE954,0xED9B,0xF0A6,0xF32E,0xF426,0xF4E5,0xF680, + 0xF910,0xFCBE,0xFFF8,0x01AA,0x03A4,0x0623,0x07CA,0x0760, + 0x055C,0x0310,0x00F0,0xFE1D,0xFB21,0xF9C5,0xF933,0xF8EA, + 0xF73A,0xF507,0xF2EE,0xF07F,0xED1E,0xEA47,0xE7F6,0xE774, + 0xE78A,0xE736,0xE639,0xE8B0,0xE933,0xE964,0xE9EF,0xE69F, + 0xE0F5,0xD90F,0xD0EF,0xCADF,0xCB7B,0xD3C1,0xE35C,0xF5F1, + 0x0521,0x0AFA,0x0747,0xFE5B,0xF6C7,0xF461,0xF7FC,0x019E, + 0x0CD1,0x168B,0x1CFE,0x2036,0x20DB,0x1FE1,0x1D79,0x1959, + 0x13E9,0x0D73,0x070D,0x027B,0x008D,0x00A6,0x036B,0x07BB, + 0x0A2F,0x0759,0xFDB7,0xF073,0xE4DD,0xDE82,0xDE0E,0xE2BF, + 0xE9DF,0xEFD5,0xF2F3,0xF3A0,0xF40B,0xF458,0xF3E9,0xF255, + 0xF1FF,0xF44B,0xF856,0xFD63,0x01FE,0x0702,0x0CAE,0x11E9, + 0x15D6,0x16E7,0x13E1,0x0C81,0x05E2,0x0244,0x0296,0x0652, + 0x0B0E,0x0E12,0x0E0B,0x0ADE,0x0510,0xFE80,0xF85D,0xF3A9, + 0xF129,0xF002,0xEEE8,0xEE39,0xEE46,0xEEB7,0xEE5B,0xEE1C, + 0xEE94,0xEE9A,0xED30,0xEB54,0xE9EF,0xE8E9,0xE8A5,0xE94F, + 0xE925,0xE97F,0xE983,0xE7C9,0xE3EC,0xDFA5,0xDD1D,0xDD36, + 0xDE66,0xE065,0xE287,0xE3AE,0xE469,0xE455,0xE45D,0xE4F6, + 0xE2C4,0xE150,0xE095,0xE04B,0xDFE0,0xDFAC,0xDFAB,0xDFDE, + 0xDFF5,0xE090,0xE120,0xE17B,0xE10C,0xE1C4,0xE1D0,0xE180, + 0xE1E0,0xE286,0xE38E,0xE461,0xE4C4,0xE520,0xE5C4,0xE65E, + 0xE6A4,0xE70B,0xE7DA,0xE86F,0xE8EB,0xE96E,0xEA19,0xEAA3, + 0xEB5A,0xEBFA,0xEC19,0xEC48,0xECDE,0xED1A,0xED08,0xED26, + 0xEDEF,0xEE77,0xEF3D,0xEFB8,0xEFD4,0xEFE1,0xF00A,0xF046, + 0xF074,0xF0F9,0xF14E,0xF1FD,0xF29A,0xF367,0xF3DD,0xF45F, + 0xF4D7,0xF540,0xF63A,0xF6E5,0xF794,0xF80B,0xF89E,0xF922, + 0xFA37,0xFAF6,0xFBE9,0xFCAF,0xFCE0,0xFD05,0xFDA9,0xFE4D, + 0xFEFB,0xFF37,0x007C,0xFF6C,0xFFA3,0x01C1,0x0108,0x013B, + 0x01A0,0x0189,0x018D,0x017E,0x0209,0x0237,0x0267,0x02C8, + 0x0333,0x0343,0x0364,0x03DF,0x0435,0x04A6,0x0494,0x04CF, + 0x05A8,0x05E7,0x0666,0x06EF,0x075F,0x07AD,0x0809,0x0850, + 0x08DC,0x0933,0x09AD,0x09F4,0x0A3F,0x0A63,0x0A87,0x0B13, + 0x0B5B,0x0BC2,0x0BA4,0x0BA1,0x0BE5,0x0C5D,0x0C28,0x0C01, + 0x0BC7,0x0B82,0x0B7B,0x0BA1,0x0BF8,0x0BF7,0x0C26,0x0C3F, + 0x0C41,0x0C72,0x0CAC,0x0CB3,0x0D00,0x0CCF,0x0D21,0x0DF0, + 0x0E9F,0x114A,0x1187,0x1102,0x10F2,0x10FE,0x112B,0x1136, + 0x10C3,0x10BD,0x10D9,0x1100,0x1110,0x1139,0x112A,0x1151, + 0x119D,0x1178,0x1134,0x1160,0x10A8,0x10CA,0x1144,0x10BF, + 0x1050,0x1090,0x10BE,0x1077,0x1069,0x1002,0x1023,0x1050, + 0x1042,0x101E,0x0FFD,0x0FC0,0x0F8B,0x0F45,0x0F5C,0x0F86, + 0x0FFF,0x0FB8,0x0F95,0x0F86,0x0F56,0x0F83,0x0EA2,0x0E28, + 0x0F9D,0x104E,0x1003,0x0FCE,0x1020,0x0F90,0x0F55,0x0F55, + 0x0EF6,0x0EBA,0x0E72,0x0E5C,0x0E64,0x0D57,0x0D40,0x0D34, + 0x0D01,0x0D4E,0x0D65,0x0D46,0x0D01,0x0CA3,0x0C3A,0x0C5A, + 0x0C42,0x0C64,0x0CE7,0x0CD4,0x0C73,0x0C83,0x0C87,0x0C67, + 0x0C4C,0x0C48,0x0CD6,0x0CC5,0x0C57,0x0C3F,0x0BF6,0x0BCE, + 0x0B82,0x0B69,0x0BBB,0x0BB2,0x0B2B,0x0AF3,0x0A87,0x0A8C, + 0x0AA3,0x0A50,0x0A79,0x0A62,0x0A28,0x09FF,0x0A07,0x09F8, + 0x09D5,0x09B5,0x0995,0x09B7,0x09BB,0x092A,0x089D,0x0886, + 0x08B3,0x08E6,0x08E2,0x0894,0x0933,0x08FD,0x0893,0x0890, + 0x0909,0x086D,0x08B4,0x09D0,0x07F5,0x08B5,0x095A,0x093C, + 0x08AF,0x091D,0x0924,0x0974,0x0945,0x08C6,0x08DB,0x0903, + 0x08B0,0x0820,0x08C3,0x0896,0x08A2,0x0800,0x081E,0x083B, + 0x07FA,0x07C4,0x07F1,0x07DA,0x07CA,0x07E2,0x07CD,0x079F, + 0x0749,0x07E9,0x07F5,0x081C,0x07DB,0x078D,0x0761,0x074D, + 0x06EF,0x06C1,0x071B,0x0723,0x074F,0x0716,0x0760,0x075E, + 0x06D9,0x06AC,0x06CD,0x0655,0x0651,0x0648,0x065B,0x05FF, + 0x05BD,0x05B8,0x05D8,0x0612,0x0609,0x05C9,0x0576,0x0531, + 0x04C4,0x04ED,0x0427,0x02A6,0x0319,0x0302,0x0312,0x035C, + 0x0328,0x0337,0x0336,0x035A,0x0302,0x02B5,0x0352,0x032C, + 0x031A,0x031D,0x0366,0x03B3,0x0491,0x03AE,0x0279,0x02B2, + 0x0386,0x03CC,0x03A0,0x03C6,0x046E,0x0419,0x0410,0x0404, + 0x0422,0x0449,0x03C9,0x0413,0x0427,0x0403,0x042F,0x0404, + 0x0415,0x03D1,0x039C,0x03E7,0x03C0,0x034E,0x0439,0x0442, + 0x031E,0x02D2,0x02B7,0x02E7,0x02E6,0x02BB,0x02DF,0x0314, + 0x0305,0x0388,0x03F9,0x0428,0x0437,0x049B,0x0443,0x0424, + 0x0415,0x0411,0x03C2,0x0399,0x03EA,0x03A1,0x0371,0x02C9, + 0x02B0,0x02B5,0x02AE,0x02C6,0x0296,0x024C,0x0223,0x01F6, + 0x01DC,0x01DD,0x01E6,0x01D5,0x01A1,0x01A0,0x0176,0x00F2, + 0x0116,0x0133,0x00F1,0x00F2,0x011D,0x0176,0x00FC,0x00E9, + 0x00F8,0x00E7,0xFFFC,0xFFCB,0x00B0,0x016E,0x019C,0x01CC, + 0x01FD,0x027F,0x02DF,0x02CF,0x02B9,0x034C,0x04C5,0x06FC, + 0x08AA,0x0950,0x0965,0x0981,0x09B2,0x09A9,0x09A1,0x09BE, + 0x09B1,0x0969,0x092C,0x090D,0x08F3,0x08BD,0x08B8,0x08F1, + 0x0A3B,0x0B5F,0x0BA2,0x0B8E,0x0A8A,0x0946,0x09B5,0x0AA9, + 0x0C08,0x0D9D,0x0E68,0x0D9D,0x0D36,0x0E0D,0x0F82,0x10EC, + 0x138B,0x134E,0x1306,0x12C7,0x12C6,0x135D,0x145B,0x1406, + 0x1377,0x14BE,0x1704,0x17C6,0x16BF,0x151A,0x1457,0x14FB, + 0x15DF,0x1753,0x186E,0x17C4,0x16C3,0x15BB,0x1522,0x1556, + 0x15D1,0x15F2,0x160F,0x16EE,0x16B0,0x1581,0x139D,0x1248, + 0x1265,0x1401,0x15C4,0x16A5,0x1564,0x1262,0x0F7D,0x0EFC, + 0x1160,0x13F8,0x1478,0x12A7,0x1063,0x0E59,0x0F36,0x10A9, + 0x108B,0x0F29,0x0E28,0x0E5F,0x0F59,0x0FBC,0x0E20,0x0B5E, + 0x096A,0x09A4,0x0B6B,0x0C4F,0x0B58,0x09E1,0x07C3,0x058F, + 0x0567,0x0669,0x0774,0x07DC,0x07A2,0x0659,0x050B,0x03C4, + 0x03D3,0x03D8,0x03DB,0x0432,0x04E4,0x053B,0x049F,0x02D7, + 0x00AD,0x002B,0x00A1,0x01FD,0x02BB,0x0200,0xFFCB,0xFDE7, + 0xFCDB,0xFD9C,0xFE97,0xFEE7,0xFE79,0xFDF6,0xFDE5,0xFDCD, + 0xFC65,0xFB3E,0xFAE1,0xFB00,0xFB81,0xFBEA,0xFBA2,0xFA9C, + 0xF982,0xF955,0xF91A,0xF96F,0xF9A4,0xF9E5,0xF9D2,0xF90F, + 0xF798,0xF677,0xF768,0xF9BD,0xFA19,0xF8B7,0xF77F,0xF7B9, + 0xF743,0xF76D,0xF790,0xF628,0xF812,0xF7AA,0xF651,0xF603, + 0xF63B,0xF45A,0xF2AC,0xF378,0xF666,0xF902,0xF8CA,0xF615, + 0xF2F3,0xF1C8,0xF257,0xF498,0xF75D,0xF88E,0xF6D1,0xF3F8, + 0xF1CF,0xF176,0xF2A7,0xF42D,0xF5A7,0xF696,0xF714,0xF614, + 0xF389,0xEFE2,0xEF0F,0xF03C,0xF235,0xF453,0xF678,0xF783, + 0xF4F5,0xF095,0xEE77,0xEF34,0xF0D5,0xF24C,0xF336,0xF494, + 0xF468,0xF204,0xEF52,0xEFEE,0xF1A8,0xF235,0xF184,0xF10E, + 0xF1C8,0xF2CC,0xF1D5,0xEF34,0xEDB9,0xEE4E,0xF0B8,0xF375, + 0xF533,0xF3BF,0xEF6C,0xEAE6,0xE776,0xE885,0xED59,0xF0FC, + 0xF18C,0xF06A,0xF03E,0xF085,0xF01A,0xEF09,0xEE28,0xEDE5, + 0xED14,0xED27,0xEEEA,0xF256,0xF418,0xF36A,0xF193,0xEF39, + 0xEEE0,0xF008,0xF0E6,0xF154,0xF0B7,0xF0D2,0xF13B,0xF1FF, + 0xF367,0xF45B,0xF362,0xEFC8,0xED1C,0xEE43,0xF22B,0xF4B6, + 0xF556,0xF46B,0xF342,0xF200,0xF169,0xF29B,0xF2A1,0xF1D9, + 0xEFF4,0xEF92,0xF1F0,0xF5C3,0xF7AC,0xF6E7,0xF5C2,0xF4D3, + 0xF34B,0xF10D,0xF092,0xF312,0xF5E7,0xF6AE,0xF693,0xF778, + 0xF91F,0xF8E5,0xF5F9,0xF30A,0xF227,0xF2AB,0xF36F,0xF4F8, + 0xF7BB,0xF9F3,0xF9B9,0xF63E,0xF24D,0xF1FB,0xF462,0xF6AF, + 0xF771,0xF76D,0xF6E0,0xF5B5,0xF43F,0xF49A,0xF83A,0xFBF3, + 0xFC85,0xF967,0xF4F9,0xF211,0xF25A,0xF35E,0xF57F,0xF8EB, + 0xFB3B,0xFAFF,0xF853,0xF674,0xF579,0xF45B,0xF3BE,0xF607, + 0xF93E,0xF9CF,0xF730,0xF53B,0xF5C7,0xF7E7,0xF95A,0xF8CF, + 0xF836,0xF71E,0xF52E,0xF48D,0xF72E,0xFBEF,0xFF04,0xFDC5, + 0xFA2B,0xF5FA,0xF570,0xFA40,0xFACA,0xF9CE,0xF974,0xF8F2, + 0xF9BA,0xFBBD,0xFED7,0x0090,0xFC9B,0xF5C6,0xF2DF,0xF5BB, + 0xFA27,0xFCFF,0xFD9A,0xFD3F,0xFCEC,0xFB07,0xF8D4,0xF878, + 0xF8FF,0xF8DD,0xF956,0xFAC9,0xFC65,0xFBEC,0xFAF1,0xFB4D, + 0xFD39,0xFE78,0xFE23,0xFD9B,0xFD20,0xFBE8,0xF976,0xF7CA, + 0xF97F,0xFEA3,0x03D5,0x0563,0x02E6,0xFF56,0xFBCD,0xF827, + 0xF764,0xFA56,0xFEF6,0x0155,0x0042,0xFE2A,0xFE38,0xFF22, + 0xFE8D,0xFDE2,0xFE63,0xFE9F,0xFCD9,0xFB29,0xFB89,0xFFD1, + 0x0125,0xFE86,0xFE2E,0x00F6,0x03A4,0x0410,0x0359,0x0234, + 0xFF81,0xFA51,0xF70F,0xFA31,0x00DC,0x065D,0x0742,0x055B, + 0x0241,0xFFC1,0xFD6D,0xFBC0,0xFC1B,0xFC21,0xFC2F,0xFEF7, + 0x03E2,0x05B8,0x036B,0xFE6B,0xFC20,0xFD0B,0xFE07,0xFDAE, + 0xFC33,0xFA0D,0xF85C,0xF904,0xFDA4,0x044C,0x074D,0x048E, + 0xFDAA,0xF82D,0xF760,0xF855,0xF8A6,0xFA83,0xFF50,0x020A, + 0x01E4,0x0062,0xFDA7,0xFAE8,0xFA43,0xFCCD,0x00EB,0x0303, + 0xFF95,0xF8D7,0xF424,0xF51B,0xFA36,0xFFFC,0x041D,0x04CB, + 0x0121,0xFA5A,0xF4F6,0xF445,0xF81F,0xFC63,0xFF5F,0x00C3, + 0x00C4,0xFF80,0xFD54,0xFAA1,0xF934,0xF910,0xF991,0xF9DF, + 0xFB3F,0xFE00,0xFFEF,0xFF6A,0xFD68,0xFBC3,0xFBBA,0xFAEF, + 0xFABF,0xFBE0,0xFD5B,0xFDE8,0xFBD6,0xFB02,0xFDB4,0x017A, + 0x01E3,0xFFF8,0xFCB8,0xF95D,0xF7D1,0xF8DC,0xFB67,0xFE4B, + 0x0013,0x0077,0x0153,0x02C0,0x017D,0xFD41,0xF81A,0xF54B, + 0xF6FB,0xFC41,0x0072,0x021D,0x0108,0x0012,0xFF2B,0xFE75, + 0xFE7C,0x00EF,0xFEB5,0xFBE7,0xF9EA,0xF869,0xFB0D,0x0010, + 0x03D8,0x0508,0x0473,0x01D9,0xFFC9,0xFD55,0xFB6B,0xF9F3, + 0xF9BF,0xFB86,0xFFEE,0x0541,0x083D,0x06A3,0x0202,0xFD38, + 0xFC50,0xFEE7,0xFFE9,0xFEA0,0xFC7A,0xFC44,0xFF3B,0x0324, + 0x05ED,0x06A2,0x053F,0x01FA,0xFE50,0xFCD6,0xFCDB,0xFD3A, + 0xFE32,0x0136,0x04DC,0x07C1,0x0754,0x0541,0x02C1,0xFFC1, + 0xFC68,0xFBE5,0xFF1C,0x028A,0x0340,0x01E8,0x02AE,0x04F8, + 0x0616,0x0487,0x02F1,0x0290,0x00A0,0xFD32,0xFC43,0xFF10, + 0x0206,0x0080,0xFF85,0x00DD,0x0318,0x02E0,0x00D3,0xFF69, + 0xFECA,0xFD91,0xFB66,0xFA4F,0xFBEF,0x001C,0x02BB,0x0321, + 0x0257,0x01DD,0x0293,0x0272,0x0056,0xFEA3,0xFCF3,0xFAA6, + 0xFA11,0xFCE9,0x01F3,0x05ED,0x080E,0x076E,0x048C,0x0164, + 0xFDDC,0xFBF3,0xFB9A,0xFD41,0xFE98,0x0036,0x03FA,0x0871, + 0x09B6,0x068B,0x027F,0xFFAB,0xFE7B,0xFC5F,0xFAE9,0xFD47, + 0x0209,0x05A9,0x064F,0x050A,0x0229,0xFF05,0xFE5E,0x00C2, + 0x03D1,0x04CC,0x03E6,0x02CA,0x01A4,0x014C,0x0188,0x031D, + 0x04C1,0x0494,0x0394,0x03AC,0x04FE,0x0367,0xFFBC,0xFE68, + 0x00E9,0x031A,0x030B,0x0240,0x033B,0x03B9,0x020B,0x0137, + 0x0256,0x0334,0x0033,0xFCA2,0xFCEC,0x01D7,0x04A4,0x048C, + 0x0366,0x022F,0x00C2,0xFEF0,0xFE35,0xFFBC,0x0146,0x01F7, + 0x01B4,0x020E,0x02A3,0x0154,0xFFA6,0xFF9A,0x01D0,0x0402, + 0x04F9,0x0468,0x01C4,0xFE0C,0xFC0B,0xFE4D,0x02C8,0x0649, + 0x073F,0x05B2,0x030D,0xFF5E,0xFB9A,0xFA08,0xFC7A,0x00AE, + 0x04D6,0x06E7,0x084B,0x0630,0xFF5F,0xFBAF,0xFC6A,0x00B6, + 0x0522,0x0614,0x02C5,0xFD38,0xFAF2,0xFDA5,0x0379,0x0841, + 0x0928,0x0619,0x013D,0xFDA2,0xFCF4,0xFEDB,0x0075,0xFFC7, + 0xFF58,0x0105,0x0446,0x0736,0x085C,0x05DB,0xFF75,0xF927, + 0xF7DA,0xFBD4,0x0154,0x041E,0x039F,0x018C,0x0037,0x0056, + 0x0193,0x02BC,0x0229,0xFF4B,0xFCCF,0xFB7C,0xFC4B,0xFDF6, + 0x005C,0x036F,0x054C,0x0482,0x0281,0xFFF7,0xFD55,0xFB39, + 0xFBF7,0xFEFB,0x0156,0x020F,0x00EB,0xFED9,0xFDB2,0x00B9, + 0x03B1,0x0561,0x0418,0x00F2,0xFE2B,0xFD81,0xFE0D,0xFE27, + 0xFE93,0xFF8F,0x023D,0x06B9,0x0A44,0x0854,0x0180,0xFA01, + 0xF62F,0xF954,0x0074,0x07F5,0x09EE,0x04C7,0xFF12,0xFEDD, + 0x013B,0x0344,0x0361,0x0005,0xFB74,0xF955,0xFCA6,0x0300, + 0x0747,0x0604,0x01F9,0xFD2A,0xFC36,0xFED7,0x0197,0x01E9, + 0xFFE7,0xFD90,0xFD3C,0xFEF0,0x0079,0x025F,0x03A0,0x02DD, + 0x0216,0x01E0,0xFFAD,0xFB78,0xF852,0xF9E2,0xFFEE,0x0636, + 0x08EB,0x0650,0xFEE3,0xF730,0xF4DB,0xF885,0xFE97,0x01F4, + 0x013C,0xFF05,0xFDCC,0xFE25,0xFD80,0xFC9F,0xFDD4,0xFF91, + 0x0199,0x0214,0x002D,0xFCEC,0xF9FA,0xF88F,0xFA3E,0xFF30, + 0x03E0,0x04E2,0x01E6,0xFD17,0xF938,0xF98A,0xFC2D,0xFEE0, + 0x003F,0xFF4D,0xFC55,0xF955,0xF948,0xFC8F,0x016C,0x04A9, + 0x04C0,0x0224,0xFDC0,0xF9B8,0xF81F,0xFA4A,0xFF5C,0x02E7, + 0x0178,0xFDD5,0xFC6B,0xFDD6,0x00C2,0x02AF,0x0325,0x00B4, + 0xFB67,0xF6F3,0xF714,0xFBB1,0x01DD,0x063F,0x0694,0x0340, + 0xFFC8,0xF978,0xF320,0xF699,0xFE5D,0x0518,0x0594,0x024B, + 0xFF34,0xFCFA,0xFC21,0xFCB2,0xFDF6,0xFF90,0x004B,0xFFA6, + 0xFFDF,0xFF2E,0xFDB3,0xFAB6,0xFA85,0x0030,0x0754,0x09BB, + 0x04B3,0xFB90,0xF510,0xF48C,0xF873,0xFF87,0x066D,0x0A02, + 0x084C,0x0240,0xFB80,0xF807,0xF92E,0xFCF5,0x01AE,0x0498, + 0x0493,0x00B8,0xFB4F,0xF848,0xFA61,0xFED5,0x02B8,0x04CE, + 0x04AD,0x013E,0xFC19,0xF87D,0xF7C7,0xFA8F,0xFF7A,0x0486, + 0x07AC,0x060F,0xFFBB,0xF93E,0xF724,0xFAA6,0x0090,0x04AF, + 0x03C9,0xFFAA,0xFBC4,0xF834,0xF7EA,0xFAB0,0xFFA6,0x044B, + 0x05EF,0x0407,0xFEDA,0xF881,0xF4B6,0xF563,0xFA41,0x009E, + 0x04D4,0x04B3,0x0312,0xFFD5,0xFD76,0xFDB7,0xFD7A,0xFDA6, + 0xFEE1,0x017E,0x02F6,0x0275,0xFF60,0xFB9C,0xFBAD,0x0070, + 0x06C0,0x0A03,0x077F,0xFF4D,0xF634,0xF330,0xF910,0x03B4, + 0x0AE4,0x09FF,0x0465,0xFFF1,0xFF88,0xFF24,0xFEE4,0x0043, + 0x00F5,0x006E,0x009C,0x0237,0x039A,0x0319,0x02CE,0x03BC, + 0x04F9,0x0460,0x0300,0x0095,0xFE70,0xFDEE,0x00B2,0x05E4, + 0x095D,0x0857,0x05AB,0x0359,0x02BB,0x01A1,0xFFDA,0xFFB5, + 0x01F6,0x056A,0x0843,0x089B,0x0767,0x0473,0x0092,0xFF27, + 0x0154,0x053D,0x061C,0x039B,0x01B5,0x02F1,0x0608,0x07E1, + 0x06C2,0x0368,0xFF5B,0xFCB4,0xFD38,0x024D,0x08B1,0x0BAA, + 0x08AD,0x01A2,0xFC8E,0xFC79,0xFF6F,0x0304,0x04A4,0x0532, + 0x0483,0x01EA,0xFEFE,0xFEE9,0x01F1,0x0504,0x0537,0x043E, + 0x0361,0x0171,0xFD37,0xF9FD,0xFA99,0xFFF4,0x07BF,0x0CC6, + 0x0A10,0x01C0,0xFD0B,0xF8EA,0xF985,0xFED8,0x0597,0x089C, + 0x0480,0xFD25,0xFAC6,0xFF66,0x0443,0x0469,0x01E7,0x00BC, + 0x00A2,0x0017,0xFE12,0xFBF1,0xFBB9,0xFCD4,0xFF66,0x03FD, + 0x0868,0x08D5,0x0263,0xF7E0,0xF2EA,0xF752,0xFFD4,0x05A4, + 0x068C,0x026B,0xFD30,0xFA4C,0xFB77,0xFF19,0x024D,0x0323, + 0x0088,0xFC4F,0xFAC6,0xFCE1,0xFFA1,0x0063,0xFF3C,0x0014, + 0x0362,0x058A,0x023A,0xFC4B,0xF90A,0xF967,0xFC31,0x003E, + 0x0443,0x052F,0x027A,0xFCD0,0xF9BC,0xFB32,0x0030,0x0289, + 0x01A7,0x0153,0x02AB,0x0313,0x00C3,0xFCF2,0xFBEC,0xFF08, + 0x026F,0x041D,0x032A,0x0173,0xFEDF,0xFCD9,0xFC68,0xFE47, + 0x01A6,0x0392,0x0380,0x038A,0x02A5,0x0177,0xFF93,0xFB58, + 0xF8D3,0xFC7D,0x0330,0x0653,0x049F,0x00B8,0xFCA4,0xFA9E, + 0xFBB1,0xFF3D,0x020D,0x021E,0xFF6C,0xFC4C,0xFBB6,0xFE50, + 0x00DF,0x0182,0x0024,0xFE45,0xFC67,0xFC33,0xFBB1,0xFBBF, + 0xFCE1,0xFE91,0x006B,0x0292,0x035C,0x012A,0xFDA1,0xFB0B, + 0xFA08,0xFA42,0xFB8A,0xFE15,0xFF75,0xFE8E,0xFD4F,0xFD97, + 0xFF36,0x0027,0xFEE9,0xFC1F,0xFA4B,0xFB13,0xFDB3,0xFE7A, + 0xFD1C,0xFB69,0xFBEC,0xFE5A,0x0079,0x00D9,0xFFC3,0xFD72, + 0xFBE0,0xFCA7,0xFEBE,0x004C,0xFEDD,0xFA67,0xF724,0xF97E, + 0x0060,0x0550,0x050A,0x01C5,0xFE1E,0xFB8C,0xFAD6,0xFA87, + 0xFAA2,0xFA73,0xFB30,0xFFB8,0x066D,0x08F5,0x042C,0xFBC1, + 0xF620,0xF618,0xFA4B,0xFE8F,0x0137,0x013B,0x0066,0xFFC1, + 0x0176,0x02B0,0x0102,0xFBAF,0xF837,0xF9DC,0xFFEE,0x0563, + 0x0796,0x00D2,0xFAD1,0xF914,0xFB57,0x01C2,0x0698,0x069B, + 0x022B,0xFBC8,0xF714,0xF71D,0xFAA7,0x00BA,0x0629,0x07CE, + 0x067C,0x0350,0xFED3,0xFB09,0xF879,0xF82E,0xFB43,0x00AA, + 0x05FA,0x068E,0x0322,0xFE31,0xFBC1,0xFD56,0x00D6,0x0350, + 0x0225,0xFE9E,0xFB0E,0xFA9F,0xFE38,0x03A8,0x05F8,0x040E, + 0x000C,0xFD64,0xFC73,0xFD41,0xFE17,0xFEC8,0x0037,0x0263, + 0x0343,0x01A6,0xFF18,0xFD6A,0xFE3F,0x01F4,0x04F1,0x0405, + 0xFF5E,0xFA4C,0xF85E,0xFAB0,0xFF38,0x0396,0x0603,0x0580, + 0x017B,0xFD9E,0xFA75,0xF790,0xF6DE,0xF80B,0xFB7D,0xFF6B, + 0x02AB,0x02A0,0xFFCF,0xFD7C,0xFDA2,0xFF39,0xFF8C,0xFD23, + 0xF97E,0xF907,0xFBB4,0xFEEF,0x0168,0x0121,0xFEAE,0xFDE0, + 0xFFAB,0x0107,0x0078,0xFE93,0xFBD8,0xF946,0xF907,0xFD5A, + 0x0362,0x066C,0x04CD,0x004B,0xFD53,0xFC2F,0xFCB9,0xFE6D, + 0xFFAF,0xFFB6,0xFDD7,0xFEB7,0x0100,0x02E6,0x0484,0x03F8, + 0x01FC,0x001C,0xFF29,0xFE73,0xFD85,0xFD12,0xFE18,0xFFB2, + 0x0172,0x0510,0x0879,0x0759,0x0292,0xFED3,0xFDAA,0xFDF2, + 0xFD32,0xFDD6,0xFFEA,0x0207,0x048F,0x066C,0x06A0,0x0500, + 0x01AD,0xFD02,0xFA23,0xFA61,0xFE37,0x02A7,0x042C,0x0283, + 0x008A,0x0062,0x01DE,0x0328,0x0309,0x01E8,0xFECC,0xFB48, + 0xF8D6,0xF96A,0xFDD8,0x03F0,0x07CF,0x06D5,0x03DE,0x0178, + 0xFE52,0xFA2C,0xF7E5,0xFB09,0x018A,0x05B9,0x04E9,0x00DC, + 0xFE55,0xFE45,0xFFE1,0x02D3,0x0662,0x07A7,0x04E2,0xFD9A, + 0xF7A8,0xF76C,0xFC53,0x020E,0x0632,0x07FB,0x07FD,0x04EF, + 0xFD92,0xFC38,0xFE90,0xFF35,0xFF50,0xFE74,0xFF4A,0x027C, + 0x0522,0x04C1,0x023D,0x00C8,0x01A9,0x025D,0x0119,0xFE35, + 0xFCDD,0xFCDD,0xFE46,0x0183,0x05AF,0x080A,0x06A5,0x01EF, + 0xFD55,0xFB97,0xFBE2,0xFB7C,0xFC09,0xFF06,0x02BB,0x058C, + 0x0549,0x0365,0x0171,0xFF42,0xFCFF,0xFBF9,0xFC6E,0xFCA7, + 0xFCCB,0xFE01,0x010E,0x0485,0x065E,0x054C,0x0222,0xFEAD, + 0xFC1C,0xF9E2,0xF7F5,0xF887,0xFBA2,0x00CA,0x06C7,0x0B84, + 0x0B18,0x03E7,0xF9D5,0xF2EB,0xF427,0xFB8A,0x0436,0x05EC, + 0x053F,0x045B,0x0323,0x00C9,0xFF90,0x00D3,0x02CC,0x038A, + 0x0245,0xFEE4,0xFA4F,0xF6BB,0xF7BE,0xFF2E,0x0A7E,0x11DE, + 0x0F02,0x0323,0xF65F,0xEEAF,0xEE5F,0xF5BA,0x018D,0x0A24, + 0x0C91,0x0919,0x0228,0xFCC5,0xF9A4,0xF935,0xFA69,0xFD62, + 0x00E0,0x02EB,0x00A3,0xFB70,0xF7BC,0xF96F,0x0037,0x06AA, + 0x093D,0x06FE,0xFF72,0xF44F,0xEE2E,0xEF54,0xF76B,0x03CC, + 0x0CD3,0x0D37,0x0574,0xFAEF,0xF406,0xF359,0xF654,0xFBE2, + 0x01C4,0x02E0,0xFEFC,0xFADD,0xF9FD,0xFB4E,0xFB7F,0xFBDF, + 0xFEC1,0x01BA,0x0014,0xF9C3,0xF4CC,0xF451,0xF7F1,0xFCEF, + 0x0438,0x09B0,0x07D1,0xFE5F,0xF356,0xEE39,0xF2F6,0xFC54, + 0x045A,0x0856,0x062B,0xFF9A,0xF8C7,0xF63C,0xF90E,0xFCC1, + 0xFEE5,0x00C0,0x015C,0xFFDD,0xFC0B,0xF83F,0xF8B5,0xFC54, + 0x00DD,0x03DF,0x029E,0xFD96,0xF777,0xF3A7,0xF630,0xFF3C, + 0x06F2,0x0833,0x02D9,0xFC4C,0xF766,0xF4CD,0xF4F7,0xF9BE, + 0x0097,0x04C9,0x031A,0xFF62,0xFDC7,0xFD24,0xFA91,0xFA1F, + 0xFC78,0xFF73,0x0372,0x027D,0xFE96,0xFBB4,0xFB16,0xFAFC, + 0xFBDB,0xFF31,0x037D,0x03A0,0xFEB6,0xF9D5,0xFAAB,0xFF4E, + 0x0154,0xFFFD,0xFEFF,0xFF7E,0xFF24,0xFE4B,0xFEAB,0x00F5, + 0x01D2,0x010A,0x004A,0xFF9B,0xFE9C,0xFCC2,0xFC55,0xFE52, + 0x0163,0x0274,0x00A7,0xFF96,0x00E7,0x01B5,0x0173,0x0074, + 0xFF64,0xFF0A,0xFF0B,0xFF85,0xFFC2,0xFFA2,0xFF30,0xFF46, + 0x00BD,0x0432,0x0705,0x05BF,0xFFA6,0xF8EA,0xF5DF,0xF9D0, + 0x01CE,0x081F,0x0856,0x030E,0xFD44,0xFA32,0xFB50,0xFE0A, + 0x00DE,0x0244,0xFFA3,0xFBE1,0xFA2B,0xFA33,0xFA9F,0xFBD7, + 0xFF4C,0x0451,0x08B6,0x0813,0x017D,0xF880,0xF366,0xF501, + 0xFB5D,0x0314,0x0858,0x0850,0x03DA,0xFD4D,0xF909,0xF9B4, + 0xFCF7,0xFFCC,0x0219,0x0472,0x03C8,0xFF7E,0xFB20,0xFA53, + 0xFE33,0x02E5,0x05B6,0x068D,0x044F,0xFEE9,0xF9FB,0xF902, + 0xFDA5,0x0305,0x052E,0x05D6,0x0354,0x017F,0x00A3,0xFE47, + 0xFC22,0xFC48,0xFDF4,0x00F6,0x03AF,0x054A,0x0385,0xFDFB, + 0xF93B,0xFB5B,0x031A,0x0934,0x08D6,0x0243,0xFBAB,0xF97B, + 0xFBCD,0x0009,0x04BD,0x0742,0x0459,0xFEE7,0xFD11,0xFF03, + 0x0186,0x00A1,0xFE9F,0xFF51,0x0267,0x03BA,0x011E,0xFCBF, + 0xF8FC,0xF902,0xFDE2,0x0558,0x0A59,0x07E1,0xFE00,0xF567, + 0xF506,0xFB38,0x018C,0x0538,0x04BD,0x013E,0xFCF7,0xFA74, + 0xFBD5,0xFFC7,0x01CA,0x011B,0x00F6,0x0200,0x00CA,0xFC9E, + 0xF96D,0xF9D8,0xFDBA,0x022D,0x04CA,0x0519,0x0340,0xFE64, + 0xF98B,0xF7DB,0xFA8F,0xFF4E,0x01FF,0x0252,0x03A7,0x03A9, + 0xFFA7,0xFCCE,0xF91B,0xF9B6,0xFE3E,0x0279,0x056A,0x04BB, + 0x0151,0xFD3B,0xFB40,0xFD38,0x0064,0x0335,0x0304,0x0128, + 0xFEED,0xFD32,0xFBC4,0xFC20,0xFE84,0x00BE,0x01D8,0x036F, + 0x04E6,0x03A4,0xFEEE,0xFA2B,0xF890,0xFAE2,0xFF7D,0x0338, + 0x03DD,0x0235,0x0135,0x0039,0xFFB6,0xFF59,0xFF56,0xFEF4, + 0xFE33,0xFF04,0x0076,0x009D,0xFE91,0xFD74,0xFEE2,0x01E8, + 0x0532,0x05B1,0x02C1,0xFD06,0xF758,0xF5EF,0xFB8A,0x041C, + 0x0908,0x06F8,0x018D,0xFE50,0xFE31,0x0086,0x0123,0x00E6, + 0x01B2,0x01EC,0x01C4,0x02FB,0x0472,0x03CC,0x00AB,0xFF07, + 0x0140,0x04A5,0x0547,0x01F4,0xFCFA,0xF995,0xF94B,0xFD0D, + 0x031F,0x08B3,0x0ADF,0x065A,0xFE90,0xF958,0xF8DB,0xFA04, + 0xFCAE,0x0028,0x03FE,0x060A,0x046F,0x00BE,0xFD9E,0xFC1C, + 0xFD42,0xFF37,0x0003,0xFF93,0xFEBA,0xFDCE,0xFC3A,0xFC23, + 0xFE71,0x024F,0x0378,0x0167,0xFFA8,0xFC6A,0xF978,0xF887, + 0xFB11,0xFFE7,0x0422,0x03D6,0x00C2,0xFDCA,0xFCD6,0xFC8B, + 0xFBA7,0xFA5C,0xFA31,0xFB9D,0xFDA0,0xFFD7,0x00C7,0x0035, + 0xFD11,0xF940,0xF7D4,0xFAAE,0xFEB0,0x00AD,0xFEA5,0xFA6A, + 0xF833,0xF9A0,0xFE1F,0x01E1,0x02BC,0x005B,0xFC18,0xF8C1, + 0xF87B,0xFA4B,0xFBA5,0xFC25,0xFCBF,0xFDF0,0xFFB2,0x0082, + 0xFF77,0xFBD6,0xF8CB,0xF8B7,0xFA47,0xFCB1,0xFED5,0xFF1C, + 0xFDA6,0xFB85,0xFBA4,0xFDD7,0xFFE2,0xFF8B,0xFCF9,0xF9E8, + 0xF7A1,0xF7D1,0xF98E,0xFD41,0x0056,0x0236,0x0209,0xFFA0, + 0xFCF9,0xFB35,0xF9D9,0xF9D9,0xFBE4,0xFE0E,0xFF5D,0x01D5, + 0x0058,0x0013,0x0075,0xFF63,0xFEAA,0xFEE8,0xFECA,0xFDC4, + 0xFCB0,0xFBF3,0xFCCB,0xFEED,0x0231,0x045C,0x047B,0x0270, + 0xFF23,0xFB9A,0xF99D,0xFB14,0xFE9F,0x0135,0x01AE,0x014E, + 0x00E5,0x00EA,0x0065,0xFF21,0xFEEE,0x000A,0x00B5,0x004F, + 0xFEB5,0xFDD4,0xFE91,0xFF7B,0x0183,0x0410,0x061C,0x04AC, + 0x001C,0xFB7C,0xFA43,0xFC63,0xFFA3,0x02C4,0x0508,0x054D, + 0x02C4,0xFEEC,0xFCBA,0xFCD9,0xFEC4,0x0087,0x013A,0x0024, + 0xFEB8,0xFE24,0xFD91,0xFE57,0x0021,0x016F,0x011B,0xFD9B, + 0xFB54,0xFA9A,0xFAEC,0xFC35,0xFDDE,0xFF48,0x000B,0xFFE4, + 0xFEA9,0xFD7B,0xFD36,0xFD75,0xFE4B,0xFED2,0xFF9D,0xFF19, + 0xFDFF,0xFC6C,0xFBB9,0xFDA8,0x009D,0x01B3,0x0120,0xFF65, + 0xFD5B,0xFCB9,0xFD92,0xFF4E,0x0104,0x01AF,0x00C5,0x007D, + 0x0089,0x0033,0xFF8C,0xFFEC,0x0089,0x00B9,0x0099,0xFFFF, + 0x00DE,0x0167,0x02A3,0x020E,0xFFC2,0xFF4B,0xFF70,0xFF74, + 0xFEBB,0xFE60,0xFEB5,0xFF76,0x004E,0x014A,0x0232,0x023A, + 0x0169,0x0013,0xFE6D,0xFF22,0x00D1,0x0240,0x0261,0x018F, + 0x009B,0xFFFD,0x000B,0x0072,0x0167,0x0180,0x009E,0xFF5A, + 0xFE9C,0xFED8,0xFF83,0x002E,0x00DA,0x0148,0x0137,0xFFFD, + 0xFE91,0xFD38,0xFCE0,0xFDEA,0xFF31,0x001A,0x0045,0x0075, + 0x008B,0xFFEE,0xFF42,0xFE51,0xFEAA,0xFF46,0x002F,0x0051, + 0xFFFF,0xFF19,0xFEE0,0xFF3D,0xFF66,0x00A0,0x0199,0x015B, + 0xFF6A,0xFDA6,0xFDA7,0xFF42,0xFFF8,0x006C,0x010B,0x0107, + 0x0030,0xFF5E,0xFF1E,0xFEC5,0xFED7,0xFF2B,0xFFE7,0xFE2C, + 0xFF12,0xFF6D,0xFD76,0xFCD5,0xFC72,0xFC36,0xFCC8,0xFC75, + 0xFB89,0xFA57,0xF991,0xF8EB,0xF8D8,0xF98D,0xF9E8,0xF964, + 0xF85A,0xF748,0xF71B,0xF71E,0xF6B6,0xF541,0xF4B0,0xF5DD, + 0xF6D6,0xF6A2,0xF5A6,0xF4D1,0xF41A,0xF3D3,0xF3AE,0xF336, + 0xF267,0xF1B5,0xF0A8,0xEFD2,0xEFBD,0xEF62,0xEECF,0xEE33, + 0xED64,0xECAF,0xEBD1,0xEB5A,0xEAFE,0xEAB1,0xE9F8,0xE9B7, + 0xE9FC,0xE934,0xE8CD,0xE8FA,0xE8DD,0xE87D,0xE7DC,0xE7E8, + 0xE7A9,0xE7BB,0xE75D,0xE6FC,0xE7D8,0xEA61,0xE9A2,0xE90A, + 0xE8B2,0xE866,0xE847,0xE7EA,0xE80E,0xE835,0xE7DF,0xE7DE, + 0xE82E,0xE897,0xE905,0xE8FC,0xE926,0xE93D,0xE99B,0xE974, + 0xE8FE,0xE9D8,0xEAC8,0xEA45,0xEA08,0xEAF4,0xEB8F,0xEB80, + 0xEBDD,0xEC4C,0xEC97,0xED0F,0xED3B,0xEDB2,0xEE19,0xEE54, + 0xEEE2,0xEF0F,0xEF57,0xEF82,0xF00E,0xF06C,0xF14D,0xF1CE, + 0xF261,0xF2E4,0xF235,0xF2E2,0xF473,0xF4F8,0xF539,0xF585, + 0xF5B4,0xF65C,0xF6B0,0xF6E8,0xF757,0xF744,0xF76B,0xF81D, + 0xF7FE,0xF789,0xF841,0xF899,0xF91E,0xF9C7,0xFA29,0xFAC1, + 0xFAFE,0xFB13,0xFBC5,0xFC39,0xFD0C,0xFD81,0xFDFA,0xFE36, + 0xFE10,0xFE6E,0xFF11,0xFF97,0xFFBA,0x0010,0x00CB,0x010A, + 0x0172,0x01C5,0x01C2,0x025A,0x031C,0x0364,0x038D,0x0410, + 0x046A,0x04CE,0x0509,0x0536,0x05A4,0x05B3,0x05C9,0x0607, + 0x0621,0x068F,0x06CA,0x06A5,0x06C9,0x0742,0x075D,0x0784, + 0x0811,0x0802,0x0804,0x0831,0x08BA,0x089E,0x08F5,0x0935, + 0x0A10,0x09F9,0x09C7,0x0A75,0x0AA3,0x0A09,0x0B37,0x0BBB, + 0x0A7C,0x0BD8,0x0BDB,0x0BF9,0x0C53,0x0CAC,0x0C33,0x0C62, + 0x0CA2,0x0CFC,0x0D24,0x0D2C,0x0D37,0x0D30,0x0D84,0x0D4E, + 0x0D75,0x0D3B,0x0DBF,0x0DC9,0x0D96,0x0DD7,0x0E47,0x0E7E, + 0x0E61,0x0E97,0x0E3F,0x0E5F,0x0E51,0x0E7C,0x0E99,0x0F0F, + 0x0F0A,0x0EE6,0x0EC2,0x0EC9,0x0EB6,0x0E9F,0x0EEA,0x0EE2, + 0x0F2B,0x0EB1,0x0E8A,0x0EC4,0x0EEE,0x0EED,0x0E87,0x0E6F, + 0x0E45,0x0E54,0x0E75,0x0E83,0x0E58,0x0E8B,0x0EB9,0x0E86, + 0x0E78,0x0ED3,0x0EB8,0x0EB1,0x0E8D,0x0E1E,0x0CD1,0x0B6A, + 0x0C61,0x0C76,0x0C59,0x0C31,0x0C0B,0x0C7E,0x0C6C,0x0C55, + 0x0C2F,0x0C06,0x0B8A,0x0BEE,0x0C3E,0x0BDD,0x0C13,0x0C5E, + 0x0CDC,0x0C3E,0x0B60,0x0C14,0x0C92,0x0C1D,0x0C29,0x0C59, + 0x0C10,0x0BB9,0x0C1A,0x0BE2,0x0BD6,0x0BBF,0x0C06,0x0C16, + 0x0BE1,0x0B28,0x0B3B,0x0B44,0x0B4D,0x0B27,0x0AF1,0x0AC9, + 0x0AB9,0x0AEC,0x0B84,0x0A2C,0x0992,0x09B1,0x096D,0x0972, + 0x09C1,0x09D0,0x0984,0x09BB,0x09E0,0x0A35,0x0A91,0x0A7B, + 0x0AC6,0x0B17,0x0AB9,0x0A46,0x0A50,0x0A26,0x0A17,0x09FB, + 0x09EC,0x09D2,0x0972,0x0901,0x0965,0x095B,0x0936,0x090B, + 0x08C7,0x0871,0x0812,0x082E,0x0826,0x0820,0x0816,0x0821, + 0x07CB,0x07EB,0x0816,0x07F1,0x078D,0x0773,0x070E,0x06DA, + 0x069B,0x06AF,0x06A4,0x064C,0x0651,0x0635,0x05BE,0x05C0, + 0x05A4,0x0531,0x0570,0x0555,0x050C,0x051C,0x04FB,0x0578, + 0x0598,0x05A9,0x0590,0x058A,0x04EB,0x04D6,0x04C4,0x04BC, + 0x045D,0x0464,0x048A,0x04AC,0x047E,0x052B,0x0455,0x030B, + 0x051B,0x0444,0x03B4,0x041B,0x03FF,0x03A6,0x03AC,0x03FC, + 0x03F9,0x03A2,0x0330,0x037C,0x036B,0x032B,0x02EA,0x030E, + 0x02F1,0x0303,0x02E3,0x0344,0x0356,0x02B3,0x0261,0x0263, + 0x0265,0x02A7,0x02B7,0x0246,0x026D,0x020E,0x0234,0x0288, + 0x0235,0x01FE,0x01BC,0x016E,0x015A,0x017A,0x01B5,0x016D, + 0x0122,0x011A,0x00F0,0x012B,0x013B,0x016B,0x00E9,0x00D2, + 0x00C6,0x00D6,0x00DA,0x010F,0x0130,0x00E5,0x0096,0x00D2, + 0x008E,0x00AB,0x008C,0x00A8,0x00E4,0x00B7,0x0082,0x009B, + 0x00F0,0x0114,0x00C2,0x00B9,0x00D1,0x00B4,0x0101,0x011B, + 0x013C,0x00EA,0x00DB,0x01D8,0x00FF,0x0059,0x0014,0x000D, + 0x0043,0x0031,0x0075,0xF775,0xF2BE,0xF8D7,0xFC70,0xFD28, + 0xFC4C,0xFD71,0x01EB,0x0735,0x080D,0x0364,0xFDFE,0xFCAC, + 0xFDF5,0x0096,0x0301,0x050F,0x0590,0x0317,0x00BD,0x00CE, + 0x02F8,0x03F2,0x02AF,0x0153,0x0224,0x038F,0x03B5,0x0255, + 0x0157,0x016B,0x0342,0x0537,0x0641,0x058A,0x0322,0xFFF6, + 0xFE83,0xFFB2,0x02F8,0x0531,0x04F8,0x0363,0x0184,0x00DA, + 0x006C,0x0064,0x00CA,0x00EA,0x00FE,0x00A9,0x00D1,0x010E, + 0x0126,0x008C,0x0035,0x00F5,0x0244,0x01DF,0x00F0,0xFF53, + 0xFE7A,0xFED4,0x0095,0x020A,0x02E4,0x02A4,0x0211,0xFF44, + 0xFE4A,0x0096,0x0060,0x007F,0x0089,0x005E,0x00CC,0x011E, + 0x00C3,0x0029,0xFF84,0xFF6B,0xFF56,0xFF67,0xFF32,0xFE58, + 0xFE10,0xFDF4,0xFE45,0xFF26,0xFFCB,0xFFB9,0xFED2,0xFE06, + 0xFDB2,0xFD53,0xFDA0,0xFE59,0xFE96,0xFEC3,0xFF0D,0xFF17, + 0xFF03,0xFEC4,0xFE98,0xFEA0,0xFE97,0xFED4,0xFEAB,0xFE5E, + 0xFE89,0xFE8A,0xFE7F,0xFECE,0xFEFE,0xFF26,0xFF10,0xFE72, + 0xFD81,0xFD5B,0xFD70,0xFDB7,0xFDED,0xFE91,0xFEAA,0xFEC3, + 0xFEAE,0xFDF4,0xFE14,0xFE43,0xFEA8,0x008D,0x009C,0x0044, + 0xFFA9,0xFF70,0xFF69,0xFF49,0xFF4D,0xFFAF,0xFFD3,0xFF70, + 0xFF27,0xFF0C,0xFED8,0xFF02,0xFF72,0xFF99,0xFF7A,0xFFB0, + 0xFE8A,0xFE66,0xFF32,0xFEEA,0xFDFB,0xFDC0,0xFEB1,0xFEAE, + 0xFEAA,0xFE80,0xFE9A,0xFE52,0xFDEF,0xFDDB,0xFE20,0xFDF2, + 0xFDF4,0xFDBD,0xFD9F,0xFDAC,0xFDF3,0xFDF1,0xFDDC,0xFDD2, + 0xFDD2,0xFDDE,0xFCEE,0xFC15,0xFCF3,0xFDA0,0xFDD4,0xFE11, + 0xFE2D,0xFE6E,0xFE86,0xFDE2,0xFD88,0xFD42,0xFD2C,0xFD37, + 0xFD22,0xFC92,0xFC8D,0xFC44,0xFC64,0xFC63,0xFC53,0xFC69, + 0xFC55,0xFBF5,0xFBF9,0xFC2D,0xFC45,0xFC91,0xFCA5,0xFCFE, + 0xFD05,0xFD2B,0xFD14,0xFCBD,0xFC8F,0xFCD9,0xFCD4,0xFC56, + 0xFCCC,0xFD00,0xFCE6,0xFCCF,0xFC66,0xFCD5,0xFCFE,0xFCDB, + 0xFCFC,0xFD1D,0xFCD4,0xFCB2,0xFCA2,0xFC88,0xFD31,0xFD89, + 0xFD37,0xFD0C,0xFCED,0xFCCC,0xFD55,0xFDA0,0xFE19,0xFDFF, + 0xFDCF,0xFD7B,0xFD78,0xFDAE,0xFDF3,0xFE00,0xFDDD,0xFDBB, + 0xFE74,0xFEAB,0xFE7A,0xFE7E,0xFEC2,0xFE7D,0xFE92,0x0076, + 0xFEB9,0xFEF5,0xFF36,0xFF30,0xFF3A,0xFFB4,0xFFE3,0xFFB0, + 0xFF83,0xFF7E,0xFF38,0xFEE6,0xFF81,0xFF62,0xFF5B,0xFF4B, + 0xFF16,0xFEFB,0xFF76,0xFF7B,0xFFA3,0xFFB4,0xFF4E,0xFF41, + 0xFFA6,0xFF8A,0xFF84,0xFF4D,0xFFA8,0x0000,0xFFEA,0xFFE6, + 0xFFFD,0xFFF2,0xFF9E,0xFF7B,0xFF9F,0xFFDD,0xFFF6,0x000C, + 0x0008,0xFFD5,0xFFA0,0xFFE0,0xFFF4,0xFFDA,0xFFE5,0x000E, + 0xFFF9,0xFFA6,0x0002,0x0014,0x0042,0xFFE1,0x0047,0x0042, + 0xFFCB,0xFFBB,0x0005,0xFFFD,0xFFEC,0xFFE3,0xFEC9,0xFCFA, + 0xFDAF,0xFDF3,0xFE03,0xFE0F,0xFE8F,0xFE81,0xFE88,0xFEBA, + 0xFF08,0xFF20,0xFF0F,0xFEC0,0xFEDE,0xFF07,0xFEEB,0xFEE6, + 0xFF87,0xFFB2,0xFE81,0xFEED,0xFF97,0xFF71,0xFFEC,0xFFF2, + 0xFFC4,0xFFBD,0x0001,0x0014,0x0039,0x0055,0x0047,0x002E, + 0x0043,0xFFFE,0xFFDA,0xFFDC,0xFFDC,0x00C8,0x00C0,0x00BA, + 0x00D7,0x00B0,0x01CE,0x013A,0xFFFE,0xFFDB,0xFFDD,0xFFF5, + 0x0037,0x007F,0x005C,0x0047,0x0043,0x0106,0x01DB,0x01E4, + 0x0249,0x0291,0x021F,0x01B2,0x01C0,0x018C,0x01A4,0x01F8, + 0x0228,0x01D3,0x01C1,0x01A0,0x0175,0x014C,0x0148,0x0132, + 0x016E,0x0169,0x010B,0x0113,0x0142,0x00F3,0x00C8,0x00B8, + 0x00D2,0x0096,0x0091,0x006B,0x005B,0x0053,0x002E,0x0017, + 0x0054,0x0062,0xFFF2,0xFFA7,0xFF90,0xFFD7,0xFFC8,0x0021, + 0x0062,0x001E,0xFF8A,0x0013,0xFFAC,0xFF83,0xFF9B,0xFFC2, + 0xFFE8,0xFFCE,0xFFC4,0xFFB3,0xFFFE,0x000D,0x0075,0x0022, + 0xFF36,0xFF2E,0xFF73,0xFF7E,0xFF99,0xFFE7,0x0030,0xFE60, + 0xFF55,0x005F,0xFF1E,0xFF3D,0xFF2E,0xFEFD,0xFF10,0xFF05, + 0xFEBD,0xFEBE,0xFF01,0xFEFF,0xFF53,0xFF43,0xFF57,0xFF82, + 0xFFA1,0xFF60,0xFF7F,0xFFC8,0x002C,0xFF9F,0xFF45,0xFF77, + 0xFFA9,0xFFDE,0xFF49,0xFF5A,0xFF24,0xFF03,0xFF11,0xFED2, + 0xFE64,0xFEF2,0xFEB6,0xFEC7,0xFF2F,0xFF1A,0xFF0A,0xFF19, + 0xFED8,0xFEF1,0xFF09,0xFF2B,0xFF3A,0xFF0A,0xFEC5,0xFEC6, + 0xFF28,0xFF0E,0xFF1E,0xFEDE,0xFEBF,0xFE6E,0xFE5A,0xFE4F, + 0xFF13,0xFF23,0xFEDB,0xFEED,0x0077,0x0227,0x0112,0x0102, + 0x00AD,0x006B,0x007D,0x00A0,0x006E,0x003D,0x000E,0x0027, + 0x0009,0xFFF2,0x0008,0xFFF9,0xFFDF,0xFFA7,0xFF71,0xFF08, + 0xFEEC,0xFFE0,0x0048,0xFFDC,0xFF48,0xFF6E,0xFEF0,0xFEE5, + 0xFF1C,0xFEE4,0xFF35,0xFF76,0xFF65,0xFF0B,0xFE92,0xFE75, + 0xFEC0,0xFEC1,0xFEE2,0xFEB2,0xFEE8,0xFEB8,0xFEB1,0xFE68, + 0xFEBB,0xFE76,0xFD29,0xFD54,0xFE68,0xFE8F,0xFEA5,0xFE32, + 0xFDD0,0xFDAC,0xFDB2,0xFDEF,0xFD90,0xFD49,0xFCF6,0xFCC0, + 0xFC44,0xFBE1,0xFC53,0xFCB8,0xFCDC,0xFC92,0xFC4B,0xFC26, + 0xFBE8,0xFC66,0xFC7D,0xFC50,0xFC53,0xFC21,0xFCD4,0xFCC4, + 0xFCB6,0xFCE4,0xFCA6,0xFCDD,0xFD0A,0xFD32,0xFD95,0xFD6D, + 0xFD2E,0xFCED,0xFD2A,0xFD82,0xFD45,0xFD25,0xFD0B,0xFCD6, + 0xFC68,0xFCE0,0xFD01,0xFCCF,0xFCB7,0xFCD4,0xFD1A,0xFD03, + 0xFD35,0xFCFF,0xFCAD,0xFC5A,0xFCC7,0xFCBD,0xFCC5,0xFCF7, + 0xFCEB,0xFC53,0xFC9C,0xFD50,0xFE0E,0xFDAF,0xFD5B,0xFD12, + 0xFDCA,0xFE2A,0xFE4A,0xFE5B,0xFE6D,0xFDDC,0xFF91,0xFE96, + 0xFDD6,0xFEE7,0xFE4F,0xFE61,0xFE75,0xFEA8,0xFECD,0xFF03, + 0xFEED,0xFEA4,0xFEA4,0xFEBE,0xFEE1,0xFF07,0xFF8F,0xFF8F, + 0xFF98,0xFF1B,0xFF47,0xFF6F,0xFFD7,0xFF9F,0xFFBD,0xFFD8, + 0xFFD4,0xFFF5,0xFFC0,0xFFC8,0x0004,0x002E,0x004B,0x0021, + 0x0027,0x001B,0xFFE6,0xFFBB,0x002D,0x0083,0x0024,0x0008, + 0x0042,0x0068,0x004B,0xFFE6,0x0006,0xFFFB,0xFFD6,0xFF7F, + 0xFF6C,0xFEFC,0xFECB,0xFEB5,0xFEBF,0xFEB4,0xFEE0,0xFECB, + 0xFE7D,0xFE0B,0xFDCB,0xFDC4,0xFD5F,0xFD27,0xFB18,0xFA27, + 0xFAAA,0xFAD9,0xFB0B,0xFADD,0xFB07,0xFACD,0xFAAE,0xFA6C, + 0xFA7F,0xFA9C,0xFA85,0xFA74,0xFA9F,0xFAD1,0xFAA4,0xFAAD, + 0xFB45,0xFA6F,0xFA3C,0xFB93,0xFB70,0xFB29,0xFB24,0xFB85, + 0xFB97,0xFB98,0xFB66,0xFBD3,0xFC04,0xFC19,0xFBE4,0xFBD5, + 0xFBE7,0xFBD0,0xFBF8,0xFBC4,0xFBE7,0xFC2C,0xFC1C,0xFC1D, + 0xFC33,0xFCE8,0xFE07,0xFD28,0xFC67,0xFC6C,0xFC68,0xFD13, + 0xFCE8,0xFD05,0xFCF0,0xFD64,0xFDB2,0xFE2F,0xFE6D,0xFEA2, + 0xFF36,0xFEDD,0xFEC5,0xFE54,0xFE5B,0xFE4B,0xFE71,0xFE48, + 0xFEC0,0xFEA6,0xFEB0,0xFEAC,0xFED8,0xFF57,0xFF20,0xFECF, + 0xFEB0,0xFED8,0xFE8B,0xFE78,0xFE7E,0xFE61,0xFE84,0xFE2E, + 0xFE55,0xFEC4,0xFED9,0xFEAE,0xFEB8,0xFF18,0xFEF1,0xFEF4, + 0xFF2B,0xFF3B,0xFEF6,0xFEC0,0xFF37,0xFF59,0xFF4E,0xFF48, + 0xFF62,0xFF68,0xFF94,0xFFBB,0xFFCB,0xFFEF,0x001E,0xFFF0, + 0xFFD9,0x0005,0x0020,0x0057,0xFFAA,0xFFE2,0x0014,0x000C, + 0x0008,0x005F,0x0079,0x004C,0x0079,0x0154,0x003C,0xFF88, + 0x01CC,0x00B8,0x007E,0x0121,0x00D8,0x00BD,0x00CA,0x00EC, + 0x00B8,0x00CB,0x00B3,0x00C8,0x00F4,0x0097,0x00EF,0x0120, + 0x010B,0x0114,0x0123,0x011A,0x00EC,0x00B3,0x0108,0x012F, + 0x0125,0x0152,0x019A,0x0181,0x01F2,0x020E,0x015C,0x0198, + 0x0187,0x01AD,0x01D3,0x01D1,0x0203,0x01D8,0x01A7,0x01B6, + 0x01CC,0x01D2,0x01A6,0x01B3,0x0191,0x01D1,0x016F,0x019E, + 0x0185,0x0176,0x014C,0x0135,0x01A8,0x01B0,0x0193,0x0192, + 0x0223,0x0221,0x0201,0x02BE,0x05A0,0x0539,0x0490,0x0452, + 0x0409,0x0419,0x0420,0x03E1,0x03E4,0x03D7,0x03E8,0x03C1, + 0x0377,0x03E7,0x03B5,0x03A8,0x038F,0x03B7,0x037A,0x030F, + 0x02CD,0x03B2,0x037E,0x026E,0x0278,0x02F0,0x02AB,0x027F, + 0x0260,0x0256,0x0211,0x01D2,0x01F0,0x01F3,0x0189,0x01D3, + 0x0227,0x01E6,0x01AD,0x01AD,0x0182,0x0184,0x0127,0x017F, + 0x01C9,0x00BA,0x0037,0x0166,0x01D3,0x01A9,0x0187,0x0181, + 0x012A,0x013B,0x0142,0x00ED,0x0098,0x0043,0x0033,0xFFF2, + 0xFF49,0xFEFC,0xFF44,0xFF78,0xFFAF,0xFF89,0xFF0D,0xFF43, + 0xFF3E,0xFF3B,0xFF39,0xFF3C,0xFF4E,0xFF62,0xFF80,0xFEED, + 0xFF16,0xFEE9,0xFEC8,0xFED7,0xFE81,0xFE52,0xFE9E,0xFE67, + 0xFE39,0xFE3A,0xFE99,0xFECD,0xFE88,0xFE50,0xFE81,0xFE92, + 0xFE5A,0xFE8A,0xFE1F,0xFE31,0xFE69,0xFE39,0xFE57,0xFE8E, + 0xFE38,0xFE0A,0xFDE8,0xFDBC,0xFDCA,0xFDBC,0xFDAE,0xFDAD, + 0xFD79,0xFD8D,0xFDBE,0xFDB3,0xFE03,0xFE26,0xFE2B,0xFEB6, + 0xFEE5,0xFE61,0xFE5B,0xFE8A,0xFDEC,0xFE4F,0xFFBE,0xFDF1, + 0xFE97,0xFEE7,0xFE85,0xFE85,0xFE81,0xFE56,0xFE86,0xFEC9, + 0xFE5C,0xFE87,0xFF0D,0xFF29,0xFECB,0xFEB6,0xFEDB,0xFEF4, + 0xFEC7,0xFEAD,0xFF3A,0xFF05,0xFEEA,0xFF2D,0xFF7D,0xFF88, + 0x0005,0xFFC7,0x0035,0x003B,0xFFBF,0xFFB0,0x0003,0x0018, + 0x0020,0x0033,0x0088,0x006F,0x0041,0x0011,0xFFE3,0x0013, + 0xFFF3,0xFFD6,0xFF90,0xFF87,0xFFAB,0xFF77,0xFF9C,0xFF82, + 0xFFC7,0x0012,0xFFDF,0x0018,0xFFE4,0xFF93,0x004E,0x0025, + 0xFFEC,0x0003,0x0039,0x0094,0x007D,0xFEDB,0xFD31,0xFDAA, + 0xFDD1,0xFDE8,0xFE2E,0xFE3D,0xFE75,0xFE44,0xFE1D,0xFE1A, + 0xFE75,0xFEB8,0xFE9F,0xFEF9,0xFF2C,0xFF78,0xFF73,0x001E, + 0x0004,0xFEF5,0xFF6C,0xFFCC,0xFF9E,0xFF9C,0x0002,0x0040, + 0xFFE7,0x0017,0x003E,0x0025,0x009C,0x0073,0x008C,0x00A7, + 0x0062,0x00B8,0x0125,0x00A6,0x007D,0x00AA,0x00AA,0x007E, + 0x008B,0x014B,0x016F,0x0050,0x0005,0x0032,0x0043,0x0083, + 0x00C4,0x00AF,0x0108,0x0123,0x017B,0x01FC,0x01FC,0x0276, + 0x0251,0x0226,0x025D,0x0247,0x01DC,0x01A5,0x01D0,0x0208, + 0x01A3,0x017F,0x0182,0x0169,0x0185,0x017B,0x0172,0x0163, + 0x0132,0x00F3,0x0118,0x00C9,0x0097,0x00ED,0x00B5,0x00AA, + 0x0086,0x0069,0x00B7,0x00A5,0x007C,0x0057,0x0046,0x0034, + 0xFFF4,0x0027,0x000A,0x0005,0xFFB5,0xFFB1,0xFF94,0xFFAD, + 0xFFB5,0xFFA8,0xFFB4,0x0003,0x0005,0xFFE8,0xFFFB,0xFFD3, + 0x0005,0x002E,0x003D,0xFFD7,0xFFF5,0xFFDE,0xFF99,0xFF32, + 0xFF63,0xFFBA,0xFF6B,0xFF61,0xFFBA,0xFFEA,0xFE07,0xFFD0, + 0x0045,0xFEE1,0xFF38,0xFF7D,0xFF8B,0xFFFF,0x001F,0xFFD5, + 0xFFBE,0xFFEC,0xFF8A,0xFF0A,0xFF34,0xFF4E,0xFF43,0xFF3C, + 0xFF78,0xFF3B,0xFF21,0xFF34,0xFF64,0xFF09,0xFF37,0xFF1C, + 0xFF21,0xFEFA,0xFED3,0xFEF2,0xFF1D,0xFF4A,0xFF2B,0xFF46, + 0xFF6D,0xFF5A,0xFF53,0xFF3B,0xFEF5,0xFF39,0xFF38,0xFF4C, + 0xFF5F,0xFF5C,0xFF7E,0xFF6F,0xFF83,0xFF57,0xFF5D,0xFFAD, + 0xFFB8,0xFFDE,0xFFB5,0xFF70,0xFF9B,0xFFA6,0xFFA8,0xFFA3, + 0xFFE4,0x0000,0x0014,0x0172,0x032E,0x0257,0x01DD,0x01D4, + 0x01BE,0x013E,0x0123,0x0116,0x00D6,0x00C4,0x009D,0x0099, + 0x00C4,0x00A2,0x0095,0x0067,0xFFF6,0xFFD5,0xFF79,0xFF23, + 0xFFDC,0x004F,0xFF98,0xFF14,0xFF74,0xFF32,0xFF3E,0xFF16, + 0xFEFB,0xFF41,0xFF79,0xFF40,0xFF53,0xFEF4,0xFE47,0xFE7F, + 0xFE92,0xFE93,0xFE5B,0xFE82,0xFE79,0xFE57,0xFE25,0xFE32, + 0xFDC1,0xFCBD,0xFDA3,0xFEB7,0xFEB9,0xFE3A,0xFE21,0xFDE5, + 0xFDAF,0xFDF5,0xFE20,0xFD8E,0xFCE8,0xFD0A,0xFCC7,0xFC43, + 0xFBEF,0xFC09,0xFBD1,0xFB83,0xFBB5,0xFB7B,0xFB62,0xFB84, + 0xFB6B,0xFB27,0xFB86,0xFBB9,0xFBE6,0xFBEF,0xFC0D,0xFC24, + 0xFC87,0xFCA8,0xFC5E,0xFC82,0xFC9E,0xFC59,0xFC4A,0xFC06, + 0xFC05,0xFC0E,0xFC4F,0xFCA9,0xFC97,0xFC85,0xFC84,0xFC61, + 0xFC7C,0xFD20,0xFCF8,0xFCE2,0xFD25,0xFD14,0xFD1E,0xFD6A, + 0xFD97,0xFD6E,0xFD49,0xFD67,0xFDEF,0xFDB8,0xFD57,0xFD96, + 0xFD1E,0xFD7E,0xFD9E,0xFDBF,0xFDCA,0xFDDE,0xFDD7,0xFE5B, + 0xFE21,0xFE1C,0xFE1D,0xFE40,0xFD6A,0xFF39,0xFE7D,0xFD62, + 0xFE7A,0xFE18,0xFE1F,0xFE74,0xFEBB,0xFE79,0xFE82,0xFEA1, + 0xFEA3,0xFE63,0xFEA8,0xFE8A,0xFE9C,0xFEDD,0xFEEC,0xFEE6, + 0xFEA2,0xFE7B,0xFE8E,0xFEC9,0xFE8F,0xFE9B,0xFE79,0xFE8C, + 0xFEBD,0xFE9A,0xFE89,0xFEA6,0xFE72,0xFE9F,0xFEE2,0xFE99, + 0xFECD,0xFF0F,0xFEE3,0xFE98,0xFEC4,0xFEB0,0xFE89,0xFE97, + 0xFF0A,0xFEE8,0xFEB0,0xFF02,0xFEC9,0xFEDC,0xFECD,0xFECE, + 0xFF0D,0xFEDE,0xFEA1,0xFEAC,0xFE58,0xFE97,0xFEB1,0xFF00, + 0xFF64,0xFF1B,0xFED9,0xFF05,0xFEB6,0xFCB0,0xFC1A,0xFCF7, + 0xFD13,0xFCD6,0xFD10,0xFD92,0xFD8C,0xFD7C,0xFD8D,0xFDA7, + 0xFDAE,0xFE16,0xFDEE,0xFE04,0xFE25,0xFE0D,0xFE6A,0xFF33, + 0xFE2B,0xFE23,0xFEE9,0xFF2D,0xFF0E,0xFF26,0xFF5C,0xFF6F, + 0xFF87,0xFF44,0xFF66,0xFFB3,0xFFB2,0xFFCC,0xFFED,0xFFF6, + 0x0027,0x0024,0x0034,0x0000,0xFFF3,0x0009,0xFFE1,0x006E, + 0x0186,0x0067,0xFFDD,0xFFDC,0xFFE2,0xFF9F,0x0027,0x0083, + 0x007B,0x0022,0x0045,0x0115,0x0181,0x018C,0x01DA,0x02B0, + 0x0288,0x0240,0x0226,0x020D,0x01F6,0x01E7,0x023E,0x01F6, + 0x01EA,0x01F7,0x01C5,0x01C9,0x0219,0x022D,0x01EF,0x019A, + 0x01A9,0x01A0,0x01BF,0x018C,0x016A,0x012D,0x013E,0x0114, + 0x012E,0x00ED,0x010E,0x00E4,0x0108,0x00D6,0x00B1,0x00A6, + 0x007B,0x0064,0x0071,0x0079,0x0050,0x0077,0x007F,0x0065, + 0x0090,0x0080,0x0021,0x0018,0xFFF7,0x0010,0xFFEB,0xFFE2, + 0x002D,0x001F,0x0016,0x0020,0x0009,0xFFFA,0xFFA5,0xFF7C, + 0xFFC1,0xFFAE,0xFFB8,0xFFF1,0x008F,0xFF91,0xFF65,0x0125, + 0xFFE8,0xFF96,0xFFC3,0xFFA4,0xFF62,0xFF95,0xFFA1,0xFF77, + 0xFF8E,0xFF75,0xFF62,0xFF95,0xFF89,0xFF81,0xFF30,0xFF14, + 0xFFA5,0xFFA0,0xFF81,0xFF96,0xFFBF,0xFFBB,0xFFB7,0xFF5D, + 0xFF55,0xFF58,0xFF5A,0xFF54,0xFF60,0xFEFC,0xFEED,0xFF03, + 0xFF50,0xFEBF,0xFE9E,0xFED7,0xFEBE,0xFEEA,0xFED1,0xFF02, + 0xFEE7,0xFED6,0xFEE3,0xFEF2,0xFE88,0xFE7F,0xFEA7,0xFE9A, + 0xFE82,0xFEA5,0xFEB9,0xFEAC,0xFEE5,0xFEBC,0xFEB8,0xFED2, + 0xFF45,0xFF2E,0xFF9A,0x0217,0x029D,0x01CA,0x014B,0x0113, + 0x00D2,0x00DC,0x00A7,0x0088,0x0045,0x004C,0x0016,0x0004, + 0xFFBA,0xFFAD,0xFFB5,0xFFB6,0xFFAB,0xFFCE,0xFF11,0xFF6B, + 0x0055,0xFF96,0xFEEE,0xFF08,0xFF7D,0xFF4E,0xFF4D,0xFF0F, + 0xFF52,0xFF25,0xFEE1,0xFEB5,0xFEA5,0xFEC5,0xFEB9,0xFE7B, + 0xFE0B,0xFDE5,0xFDD2,0xFDEC,0xFDFD,0xFD87,0xFDE9,0xFD74, + 0xFC37,0xFD99,0xFE2B,0xFE22,0xFE33,0xFE38,0xFE0C,0xFDFA, + 0xFDF7,0xFE08,0xFDC1,0xFD46,0xFCF7,0xFCA3,0xFCC3,0xFC3C, + 0xFC34,0xFC66,0xFC18,0xFBDC,0xFC12,0xFBE2,0xFBF3,0xFC18, + 0xFC7A,0xFC4D,0xFC79,0xFC6C,0xFC3B,0xFCC7,0xFCA7,0xFC79, + 0xFCA3,0xFC8C,0xFC3D,0xFC88,0xFC10,0xFC58,0xFC98,0xFC57, + 0xFC6C,0xFC86,0xFC32,0xFC0B,0xFBF8,0xFC1C,0xFC03,0xFC21, + 0xFC57,0xFCA0,0xFC45,0xFC29,0xFC34,0xFC67,0xFC9C,0xFC43, + 0xFC5E,0xFCA4,0xFC65,0xFC79,0xFC46,0xFC30,0xFBF9,0xFBA0, + 0xFBC4,0xFC1F,0xFC27,0xFC70,0xFC9F,0xFC68,0xFCC9,0xFD90, + 0xFD72,0xFD67,0xFD90,0xFD11,0xFD85,0xFF00,0xFD10,0xFDDF, + 0xFE40,0xFDFB,0xFDFF,0xFE8B,0xFE3E,0xFE5C,0xFEBC,0xFED9, + 0xFEEA,0xFEC7,0xFEDD,0xFEB4,0xFF15,0xFF4D,0xFF3A,0xFEF5, + 0xFF47,0xFF6B,0xFF58,0xFF40,0xFF2C,0xFF34,0xFF6A,0xFF01, + 0xFEE3,0xFF1C,0xFEF3,0xFEC6,0xFF0E,0xFF3E,0xFF2A,0xFEE8, + 0xFF39,0xFF4E,0xFF65,0xFF61,0xFF92,0xFFBC,0xFF60,0xFF63, + 0xFF40,0xFFA8,0xFFA3,0xFF59,0xFF8B,0xFF9B,0xFFC2,0xFFB2, + 0xFF95,0xFF61,0xFF79,0xFF9F,0xFFAB,0xFF54,0xFF80,0xFF51, + 0xFF50,0xFF3E,0xFEDD,0xFF10,0xFE2E,0xFC72,0xFD19,0xFD50, + 0xFDD5,0xFDC0,0xFD7E,0xFDA0,0xFD8E,0xFDA1,0xFDBF,0xFD91, + 0xFDDA,0xFE0C,0xFE51,0xFE66,0xFE6F,0xFE21,0xFEB5,0xFEBB, + 0xFDC7,0xFE2F,0xFF0D,0xFF1F,0xFED6,0xFED8,0xFF20,0xFF07, + 0xFF83,0xFF34,0xFF12,0xFF49,0xFF5B,0xFFAB,0xFF9E,0xFFD7, + 0x001A,0x002E,0x0015,0x0036,0x0002,0x0011,0x0004,0x0011, + 0x0139,0x0095,0xFFC3,0xFFC8,0xFFA6,0xFFBD,0xFFE8,0x0025, + 0x005A,0x0006,0x0009,0x00CF,0x013C,0x0118,0x0152,0x01C3, + 0x015A,0x0125,0x0160,0x0157,0x0134,0x0151,0x017D,0x0168, + 0x0156,0x016F,0x0115,0x012C,0x010D,0x00FA,0x0145,0x0153, + 0x0188,0x013B,0x00EE,0x0105,0x0109,0x00BC,0x00ED,0x006D, + 0x006C,0x003A,0x003E,0x00BF,0x00BB,0x00D0,0x0102,0x00BE, + 0x009C,0x00B0,0x0044,0x0009,0xFFE0,0x002E,0xFFFD,0x0023, + 0x002C,0x0038,0x0099,0x0081,0x0096,0x00A9,0x00EC,0x00F4, + 0x00AC,0x00A4,0x00D5,0x00EE,0x00C0,0x0065,0x004D,0x001B, + 0x0083,0x0031,0xFFE0,0x0087,0x00A6,0xFEAE,0x0054,0x003D, + 0xFF7F,0x0009,0x000E,0x0056,0xFFD3,0xFFD7,0xFFFA,0x0021, + 0x002B,0x0014,0x0073,0x0018,0xFFD0,0xFF9E,0xFFA4,0xFFC2, + 0xFFEF,0x0019,0xFFB5,0xFFE1,0x003C,0x006D,0x003C,0x000B, + 0x002D,0xFFF5,0xFFC0,0xFFC6,0xFFF6,0x0018,0x0008,0xFFD6, + 0xFFC6,0xFFE2,0x0031,0x004E,0x0011,0xFF79,0xFF5E,0xFFAD, + 0xFFE6,0xFFA2,0xFF68,0xFFC9,0xFF97,0xFF75,0xFF51,0xFF29, + 0xFF19,0xFF36,0xFF41,0xFEF1,0xFEBB,0xFEDF,0xFEF5,0xFEFD, + 0xFF65,0xFF55,0x00F4,0x0284,0x026A,0x021A,0x0176,0x016A, + 0x0136,0x0131,0x00E5,0x0088,0x0094,0x0037,0x0039,0xFFF4, + 0xFFE8,0xFFFE,0xFFCA,0xFFC1,0xFFDE,0xFFD7,0xFF13,0xFFA6, + 0xFFC2,0xFF15,0xFEBF,0xFF00,0xFEDD,0xFE9B,0xFE72,0xFE67, + 0xFE97,0xFEC6,0xFE89,0xFE80,0xFEC4,0xFE9A,0xFE88,0xFEB6, + 0xFE89,0xFE93,0xFE92,0xFE6D,0xFE1E,0xFE4B,0xFF1B,0xFEB8, + 0xFD6A,0xFE1F,0xFF0C,0xFEE2,0xFED5,0xFEE0,0xFEBA,0xFEBC, + 0xFE55,0xFE13,0xFDB7,0xFD4D,0xFD63,0xFD17,0xFC5E,0xFBE0, + 0xFC24,0xFC8D,0xFC77,0xFC8A,0xFC63,0xFC5B,0xFC3A,0xFC4E, + 0xFC81,0xFC7A,0xFCA9,0xFC88,0xFC42,0xFC56,0xFCD5,0xFCC4, + 0xFCAC,0xFC88,0xFCD3,0xFCE5,0xFD04,0xFD4E,0xFD34,0xFCCF, + 0xFD32,0xFD7C,0xFD20,0xFD4D,0xFDBF,0xFD68,0xFD51,0xFD36, + 0xFD40,0xFD57,0xFD4D,0xFD87,0xFD58,0xFD41,0xFD1B,0xFD62, + 0xFDCC,0xFDCF,0xFDE7,0xFDE1,0xFDEC,0xFD9A,0xFD7C,0xFD2D, + 0xFDA9,0xFDF1,0xFE13,0xFDD6,0xFDF2,0xFDD0,0xFE41,0xFE40, + 0xFE35,0xFE75,0xFE6A,0xFD96,0xFF5B,0xFEA4,0xFE15,0xFEE2, + 0xFE93,0xFED1,0xFEBD,0xFEB3,0xFE67,0xFEF4,0xFEEE,0xFF20, + 0xFF3E,0xFF46,0xFF32,0xFF23,0xFF09,0xFF11,0xFF00,0xFEBA, + 0xFEEB,0xFE91,0xFEB9,0xFEB5,0xFEF3,0xFEC7,0xFEB9,0xFED9, + 0xFECC,0xFF16,0xFEEE,0xFED7,0xFF40,0xFF38,0xFF48,0xFF73, + 0xFF7A,0xFF56,0xFF77,0xFF60,0xFF84,0xFF7D,0xFFD4,0xFF91, + 0xFFCC,0x001B,0x0045,0xFFB9,0xFFB1,0xFFC2,0xFFDA,0x000C, + 0xFFF4,0x003C,0x0063,0x0017,0x0001,0x007F,0x00A3,0x0075, + 0x001C,0xFFF2,0x0006,0xFFA5,0xFDDF,0xFD72,0xFE1D,0xFE54, + 0xFE6D,0xFE8E,0xFED5,0xFEE3,0xFF20,0xFF07,0xFF46,0xFF62, + 0xFF81,0xFFA6,0xFFC7,0x0003,0xFFF4,0x000B,0x0049,0xFF71, + 0xFF14,0xFFED,0x0008,0xFFFF,0xFFBD,0xFFB6,0xFFB0,0xFFAC, + 0x000F,0xFFF0,0x001C,0x000B,0x004D,0x005E,0x0044,0x0040, + 0x00E6,0x00BE,0x0045,0x002D,0x001E,0x003F,0x000F,0x0049, + 0x013B,0x0012,0xFF56,0xFF78,0xFFA4,0xFFAF,0xFF83,0xFF48, + 0xFF31,0xFF6A,0xFFE5,0x0077,0x0053,0x00A5,0x010F,0x00D0, + 0x00EE,0x0111,0x00FD,0x00C4,0x00F9,0x00D8,0x00BB,0x00A1, + 0x00C4,0x00AA,0x00D1,0x00B0,0x009C,0x006F,0x002B,0x0000, + 0xFFFB,0x0028,0x0011,0xFFDA,0x0021,0x0049,0x001A,0x0067, + 0x005A,0x0000,0xFFBC,0xFF91,0xFFC0,0xFF97,0xFF8D,0xFF4B, + 0xFF5F,0xFFA2,0xFF8C,0xFF6F,0xFF56,0xFF59,0xFF3D,0xFF7A, + 0xFF33,0xFF0E,0xFF66,0xFFC9,0xFFB1,0xFFA1,0xFF67,0xFF85, + 0xFF72,0xFF91,0xFF6A,0xFFBD,0xFFB3,0xFF82,0xFF34,0xFF46, + 0xFEFE,0xFF05,0xFF74,0x0034,0xFF34,0xFEC8,0x0085,0xFF65, + 0xFF65,0xFF7E,0xFF6D,0xFFC5,0xFF9F,0xFF82,0xFF87,0xFFB3, + 0xFF97,0xFF8A,0xFF71,0xFF1E,0xFEEA,0xFF21,0xFF3A,0xFFD0, + 0xFFEB,0xFFA0,0xFF36,0xFF12,0xFEFF,0xFEDD,0xFF13,0xFF3A, + 0xFF46,0xFF12,0xFEDA,0xFEEC,0xFF12,0xFF3F,0xFF16,0xFE85, + 0xFE7F,0xFEB8,0xFEC9,0xFEB7,0xFE9F,0xFEEC,0xFE9B,0xFE7F, + 0xFE0D,0xFE51,0xFE4C,0xFE35,0xFE21,0xFE5C,0xFE1A,0xFE55, + 0xFE56,0xFE5A,0xFE47,0xFE1E,0xFE48,0xFE9A,0xFEC1,0xFEFB, + 0xFF91,0xFFA3,0x020A,0x0208,0x0159,0x012A,0x00AE,0x00A2, + 0x00CA,0x0097,0x004C,0x0038,0x002F,0x0024,0x004E,0x005E, + 0x0006,0xFFC2,0xFFBE,0xFF87,0xFF79,0xFF08,0xFF4A,0x001E, + 0xFF9A,0xFF15,0xFF8F,0x0008,0xFF69,0xFF48,0xFF6C,0xFF64, + 0xFF44,0xFF8C,0xFF8D,0xFF98,0xFF57,0xFF31,0xFF57,0xFF70, + 0xFF38,0xFF49,0xFF73,0xFF67,0xFF31,0xFF75,0xFF58,0xFEA5, + 0xFE39,0xFEFF,0xFF68,0xFF27,0xFF2F,0xFEF8,0xFED2,0xFED5, + 0xFE93,0xFE2F,0xFDF0,0xFDCB,0xFDE7,0xFD84,0xFCB3,0xFCD4, + 0xFCEB,0xFD16,0xFD21,0xFCF9,0xFCF3,0xFCA1,0xFCAF,0xFCA9, + 0xFC97,0xFCB1,0xFCE3,0xFCFE,0xFCE8,0xFD30,0xFD74,0xFD74, + 0xFD6B,0xFD29,0xFDA8,0xFDBB,0xFD2F,0xFD84,0xFD9F,0xFD70, + 0xFD42,0xFD5D,0xFD3A,0xFD2A,0xFD2F,0xFD45,0xFD11,0xFD40, + 0xFD32,0xFD54,0xFD51,0xFDA0,0xFE0E,0xFE08,0xFE73,0xFF31, + 0x0039,0x014F,0x0264,0x032B,0x0372,0x02B8,0x0134,0x0027, + 0x0163,0x03A2,0x0685,0x0A9E,0x0E57,0x10AE,0x116E,0x11B6, + 0x1250,0x129F,0x12D4,0x14A9,0x1795,0x1713,0x1817,0x1755, + 0x1689,0x178F,0x1906,0x1869,0x1684,0x14F7,0x1603,0x1974, + 0x1C54,0x1E24,0x1DEA,0x1BE0,0x18B6,0x1940,0x1DC3,0x214D, + 0x1FDD,0x1B45,0x17B2,0x1779,0x1A22,0x1DAA,0x1F59,0x1F01, + 0x1E93,0x1D67,0x1C99,0x1CAA,0x1C6B,0x1AB8,0x18E6,0x1864, + 0x19F2,0x1C67,0x1DAE,0x1D23,0x1CF1,0x1E32,0x1E05,0x1B8B, + 0x17D9,0x1571,0x1559,0x1660,0x1753,0x1887,0x1A04,0x1AA8, + 0x19C8,0x17C5,0x1712,0x16D4,0x1552,0x1128,0x0DB6,0x0E96, + 0x120F,0x1441,0x1444,0x1303,0x1092,0x0E59,0x0B79,0x0A86, + 0x0C37,0x0C9E,0x0A16,0x07FF,0x0A1F,0x0D17,0x0D29,0x0A4D, + 0x0837,0x07B8,0x07F0,0x0791,0x0828,0x08FA,0x06E0,0x023B, + 0x0143,0x0473,0x07C6,0x07A7,0x0513,0x019E,0xFFC2,0xFFDE, + 0x0149,0x0434,0x0573,0x03FD,0x0126,0xFECF,0xFD1D,0xFBF3, + 0xFBB1,0xFCEC,0x0057,0x027B,0x016A,0xFD2D,0xF8C7,0xF80B, + 0xF876,0xFA61,0xFE0E,0x002D,0xFE0E,0xF93E,0xF487,0xF39B, + 0xF52D,0xF809,0xFBC5,0xFEC7,0xFEC0,0xFBBD,0xF6E1,0xF2DA, + 0xF27E,0xF57C,0xF8CD,0xFC2E,0xFCDC,0xF933,0xF429,0xF077, + 0xF149,0xF5BB,0xF9AE,0xF952,0xF68A,0xF2F4,0xF083,0xEF92, + 0xF07E,0xF305,0xF656,0xF7F6,0xF797,0xF52F,0xF1BA,0xEE95, + 0xEC9C,0xECDD,0xF06B,0xF4EB,0xF620,0xF3E5,0xF0B8,0xEED8, + 0xEE39,0xEEFD,0xF08F,0xF197,0xF14B,0xEE97,0xEB90,0xEB0C, + 0xED39,0xF036,0xF1B1,0xF165,0xF02F,0xEE7F,0xEC89,0xEB2E, + 0xEB1D,0xEBAE,0xED4F,0xEF73,0xF101,0xF0D6,0xEFD2,0xEDAC, + 0xEBD8,0xEBD6,0xEDE7,0xEF63,0xEE82,0xEF93,0xEE1A,0xECE9, + 0xEE91,0xF0E8,0xF1B2,0xF02E,0xEDEA,0xEC8F,0xEBF4,0xEC07, + 0xED9B,0xEF38,0xEFBE,0xEF9E,0xF053,0xF24F,0xF1B2,0xEE55, + 0xEBA2,0xEAA2,0xEC27,0xEE81,0xF05F,0xF182,0xF10A,0xEF13, + 0xED3C,0xED2A,0xEE4B,0xEE9B,0xEDAC,0xED56,0xEEC4,0xF0A6, + 0xF0B9,0xEF00,0xECA8,0xEBA8,0xEC8B,0xEECA,0xF1A6,0xF224, + 0xEF61,0xEBD3,0xEB1C,0xECB4,0xEF42,0xF150,0xF196,0xF082, + 0xEEBA,0xED92,0xEDEC,0xEFF3,0xF225,0xF236,0xF01F,0xEFED, + 0xF170,0xF3EE,0xF460,0xF292,0xF20D,0xF265,0xF3F9,0xF60A, + 0xF663,0xF429,0xF055,0xEDAD,0xEEB1,0xF280,0xF670,0xF7D1, + 0xF618,0xF343,0xF11B,0xF04F,0xF113,0xF28C,0xF4A1,0xF4FD, + 0xF384,0xF28E,0xF2B7,0xF3BB,0xF4A6,0xF50F,0xF4B4,0xF4A0, + 0xF4B7,0xF455,0xF325,0xF2A2,0xF377,0xF56A,0xF680,0xF663, + 0xF50F,0xF45B,0xF48D,0xF564,0xF68E,0xF761,0xF641,0xF41F, + 0xF475,0xF5DA,0xF6CB,0xF737,0xF764,0xF6D8,0xF5DE,0xF62C, + 0xF71B,0xF7DB,0xF7B3,0xF72D,0xF64C,0xF4DF,0xF486,0xF4D0, + 0xF52F,0xF663,0xF71D,0xF700,0xF6CB,0xF750,0xF753,0xF611, + 0xF557,0xF5D5,0xF752,0xF8B3,0xF8DB,0xF880,0xF72C,0xF5E4, + 0xF57F,0xF6D9,0xF933,0xFB01,0xFAE3,0xF8C8,0xF6C7,0xF5AE, + 0xF65D,0xF794,0xF978,0xFB4F,0xFBF4,0xFAF7,0xF979,0xF87B, + 0xF7F8,0xF856,0xF94A,0xFAEB,0xFC8D,0xFCAA,0xFB30,0xF979, + 0xF80E,0xF7EF,0xF8F3,0xFB67,0xFD25,0xFCFE,0xFA82,0xF828, + 0xF6E4,0xF848,0xFA74,0xFC37,0xFD61,0xFDA0,0xFBA4,0xFA22, + 0xF951,0xF993,0xF9FB,0xFC8C,0xFC7C,0xFC59,0xFDC4,0xFCCF, + 0xFC46,0xFAC5,0xFA0B,0xFA9B,0xFC12,0xFD1D,0xFDB2,0xFD0D, + 0xFC2A,0xFB3A,0xFB08,0xFC0D,0xFD1C,0xFD9A,0xFC55,0xFB15, + 0xFB10,0xFCCE,0xFE07,0xFDC9,0xFCD6,0xFC80,0xFC80,0xFC5E, + 0xFC7E,0xFC05,0xFB96,0xFABD,0xFAD4,0xFB00,0xFB33,0xFA4B, + 0xF8FF,0xF786,0xF6C9,0xF60E,0xF548,0xF496,0xF3C7,0xF357, + 0xF361,0xF3AC,0xF393,0xF38E,0xF343,0xF33F,0xF331,0xF33A, + 0xF384,0xF3B3,0xF361,0xF2EA,0xF290,0xF2E6,0xF33A,0xF35E, + 0xF31A,0xF28A,0xF1B3,0xEF69,0xEE51,0xEE90,0xEECF,0xEE2D, + 0xED95,0xED5B,0xED3C,0xECA0,0xEC39,0xEBDE,0xEBE0,0xEB45, + 0xEAD4,0xEA55,0xEA2B,0xEA05,0xEA67,0xEAB2,0xE9AC,0xE946, + 0xEA4A,0xEA3A,0xE9E0,0xE9D3,0xE9F8,0xE95F,0xE927,0xE958, + 0xE97F,0xE9F6,0xE9D9,0xE9E2,0xEA1E,0xEA17,0xE9DA,0xEA39, + 0xEA51,0xEA45,0xEACD,0xEAD2,0xEB0D,0xEB42,0xEC0D,0xED0C, + 0xEC34,0xEBDD,0xEBFC,0xEC77,0xED00,0xED5B,0xED98,0xEDE0, + 0xEEA3,0xEF7D,0xF01D,0xF113,0xF17D,0xF267,0xF28C,0xF2AB, + 0xF2FA,0xF328,0xF376,0xF3D8,0xF4C4,0xF51B,0xF509,0xF56D, + 0xF597,0xF656,0xF6DF,0xF7A4,0xF7E8,0xF801,0xF7D5,0xF860, + 0xF8A4,0xF91E,0xF9C0,0xF9C7,0xFA47,0xFA66,0xFAE5,0xFB34, + 0xFB7F,0xFC0D,0xFC55,0xFC76,0xFCF5,0xFD8A,0xFDB9,0xFDB9, + 0xFDFE,0xFE31,0xFE8F,0xFED6,0xFF1C,0xFFB4,0x0024,0x0059, + 0x00DA,0x014A,0x014A,0x01A7,0x020B,0x0286,0x0302,0x033E, + 0x0425,0x0450,0x04AE,0x04D7,0x04F4,0x04B3,0x0577,0x05DC, + 0x0651,0x06A5,0x0765,0x0702,0x06A1,0x084D,0x07DD,0x07E3, + 0x087A,0x086A,0x08F4,0x0998,0x09B4,0x09A0,0x09B3,0x09FB, + 0x09FC,0x0A00,0x0A40,0x0AB6,0x0AE1,0x0B56,0x0AE6,0x0B39, + 0x0B99,0x0BD2,0x0BE8,0x0BD5,0x0C28,0x0C4F,0x0C89,0x0CEC, + 0x0D04,0x0CFE,0x0D07,0x0CFF,0x0CE4,0x0D00,0x0D4B,0x0D65, + 0x0DA6,0x0D99,0x0D96,0x0DA9,0x0DD4,0x0DE6,0x0DB9,0x0D98, + 0x0E06,0x0E1D,0x0E36,0x0EB7,0x0EB7,0x0EB0,0x0EE0,0x0F03, + 0x0EBE,0x0EA0,0x0E75,0x0EA6,0x0EE0,0x0ED3,0x0EF1,0x0F2D, + 0x1004,0x1230,0x11ED,0x11BF,0x118D,0x10E2,0x10B8,0x10EF, + 0x10D8,0x10CF,0x10A6,0x1093,0x107B,0x10D9,0x10C4,0x10F7, + 0x10FB,0x1091,0x1069,0x1055,0x0FC7,0x1082,0x1156,0x10C5, + 0x1008,0x0FFA,0x0FE9,0x0FB7,0x0FA5,0x0FE3,0x0FD9,0x0F8A, + 0x0F99,0x0F9D,0x0F61,0x0F11,0x0F3C,0x0EDB,0x0ECC,0x0E89, + 0x0E6F,0x0E68,0x0E2A,0x0DCB,0x0DE6,0x0DB3,0x0C9A,0x0CCC, + 0x0DD2,0x0E59,0x0E03,0x0DA9,0x0D6B,0x0D22,0x0D60,0x0D60, + 0x0D01,0x0C58,0x0BAA,0x0B63,0x0B03,0x0A58,0x0AA0,0x0ADB, + 0x0A74,0x0A85,0x0AB5,0x0AAF,0x0A7D,0x0A5B,0x0A2B,0x0A38, + 0x0999,0x0974,0x09F8,0x09DC,0x0963,0x099F,0x0957,0x0958, + 0x097A,0x095C,0x093F,0x0916,0x08D9,0x08D6,0x08CF,0x0907, + 0x0905,0x08F3,0x08C9,0x089F,0x08BD,0x0809,0x0830,0x084F, + 0x0834,0x07EB,0x07A7,0x07CC,0x07B0,0x0780,0x0763,0x0715, + 0x077E,0x0729,0x06B3,0x069A,0x06C8,0x0695,0x0649,0x0667, + 0x0683,0x0640,0x0652,0x0637,0x068C,0x06C5,0x0651,0x061B, + 0x064D,0x05A4,0x065D,0x0813,0x05DF,0x0607,0x062A,0x0643, + 0x0638,0x0687,0x067B,0x0668,0x061E,0x060E,0x0664,0x066E, + 0x0634,0x05DC,0x0632,0x0679,0x068D,0x0646,0x063F,0x0620, + 0x05B4,0x0584,0x05D2,0x05C1,0x05B4,0x0592,0x05C8,0x05CD, + 0x05F7,0x05A6,0x0520,0x0513,0x0513,0x051C,0x0550,0x051A, + 0x04A0,0x0480,0x04AB,0x04D1,0x04EB,0x04FB,0x047B,0x0467, + 0x0434,0x03D3,0x040D,0x045A,0x0436,0x0412,0x0434,0x0477, + 0x046F,0x0433,0x043A,0x047A,0x0451,0x0442,0x0455,0x03FC, + 0x0434,0x040D,0x02B5,0x0118,0x01A6,0x01F8,0x01F5,0x01DE, + 0x01E6,0x01EA,0x01C2,0x0194,0x0160,0x0156,0x01A1,0x01F2, + 0x022B,0x0220,0x0223,0x021F,0x0287,0x0215,0x01A9,0x01F8, + 0x020C,0x01E2,0x01AA,0x0200,0x0264,0x0229,0x0267,0x0229, + 0x01FA,0x01ED,0x01E1,0x0231,0x021E,0x0223,0x0224,0x024A, + 0x0221,0x0233,0x01CD,0x01D2,0x0186,0x0126,0x0258,0x025C, + 0x0194,0x0179,0x0184,0x0187,0x0182,0x01B0,0x018C,0x01B7, + 0x01DC,0x01F7,0x027F,0x0291,0x029A,0x02D3,0x02D1,0x0316, + 0x02B4,0x0280,0x0241,0x025F,0x0271,0x0278,0x02DB,0x0283, + 0x0285,0x02AB,0x0263,0x01DB,0x01A6,0x01D3,0x0218,0x01DC, + 0x01C0,0x01CB,0x0190,0x017A,0x019B,0x0166,0x015C,0x011C, + 0x0123,0x012D,0x0129,0x00B9,0x00B5,0x00A7,0xFEFB,0xFEFC, + 0xFF11,0xFF09,0xFF65,0xFF81,0xFFC2,0xFFA0,0xFFDD,0x0065, + 0x00CE,0x0139,0x0177,0x0178,0x01BA,0x026E,0x0284,0x0208, + 0x0203,0x029C,0x033B,0x048F,0x05DA,0x06CB,0x06F0,0x06B1, + 0x06C0,0x06EF,0x06E6,0x0754,0x07B1,0x07BA,0x076D,0x073A, + 0x07A9,0x0851,0x090E,0x0965,0x098D,0x096C,0x08C8,0x0896, + 0x08B6,0x09F2,0x0AD7,0x0B5D,0x0BE7,0x0CA3,0x0C7B,0x0C05, + 0x0C0F,0x0D4D,0x0F0C,0x0FBE,0x0FB8,0x0FA0,0x103C,0x10A9, + 0x1061,0x115F,0x1356,0x14B1,0x14E0,0x142C,0x14CE,0x156D, + 0x1522,0x1485,0x150F,0x16B2,0x177B,0x17C7,0x17C0,0x180B, + 0x1676,0x178D,0x183A,0x173D,0x17B9,0x184E,0x1841,0x17D8, + 0x1774,0x1796,0x17A6,0x1775,0x16CB,0x1665,0x1640,0x1649, + 0x16EE,0x1745,0x1681,0x1557,0x153E,0x1549,0x158E,0x1541, + 0x14A5,0x1466,0x143C,0x1437,0x1386,0x12E2,0x1279,0x12B1, + 0x1285,0x125A,0x11AA,0x106A,0x0F92,0x0E96,0x0E1F,0x0D4C, + 0x0BF9,0x09DD,0x06B7,0x0319,0x015B,0x0174,0x0330,0x062A, + 0x0912,0x0A6A,0x099A,0x07C4,0x0673,0x05E2,0x0704,0x0953, + 0x0B48,0x0C86,0x0CC0,0x0CCA,0x0D18,0x0E5B,0x0FDC,0x0FF1, + 0x1082,0x1007,0x0E11,0x0B93,0x09BD,0x08BD,0x07FA,0x079D, + 0x0820,0x07B4,0x0593,0x0239,0xFEC0,0xFC73,0xFB7A,0xFB3A, + 0xFBB6,0xFBA1,0xFBA4,0xF9CE,0xF66E,0xF566,0xF666,0xF745, + 0xF7A9,0xF822,0xF89B,0xF8AA,0xF897,0xF8C2,0xF916,0xF950, + 0xFA56,0xFB48,0xFBEA,0xFCAC,0xFC42,0xFB1C,0xFA15,0xF950, + 0xF951,0xFB16,0xFB83,0xF9B3,0xF888,0xF6A8,0xF591,0xF4CA, + 0xF489,0xF49F,0xF478,0xF3B5,0xF1F7,0xF016,0xEE44,0xED6E, + 0xED08,0xEC97,0xEC9C,0xED8B,0xEDC3,0xECE5,0xEBDC,0xEC08, + 0xEC6C,0xECCF,0xEDDF,0xEF6B,0xF058,0xEFC0,0xEEE9,0xEED8, + 0xF045,0xF1D4,0xF33F,0xF3A4,0xF31C,0xF25C,0xF1AA,0xF146, + 0xF12E,0xF14A,0xF16C,0xF193,0xF18C,0xF0F2,0xEF7E,0xEDEB, + 0xECDB,0xEBEA,0xEC43,0xED64,0xED68,0xEC75,0xEB15,0xEA1C, + 0xEA09,0xEA44,0xEB08,0xEB80,0xEB85,0xEB4A,0xEBA9,0xEBDA, + 0xEB8D,0xEB83,0xEB6D,0xEC45,0xEE3F,0xEFED,0xF06E,0xF00E, + 0xEF4C,0xEF63,0xEF2B,0xF03F,0xF2A2,0xF3AF,0xF1CC,0xF1B5, + 0xF06A,0xEF80,0xF12D,0xF154,0xF179,0xF151,0xF132,0xF003, + 0xEF1F,0xEE51,0xEE07,0xEE02,0xEE5B,0xEF6E,0xF049,0xEFAA, + 0xEDAA,0xED0F,0xED7F,0xEEC3,0xEF91,0xEFCA,0xEF49,0xEFAC, + 0xEFF9,0xF00E,0xF0A8,0xF1E5,0xF2E4,0xF312,0xF32B,0xF425, + 0xF50B,0xF4E8,0xF3FC,0xF31D,0xF3A8,0xF48A,0xF578,0xF5FD, + 0xF679,0xF607,0xF3F5,0xF241,0xF249,0xF38B,0xF4ED,0xF51D, + 0xF40B,0xF307,0xF26A,0xF221,0xF20F,0xF26A,0xF2D6,0xF330, + 0xF342,0xF418,0xF43B,0xF3AC,0xF30C,0xF351,0xF41C,0xF3B3, + 0xF3A3,0xF474,0xF41D,0xF434,0xF457,0xF492,0xF509,0xF656, + 0xF77E,0xF774,0xF6F5,0xF615,0xF5F1,0xF674,0xF742,0xF784, + 0xF809,0xF8D5,0xF809,0xF6CE,0xF657,0xF702,0xF75D,0xF7C3, + 0xF827,0xF84B,0xF887,0xF811,0xF737,0xF6B8,0xF71A,0xF79E, + 0xF6F7,0xF3C0,0xEDA5,0xE4F7,0xDB5E,0xD16D,0xC9B4,0xC63A, + 0xCA6D,0xD5C4,0xE4B3,0xF232,0xF686,0xF42C,0xEE43,0xEB46, + 0xEE25,0xF794,0x0302,0x0D26,0x1357,0x16D8,0x1962,0x1CC1, + 0x2159,0x267B,0x2963,0x2947,0x2682,0x220E,0x1D8B,0x18BE, + 0x147F,0x11E4,0x111E,0x112D,0x0F51,0x094E,0xFFF7,0xF5BE, + 0xEE4B,0xEB58,0xEBB1,0xED9F,0xED68,0xEA96,0xE633,0xE415, + 0xE5CA,0xE997,0xED40,0xF021,0xF285,0xF4ED,0xF7CE,0xFB0A, + 0xFE87,0x026E,0x0716,0x0BB1,0x1009,0x13FA,0x1618,0x15B6, + 0x141C,0x1350,0x14FB,0x173B,0x17FE,0x161C,0x118E,0x0CF7, + 0x09BB,0x073A,0x04F1,0x0325,0x007B,0xFBD6,0xF785,0xF3E8, + 0xF136,0xEE96,0xECE8,0xEC3A,0xEC56,0xEC7D,0xED74,0xEBC1, + 0xEBC7,0xEE16,0xEFB9,0xF3A7,0xF7E8,0xFA9C,0xFC50,0xFDC5, + 0xFF9B,0x0230,0x05A2,0x091E,0x0C4B,0x0DE0,0x0E27,0x0DD2, + 0x0DA5,0x0DAF,0x0DBF,0x0DA3,0x0CD6,0x0BB0,0x0A3B,0x0766, + 0x03C6,0x0059,0xFDD8,0xFC41,0xFB34,0xF988,0xF6C6,0xF31C, + 0xF010,0xEEC4,0xEF88,0xF14D,0xF23F,0xF144,0xF066,0xF07A, + 0xF16E,0xF271,0xF4FF,0xF7E6,0xFAF9,0xFD06,0xFE8B,0x003C, + 0x01F1,0x0357,0x0470,0x0608,0x08C1,0x0B6D,0x0B96,0x09E1, + 0x080F,0x0757,0x07AA,0x085E,0x08AE,0x0998,0x07A7,0x03DB, + 0x010D,0xFFA7,0xFF26,0xFDCC,0xFB4C,0xF981,0xF8D7,0xF8A4, + 0xF7D0,0xF5EA,0xF3FD,0xF3F4,0xF5AA,0xF6FD,0xF7A1,0xF7F3, + 0xF7C4,0xF80C,0xF9D0,0xFBAB,0xFDA5,0x0023,0x0139,0x0175, + 0x0254,0x03B8,0x04FB,0x05A3,0x0658,0x06B7,0x06EB,0x066D, + 0x061C,0x04CF,0x03E5,0x02F7,0x0245,0x0242,0x01BB,0x00A2, + 0xFE6E,0xFC85,0xFA9B,0xF972,0xF970,0xF8C8,0xF8DD,0xF93E, + 0xF8E3,0xF7A5,0xF683,0xF663,0xF777,0xF85A,0xF95D,0xFA8E, + 0xFAB2,0xF933,0xF942,0xFB1C,0xFE2E,0x0017,0x00AC,0x00E4, + 0x017C,0x0237,0x024E,0x0266,0x0303,0x0375,0x0385,0x0389, + 0x03D1,0x03C1,0x02F1,0x012E,0xFF6F,0xFEEE,0xFF62,0xFFC6, + 0xFE75,0xFC6C,0xFA7F,0xF95B,0xF8E9,0xF957,0xF9BC,0xF9E9, + 0xF9CF,0xF911,0xF89E,0xF7D6,0xF5E7,0xF2DE,0xED63,0xE57B, + 0xDCD5,0xD46A,0xCDAD,0xCB64,0xCFFC,0xDC8B,0xED0A,0xFA57, + 0xFF3E,0xFB37,0xF443,0xF10B,0xF4CE,0xFFC0,0x0C78,0x1653, + 0x1C0C,0x1E77,0x1EBC,0x2113,0x2472,0x25B1,0x2776,0x2902, + 0x25DA,0x235E,0x1D8E,0x15D5,0x1063,0x0EC1,0x1001,0x1188, + 0x0EFA,0x0858,0xFDED,0xF31D,0xEC88,0xEB9A,0xEE99,0xF025, + 0xEEF1,0xEC34,0xEA1F,0xE95E,0xEA13,0xEBE9,0xEF58,0xF4AE, + 0xF9C0,0xFD6D,0xFF31,0x0002,0x0182,0x04EC,0x0B14,0x12D6, + 0x189E,0x1AF2,0x1994,0x15FA,0x14B1,0x15F9,0x186C,0x198C, + 0x191B,0x168F,0x127A,0x0EB0,0x0AE0,0x0705,0x038B,0x0072, + 0xFE3A,0xFC80,0xFA14,0xF5E3,0xF0D4,0xED09,0xEC76,0xEDAD, + 0xEFDB,0xF13B,0xF177,0xF065,0xEF8B,0xF093,0xF2AE,0xF52C, + 0xF928,0xFCA4,0xFFE6,0x0253,0x039C,0x0593,0x0817,0x0AF4, + 0x0D36,0x0EAE,0x1016,0x103D,0x0F6D,0x0DB1,0x0CF1,0x0C8A, + 0x0CB0,0x0B2F,0x07DD,0x05C1,0x03BF,0x00D1,0xFE10,0xFBCF, + 0xFA86,0xF8EF,0xF708,0xF51B,0xF3C1,0xF2C0,0xF223,0xF1D0, + 0xF1E0,0xF2CE,0xF3BF,0xF51C,0xF680,0xF87F,0xF99A,0xFB12, + 0xFD6E,0x0004,0x03C8,0x0556,0x0570,0x069A,0x080E,0x09B5, + 0x0B30,0x0C38,0x0CA4,0x0C61,0x0B77,0x0AFB,0x0B7C,0x0B6B, + 0x0ABC,0x096B,0x0758,0x0567,0x02A4,0x00B6,0xFF25,0xFEBE, + 0xFE20,0xFBF2,0xF937,0xF783,0xF733,0xF7D8,0xF863,0xF88C, + 0xF815,0xF810,0xF8FC,0xFA0F,0xFB8B,0xFC32,0xFD17,0xFEBA, + 0x01A0,0x04C2,0x0632,0x05E9,0x05B5,0x05CA,0x0750,0x08E7, + 0x0A9C,0x0B3D,0x0A84,0x08F5,0x07C0,0x06D9,0x06FF,0x06F0, + 0x05A8,0x044F,0x02DB,0x019A,0xFFE2,0xFE3B,0xFCF6,0xFCB1, + 0xFCEE,0xFCFB,0xFC12,0xFAA7,0xF930,0xF8C5,0xF8B4,0xF993, + 0xFB0A,0xFD0C,0xFDA6,0xFCD2,0xFCB2,0xFEC9,0x00FF,0x0139, + 0x03C8,0x052C,0x0511,0x0670,0x0653,0x05E2,0x061F,0x0661, + 0x0722,0x07E1,0x08C4,0x086F,0x05FC,0x03A9,0x02D5,0x03BC, + 0x04FE,0x0485,0x02E9,0x008D,0xFEC3,0xFDB9,0xFD96,0xFD8E, + 0xFD5D,0xFD2D,0xFC2A,0xFBEC,0xFC2E,0xFC96,0xFC21,0xFAAC, + 0xF842,0xF4B8,0xEF24,0xE7E2,0xDE93,0xD4A9,0xCE39,0xCE41, + 0xD5F2,0xE515,0xF532,0xFF53,0x00AB,0xFB2C,0xF577,0xF4E7, + 0xFB0E,0x0519,0x1036,0x18F3,0x1DE1,0x1F8E,0x20EB,0x2338, + 0x2626,0x2923,0x2ADB,0x2AF8,0x2993,0x2579,0x1D36,0x16D7, + 0x13C9,0x1450,0x1597,0x1458,0x0EB6,0x0552,0xFB33,0xF360, + 0xF04E,0xF0B4,0xF1BA,0xF1A8,0xEFE1,0xECA8,0xEA2F,0xE959, + 0xEAD7,0xEEF4,0xF38D,0xF692,0xF95D,0xFBF2,0xFD99,0xFF74, + 0x02EE,0x0806,0x0E3E,0x13A6,0x16EF,0x17A2,0x1651,0x14E7, + 0x14CE,0x15EC,0x17D4,0x1920,0x182B,0x1483,0x0ECA,0x0981, + 0x06D4,0x0418,0x0153,0xFFEB,0xFDC1,0xF950,0xF3FF,0xEFBC, + 0xED3F,0xEC8B,0xEC6B,0xED66,0xEDD2,0xECC6,0xEBB7,0xEB24, + 0xEB09,0xEC9F,0xEFE3,0xF408,0xF897,0xFBB2,0xFD01,0xFD45, + 0xFE78,0x0188,0x05CA,0x08FE,0x0B7F,0x0C28,0x0BE5,0x0B0B, + 0x0A3C,0x09C3,0x0A3A,0x0A00,0x0868,0x068F,0x048E,0x0265, + 0xFF45,0xFBBF,0xF908,0xF753,0xF689,0xF628,0xF3EF,0xF109, + 0xEE69,0xEC9D,0xECD8,0xEE69,0xEF9B,0xF024,0xF091,0xF150, + 0xF2FF,0xF42D,0xF5A9,0xF7BA,0xF99E,0xFBBC,0xFF1A,0x0241, + 0x03C7,0x032E,0x0306,0x041C,0x073F,0x09D7,0x0A9D,0x09A7, + 0x082F,0x06C8,0x054A,0x0574,0x05A1,0x040E,0x03FE,0x018B, + 0xFEAB,0xFD5E,0xFAAD,0xF875,0xF7F8,0xF814,0xF809,0xF810, + 0xF6F7,0xF520,0xF31D,0xF2D9,0xF4A4,0xF7DB,0xFA37,0xFA76, + 0xF989,0xF934,0xFA99,0xFCF1,0xFF8F,0x013C,0x02B0,0x03E0, + 0x0561,0x06A6,0x06F5,0x06A3,0x0605,0x061D,0x06FF,0x0802, + 0x0833,0x06F8,0x0484,0x02B1,0x0235,0x02DF,0x0310,0x01D4, + 0x005D,0xFDD5,0xFB80,0xFA20,0xF9B5,0xF9F0,0xF9D4,0xF9C3, + 0xF9D6,0xFA25,0xF99A,0xF8CE,0xF851,0xF965,0xFB75,0xFD33, + 0xFE1C,0xFE9D,0xFF4A,0x0062,0x00C3,0x00D5,0x008D,0x01CB, + 0x0386,0x041E,0x03EE,0x03F2,0x03F8,0x0378,0x02FA,0x02FB, + 0x03B2,0x0396,0x02CA,0x01EF,0x00EE,0xFF85,0xFE7A,0xFDF3, + 0xFE35,0xFD48,0xFCA6,0xFCE4,0xFC84,0xFB68,0xFACA,0xFA5C, + 0xFAAD,0xFBDD,0xFB82,0xF84F,0xF239,0xEA83,0xE24B,0xDA1D, + 0xD1F7,0xCDE1,0xD0B6,0xDAD4,0xE8F9,0xF696,0xFE86,0xFF11, + 0xF9B1,0xF5A2,0xF83A,0xFF24,0x0A0C,0x140E,0x1A5F,0x1D93, + 0x1FAF,0x2242,0x2602,0x2A1F,0x2D03,0x2CF2,0x2A24,0x25AF, + 0x2076,0x1BA1,0x17DB,0x15ED,0x14C8,0x13B5,0x102D,0x09FC, + 0x019B,0xF93A,0xF341,0xEFBB,0xEF05,0xEF2C,0xEF6C,0xEE41, + 0xEBC7,0xE9DA,0xE9AD,0xEC60,0xF061,0xF496,0xF826,0xFA94, + 0xFC9A,0xFE68,0x00F4,0x059E,0x0B9D,0x11A1,0x157A,0x1711, + 0x169D,0x15CA,0x153A,0x161B,0x17CA,0x18FC,0x186D,0x159E, + 0x117C,0x0D7B,0x0A7B,0x084A,0x066F,0x03F4,0x00C1,0xFC9A, + 0xF879,0xF46D,0xF141,0xEF58,0xEE7C,0xEF04,0xEF60,0xEF02, + 0xEDFB,0xED21,0xED2D,0xEE90,0xF1A5,0xF745,0xFA8B,0xFCE0, + 0xFF9F,0xFE9D,0x009B,0x0426,0x08A8,0x0C98,0x0F5F,0x1067, + 0x0FC9,0x0F74,0x0F73,0x0F4D,0x0F28,0x0F48,0x0E95,0x0D5B, + 0x0B1F,0x074D,0x035C,0x0099,0xFEB6,0xFDDC,0xFD15,0xFB8F, + 0xF8D4,0xF4F2,0xF191,0xF040,0xF0CE,0xF235,0xF3B8,0xF470, + 0xF40F,0xF333,0xF31B,0xF49A,0xF798,0xFA82,0xFD93,0x0022, + 0x01B8,0x0293,0x02F4,0x0422,0x062C,0x0870,0x0A81,0x0C0C, + 0x0C4C,0x0B47,0x0957,0x07B2,0x0759,0x0805,0x08A7,0x0731, + 0x045D,0x0113,0xFEEB,0xFDF4,0xFF36,0xFE18,0xFCC4,0xFB6C, + 0xF9E4,0xF8C0,0xF69B,0xF4E4,0xF3DA,0xF51C,0xF700,0xF90E, + 0xFA9E,0xF9DD,0xF859,0xF7FC,0xF978,0xFC67,0xFFA6,0x0151, + 0x0242,0x02C6,0x0290,0x02A3,0x03FB,0x05DB,0x067A,0x06FE, + 0x06E6,0x0640,0x0577,0x0474,0x034E,0x027B,0x01C9,0x01BD, + 0x015B,0x0087,0xFDE8,0xFB47,0xF97D,0xF8AB,0xF89E,0xF975, + 0xF8E4,0xF6BB,0xF5F5,0xF6F5,0xF79E,0xF88C,0xF92F,0xF94F, + 0xF9BA,0xFA66,0xFBD2,0xFCB9,0xFC6C,0xFBDA,0xFC80,0xFE1E, + 0xFFD1,0x0173,0x01CE,0x015E,0x0102,0x0154,0x0232,0x0354, + 0x03B9,0x02A9,0x0182,0x0134,0x011E,0x0095,0xFF39,0xFE0F, + 0xFDB2,0xFDD3,0xFCEE,0xFBE4,0xFAFF,0xF9A5,0xF837,0xF87E, + 0xF93F,0xF97A,0xF920,0xF841,0xF7DC,0xF763,0xF5EF,0xF340, + 0xEE77,0xE734,0xDDCE,0xD388,0xCA77,0xC5DA,0xCA14,0xD86B, + 0xECA0,0xFE77,0x06B5,0x0373,0xF971,0xF0C7,0xEF4A,0xF61F, + 0x0297,0x0FC1,0x1A1D,0x2003,0x23AF,0x26A7,0x280E,0x2846, + 0x269D,0x2464,0x225A,0x1F29,0x193C,0x1330,0x1013,0x0DE8, + 0x11FF,0x14DB,0x13A0,0x0C6E,0xFF80,0xF1A2,0xE795,0xE3E6, + 0xE69A,0xEBE2,0xEFB2,0xF11A,0xEF8F,0xEDCA,0xEBDF,0xEBB7, + 0xEDA8,0xF0F1,0xF557,0xF979,0xFCC7,0xFF4E,0x0256,0x06AE, + 0x0C92,0x137C,0x190E,0x1AC5,0x1925,0x1567,0x11D6,0x10F8, + 0x130E,0x1613,0x17ED,0x1804,0x1595,0x1150,0x0B13,0x0495, + 0xFF62,0xFCD4,0xFB93,0xFA83,0xF822,0xF51E,0xF13A,0xEE07, + 0xED0D,0xEDB1,0xEFA7,0xF097,0xEFAA,0xED7E,0xEC7D,0xEDB9, + 0xF0EB,0xF565,0xFA37,0xFE3D,0x0166,0x027D,0x0283,0x0444, + 0x05B8,0x06E9,0x0941,0x0C41,0x0F4E,0x10CB,0x0FB6,0x0DBE, + 0x0C59,0x0C32,0x0BD4,0x0B68,0x0941,0x05BA,0x022F,0xFFD0, + 0xFD89,0xFB35,0xFA3F,0xF8B9,0xF68F,0xF4CD,0xF43E,0xF328, + 0xF15D,0xEF55,0xEE51,0xEFFB,0xF343,0xF57E,0xF700,0xF7E7, + 0xF8F3,0xF9DA,0xFBFE,0xFE66,0x0142,0x034F,0x03FF,0x0508, + 0x073A,0x0A7F,0x0A95,0x0970,0x09E7,0x0B1B,0x0BC9,0x0AFC, + 0x0961,0x075D,0x057C,0x03E0,0x03F0,0x0399,0x0228,0x00FB, + 0xFEED,0xFBEB,0xFA36,0xF92A,0xF7FD,0xF724,0xF580,0xF503, + 0xF54B,0xF5D1,0xF65F,0xF6D9,0xF77A,0xF88B,0xF9CA,0xFB1B, + 0xFC92,0xFE00,0xFECE,0xFFFF,0x01A4,0x0361,0x045B,0x04FD, + 0x05B4,0x0640,0x075D,0x07FB,0x0877,0x0851,0x0753,0x05F5, + 0x0484,0x0455,0x043E,0x03DB,0x024F,0xFF59,0xFD46,0xFCB2, + 0xFC4F,0xFB7E,0xFA2C,0xF940,0xF888,0xF7B0,0xF785,0xF75D, + 0xF846,0xF90D,0xF942,0xF959,0xFA3B,0xFB10,0xFC79,0xFD46, + 0xFE02,0xFEBE,0xFFD1,0x012A,0x032A,0x03DF,0x02E6,0x0589, + 0x05C2,0x04C4,0x0559,0x058E,0x0517,0x047C,0x036A,0x02D8, + 0x02B6,0x0228,0x0186,0x0125,0x0031,0xFE83,0xFC9A,0xFB0A, + 0xFB61,0xFC04,0xFC69,0xFB98,0xFA39,0xF98E,0xFA3A,0xFABC, + 0xFB62,0xFB22,0xF8F5,0xF4CB,0xEE11,0xE61D,0xDC7A,0xD271, + 0xC9EE,0xC810,0xD0B6,0xE3B5,0xF950,0x08C9,0x0CF9,0x05B1, + 0xF98D,0xF086,0xF025,0xF835,0x05C5,0x1320,0x1E09,0x25C3, + 0x2B73,0x2EC2,0x2ED7,0x2B9D,0x2651,0x20CE,0x1C38,0x1767, + 0x12F1,0x10D8,0x11E2,0x172F,0x1C88,0x1C39,0x15F5,0x0912, + 0xF8D6,0xEA57,0xE251,0xE1DE,0xE6C9,0xEE08,0xF2C2,0xF4D9, + 0xF4FD,0xF3BB,0xF10F,0xEE0A,0xEC36,0xED01,0xF04C,0xF4F5, + 0xFBB8,0x018A,0x06D6,0x0D29,0x1430,0x1992,0x1C33,0x19B0, + 0x12EF,0x0C62,0x0A3D,0x0D61,0x135F,0x1913,0x1BFA,0x1B19, + 0x165F,0x0F52,0x07C3,0x01BD,0xFCB2,0xF809,0xF554,0xF4DD, + 0xF4C3,0xF38F,0xF262,0xF192,0xF173,0xF115,0xF005,0xECF8, + 0xE969,0xE6E5,0xE736,0xEB2C,0xF21B,0xF968,0xFEC6,0x0123, + 0x0182,0x01B3,0x010E,0x0140,0x0220,0x03F8,0x0782,0x0B84, + 0x0ED7,0x1018,0x0F8D,0x0E28,0x0CB6,0x0AC3,0x08E1,0x0587, + 0x00FC,0xFC9F,0xFA3A,0xFA40,0xFBF3,0xFD56,0xFC34,0xF88C, + 0xF3F4,0xF003,0xECD4,0xEA6C,0xE988,0xEA89,0xECE4,0xEF8B, + 0xF28A,0xF4D4,0xF60D,0xF5E6,0xF5CC,0xF729,0xF939,0xFB83, + 0xFD08,0xFE48,0x0035,0x0317,0x0647,0x08AD,0x09FB,0x0A01, + 0x0904,0x073E,0x0417,0x024B,0x01AA,0x01F4,0x02DE,0x03A7, + 0x02CA,0x0177,0xFF0D,0xFB47,0xF784,0xF7C1,0xF507,0xF39D, + 0xF3B3,0xF319,0xF3D3,0xF487,0xF57B,0xF63A,0xF69D,0xF688, + 0xF68A,0xF654,0xF754,0xF8A1,0xF9B6,0xFB5C,0xFDD9,0x0065, + 0x0353,0x05D3,0x06CE,0x0628,0x040F,0x0274,0x0213,0x042A, + 0x0652,0x077F,0x0681,0x052B,0x0373,0x02CA,0x0258,0x0197, + 0xFFDC,0xFD5C,0xFB55,0xFAC6,0xFA7D,0xFA87,0xF9F4,0xF9A5, + 0xF973,0xF900,0xF95A,0xF9BE,0xF933,0xF787,0xF698,0xF6FB, + 0xF8FC,0xFC75,0xFEDE,0x000C,0xFFA7,0xFF5F,0xFF5C,0x0095, + 0x02CA,0x0448,0x04EB,0x04E7,0x0472,0x033C,0x0349,0x0442, + 0x03CA,0x0311,0x02A2,0x02E9,0x0295,0x01A8,0x0014,0xFE00, + 0xFD63,0xFDD7,0xFE89,0xFEB3,0xFD1C,0xFABF,0xF8EB,0xF8FF, + 0xF96E,0xFAB6,0xFBD8,0xFB1D,0xF8DD,0xF68F,0xF388,0xEEFA, + 0xE8E8,0xE1CD,0xDA52,0xD594,0xD72D,0xE097,0xEF78,0xFE15, + 0x0732,0x0883,0x0301,0xFA9C,0xF47B,0xF4D4,0xFC93,0x07C1, + 0x13C2,0x1DEE,0x220B,0x2371,0x2362,0x217D,0x1E67,0x1B8B, + 0x1838,0x151B,0x11EF,0x0F08,0x0E5E,0x0FFE,0x12B8,0x1507, + 0x137D,0x0CFD,0x02F4,0xF742,0xEDCE,0xE9BB,0xEAF1,0xEF4D, + 0xF4E2,0xF87C,0xFA2F,0xF917,0xF624,0xF41C,0xF347,0xF329, + 0xF3AE,0xF5C9,0xF9B6,0xFF09,0x053B,0x0B0D,0x1064,0x1393, + 0x14F5,0x142E,0x115D,0x0E6C,0x0C4F,0x0C2C,0x0E27,0x10E1, + 0x13AE,0x15A5,0x152C,0x11AC,0x0B4E,0x0465,0xFE54,0xFA3D, + 0xF8AA,0xF87C,0xF8A4,0xF857,0xF7A1,0xF680,0xF61B,0xF615, + 0xF51F,0xF2B3,0xEFD6,0xEDEC,0xEE52,0xF0F5,0xF4CA,0xF93D, + 0xFE39,0x025F,0x03DC,0x0410,0x0467,0x0246,0x01F8,0x0471, + 0x05A0,0x08D7,0x0BC8,0x0DDE,0x0EBA,0x0DFF,0x0C4E,0x0AAD, + 0x086B,0x0613,0x03A1,0x0141,0xFF5D,0xFE74,0xFD9C,0xFD59, + 0xFDC2,0xFD60,0xFBBB,0xF8B2,0xF523,0xF24A,0xF0C4,0xF13A, + 0xF2E9,0xF580,0xF7BC,0xF91B,0xFA16,0xFB1D,0xFB3E,0xFB15, + 0xFBA6,0xFCC8,0xFE84,0x005D,0x01F8,0x0342,0x04E1,0x0673, + 0x07A3,0x081D,0x0859,0x07C5,0x0611,0x044B,0x038B,0x034F, + 0x03EA,0x03A2,0x025D,0x0136,0x0025,0xFE7E,0xFC1B,0xF9C0, + 0xF7CF,0xF70F,0xF802,0xFA37,0xFA2D,0xF994,0xF907,0xF8E9, + 0xF8B3,0xF91C,0xF981,0xFA4F,0xFAD4,0xFB15,0xFB99,0xFC9B, + 0xFEB8,0x0159,0x0263,0x0370,0x03F0,0x0378,0x0283,0x02C5, + 0x041E,0x042E,0x03EB,0x04A2,0x054F,0x04B0,0x0327,0x01B5, + 0x00C3,0x0015,0xFF9A,0xFECC,0xFDB8,0xFC68,0xFB89,0xF9FB, + 0xF99D,0xFA47,0xFAFF,0xFB14,0xF9B1,0xF87D,0xF7ED,0xF7EA, + 0xF783,0xF82B,0xFAB7,0xFD12,0xFE62,0xFE66,0xFDC4,0xFD38, + 0xFDB0,0xFEC4,0x007B,0x01D7,0x02C8,0x032F,0x01B9,0xFF72, + 0x0050,0x01B2,0x0228,0x01F4,0x0104,0xFFD6,0xFE98,0xFE82, + 0xFF0F,0xFEDB,0xFD7A,0xFC08,0xFBE0,0xFC8E,0xFCA5,0xFBA2, + 0xF9F7,0xF927,0xF8DF,0xF94F,0xF97B,0xF997,0xF9A7,0xF943, + 0xF86E,0xF7F7,0xF7F3,0xF7F7,0xF6C3,0xF455,0xF1BA,0xF06B, + 0xF20E,0xF59C,0xFB5A,0x0053,0x031B,0x02C7,0x006C,0xFDAA, + 0xFBE5,0xFC60,0xFF48,0x0287,0x053E,0x0720,0x0877,0x0848, + 0x0824,0x073E,0x0576,0x04A0,0x03A8,0x026E,0x0181,0x0097, + 0xFFD2,0x001C,0x0096,0x00AF,0x027C,0x025F,0xFDAC,0xFA7B, + 0xF6F5,0xF590,0xF63D,0xF937,0xFBCD,0xFD99,0xFDB6,0xFD50, + 0xFC63,0xFBB7,0xFBB2,0xFC2D,0xFDB4,0xFF23,0x0058,0x0059, + 0x00A6,0x0205,0x0406,0x05FE,0x0733,0x06A9,0x048E,0x029F, + 0x0169,0x01F4,0x02FA,0x0362,0x0325,0x0368,0x0407,0x039B, + 0x01EB,0xFF1D,0xFCEA,0xFBD2,0xFBE5,0xFD1F,0xFDB2,0xFD40, + 0xFBBA,0xFA5E,0xFA08,0xFADC,0xFB53,0xFB4C,0xF9FE,0xF93A, + 0xF93D,0xF8F2,0xF91B,0xF920,0xF974,0xF957,0xF90F,0xF89C, + 0xF7E6,0xF735,0xF657,0xF599,0xF53D,0xF5BE,0xF7DC,0xF866, + 0xF7CE,0xF73A,0xF6CA,0xF6CC,0xF682,0xF5CC,0xF4F7,0xF42A, + 0xF388,0xF329,0xF384,0xF390,0xF336,0xF29B,0xF299,0xF13B, + 0xF03B,0xF0DC,0xF0DA,0xF00B,0xEF3B,0xEF12,0xEF50,0xEE2E, + 0xEE05,0xEDCC,0xED6C,0xECB2,0xEC75,0xEC96,0xEC16,0xEB79, + 0xEB33,0xEB3C,0xEB26,0xEB2C,0xEAE0,0xEA9D,0xEA53,0xEA1C, + 0xEAD8,0xEA96,0xE932,0xE8C5,0xE8F5,0xE906,0xE92F,0xE919, + 0xE8BB,0xE8DC,0xE939,0xE98B,0xE9B7,0xEA0F,0xEAE1,0xEB30, + 0xEB1C,0xEB9A,0xEBB7,0xEBBE,0xEBD3,0xEC42,0xEC23,0xEC46, + 0xECAA,0xED2C,0xED4D,0xED4C,0xEDF8,0xEE81,0xEF08,0xEF5A, + 0xEF80,0xEFCE,0xF00C,0xF0A6,0xF0F2,0xF159,0xF161,0xF1A2, + 0xF225,0xF23C,0xF29E,0xF30D,0xF349,0xF3B1,0xF3EB,0xF3FB, + 0xF472,0xF51C,0xF556,0xF5B6,0xF5F9,0xF684,0xF709,0xF758, + 0xF773,0xF7DB,0xF863,0xF904,0xF975,0xFA23,0xFAA8,0xFB2B, + 0xFB9C,0xFC17,0xFC11,0xFD17,0xFD48,0xFD87,0xFD7D,0xFDDD, + 0xFEAF,0xFF58,0xFF4A,0x004A,0x003D,0xFF01,0x0134,0x014E, + 0x00C0,0x017D,0x0200,0x0229,0x026B,0x02D6,0x0381,0x0368, + 0x0394,0x03C0,0x0437,0x044E,0x04AC,0x0508,0x0569,0x058A, + 0x05D6,0x0601,0x0646,0x06C5,0x06D9,0x06E8,0x0711,0x0750, + 0x0786,0x07E2,0x0844,0x08A0,0x08EC,0x095A,0x0934,0x0960, + 0x093A,0x0965,0x0939,0x095F,0x0996,0x09F7,0x0A4D,0x0A9E, + 0x0A9C,0x0A54,0x0A6D,0x0A77,0x0A56,0x0A67,0x0AC4,0x0AE2, + 0x0AB0,0x0AC0,0x0B20,0x0AF7,0x0B3F,0x0B69,0x0B9D,0x0BD6, + 0x0BB1,0x0C18,0x0DAC,0x0EC1,0x0E71,0x0E69,0x0E6D,0x0E29, + 0x0DE3,0x0DDD,0x0E25,0x0E08,0x0E0B,0x0E63,0x0E4B,0x0E35, + 0x0E60,0x0E73,0x0EB1,0x0E7C,0x0E2E,0x0DAF,0x0DBF,0x0EAF, + 0x0E7E,0x0DBA,0x0D70,0x0E2F,0x0E38,0x0E11,0x0E00,0x0DC8, + 0x0DE7,0x0E00,0x0D54,0x0D51,0x0D7F,0x0DC0,0x0D7B,0x0D5D, + 0x0D90,0x0D38,0x0D5F,0x0D5A,0x0D53,0x0D79,0x0D74,0x0CF7, + 0x0BCF,0x0CBD,0x0D89,0x0D7D,0x0D54,0x0D57,0x0D43,0x0D68, + 0x0D44,0x0D04,0x0C89,0x0BC8,0x0B55,0x0B04,0x0A30,0x0A18, + 0x0A3E,0x0A66,0x0A82,0x0A48,0x09D5,0x0A2D,0x0A3A,0x0A42, + 0x0A00,0x0A2D,0x09C7,0x0964,0x0940,0x0914,0x08F8,0x08E2, + 0x08D9,0x0927,0x08FA,0x08E9,0x08B7,0x08EA,0x08E7,0x0916, + 0x0909,0x088B,0x088A,0x08C1,0x08CE,0x089F,0x085E,0x085F, + 0x082D,0x0805,0x083D,0x0864,0x080E,0x07C5,0x07BA,0x07A0, + 0x07A3,0x07B8,0x07ED,0x0788,0x0713,0x06F1,0x0713,0x0642, + 0x06CE,0x0708,0x0716,0x0767,0x06EA,0x06DE,0x078D,0x07C3, + 0x0765,0x078D,0x0719,0x0650,0x0834,0x0728,0x0644,0x0743, + 0x06B6,0x06AC,0x06D6,0x06DD,0x06F6,0x0703,0x06D5,0x0704, + 0x06F4,0x0697,0x067F,0x0703,0x06D9,0x0695,0x06A6,0x0688, + 0x0673,0x0620,0x0643,0x0624,0x062C,0x05FB,0x05B3,0x0592, + 0x05AE,0x05F3,0x05F4,0x0617,0x05ED,0x05E3,0x0522,0x053D, + 0x04E1,0x049E,0x04B9,0x0490,0x0480,0x045C,0x0486,0x0447, + 0x040B,0x03E8,0x0440,0x0428,0x0460,0x03FB,0x0415,0x040B, + 0x03EF,0x0405,0x0417,0x040C,0x03EA,0x03B8,0x03F6,0x03D5, + 0x034C,0x0364,0x0393,0x0287,0x00AB,0x00A2,0x0111,0x012D, + 0x00DF,0x009C,0x00C8,0x00E7,0x00C1,0x00F4,0x00E0,0x0089, + 0x0080,0xFFD1,0xFFBC,0xFF67,0xFF2B,0xFF07,0xFF30,0xFFEE, + 0x00A4,0x010C,0x0220,0x0295,0x027F,0x0217,0x02D3,0x0578, + 0x07F4,0x08F5,0x08D5,0x08C8,0x089D,0x0861,0x084D,0x0881, + 0x0880,0x07F2,0x07A9,0x0755,0x075F,0x0741,0x0796,0x0869, + 0x0984,0x09D7,0x09A4,0x09E6,0x09BE,0x0928,0x0909,0x0ADC, + 0x0CDC,0x0E10,0x0CF8,0x0AB9,0x0944,0x093F,0x0A95,0x0D1C, + 0x0FAE,0x1127,0x10BE,0x1002,0x1269,0x12DC,0x1431,0x1569, + 0x157B,0x16F5,0x16E3,0x14F2,0x1394,0x13E3,0x14BB,0x1551, + 0x16E3,0x189B,0x176C,0x148C,0x1511,0x1640,0x16E2,0x1722, + 0x182F,0x190E,0x17CF,0x1703,0x16C6,0x1738,0x173D,0x1667, + 0x14B4,0x1479,0x15D4,0x1513,0x1237,0x11A9,0x13B3,0x14C6, + 0x12A7,0x10DD,0x129C,0x1333,0x1100,0x0F6F,0x10CA,0x1301, + 0x1157,0x0CDF,0x0CAE,0x0E7B,0x0DC3,0x0AEB,0x0965,0x0989, + 0x08F3,0x05A7,0x02D5,0x02BD,0x03BB,0x0325,0x01DC,0x00D0, + 0x018A,0x032A,0x035F,0x038D,0x045F,0x065B,0x074B,0x075F, + 0x075F,0x0772,0x0693,0x0581,0x0578,0x06A0,0x078E,0x076F, + 0x0662,0x0553,0x0595,0x0703,0x081F,0x082B,0x07BB,0x075C, + 0x06F4,0x0658,0x05BF,0x0519,0x044E,0x0348,0x024A,0x010E, + 0xFF48,0xFD5E,0xFBB3,0xFAB5,0xFACC,0xFA1A,0xF8CC,0xF700, + 0xF61D,0xF5FF,0xF653,0xF5F3,0xF55C,0xF531,0xF497,0xF413, + 0xF369,0xF318,0xF2CD,0xF1A6,0xF0F3,0xF1C3,0xF21B,0xF2A9, + 0xF257,0xF1DC,0xF18E,0xF242,0xF229,0xF436,0xF648,0xF542, + 0xF5A8,0xF567,0xF604,0xF73A,0xF7AB,0xF6A5,0xF67A,0xF662, + 0xF679,0xF73E,0xF72B,0xF663,0xF5B7,0xF529,0xF55C,0xF638, + 0xF679,0xF5AA,0xF42C,0xF363,0xF3EB,0xF4A8,0xF44F,0xF2E2, + 0xF19F,0xF1BB,0xF213,0xF19B,0xF088,0xEF43,0xEEFB,0xEE74, + 0xEE75,0xEEB5,0xEEF0,0xEE8D,0xEDE1,0xEDA3,0xEE0A,0xEF02, + 0xEEFC,0xEE72,0xED3E,0xECD3,0xEFBF,0xF169,0xEEE9,0xEE95, + 0xF222,0xF296,0xEF28,0xEDF9,0xF104,0xF51C,0xF585,0xF080, + 0xEE02,0xF32A,0xF8B9,0xF652,0xEFC9,0xEF5F,0xF3B3,0xF63B, + 0xF2A4,0xF01C,0xF368,0xF6F7,0xF3A9,0xEE4C,0xF04E,0xF5F2, + 0xF5B6,0xEFD7,0xEEE8,0xF53E,0xF7A4,0xF220,0xEC59,0xEE0B, + 0xF313,0xF5B6,0xF2D4,0xEE9D,0xEF83,0xF0D4,0xEF7F,0xEFD9, + 0xF0EF,0xF14B,0xF04E,0xF0D7,0xF208,0xF01D,0xEE43,0xF0A7, + 0xF386,0xF338,0xF222,0xF122,0xF146,0xF3EF,0xF6AB,0xF46A, + 0xF085,0xF1C2,0xF634,0xF7D9,0xF472,0xF31E,0xF569,0xF775, + 0xF501,0xF491,0xF677,0xF789,0xF888,0xF96D,0xF8A2,0xF80C, + 0xF8CD,0xF8A1,0xF712,0xF570,0xF918,0xFC68,0xF8A3,0xF47C, + 0xF5C3,0xF961,0xF8E7,0xF5F0,0xF6F2,0xFB96,0xFB0B,0xF54C, + 0xF34A,0xF702,0xFA08,0xF653,0xF270,0xF7BD,0xFCE3,0xF8C8, + 0xF25B,0xF20D,0xF8B8,0xFC8F,0xF796,0xF1B2,0xF436,0xFB6A, + 0xFB1B,0xF41F,0xF3C6,0xFB4B,0xFC89,0xF775,0xF6EE,0xFA6B, + 0xFA95,0xF741,0xF66C,0xF9D7,0xFC28,0xF954,0xF522,0xF548, + 0xF83E,0xF7CC,0xF389,0xEF78,0xEEA8,0xED4E,0xEA79,0xE87A, + 0xEA4B,0xECEA,0xECE6,0xEB81,0xED5C,0xF169,0xF2B1,0xF51C, + 0xF6B6,0xFA73,0xFEA0,0xFF54,0xFDEC,0xFDF9,0x004E,0x020C, + 0x0261,0x028D,0x0340,0x0394,0x029A,0x0256,0x0409,0x06A3, + 0x0834,0x0800,0x0842,0x0951,0x09F8,0x09D7,0x0978,0x094C, + 0x0949,0x08BD,0x06C8,0x0416,0x015A,0xFE58,0xFC20,0xFBAA, + 0xFB96,0xFADD,0xF8A1,0xF530,0xF327,0xF473,0xF66B,0xF6F6, + 0xF693,0xF533,0xF49B,0xF4A8,0xF4F1,0xF4B7,0xF461,0xF417, + 0xF35E,0xF3AE,0xF4C0,0xF52F,0xF416,0xF365,0xF449,0xF6FF, + 0xFA93,0xFC6F,0xFC60,0xFD66,0xFF67,0x00B5,0x03BD,0x0547, + 0x0579,0x04EE,0x0484,0x0489,0x0489,0x048B,0x04EB,0x04C3, + 0x0476,0x049D,0x049F,0x038F,0x01B0,0x0118,0x01C1,0x040D, + 0x04FD,0x02E0,0xFFE9,0xFEC7,0xFF23,0xFE88,0xFE03,0xFD0A, + 0xFBEB,0xFA81,0xF89C,0xF728,0xF749,0xF778,0xF701,0xF611, + 0xF635,0xF744,0xF787,0xF72A,0xF644,0xF64F,0xF7A7,0xF7A1, + 0xF69C,0xF82F,0xFCE0,0xFDAC,0xF81B,0xF4E1,0xFD48,0x06ED, + 0x028F,0xF838,0xF763,0xFF72,0x057F,0xFF12,0xFA32,0x01A6, + 0x091C,0xFFEC,0xF7C3,0x0175,0x0ACF,0x0441,0xF9BD,0xFEC0, + 0x095E,0x0492,0xF827,0xFB2B,0x0833,0x07FF,0xFAE6,0xF58B, + 0xFD86,0x059C,0xFF85,0xF6B2,0xFB88,0x034C,0x007D,0xF669, + 0xF546,0xFCDF,0x0036,0xFA39,0xF32F,0xF6CE,0xFEBC,0xFD53, + 0xF838,0xF813,0xFC46,0xFE0D,0xF8AF,0xF510,0xFC48,0x03CA, + 0xFCEF,0xF52C,0xFA4F,0x017C,0x00A9,0xFD09,0xFF7A,0x0354, + 0x0104,0xFCD9,0xFD17,0x003C,0x0426,0x05FA,0x0101,0xFFAD, + 0x030B,0x0311,0x02E0,0x017A,0x00F8,0x072D,0x04DF,0x00DF, + 0x027D,0x037D,0x0211,0xFFE9,0x007A,0x01AC,0x0175,0x0014, + 0xFC2A,0xFCEE,0x02EA,0x03E4,0xFEE0,0xFC1E,0xFF0B,0x01B3, + 0xFEA3,0xFB06,0xFAF0,0x015A,0x037B,0xFDB4,0xF99F,0xFC86, + 0x0357,0x03E8,0xFA0B,0xF573,0x014C,0x0AF4,0x0131,0xF4AF, + 0xFCCC,0x0B48,0x0760,0xF7DA,0xF63E,0x07FE,0x114B,0x0224, + 0xF454,0xFCA6,0x0A6C,0x0652,0xF5D5,0xF3CF,0xFF03,0x00C0, + 0xF23F,0xE864,0xF0F5,0xFBC2,0xF815,0xEE9F,0xF024,0xFAB7, + 0xFD6E,0xF6A3,0xF5F2,0x0043,0x0869,0x032C,0xFD00,0x0085, + 0x07F9,0x08AB,0x02A5,0x0179,0x07CE,0x0CCE,0x095D,0x044B, + 0x059C,0x0B6B,0x0CF7,0x0B0A,0x0BC5,0x0FD6,0x12B9,0x0FC0, + 0x0CA6,0x0F0A,0x1212,0x0FAF,0x0B1C,0x0A09,0x0BCA,0x0A65, + 0x0584,0x0184,0x0128,0x02A8,0x0158,0xFF52,0xFE90,0xFEF7, + 0xFD8F,0xFBC1,0xFBC7,0xFE0B,0xFF05,0xFD09,0xFB41,0xFB74, + 0xFD76,0xFCE1,0xF98B,0xF890,0xFA31,0xFB67,0xFA66,0xF934, + 0xFA91,0xFCFF,0xFDF1,0xFEC4,0x00F0,0x03E5,0x0525,0x048E, + 0x04C9,0x0708,0x09BB,0x09DD,0x0855,0x07C4,0x087F,0x0933, + 0x084A,0x078F,0x0808,0x0868,0x0721,0x05FC,0x0659,0x07AB, + 0x06F6,0x0549,0x04E9,0x0572,0x0628,0x04A9,0x021F,0x00CD, + 0x0085,0x001C,0xFF9E,0xFE41,0xFD6C,0xFC4B,0xFA9C,0xF996, + 0xFA10,0xFB2E,0xFAD1,0xF9A0,0xF8DC,0xF8E6,0xF999,0xF995, + 0xF7C2,0xF846,0xFBBD,0xFD60,0xFCFE,0xFC27,0xFBA2,0xFCA1, + 0xFC02,0xFAFA,0xFD1A,0x01D3,0x03DA,0xFDB9,0xF924,0xFEE5, + 0x06A3,0x051D,0xFF40,0xFFA5,0x0714,0x07CF,0x005F,0xFD8B, + 0x05A2,0x0EC4,0x05AD,0xF9CA,0xFFF2,0x0C4F,0x07AC,0xFA63, + 0xFC63,0x0A37,0x0BBF,0xFD50,0xF44A,0x00B6,0x0CC1,0x029E, + 0xF4D4,0xFADD,0x0ADE,0x0821,0xF640,0xF269,0x025C,0x07F7, + 0xFB94,0xF491,0xFADA,0x02F9,0x002D,0xF7E3,0xF96D,0x0276, + 0x04B1,0xFFB8,0xFB01,0xFB55,0x003A,0x03DC,0x021B,0x00C5, + 0x02D0,0x0090,0xFEA0,0x033E,0x0649,0x041C,0x0137,0xFFD8, + 0x00B9,0x03F1,0x0599,0x016A,0xFFD2,0x03DA,0x0776,0x0643, + 0xFEEC,0xFDC0,0x05BD,0x0DEE,0x07C7,0xFF2A,0xFE93,0x07D6, + 0x0855,0xFEDA,0xFB87,0x0290,0x099A,0x0591,0xFA06,0xFA0D, + 0x0595,0x0756,0xFBCE,0xF636,0xFE52,0x0432,0xFFD2,0xF9F6, + 0xFC46,0x03A2,0x0293,0xFBC1,0xF9D4,0xFE0A,0x0166,0xFE0B, + 0xFA3C,0xFEB9,0x046F,0x01F0,0xF9BD,0xFAFD,0x03D0,0x0277, + 0xF9AF,0xFC83,0x07A2,0x074C,0xFB6D,0xF72C,0xFF76,0x04E9, + 0xFC1B,0xF382,0xF5C5,0xF9F6,0xF63F,0xEDBF,0xECB3,0xF3C6, + 0xF716,0xF27B,0xEEF3,0xF395,0xF9A9,0xFA32,0xF7A3,0xFA32, + 0x0206,0x0566,0x02EB,0x015C,0x03D1,0x0706,0x0636,0x044C, + 0x063F,0x09FC,0x097A,0x0588,0x04CF,0x0892,0x0C9E,0x0CC4, + 0x0BC3,0x0D16,0x0F70,0x0EDC,0x0B85,0x0AEF,0x0D2E,0x0DA9, + 0x0ACA,0x077B,0x0633,0x0533,0x023E,0xFEAA,0xFDC8,0xFF44, + 0xFF73,0xFCA5,0xF95C,0xF8DA,0xF975,0xF98A,0xF99C,0xFAA4, + 0xFBD6,0xF9FD,0xF6C9,0xF58C,0xF747,0xF8F1,0xF889,0xF707, + 0xF660,0xF6C8,0xF783,0xF80F,0xF89C,0xF997,0xFB51,0xFCAD, + 0xFF29,0x0123,0x01FE,0x00D7,0x0255,0x03CF,0x0460,0x0768, + 0x0642,0x04BE,0x03C4,0x03E8,0x046F,0x053F,0x0565,0x04AA, + 0x03D5,0x03EA,0x0531,0x059F,0x04EF,0x0398,0x037B,0x0437, + 0x050C,0x0468,0x02AD,0x0130,0xFFA7,0xFEC1,0xFE47,0xFE30, + 0xFD60,0xFBA0,0xF9C1,0xFA0D,0xFAC1,0xFB5B,0xFAEE,0xFA3C, + 0xFA24,0xFAB1,0xFBF4,0xFB43,0xFA1C,0xFD2E,0xFD97,0xFB80, + 0xFD7C,0xFEC9,0xFB23,0xF952,0xFEB8,0x04ED,0x0089,0xF8EF, + 0xFE50,0x06D8,0x0665,0x0163,0x0140,0x049A,0x074D,0x07D8, + 0x0361,0x019A,0x0888,0x0B8B,0x043B,0xFC5B,0xFDB9,0x0344, + 0x055A,0x0230,0xFD72,0x011E,0x062D,0x0258,0xF98C,0xFACE, + 0x04B1,0x090A,0x0098,0xF621,0xF9AB,0x078A,0x0709,0xF943, + 0xF665,0xFEB7,0x013B,0xFD37,0xFBDE,0xFE3F,0xFDEB,0xFB20, + 0xFD43,0xFEE4,0xFD23,0xFD6C,0xFDE2,0xFF68,0x0343,0x02AF, + 0xFE59,0xFD30,0x012C,0x0444,0xFFFE,0xFCD3,0x013D,0x0889, + 0x0668,0xFE3E,0xFBE0,0x03EE,0x0B52,0x05D2,0xFBB2,0xFCA8, + 0x0968,0x0ED6,0x02F5,0xF8A2,0x02AB,0x11A7,0x0C04,0xFBB1, + 0xFA1E,0x092D,0x0FB5,0x03DC,0xF6D5,0xFD36,0x0C07,0x0AB0, + 0xFB8B,0xF734,0x02AA,0x0B3B,0x0111,0xF641,0xFE44,0x07C2, + 0x0208,0xF7BE,0xF8E8,0x0437,0x073E,0xFDAF,0xF812,0xFF18, + 0x05F6,0x0106,0xF8A4,0xFBB1,0x03A3,0x0287,0xFC28,0xFC54, + 0x03AC,0x0765,0xFFD5,0xF9F1,0x02AF,0x0B6A,0x0580,0xFB6D, + 0xFD0C,0x055F,0x049C,0xFAA5,0xF694,0xFCC8,0xFF63,0xF637, + 0xEC94,0xEF32,0xF73C,0xF7EF,0xF21C,0xF0B0,0xF6AB,0xFB24, + 0xF914,0xF81F,0xFE6D,0x0636,0x0532,0xFFE0,0x0363,0x088B, + 0x09F4,0x0610,0x03E8,0x077F,0x0B17,0x09C7,0x065E,0x0700, + 0x0AE5,0x0CF5,0x0B8E,0x0BF4,0x0F6B,0x1194,0x0FE7,0x0DCA, + 0x0ED7,0x110F,0x103C,0x0C7F,0x09DE,0x0A11,0x0A18,0x06FF, + 0x0284,0x002E,0xFFFB,0xFF52,0xFDE4,0xFD9C,0xFE12,0xFCB6, + 0xFA02,0xF907,0xFAA5,0xFCBB,0xFCF7,0xFA80,0xF89B,0xF8BD, + 0xF96F,0xF8BC,0xF7D0,0xF7C8,0xF87A,0xF980,0xF983,0xF955, + 0xF944,0xF9C4,0xFB53,0xFDEA,0x0096,0x0269,0x0280,0x01B4, + 0x0297,0x04DF,0x08F5,0x0A86,0x096B,0x08B9,0x0806,0x0717, + 0x06B4,0x0746,0x07C8,0x078A,0x075C,0x070D,0x070E,0x0654, + 0x0542,0x0487,0x04DB,0x05A8,0x05D3,0x03EC,0x0198,0x011D, + 0x0043,0xFF9B,0xFF32,0xFED6,0xFCE0,0xFA59,0xF8D5,0xF8F8, + 0xF9D5,0xF9DC,0xF89C,0xF774,0xF827,0xF9DD,0xF920,0xF643, + 0xF8A9,0xFDA6,0xFB39,0xF4DA,0xF765,0xFFB9,0x00CE,0xF967, + 0xF617,0xF882,0xFF79,0x021E,0xFE31,0xFCDF,0xFDD6,0x013D, + 0x0327,0xFEED,0xFE9E,0x01D3,0x027C,0x025D,0xFF97,0xFF71, + 0x029B,0x009B,0xFD4C,0x0029,0x034B,0xFE94,0xF79C,0xF9DA, + 0x0073,0x01A0,0xFC8B,0xF719,0xF9FE,0xFFEB,0xFF2F,0xFB73, + 0xF9DC,0xFBED,0xFC41,0xFA4B,0xF80F,0xF89B,0xFA75,0xF99B, + 0xF71D,0xF62F,0xF5E4,0xF581,0xF911,0xFCE2,0xF8BD,0xF213, + 0xF673,0xFFE2,0xFE9B,0xF4C4,0xF497,0x0135,0x0467,0xF7E5, + 0xF331,0xFBD7,0x0404,0x028D,0xF88D,0xF652,0x006D,0x0737, + 0xFE5C,0xF695,0xFE89,0x05CB,0x02BE,0xFD7B,0xFD70,0x01CC, + 0x0177,0xFCA4,0xFCAC,0x02B2,0x0613,0xFB68,0xF418,0xFD13, + 0x0789,0x00F9,0xF702,0xF83B,0x0013,0x00EE,0xF77E,0xF5B7, + 0x00D0,0x0537,0xF86B,0xF1BD,0xFE16,0x08AF,0xFEA1,0xF0D9, + 0xF65F,0x0293,0x0344,0xFA43,0xF5E5,0xFA3C,0xFEAD,0xFDAD, + 0xFB37,0xFC24,0xFF5D,0xFF57,0xFD8A,0xFEB4,0xFF1A,0xFFD8, + 0x0382,0x0338,0xFE81,0xFCD3,0xFF52,0x000F,0xFBCE,0xF833, + 0xF863,0xF8D2,0xF4DA,0xEEF5,0xED89,0xF05C,0xF356,0xF2D9, + 0xF1D0,0xF39A,0xF65C,0xF757,0xF90E,0xFCED,0x0207,0x03CE, + 0x0218,0x0197,0x044B,0x0620,0x03DC,0x02DA,0x02D6,0x04CC, + 0x06BA,0x0664,0x0550,0x05CC,0x07DA,0x09AA,0x0B66,0x0D5B, + 0x0DD4,0x0D06,0x0BCB,0x0BF7,0x0D20,0x0E30,0x0BE5,0x07F3, + 0x0608,0x05F0,0x04DF,0x02D2,0x00B3,0xFF17,0xFDD2,0xFD44, + 0xFCFD,0xFCAE,0xFCBC,0xFBC4,0xFB04,0xFB49,0xFC40,0xFC82, + 0xFB8E,0xF9CE,0xF8FC,0xF9DA,0xFAB3,0xFA49,0xF8DC,0xF8FE, + 0xF97C,0xF957,0xFA1E,0xFBA6,0xFD59,0xFE4A,0xFEB5,0xFF73, + 0x014A,0x03A3,0x05FB,0x077B,0x080B,0x0899,0x09CB,0x094B, + 0x089E,0x0890,0x08BA,0x0960,0x09BA,0x0974,0x083D,0x06B0, + 0x063D,0x0772,0x089B,0x091C,0x0846,0x0710,0x062F,0x05B5, + 0x052F,0x0408,0x02C8,0x01D3,0x01AF,0x00B0,0xFEE2,0xFC95, + 0xFB0B,0xFAC6,0xFB2B,0xFBAD,0xFC58,0xFBEA,0xFA73,0xF952, + 0xF9F7,0xF96E,0xFAE2,0x00C5,0x02FD,0xFD5B,0xF8BE,0xFA71, + 0xFE66,0xFF9C,0xFFEA,0x000D,0xFE94,0xFF10,0x025B,0x049B, + 0x0147,0xFDA2,0xFF2B,0x05B4,0x08AD,0x04C3,0x035A,0x058F, + 0x042B,0x0201,0x0518,0x0BBB,0x0666,0xFF9A,0x0224,0x07E4, + 0x0610,0xFEB5,0xFDE0,0x0416,0x05F8,0x0027,0xFA0A,0xFB86, + 0x02DB,0x053D,0xFE3F,0xF7F1,0xFB12,0x03D2,0x01D3,0xF6D9, + 0xF23D,0xFBDE,0x03FE,0xFE1A,0xF67B,0xF897,0xFEAD,0xFBFE, + 0xF63A,0xF8FE,0xFFFA,0x0037,0xFA36,0xF8B3,0xFE37,0x03C1, + 0x0086,0xF91E,0xFB06,0x037A,0x0630,0x0013,0xF96F,0xFFB0, + 0x0980,0x04A4,0xFC3D,0xFDC8,0x05A9,0x06CD,0xFD7C,0xFAA8, + 0x049D,0x08F0,0xFE1F,0xF627,0xFF96,0x0970,0x03A2,0xF86E, + 0xFBC1,0x0882,0x09C7,0xFD88,0xF7E7,0x00EF,0x0A68,0x0390, + 0xF7F0,0xFA34,0x0389,0x01F8,0xFACD,0xFD36,0x0289,0xFE2E, + 0xF7D3,0xF9ED,0x01D6,0x054B,0xFE67,0xF57A,0xFB1D,0x05A7, + 0x02BC,0xF6C8,0xF8B7,0x05A1,0x06F4,0xF93A,0xF342,0xFF53, + 0x099A,0x019C,0xF775,0xFDDA,0x086F,0x04F2,0xF99E,0xF863, + 0x010B,0x044B,0xFC49,0xF5A3,0xF78E,0xF9AD,0xF341,0xEACA, + 0xEDFB,0xF767,0xF8BB,0xF0E0,0xED84,0xF387,0xFAD3,0xFBE6, + 0xFAD5,0xFDCA,0x02CD,0x0389,0x015A,0x014E,0x050F,0x076A, + 0x04E2,0x02CA,0x0526,0x093E,0x0905,0x04AC,0x034D,0x06EE, + 0x0B63,0x0C97,0x0C6F,0x0CE2,0x0D0C,0x0C27,0x0B5D,0x0CD6, + 0x0F7B,0x0E65,0x0A1B,0x06A2,0x066A,0x060E,0x0378,0x0038, + 0xFE41,0xFDBA,0xFD30,0xFC27,0xFB11,0xFA92,0xF9AD,0xF873, + 0xF85A,0xF9EB,0xFABE,0xF966,0xF6B7,0xF56E,0xF641,0xF763, + 0xF716,0xF5EC,0xF597,0xF5FA,0xF647,0xF62B,0xF647,0xF7AA, + 0xF946,0xFB2F,0xFCE5,0xFE35,0xFFB2,0x0110,0x00FB,0x01A8, + 0x0337,0x04C5,0x043D,0x0535,0x0456,0x0310,0x040F,0x0428, + 0x04C4,0x0510,0x0435,0x0348,0x0409,0x04FF,0x0539,0x0416, + 0x02F5,0x02B7,0x02E9,0x029C,0x01BE,0x0019,0xFE31,0xFD53, + 0xFC99,0xFC76,0xFBD4,0xFA73,0xF834,0xF751,0xF821,0xF9B1, + 0xF9F1,0xF878,0xF6F3,0xF76D,0xF8AD,0xF7C8,0xF862,0xFB63, + 0xFDFA,0xFBAD,0xF5B1,0xF8F9,0xFFEC,0xFE34,0xF874,0xFB2C, + 0x0248,0x0284,0xFA8B,0xF92E,0x01E4,0x055A,0x02C4,0x024B, + 0x0544,0x052E,0x01E1,0x000F,0x0191,0x0663,0x07F8,0x03E9, + 0x005A,0x03FA,0x0657,0xFEAE,0xF9B5,0x01E2,0x0761,0xFF89, + 0xF8FE,0xFEFF,0x0510,0xFFEA,0xF6C3,0xF99A,0x0563,0x035A, + 0xF4E7,0xF479,0x0246,0x040C,0xF6BE,0xF421,0xFE81,0x025C, + 0xF84A,0xF1F8,0xFA0D,0x0334,0x0105,0xF86F,0xF823,0x0164, + 0x03D0,0xF9CD,0xF4A8,0xFDE5,0x076E,0x0575,0xFD25,0xFBDA, + 0x021C,0x04BB,0x00C0,0xFDA5,0x01BF,0x03B4,0x0169,0x029E, + 0x02D8,0x00FA,0x0066,0x01C2,0x0351,0x0545,0x0331,0xFE5C, + 0xFF94,0x0574,0x0835,0x0305,0xFD77,0x00F7,0x066E,0x029D, + 0xFC15,0xFF7F,0x04A8,0x010E,0xFBFB,0xFD4F,0x0410,0x058F, + 0xFE7E,0xFAB5,0xFFD8,0x02B9,0xFC90,0xF952,0x0129,0x062F, + 0x003F,0xF89D,0xF8E9,0xFFC5,0x0271,0xFDA7,0xFAFB,0x0189, + 0x05E1,0xFFC9,0xFA1D,0xFDF9,0x0380,0x01F2,0xFF98,0x013E, + 0x0339,0x01E7,0xFF0A,0xFE5D,0xFF12,0xFE86,0xFBCF,0xF91B, + 0xF75E,0xF481,0xF056,0xEE91,0xF09A,0xF2A6,0xF245,0xF0CE, + 0xF1B1,0xF4D5,0xF802,0xF957,0xFB76,0xFED8,0x01D2,0x0239, + 0x01F4,0x02E8,0x0582,0x0597,0x0436,0x05CB,0x0618,0x06BA, + 0x06DC,0x0634,0x06B5,0x0894,0x0A9B,0x0B7F,0x0CAE,0x0D85, + 0x0D74,0x0CD0,0x0C99,0x0D68,0x0E26,0x0C96,0x093B,0x0608, + 0x051D,0x0528,0x034F,0x00B9,0xFE7B,0xFC93,0xFBEB,0xFB66, + 0xFB30,0xFAF8,0xFAA1,0xFA42,0xF9E0,0xFA22,0xFAE8,0xFA73, + 0xF9B7,0xF94F,0xF929,0xF849,0xF6F9,0xF6A1,0xF741,0xF7CA, + 0xF7DC,0xF7BA,0xF85E,0xF947,0xFB0F,0xFC54,0xFDBE,0xFFD6, + 0x0155,0x01FC,0x021D,0x0344,0x056A,0x06E3,0x06AE,0x05E7, + 0x05EE,0x083C,0x08F0,0x07BD,0x073E,0x077D,0x07E0,0x07FE, + 0x07BE,0x06AC,0x058D,0x0572,0x0615,0x0666,0x05BD,0x04B9, + 0x02D4,0x00DB,0xFF96,0xFF60,0xFEAC,0xFDC6,0xFCFC,0xFB06, + 0xF9BB,0xF9B4,0xFA9B,0xF9F6,0xF929,0xF8DA,0xF919,0xF9BB, + 0xFA14,0xF91C,0xF9D8,0xFBE3,0xFACB,0xFA48,0xFC20,0xFC83, + 0xFCFC,0xFBE0,0xFA69,0xFC8E,0x013C,0x01AE,0xFD19,0xFA78, + 0x005C,0x053E,0x0286,0xFF60,0x02AF,0x0722,0x0528,0x0069, + 0x0184,0x059F,0x0413,0xFF13,0xFE90,0x02E9,0x048F,0xFF62, + 0xFAF0,0xFE95,0x0128,0xFE65,0xFC35,0xFD93,0xFEBB,0xFCCC, + 0xFA84,0xFA3B,0xFD3C,0xFE62,0xFA5F,0xF725,0xF8B5,0xFC8F, + 0xFB19,0xF780,0xF765,0xF847,0xF881,0xF908,0xF9B3,0xF914, + 0xF8EB,0xF95B,0xF9F4,0xF996,0xFA3A,0xFCDD,0xFD3A,0xF9AD, + 0xF8F6,0xFE89,0x0139,0xFC32,0xF91C,0xFE1C,0x049A,0x00ED, + 0xF9C5,0xFB38,0x02B6,0x04E3,0xFEC2,0xFC79,0x00FA,0x043C, + 0x01CE,0xFD1E,0xFDA7,0x0339,0x0343,0xFE5E,0xFC6C,0x0092, + 0x043F,0x007C,0xFBA8,0xFF9A,0x0224,0x008F,0xFBA1,0xFB2E, + 0x0059,0x025F,0xFD33,0xF949,0xFCE9,0x01F0,0xFF8F,0xF920, + 0xF971,0xFEB1,0x0056,0xFCAA,0xFB1D,0xFCEF,0xFEB7,0xFDD6, + 0xFC43,0xFD66,0xFF56,0xFF7B,0xFCE7,0xFADF,0xFDC4,0x01F1, + 0x00D7,0xFDA1,0xFDF7,0x0009,0x0085,0xFED9,0xFE05,0xFEE7, + 0xFF4E,0xFDE3,0xFC37,0xFBC9,0xFB9C,0xF9E6,0xF84A,0xF978, + 0xFB22,0xFB55,0xFA21,0xF9DF,0xFB35,0xFD19,0xFDF6,0xFE94, + 0x002B,0x00C5,0x00F1,0x008A,0x0109,0x01DD,0x0219,0x0198, + 0x01A4,0x0293,0x023F,0xFF3C,0xFF23,0x0004,0x01E6,0x0307, + 0x02D9,0x02BC,0x0356,0x0421,0x04A9,0x04EC,0x04DD,0x0448, + 0x0338,0x0273,0x0255,0x01E2,0x016D,0xFFF3,0xFE14,0xFE24, + 0xFEBD,0xFE67,0xFD3D,0xFC7F,0xFCC1,0xFD64,0xFDAF,0xFDB9, + 0xFE07,0xFCEB,0xFBD1,0xFC76,0xFD3F,0xFE3E,0xFD62,0xFBB2, + 0xFB42,0xFC51,0xFCD0,0xFD4E,0xFD1E,0xFCB2,0xFD4B,0xFE4E, + 0xFFCF,0x010C,0xFFFA,0xFF71,0x0082,0x0203,0x0282,0x0292, + 0x03C9,0x0452,0x039B,0x0253,0x0350,0x05DC,0x0663,0x046D, + 0x025B,0x02B5,0x04AB,0x059B,0x04A7,0x0295,0x025D,0x03EE, + 0x04F8,0x0472,0x02CA,0x01BC,0x00E9,0x0039,0x0064,0x0139, + 0x0119,0xFFE1,0xFDF8,0xFD14,0xFE62,0xFECA,0xFEC9,0xFF54, + 0xFF48,0xFE6D,0xFDD0,0xFE24,0xFF07,0xFF7C,0xFF99,0xFFFC, + 0xFFE4,0xFF6F,0xFE97,0xFDAD,0xFDC6,0xFED7,0x002D,0x0033, + 0xFF4E,0xFFB2,0xFFFB,0x0014,0xFFAF,0x004B,0x0215,0x0306, + 0x01C9,0x0113,0x019C,0x019D,0x0102,0x00BB,0x012C,0x00C8, + 0x0006,0xFFF4,0x001F,0xFD9A,0xFD6B,0xFD30,0xFBE3,0xFBB4, + 0xFAB4,0xF952,0xF7FA,0xF7A2,0xF825,0xF897,0xF95A,0xF940, + 0xF7DA,0xF60B,0xF548,0xF57A,0xF653,0xF663,0xF587,0xF427, + 0xF400,0xF3EE,0xF391,0xF2DA,0xF2AE,0xF26C,0xF23C,0xF1BD, + 0xF13A,0xF09C,0xEFE3,0xEF45,0xEEAA,0xEE9A,0xEE16,0xED56, + 0xEC4A,0xEBB6,0xEB43,0xEB25,0xEAD7,0xEA79,0xEA01,0xE974, + 0xE920,0xE943,0xE902,0xE90B,0xE92E,0xE85B,0xE815,0xE7CB, + 0xE7A6,0xE756,0xE76A,0xE709,0xE6F7,0xE71F,0xE73A,0xE71D, + 0xE7CB,0xEA15,0xE90A,0xE8AE,0xE896,0xE8FD,0xE984,0xE90F, + 0xE8CF,0xE94F,0xE9A6,0xE9C7,0xE9CD,0xE996,0xEA0D,0xEA38, + 0xEA48,0xEAB3,0xEB58,0xEB1F,0xEB02,0xEC59,0xED1C,0xED73, + 0xED1A,0xED92,0xEE37,0xEF54,0xEF99,0xEF9E,0xEFDE,0xEFBD, + 0xEFF9,0xF02F,0xF070,0xF13A,0xF1DA,0xF24D,0xF256,0xF23B, + 0xF2B9,0xF38C,0xF41A,0xF495,0xF54D,0xF4EA,0xF40B,0xF52B, + 0xF640,0xF6D2,0xF6DC,0xF75C,0xF7B1,0xF82C,0xF8C8,0xF8FE, + 0xF929,0xF8F2,0xF8E1,0xF9BD,0xF9A1,0xF966,0xF9B9,0xF9F5, + 0xFA18,0xFA51,0xFB53,0xFC05,0xFC25,0xFCAB,0xFCDE,0xFD5D, + 0xFDFA,0xFE55,0xFEC5,0xFFA1,0x0006,0x0010,0x0057,0x00E3, + 0x00C5,0x0140,0x019F,0x01F9,0x0235,0x0286,0x02B6,0x02B2, + 0x02BE,0x0338,0x03CC,0x0498,0x0500,0x051B,0x04FF,0x04E5, + 0x0570,0x05DD,0x064B,0x069D,0x06FD,0x0799,0x0789,0x0764, + 0x0798,0x07E0,0x0823,0x0875,0x08E6,0x0892,0x08A7,0x08E6, + 0x0980,0x0998,0x099A,0x0A07,0x0B40,0x0B1C,0x0B50,0x0BD6, + 0x0C50,0x0B76,0x0C91,0x0CD3,0x0B6E,0x0CBF,0x0C99,0x0C18, + 0x0C4D,0x0C97,0x0CB0,0x0D63,0x0D42,0x0D5C,0x0D78,0x0D4F, + 0x0D1A,0x0CEC,0x0D19,0x0D9B,0x0DEC,0x0D75,0x0D72,0x0CEF, + 0x0D5A,0x0DB3,0x0E0C,0x0E46,0x0E4D,0x0E4C,0x0E1F,0x0E19, + 0x0DEE,0x0E58,0x0E53,0x0E66,0x0E4E,0x0E05,0x0E07,0x0DEF, + 0x0E1B,0x0E4A,0x0E2C,0x0E1C,0x0E7F,0x0DEE,0x0DED,0x0DDD, + 0x0DBB,0x0DE6,0x0E8E,0x0E47,0x0DA3,0x0D46,0x0D8F,0x0DA6, + 0x0DEB,0x0DE4,0x0E07,0x0E10,0x0DF2,0x0DC4,0x0D86,0x0DB8, + 0x0D8B,0x0CD0,0x0B49,0x0A84,0x0B3E,0x0B52,0x0B85,0x0B9F, + 0x0BC9,0x0B67,0x0B46,0x0ABF,0x0A8E,0x0ACB,0x0AE1,0x0AF4, + 0x0AF3,0x0AF6,0x0B0F,0x0AD9,0x0B07,0x0A59,0x0A2B,0x0AF6, + 0x0B36,0x0AAF,0x0AB8,0x0AD4,0x0AA2,0x0A85,0x0AEC,0x0B05, + 0x0B37,0x0AA4,0x0A83,0x0A78,0x0A98,0x0A74,0x0A62,0x0A49, + 0x09F9,0x0A35,0x0A08,0x0997,0x098B,0x0A37,0x0B72,0x0A29, + 0x093C,0x08EE,0x0973,0x0956,0x0954,0x092A,0x092A,0x0936, + 0x0959,0x09DC,0x0A0D,0x0A44,0x0ABB,0x0AEA,0x0AB3,0x0AB2, + 0x0A28,0x09DB,0x09D5,0x0A11,0x09BA,0x09A6,0x0988,0x0979, + 0x0921,0x08F6,0x0939,0x0918,0x08E6,0x0876,0x08AD,0x0877, + 0x084E,0x0850,0x07E1,0x07CF,0x07F1,0x07D4,0x07D6,0x0799, + 0x077C,0x0760,0x0707,0x06AB,0x06B4,0x067B,0x069E,0x0672, + 0x063A,0x05F9,0x054B,0x0533,0x058A,0x05BE,0x05C4,0x0546, + 0x0541,0x0537,0x052A,0x0560,0x04FC,0x04C7,0x048B,0x044F, + 0x0422,0x0465,0x045F,0x0463,0x0432,0x044E,0x043D,0x03CE, + 0x03D5,0x04F8,0x0392,0x028B,0x0486,0x0405,0x03E0,0x03B0, + 0x038D,0x0321,0x02F3,0x02C1,0x030E,0x0306,0x0303,0x0307, + 0x02E8,0x02A4,0x02D8,0x02A5,0x029A,0x0275,0x0296,0x02CA, + 0x0282,0x0276,0x0267,0x02A2,0x02AA,0x02CB,0x0276,0x0253, + 0x01C5,0x015F,0x0146,0x00E5,0x014E,0x0154,0x0153,0x0139, + 0x0132,0x0161,0x013A,0x013F,0x014A,0x0120,0x00D2,0x00C1, + 0x0100,0x00DA,0x00B7,0x00EB,0x00FF,0x0124,0x0155,0x013A, + 0x0152,0x00E1,0x00A3,0xFFA6,0xFFD4,0xFFC1,0xFF74,0xFF7D, + 0xFF83,0xFF86,0xFFAB,0x0005,0x006A,0x0023,0x0015,0x009E, + 0x0203,0x0343,0x03AD,0x0362,0x032D,0x0417,0x0601,0x075B, + 0x08B0,0x0A37,0x0B12,0x0BAC,0x0B80,0x0BD4,0x0BF4,0x0B5F, + 0x09BF,0x09C3,0x0A50,0x0AA1,0x0AA7,0x0A60,0x09E0,0x0A0A, + 0x0B41,0x0CE5,0x0E15,0x0D74,0x0B97,0x0AFB,0x0C25,0x0E2D, + 0x0F81,0x0FDF,0x1029,0x104B,0x11C3,0x11D2,0x1111,0x12A2, + 0x141D,0x1375,0x131C,0x1590,0x1726,0x158A,0x1348,0x13F3, + 0x16EC,0x1813,0x1735,0x17E1,0x191E,0x18B0,0x171F,0x15FA, + 0x16D7,0x186B,0x1907,0x198D,0x1923,0x17BB,0x1761,0x1749, + 0x16F1,0x16A1,0x1781,0x18F7,0x1994,0x1812,0x15E4,0x1614, + 0x17B5,0x182A,0x17C5,0x168C,0x1626,0x1660,0x1613,0x15A7, + 0x1572,0x154F,0x13A9,0x1269,0x136A,0x147B,0x149A,0x1209, + 0x0FC8,0x10BD,0x121E,0x1170,0x1069,0x108A,0x11B3,0x1026, + 0x0C6B,0x0B9F,0x0D9E,0x0E7B,0x0D67,0x0B38,0x0AE5,0x0B90, + 0x0ABE,0x0911,0x0821,0x0902,0x0ADB,0x0AF3,0x0887,0x0603, + 0x06B6,0x07B9,0x0591,0x0392,0x03C4,0x0667,0x07AE,0x0492, + 0x01CF,0x02F4,0x0544,0x02DF,0xFE13,0xFF3B,0x04E2,0x0596, + 0xFFE0,0xFCC3,0xFE50,0xFFBE,0xFE61,0xFC02,0xFDCE,0x01ED, + 0xFF38,0xFAD7,0xF8A7,0xF9BE,0xFCF7,0xFCBE,0xFAA1,0xFACE, + 0xFC66,0xFC18,0xF8B3,0xF5CA,0xF6A5,0xF9D8,0xFAD6,0xF7FF, + 0xF5EA,0xF5EF,0xF5C7,0xF513,0xF40D,0xF376,0xF506,0xF816, + 0xF8B1,0xF543,0xF173,0xF125,0xF381,0xF648,0xF588,0xF383, + 0xF328,0xF537,0xF39E,0xF018,0xF01D,0xF361,0xF529,0xF34A, + 0xF255,0xF492,0xF513,0xF125,0xEC54,0xEE6F,0xF473,0xF4BC, + 0xF148,0xF12C,0xF429,0xF2E2,0xED8F,0xECC0,0xF0B8,0xF26A, + 0xF096,0xEF6B,0xF10D,0xF343,0xF185,0xEE98,0xEF59,0xF49A, + 0xF7DF,0xF314,0xEEBB,0xF22F,0xF5A0,0xF0C4,0xEADA,0xEE12, + 0xF74C,0xF861,0xF029,0xEC82,0xF209,0xF5AF,0xF040,0xEB24, + 0xEFC3,0xF5F0,0xF53B,0xEF1E,0xEB34,0xEFC4,0xF548,0xF0AE, + 0xEB5D,0xEF7C,0xF5AB,0xF3B5,0xECF6,0xEC22,0xF28A,0xF441, + 0xEE3F,0xEC41,0xF1EC,0xF672,0xF06F,0xE959,0xEDA5,0xF5A1, + 0xF250,0xE9E5,0xEC87,0xF5E2,0xF5BC,0xEABF,0xE76B,0xF08D, + 0xF799,0xF34E,0xECAF,0xEFAA,0xF65F,0xF2AE,0xEA78,0xEB7D, + 0xF16B,0xF39F,0xEFDB,0xEB75,0xEE4B,0xF561,0xF4D3,0xED6D, + 0xEB1D,0xF178,0xF647,0xF1A3,0xEC4F,0xEF81,0xF446,0xF2AB, + 0xEDC3,0xED32,0xF1BA,0xF745,0xF739,0xF10F,0xEFA7,0xF354, + 0xF3E9,0xF043,0xED98,0xF203,0xF8CD,0xF759,0xEEA9,0xEC44, + 0xF3C8,0xF960,0xF4A6,0xEF15,0xF1D6,0xF9BB,0xFA36,0xF0DA, + 0xEA86,0xEFAF,0xF881,0xF7FC,0xF20B,0xF2A3,0xF65F,0xF490, + 0xF0A9,0xF127,0xF5DE,0xF893,0xF549,0xF25F,0xF4CB,0xF727, + 0xF493,0xF35B,0xF311,0xF656,0xFA25,0xF86F,0xF593,0xF708, + 0xF5EE,0xF36D,0xF519,0xF767,0xF94A,0xF872,0xF70D,0xF672, + 0xF777,0xF811,0xF806,0xF5A4,0xF615,0xFB00,0xFDE7,0xF7C3, + 0xF208,0xF4E1,0xFA39,0xFA00,0xF646,0xF7EA,0xFC27,0xFBD2, + 0xF6A4,0xF459,0xF879,0xFDEB,0xFBAC,0xF4D2,0xF5A0,0xFC55, + 0xFF39,0xFB6D,0xF648,0xF629,0xFCBF,0x00B8,0xFB9C,0xF5A5, + 0xF7EE,0x003C,0xFF79,0xF5C3,0xF227,0xFDFD,0x0633,0xFBD2, + 0xF129,0xFA02,0x04B9,0xFE06,0xF3AC,0xF6B7,0x0093,0x0185, + 0xF8E6,0xF819,0x00E7,0x0326,0xFACE,0xF519,0xFB60,0x0172, + 0xFC7B,0xF298,0xF3A3,0xFD9A,0xFFB8,0xF503,0xF0D7,0xFD06, + 0x06E0,0xFD1A,0xF220,0xF6F8,0x0188,0xFF2C,0xF3B1,0xF335, + 0xFFAF,0x0559,0xFCA0,0xF55B,0xF780,0xFCBB,0xFFE9,0xFEEA, + 0xFCB8,0xFB8D,0xFC7C,0xFF59,0xFB1D,0xF4A7,0xFA1C,0x0642, + 0x0646,0xFB08,0xF6A0,0xFD14,0x0265,0xFF9E,0xFB9D,0xFB56, + 0xFFB5,0x0297,0x0117,0xFDB6,0xFBC5,0xFDFF,0x015C,0xFFD8, + 0xFC9A,0x015A,0x0564,0x00B7,0xFB23,0xFC05,0x00F9,0x02CA, + 0x00F0,0x00A0,0x013D,0x0076,0x017F,0x0067,0xFBAA,0xFCCC, + 0x0577,0x06CB,0xFCF4,0xF9BA,0x0424,0x08ED,0xFC6A,0xF600, + 0xFF90,0x0947,0x0768,0xFE68,0xFAEC,0xFF57,0x00E5,0xFDCF, + 0xFF03,0x0343,0x01AC,0xFD46,0xFEFA,0x02A9,0x009A,0xFAA4, + 0xFD36,0x05B8,0x05DC,0xFDCA,0xFADE,0xFF3C,0x02C4,0xFF95, + 0xFD34,0xFE2F,0x0183,0x047B,0x02EF,0xFEE4,0xFD7F,0xFFC8, + 0x01D3,0x016A,0x00F3,0x01E7,0x04D5,0x0387,0xFD34,0xFBCA, + 0x00FD,0x043E,0x01F5,0xFF53,0x0297,0x0672,0x036F,0xFB0C, + 0xFA26,0x0220,0x050B,0x0283,0xFF82,0xFFC2,0x039B,0x035F, + 0xFC10,0xF9C3,0x03B5,0x0AA3,0x00AE,0xF82D,0xFE3D,0x04C4, + 0x026D,0xFDA0,0xFCD2,0x0002,0x0578,0x06C2,0x0048,0xFB33, + 0xFE0A,0x01DD,0x008C,0xFDBA,0xFEF9,0x00D7,0x0294,0xFDCE, + 0xF919,0xFC0C,0x0232,0x0561,0x023F,0xFC45,0xFBE1,0x0182, + 0x0296,0xFD5A,0xFD35,0x040C,0x0604,0x0006,0xFC46,0xFE13, + 0x0061,0xFF47,0xFEE2,0x021B,0x03B8,0x0138,0xFF22,0xFFC2, + 0xFEB9,0xFDC2,0x0142,0x034A,0x009A,0xFFE8,0xFFF5,0x0178, + 0x04C3,0x0378,0xFDDD,0xFCE8,0x006B,0x0325,0x0395,0x0216, + 0x0214,0x03A0,0xFFBC,0xFC39,0x021B,0x0823,0x0570,0xFE6D, + 0xFD75,0x0216,0x0368,0xFD91,0xFD1C,0x0722,0x0A92,0x014B, + 0xFA53,0xFD19,0x0391,0x054D,0xFE78,0xFCC3,0x0501,0x06E6, + 0x0077,0xFC44,0xFE67,0x034E,0x0540,0x01D0,0xFD4D,0x00B3, + 0x0811,0x03C3,0xF74A,0xF7B5,0x05FE,0x0BCB,0x0072,0xF892, + 0x021D,0x0CCD,0x028C,0xF3C5,0xF8AC,0x0A66,0x0C6B,0xFB65, + 0xF3C9,0xFED7,0x07DD,0xFE84,0xF363,0xF7FF,0x04BD,0x0758, + 0xFB6A,0xF480,0xFBE6,0x02B3,0xFF26,0xF8A0,0xFB96,0x05C9, + 0x052B,0xF94E,0xF6C9,0x0077,0x04BA,0xFCB6,0xF98A,0x0017, + 0x051E,0xFE57,0xF685,0xFA90,0x020D,0x00A5,0xFB68,0xFC94, + 0x0209,0x027E,0xFE11,0xFA20,0xFB17,0x013E,0x02BC,0xFC7F, + 0xFC8A,0x01FC,0x032E,0xFDC1,0xF9E5,0xFCF8,0x0158,0x003B, + 0xFA59,0xFA96,0x0192,0x053D,0xFDF9,0xF777,0xFD35,0x04F9, + 0x040F,0xFDD1,0xFC84,0x00F9,0x04AE,0x0236,0xF9F3,0xF886, + 0xFE6C,0x052C,0x03A9,0xFF63,0xFE6B,0x00CB,0x003A,0xFC3E, + 0xFE53,0x007A,0x015A,0x0174,0xFF58,0xFFAC,0x024A,0x00D7, + 0xFB8B,0xFD20,0x03FB,0x045F,0xFC18,0xF8E9,0x001A,0x0504, + 0xFF34,0xFB47,0x01CF,0x05A8,0xFFA1,0xFCB1,0x0288,0x0444, + 0xFD99,0xFC23,0x003E,0x03BD,0x03B4,0x021B,0xFEB4,0xFF16, + 0x0330,0x0170,0xFECF,0x00A1,0x01C0,0x0133,0x002B,0xFF1D, + 0x0104,0x027C,0xFFD0,0xFE6E,0x02E4,0x0525,0x0203,0xFFA1, + 0xFDAD,0xFFD1,0x03AF,0x0195,0xFF1C,0x036A,0x052B,0xFF53, + 0xFAD0,0xFB9D,0xFDE4,0x0115,0x01D3,0xFFC6,0xFCB8,0xFD56, + 0xFF62,0xFE05,0xFBD4,0xFE14,0x039A,0x063B,0x02C2,0xFCC5, + 0xFC9C,0x013B,0x02BE,0x004D,0xFF42,0x00C8,0x012B,0x02AB, + 0x0426,0x01E1,0xFD7F,0xFBFD,0x0117,0x06E2,0x073B,0x013D, + 0xFA33,0xFC0F,0x0527,0x061E,0xFC2D,0xFB04,0x07A5,0x0DDE, + 0xFEBE,0xF226,0xFEE0,0x0CB1,0x0395,0xF660,0xFE01,0x0CD4, + 0x0927,0xFBA4,0xF945,0x02C7,0x0661,0x0197,0xFFBE,0x043D, + 0x08A7,0x0626,0xFE8F,0xFD45,0x02AB,0x0A21,0x09DB,0x011E, + 0x0077,0x079B,0x07C3,0xFCEC,0xFB56,0x0701,0x0C8E,0x02BA, + 0xFA01,0x0108,0x0A2F,0x0537,0xFC96,0x0106,0x0AEB,0x0AF6, + 0x0050,0xFA11,0x000F,0x074B,0x05F0,0xFE42,0xFBDB,0x04BA, + 0x0A8D,0x03FC,0xFB92,0xFDD4,0x0521,0x051D,0x0175,0x01AD, + 0x0250,0x02EE,0x02B3,0x005F,0xFF0F,0xFF61,0x02EE,0x0743, + 0x03BA,0xFE91,0x013D,0x04BB,0x019D,0xFC30,0xFC31,0x0360, + 0x07F3,0x0518,0xFE6B,0xFD6C,0x017F,0x0418,0x015B,0xFB1A, + 0xFFE8,0x07E9,0x0499,0xFA86,0xF955,0x0425,0x096C,0x0170, + 0xFB5A,0x01D4,0x0A10,0x03B0,0xF688,0xF9C2,0x0813,0x0873, + 0xFAF1,0xF8A2,0x06B7,0x0D51,0xFE2D,0xF31C,0x0012,0x0CFF, + 0x0760,0xFAD4,0xFAA8,0x0616,0x0677,0xFC36,0xFA47,0x0586, + 0x0A3C,0xFFB2,0xFA10,0x01FE,0x0A02,0x0447,0xF854,0xF732, + 0x0344,0x0BEF,0x03D9,0xF8D5,0xFB72,0x0505,0x04C7,0xFC8A, + 0xFB8C,0x0433,0x07B1,0xFE07,0xF7BB,0xFEB4,0x067C,0x04F6, + 0xFD7F,0xFD4C,0x04CE,0x07B6,0x0027,0xFA61,0xFF45,0x0769, + 0x059D,0x0042,0x02EA,0x058E,0x02AE,0xFF69,0xFD69,0x01A7, + 0x07E4,0x0464,0xFB61,0xFD77,0x0804,0x07E6,0xF980,0xF58B, + 0x033F,0x094C,0xFEA1,0xF73F,0x0081,0x098F,0x03DF,0xF979, + 0xF91A,0x005B,0x0285,0xFDDF,0xFC9F,0xFFBB,0xFFF1,0xFE8E, + 0xFDBB,0xFD6B,0xFEAE,0x028C,0x025A,0xFBCB,0xF776,0xFD99, + 0x01FF,0xFB6C,0xF76C,0xFC04,0x01FB,0x0388,0xFEF9,0xF8CB, + 0xF9E1,0x0281,0x01B6,0xF8F8,0xF835,0x0299,0x0632,0xFAEF, + 0xF21C,0xF8A3,0x0249,0xFEC1,0xF754,0xFAF9,0x034A,0x005F, + 0xF569,0xF44F,0xFDA1,0x0058,0xFCC1,0xF96D,0xF930,0xFD10, + 0x017F,0xFE85,0xF642,0xF73B,0x02CF,0x0640,0xFBA0,0xF4A5, + 0xFB62,0x0323,0xFE86,0xF4BA,0xF816,0x052C,0x067A,0xF891, + 0xF108,0xFB56,0x0623,0x01BE,0xF67C,0xF76B,0x0399,0x0510, + 0xF83D,0xF4CA,0xFF82,0x05AC,0xFDD7,0xF4C8,0xF9BF,0x0480, + 0x02CD,0xF94F,0xF7EA,0xFD68,0xFFC3,0xFF74,0xFF1B,0xFE76, + 0xFCCB,0xFC5A,0xFFF6,0xFDF1,0xF948,0xFA8E,0xFEBC,0xFF75, + 0xFFD6,0xFE64,0xF90C,0xFB58,0x0276,0x0265,0xFAD7,0xF970, + 0x0049,0x01D3,0xFBA0,0xF939,0xFD6B,0x036A,0x01DD,0xFBA2, + 0xFBE0,0x02B4,0x04D3,0xFE98,0xF992,0xFA72,0xFD81,0xFE91, + 0xFFA6,0x025E,0x01B0,0xFE49,0xFCB2,0xFD4B,0xFD38,0xFEFC, + 0x01AD,0x02E1,0x028E,0x0009,0xFCF7,0xFADF,0xFD86,0x0427, + 0x0511,0xFD51,0xFCF3,0x04D6,0x0601,0xFB71,0xF7D7,0x02D3, + 0x099C,0x0263,0xFA85,0xFCE5,0x0334,0x0362,0xFE04,0xFDC1, + 0x0525,0x0656,0xFE7B,0xFDB2,0x01C7,0x02A2,0xFD42,0xFA25, + 0x0088,0x056C,0x0244,0xFD40,0xFCB0,0x002B,0x0428,0x003E, + 0xF9ED,0xFD88,0x051D,0x0506,0xFF96,0xFF52,0x021A,0x0287, + 0xFE58,0xFA85,0x0126,0x08AC,0x02CE,0xFA35,0xFDC0,0x0859, + 0x06A3,0xFC5B,0xFC0C,0x05B7,0x07A5,0x005B,0xFC3C,0xFFDD, + 0x044E,0x02D5,0xFF50,0x0026,0x03B5,0x01C6,0xFBB2,0xFC73, + 0x01FB,0x03E6,0x016D,0x00DE,0x0652,0x0571,0xFB86,0xF9AF, + 0x01F3,0x0345,0xFDAB,0xFD0D,0x04CA,0x098B,0x011B,0xF935, + 0x0199,0x09E4,0x0795,0x0104,0xFEA5,0x0483,0x08E4,0x01BF, + 0xFA0F,0xFE7E,0x0700,0x0750,0xFEEF,0xFCDA,0x04A5,0x0565, + 0xFD80,0xFB60,0x026F,0x041B,0x0007,0xFE2A,0x01CD,0x041B, + 0xFFFA,0xFEC2,0xFF00,0x00D7,0x0388,0x02CF,0xFFE6,0xFE95, + 0xFEE3,0xFEE6,0xFECF,0x0115,0x043E,0x017E,0xFD0F,0xFF11, + 0x033B,0x0249,0xFE2C,0xFB80,0x0072,0x05ED,0x04AA,0x0010, + 0xFDB8,0xFE47,0xFE09,0x0019,0x02F1,0x04CD,0x0550,0x020F, + 0xFAE6,0xFA15,0x0017,0x0575,0x009F,0xFAF9,0xFE42,0x0531, + 0x06C6,0xFEC8,0xF90D,0xFE7B,0x0836,0x0644,0xFCD8,0xF970, + 0xFDC3,0x01F6,0x005E,0xFE6F,0x0011,0x028D,0x0184,0xFC7D, + 0xFBBF,0x0259,0x0385,0xFD0D,0xF959,0xFC3E,0x0134,0x03F6, + 0x0118,0xFB00,0xFAE2,0x00F3,0x02CD,0xFE5D,0xFC34,0x014D, + 0x04C1,0x01D4,0xFD6C,0xFC55,0xFDED,0xFF4B,0x0102,0x0351, + 0x03EA,0xFD56,0xF940,0xFE21,0x04E0,0x0061,0xFBC0,0xFEA6, + 0x00F4,0x0118,0xFD5F,0xFAD4,0xFD7E,0x02A6,0x02AF,0xFD59, + 0xFD5C,0x026C,0x015C,0xF9CF,0xFAC3,0x019B,0x06F5,0x05D8, + 0xFEA2,0xFAC4,0x0122,0x07DF,0x0243,0xF93F,0xFA64,0x06BF, + 0x09BF,0xFBDA,0xF5C1,0x02D7,0x0AFD,0xFDC8,0xF26E,0xFF13, + 0x0EA7,0x0799,0xF578,0xF39A,0x0224,0x08CD,0xFE4C,0xF872, + 0x02AE,0x08F1,0xFEB4,0xF6BC,0xFDC6,0x06FD,0x0484,0xFC8F, + 0xF941,0x0005,0x0508,0x0010,0xF98C,0xFC0F,0x032F,0x0497, + 0x01AA,0xFE9B,0xFEA4,0x00A4,0xFF31,0xFCFF,0xFE85,0x001E, + 0xFF6A,0xFFB0,0x01F1,0x02AB,0xFE42,0xFAF9,0xFD99,0x016A, + 0x0000,0xFBCE,0xFAA6,0xFD60,0xFE0D,0xF9E5,0xF90E,0xFE71, + 0x0359,0xFDA2,0xF834,0xFE8F,0x0289,0xFC3D,0xF629,0xFA6B, + 0x03C6,0x01FA,0xF7FE,0xFA22,0x0464,0x0347,0xF90C,0xF4F0, + 0xFE72,0x0874,0x025B,0xF6CA,0xF6AC,0xFE8F,0x017D,0xFB4D, + 0xF764,0xFE1D,0x06D7,0x0387,0xFA39,0xF90E,0x00A7,0x01CD, + 0xF92D,0xF5AE,0xFEEC,0x063E,0x0207,0xF7E4,0xF903,0x03E0, + 0x0526,0xFBC2,0xF872,0xFFF3,0x05B3,0xFE13,0xF5D1,0xFCA2, + 0x04E6,0xFEC2,0xF47E,0xF8C1,0x0799,0x0ADE,0xFD00,0xF447, + 0xFF32,0x07FB,0xFF0F,0xF916,0x003C,0x0623,0x0028,0xF55B, + 0xF85C,0x0583,0x07DF,0xFD26,0xF73A,0xFF50,0x070A,0x0369, + 0xFC84,0xF9E1,0xFE9F,0x04BA,0x0316,0xFC34,0xFB4A,0x02AE, + 0x01FE,0xFA75,0xFBBD,0x0210,0x0084,0xFAE1,0xFCFD,0x003E, + 0xFE0A,0xFC07,0xFF59,0x0036,0xFC04,0xFB9B,0x00C6,0x0392, + 0x0133,0xFDBE,0xFAFA,0xFACA,0x0132,0x0611,0x01C2,0xFB58, + 0xFB3C,0xFE28,0xFFD6,0xFF2C,0x000A,0x0044,0xFDAB,0xFAC5, + 0xFEAC,0x035D,0x0020,0xF81C,0xF879,0x0020,0x011C,0xFB9D, + 0xFA4E,0xFDC1,0xFD8B,0xFCCA,0xFB20,0xFB6D,0xFFE7,0x00B4, + 0xFBA2,0xF799,0xFB9E,0x00CE,0xFF04,0xFB2F,0xFE7A,0x0219, + 0xFCB2,0xF872,0xFF1B,0x026D,0xFA6E,0xF5DD,0xFD0D,0x0535, + 0x0341,0xF9C0,0xF6FF,0xFFDB,0x04D4,0xFFF6,0xFB36,0xFD67, + 0x02EB,0x0297,0xFC8E,0xFA41,0xFCE4,0xFFE0,0x024D,0x008F, + 0xFD43,0xFE00,0x02A3,0x01DE,0xFBF2,0xF8B9,0xFB46,0x00D7, + 0x02C8,0xFF1C,0xFD3A,0x0193,0x0317,0xFBA9,0xF87B,0x0169, + 0x0A02,0x0734,0xFF20,0xFCE0,0x01F9,0x0304,0xFE67,0xFF9E, + 0x06DC,0x07A1,0xFEC4,0xF9EB,0x0317,0x07EC,0xFF8B,0xFBA9, + 0x0290,0x08E3,0x043A,0xFB14,0xFBD9,0x0481,0x07F0,0x0072, + 0xFBA6,0x0289,0x07CA,0x0296,0xFBBD,0xFDA6,0x05D7,0x05E4, + 0xFF50,0x003B,0x05AE,0x0449,0xFD00,0xFC94,0x0509,0x07DA, + 0xFDD2,0xF885,0x02CC,0x0C2A,0x0399,0xF971,0xFC14,0x031E, + 0x05B4,0xFF8D,0xFC7E,0x0475,0x066B,0xFFB0,0xFC5C,0xFE39, + 0x0194,0x04C0,0x02E1,0xFD62,0xFD07,0x0593,0x07FE,0xFF26, + 0xF5DA,0xFC07,0x08DE,0x097F,0x00AB,0xFBF5,0xFF75,0x028E, + 0xFED6,0xF9BA,0xFF04,0x07D2,0x054E,0xFB6F,0xFAFA,0x03B5, + 0x0620,0xFDCC,0xF94A,0x00F3,0x0729,0x041D,0xFC65,0xFAFC, + 0x01F0,0x05C0,0x0266,0x008B,0x02BF,0x02FB,0xFF53,0xFF56, + 0x0077,0xFE47,0xFF88,0x04D8,0x044D,0xFBAE,0xFA10,0x0381, + 0x070F,0xFDAF,0xF520,0xFBB2,0x077A,0x0584,0xFBE7,0xFA2D, + 0x007D,0x033F,0xFD14,0xF966,0x000C,0x0591,0x0298,0xFC89, + 0xFB73,0x005A,0x02FD,0x00BA,0xFF8E,0x01C9,0x04F3,0x02FB, + 0xFE93,0xFE81,0x017A,0x018E,0x01C8,0x037C,0x0295,0xFD8B, + 0xFEC7,0x03C8,0x0356,0xFE62,0xFE0F,0x031A,0x04AE,0x0062, + 0xFDE8,0x005C,0x011E,0xFD92,0xFEB9,0x0470,0x0395,0xFD4F, + 0xFCC9,0xFF63,0x01D7,0x017B,0xFE08,0xFFC9,0x037A,0x021E, + 0xFD56,0xFD6B,0x0086,0xFEE0,0xFB4F,0xFC8B,0x00F2,0x04BE, + 0x01B3,0xFB43,0xFC30,0x006D,0xFF5C,0xFB2D,0xFBA9,0x028D, + 0x050B,0xFE2C,0xF81C,0xFC32,0x0085,0xFD74,0xFB65,0xFD47, + 0xFFA4,0xFD0C,0xF6BB,0xF7C6,0x00A1,0x0243,0xFA7B,0xF711, + 0xFDCE,0x0264,0xFCFD,0xF637,0xF65C,0xFF3E,0x02F7,0xFC11, + 0xF609,0xFAEE,0x006B,0xFBC0,0xF804,0xFB95,0xFD7F,0xFC24, + 0xFCB1,0xFF53,0xFD48,0xF9AA,0xF9B2,0xFD51,0x014A,0xFEBB, + 0xFAC1,0xFB9C,0xFCA4,0xFBFA,0xFB64,0xFC94,0xFDEC,0xFFBF, + 0xFFB8,0xFB30,0xF8E6,0xFF3A,0x03D5,0xFDD8,0xF5CB,0xF759, + 0x016D,0x04F2,0xFD0E,0xF7EE,0xFE29,0x030D,0xFDF2,0xF96D, + 0xFDCD,0x0445,0x0226,0xFA92,0xF964,0x01AE,0x03DC,0xFD67, + 0xFA9C,0xFE29,0x0417,0x028A,0xFAD0,0xF845,0xFEDA,0x037D, + 0x00F8,0xFC8F,0xFD77,0x025A,0x042F,0xFDBE,0xF727,0xFAC9, + 0x03F4,0x0374,0xFAD1,0xFA12,0x02A2,0x042C,0xFB0D,0xF5B1, + 0xFD9D,0x053D,0x01B7,0xF89F,0xFAF4,0x03B2,0x0298,0xF7E7, + 0xF610,0x0359,0x0BAB,0x0157,0xF683,0xFBAB,0x0611,0x039B, + 0xF79B,0xF716,0x0548,0x0B4B,0x0049,0xF5DF,0xF94B,0x03D0, + 0x049B,0xFA1B,0xF80F,0x0388,0x0972,0x019E,0xF6ED,0xF9C6, + 0x0762,0x0A0A,0xFC98,0xF633,0x01F6,0x0862,0xFE5D,0xF4FB, + 0xF892,0x0322,0x0597,0xFD5B,0xF80E,0xFE3D,0x05C3,0xFFB0, + 0xF751,0xFAE7,0x02DF,0x0424,0xFD5C,0xF80D,0xFCFF,0x0525, + 0x012B,0xF6D5,0xFA2F,0x0570,0x0637,0xFAC4,0xF5E5,0xFF2E, + 0x05C3,0x0088,0xF7F9,0xFB09,0x062E,0x0704,0xFB69,0xF59B, + 0xFE8B,0x07B2,0x02F0,0xF945,0xFC6F,0x05D6,0x04F8,0xF992, + 0xF6F8,0x01E2,0x0838,0x01D8,0xF9BB,0xFCE5,0x03D2,0x029A, + 0xFAD6,0xF9B5,0x02FB,0x07BC,0xFF7A,0xF95B,0x00B9,0x0AF8, + 0x0712,0xFBC2,0xFB10,0x047D,0x0A92,0x04BE,0xFC81,0xFE50, + 0x05B9,0x0598,0xFEF3,0xFCCD,0x01CD,0x0617,0x0349,0xFE61, + 0x0045,0x04B2,0x02D6,0xFD12,0xFD6F,0x04EA,0x07E7,0xFFFC, + 0xF9A1,0xFFE0,0x07C2,0x0342,0xFAFE,0xFC85,0x03FB,0x0648, + 0x003C,0xFA56,0xFD18,0x032A,0x0323,0xFE15,0xFBC1,0x00CF, + 0x04FB,0xFF7D,0xFAE3,0xFE0C,0x01F2,0x01BD,0xFEA3,0xFE03, + 0x002C,0x01C0,0x0139,0xFEC3,0xFD22,0xFE99,0x005D,0xFF9B, + 0x0091,0x0132,0xFE34,0xFB0D,0xFF0B,0x027B,0x0101,0xFFDD, + 0xFD67,0xFE7D,0x01A2,0x00B6,0xFD75,0xFD46,0xFF58,0x004E, + 0xFE92,0xFCB6,0xFF39,0x026C,0xFFCB,0xFA96,0xFACE,0x00A3, + 0x031B,0xFF53,0xFD2E,0xFFB8,0x0111,0xFF5B,0xFE20,0xFE2A, + 0xFFC2,0x0046,0xFEC4,0xFEBA,0x006E,0xFF42,0xFBEF,0xFABB, + 0xFEE9,0x02C1,0x0126,0xFBED,0xFB0C,0xFF8F,0x0063,0xFCEB, + 0xFA19,0xFCE0,0x0274,0x0263,0xFCC8,0xFAA6,0xFE31,0x00FD, + 0xFECC,0xFB75,0xFD5D,0x021C,0x02A1,0xFD3F,0xF947,0xFC53, + 0x0082,0x00B4,0xFFC7,0x02AD,0x02E4,0x00DD,0xFF2B,0xFFE5, + 0x0127,0xFFDD,0xFF13,0x01BB,0x038D,0x0089,0xFC4E,0xFDF7, + 0x01FE,0x0283,0x0051,0x00E8,0x030C,0x0218,0xFD95,0xFC80, + 0x0019,0x017B,0xFECF,0xFED9,0x0194,0x0282,0xFF89,0xFBB4, + 0xFC81,0x004D,0x029B,0x0121,0xFEF9,0xFE4A,0xFF0F,0xFEB7, + 0xFD2E,0xFE3B,0x028C,0x04FC,0x00F6,0xFBF6,0xFD10,0x00B3, + 0xFF39,0xFBDB,0xFD7C,0x01E8,0x03D4,0x0132,0xFCD0,0xFD1B, + 0x00C0,0x0167,0xFEC2,0xFCE8,0xFF13,0x0289,0xFFEE,0xFAEC, + 0xFAED,0xFE7C,0xFFD3,0xFD5E,0xFC45,0xFEEC,0x00BD,0xFDEA, + 0xFAB2,0xFB79,0xFDF8,0xFE65,0xFD52,0xFDE3,0x003F,0x002D, + 0xFC4D,0xFA9D,0xFD2A,0xFFC9,0xFFBC,0xFDC1,0xFD1B,0xFE7E, + 0xFF32,0xFD40,0xFB47,0xFC1B,0xFE86,0xFF45,0xFD93,0xFD57, + 0xFE58,0xFE50,0xFBEF,0xFB40,0xFE14,0x0044,0xFF6D,0xFD88, + 0xFD0B,0xFD8F,0xFCFF,0xFC27,0xFD1E,0xFEE9,0xFF04,0xFCEF, + 0xFC04,0xFD49,0xFE53,0xFD75,0xFCD3,0xFDFA,0x0057,0x009C, + 0xFE7A,0xFCCE,0xFCD8,0xFD73,0xFDAD,0xFFF0,0xFF58,0x00E8, + 0xFFCA,0xFD1E,0xFC7A,0xFE54,0xFFFA,0xFFC2,0xFEC1,0xFE5F, + 0xFEDA,0xFE59,0xFD24,0xFCD7,0xFF1B,0x0016,0xFF9C,0xFE41, + 0xFDBC,0xFCA3,0xFBD3,0xFC2B,0xFCE6,0xFE0F,0xFDF0,0xFCC7, + 0xFB4D,0xFADA,0xFA9E,0xF9E7,0xF91C,0xF889,0xF86D,0xF782, + 0xF673,0xF57B,0xF4E3,0xF41F,0xF39A,0xF3FB,0xF54A,0xF5E7, + 0xF4BF,0xF283,0xF130,0xF172,0xF271,0xF2E9,0xF2F2,0xF2CA, + 0xF302,0xF2AF,0xF2B4,0xF22B,0xF215,0xF19A,0xF12D,0xF0C6, + 0xF090,0xF020,0xEFA0,0xEEEC,0xEDFB,0xEC63,0xEC4F,0xEC17, + 0xEBD2,0xEBE1,0xEB56,0xEB18,0xEAA0,0xEA33,0xE9E1,0xE995, + 0xE8D4,0xE8EC,0xE94E,0xE90B,0xE8EB,0xE8C6,0xE952,0xE912, + 0xE814,0xE893,0xE8FC,0xE89C,0xE84A,0xE808,0xE850,0xE85B, + 0xE8A4,0xE8CA,0xE8E3,0xE937,0xE97F,0xE970,0xE921,0xE929, + 0xE94D,0xE98D,0xE9EE,0xEA17,0xEA5B,0xEA84,0xEA83,0xEADB, + 0xEC64,0xEC95,0xEC39,0xEC0D,0xEC3E,0xECE2,0xED0A,0xED9A, + 0xEE05,0xEEE7,0xEF9E,0xF05C,0xF159,0xF1EB,0xF2A5,0xF372, + 0xF366,0xF36A,0xF41B,0xF492,0xF503,0xF5DD,0xF622,0xF6BE, + 0xF6DC,0xF774,0xF827,0xF8BD,0xF8F9,0xF906,0xF9B3,0xFA24, + 0xFA69,0xFAC3,0xFB60,0xFBCE,0xFC13,0xFC3C,0xFC9A,0xFCDA, + 0xFD07,0xFD4A,0xFDDE,0xFE22,0xFE1F,0xFE95,0xFEF7,0xFF7F, + 0xFFD9,0xFFD2,0xFFF4,0xFFF9,0x0083,0x00E1,0x0150,0x016D, + 0x01B7,0x01FA,0x028B,0x02F7,0x0339,0x0389,0x039C,0x042E, + 0x04CB,0x0507,0x054A,0x0549,0x0588,0x0628,0x0681,0x0719, + 0x0788,0x07D4,0x077C,0x082B,0x08D0,0x075B,0x0956,0x0A10, + 0x091D,0x0973,0x09E3,0x0A15,0x0A91,0x0AAB,0x0ABF,0x0AEE, + 0x0B14,0x0B09,0x0BB4,0x0BEB,0x0BEC,0x0BDD,0x0C15,0x0C54, + 0x0C7C,0x0CBB,0x0C74,0x0C65,0x0C7C,0x0CB8,0x0CC1,0x0CBD, + 0x0C95,0x0C87,0x0C86,0x0C9B,0x0CC0,0x0CDE,0x0C59,0x0C3D, + 0x0C92,0x0D08,0x0D00,0x0CF6,0x0D2B,0x0D42,0x0D7C,0x0D77, + 0x0D5B,0x0D57,0x0D5F,0x0D63,0x0D63,0x0E22,0x0E7C,0x0E8A, + 0x0E60,0x0E21,0x0E72,0x0E7C,0x0EB2,0x0ED4,0x0EA8,0x0ED2, + 0x0E9C,0x0E8B,0x0FD1,0x1136,0x105A,0x1053,0x0FF5,0x0FC7, + 0x0F95,0x0F99,0x0F4D,0x0F1F,0x0EF5,0x0EDF,0x0EAB,0x0E74, + 0x0E7F,0x0E4D,0x0E1C,0x0DB5,0x0D85,0x0DA7,0x0D34,0x0DD0, + 0x0DBF,0x0CE6,0x0C2E,0x0C66,0x0C7A,0x0CAA,0x0CD9,0x0CD9, + 0x0C47,0x0C5E,0x0C73,0x0C8A,0x0C74,0x0C6E,0x0C69,0x0C40, + 0x0C20,0x0BD3,0x0B79,0x0B28,0x0AF2,0x0AB2,0x0B69,0x0AFE, + 0x0965,0x09FE,0x0AB3,0x0A6B,0x0A3A,0x0A44,0x0A03,0x0A56, + 0x0A0B,0x09B3,0x0906,0x086B,0x07C3,0x07DC,0x0788,0x0718, + 0x070F,0x06FB,0x06EB,0x067D,0x064C,0x0685,0x06BC,0x0685, + 0x0701,0x0704,0x06D2,0x06C1,0x06DD,0x06AD,0x06F0,0x06D2, + 0x0699,0x0664,0x06B4,0x06BD,0x064C,0x065F,0x061B,0x0654, + 0x067E,0x06BD,0x0679,0x062C,0x0633,0x061C,0x05AE,0x0588, + 0x05BC,0x061A,0x05D4,0x0568,0x0512,0x04F6,0x04E1,0x049A, + 0x0468,0x04AC,0x04D2,0x04AC,0x0474,0x041F,0x044B,0x0468, + 0x048C,0x046D,0x0477,0x0406,0x03BF,0x040E,0x04D0,0x0511, + 0x053F,0x050C,0x04F6,0x043D,0x05D6,0x0506,0x03F1,0x051B, + 0x04DF,0x04F3,0x04BC,0x04DC,0x044C,0x0491,0x03FE,0x03BC, + 0x0403,0x0434,0x03FA,0x0374,0x03DC,0x03F6,0x0397,0x0380, + 0x0391,0x039E,0x03D8,0x039C,0x0359,0x0321,0x0348,0x0331, + 0x031F,0x0329,0x033B,0x0333,0x030D,0x0340,0x0314,0x02E3, + 0x02D0,0x02B0,0x02A7,0x02F2,0x02F0,0x030E,0x032C,0x0361, + 0x032C,0x0335,0x033C,0x0350,0x0367,0x0330,0x034C,0x0356, + 0x02C8,0x02F4,0x0365,0x034D,0x0345,0x0301,0x0355,0x033C, + 0x02E7,0x02D0,0x02C1,0x0279,0x00B4,0xFF8E,0xFF1C,0xFFC5, + 0xFFF6,0xFFAA,0xFFB6,0xFFCE,0xFFAC,0x00B4,0x01D8,0x0243, + 0x032D,0x03FD,0x03E4,0x023C,0x00DB,0x0197,0x04A2,0x0711, + 0x0748,0x0763,0x07EB,0x0768,0x05AF,0x0531,0x05FF,0x04B5, + 0x03DD,0x03CE,0x0414,0x0442,0x03EA,0x032D,0x0305,0x03D7, + 0x04EC,0x0575,0x0642,0x078C,0x08D0,0x08D7,0x07B9,0x0887, + 0x0ACB,0x0C9F,0x0CCE,0x0BC3,0x0B46,0x0BD9,0x0C62,0x0D47, + 0x0F8A,0x124C,0x143A,0x13D4,0x129A,0x1154,0x1126,0x1212, + 0x1454,0x170C,0x18D2,0x18FE,0x16A0,0x1575,0x170C,0x190B, + 0x1A3F,0x199A,0x1837,0x178A,0x17A1,0x18A3,0x192D,0x190C, + 0x186B,0x1833,0x17D1,0x1798,0x16D4,0x166B,0x1769,0x184A, + 0x1845,0x1691,0x145A,0x1301,0x133E,0x1569,0x17F5,0x190E, + 0x17B9,0x14E9,0x117F,0x1061,0x121E,0x14E5,0x15F1,0x14CB, + 0x1267,0x11A7,0x1093,0x107C,0x139C,0x1294,0x103F,0x0DAC, + 0x0A6B,0x088F,0x08CF,0x0BDC,0x0FBB,0x1244,0x11A1,0x0DF3, + 0x092A,0x04DE,0x03E6,0x072C,0x0BE6,0x0E79,0x0D96,0x0B45, + 0x0954,0x085C,0x0829,0x08D2,0x0A1E,0x0AF2,0x0A4C,0x08D9, + 0x07DB,0x08BB,0x0A89,0x0C51,0x0D0B,0x0BC7,0x0879,0x04EF, + 0x03FF,0x05CC,0x089C,0x09EB,0x09E3,0x088F,0x06BC,0x04D0, + 0x02EA,0x01A5,0x0160,0x019E,0x020F,0x0214,0x01BF,0x0123, + 0xFF7A,0xFDBA,0xFC86,0xFC24,0xFBB5,0xFB42,0xFA7C,0xFA3F, + 0xFC41,0xFC84,0xFBB8,0xFB0A,0xF9D8,0xF857,0xF67E,0xF60A, + 0xF672,0xF682,0xF6F5,0xF642,0xF597,0xF554,0xF534,0xF571, + 0xF55A,0xF47E,0xF3E0,0xF2EA,0xF2A6,0xF3F3,0xF439,0xF515, + 0xF6F2,0xF75C,0xF5D2,0xF424,0xF29A,0xF217,0xF309,0xF539, + 0xF73D,0xF77B,0xF57C,0xF3CC,0xF404,0xF548,0xF5E9,0xF4D5, + 0xF3A1,0xF3A7,0xF413,0xF4EC,0xF4C1,0xF2D2,0xF250,0xF366, + 0xF41E,0xF4E9,0xF4CA,0xF28E,0xF09C,0xF09A,0xF219,0xF2BF, + 0xF1A2,0xEFF7,0xEE50,0xED16,0xECED,0xEDA9,0xED47,0xEB36, + 0xEA8F,0xED01,0xF0C1,0xF26A,0xF0EE,0xEDA4,0xEA90,0xE754, + 0xE663,0xEA03,0xF173,0xF635,0xF463,0xEEAA,0xE9AF,0xE94D, + 0xECCE,0xF25F,0xF570,0xF2A3,0xEB41,0xE56B,0xE7C5,0xF1F0, + 0xFA74,0xFAA7,0xF44C,0xED04,0xE9D2,0xEAFD,0xEF29,0xF453, + 0xF5A3,0xF2CD,0xF019,0xF14C,0xF43D,0xF431,0xEF84,0xECA6, + 0xF0F7,0xF804,0xF821,0xF17A,0xEA8D,0xE98F,0xEE13,0xF46A, + 0xF8AD,0xF7F5,0xF249,0xEC7A,0xE987,0xEB60,0xF046,0xF41F, + 0xF4B3,0xF45F,0xF471,0xEEF8,0xEB04,0xEA79,0xEFD7,0xF6FD, + 0xFA2B,0xF71B,0xF167,0xEBE3,0xEA05,0xECEF,0xF164,0xF5F8, + 0xF845,0xF66B,0xF0C2,0xED43,0xEDD4,0xEF12,0xF05D,0xF1CC, + 0xF324,0xF54A,0xF6E6,0xF511,0xEFB4,0xEB76,0xEE80,0xF4C2, + 0xF846,0xF759,0xF39D,0xF048,0xF113,0xF548,0xF8AD,0xF767, + 0xF3EE,0xF20D,0xF2FA,0xF512,0xF5DF,0xF46B,0xF2EE,0xF39C, + 0xF70F,0xF8DB,0xF77C,0xF5F4,0xF53B,0xF563,0xF6B1,0xF84C, + 0xF730,0xF39A,0xF17C,0xF450,0xFAC7,0xFE71,0xFBD5,0xF458, + 0xECF9,0xE893,0xE71F,0xE8F6,0xEAC7,0xEC2A,0xEDCD,0xEF3F, + 0xF053,0xEF53,0xEC38,0xE865,0xE6ED,0xE965,0xECAD,0xEE59, + 0xEE74,0xF040,0xF3ED,0xF867,0xF919,0xF673,0xF428,0xF2EC, + 0xF3AC,0xF74B,0xFCF1,0x010F,0x0264,0x0246,0x02D9,0x045B, + 0x0517,0x02D9,0x0075,0x006F,0x03BA,0x084D,0x0BF4,0x0D1F, + 0x0BC1,0x096D,0x072C,0x065E,0x0608,0x06C4,0x0514,0x0304, + 0x0402,0x068C,0x0813,0x0600,0x027F,0xFF0F,0xFDAE,0xFDA1, + 0xFD92,0xFCC2,0xFC3D,0xFCBE,0xFE1C,0xFDC7,0xFC9A,0xFB3F, + 0xF8FD,0xF63B,0xF52F,0xF628,0xF72E,0xF78E,0xF796,0xF868, + 0xFAB5,0xFBC8,0xF9E9,0xF742,0xF533,0xF565,0xF7DE,0xFB29, + 0xFDD8,0xFEDD,0xFE37,0xFDBC,0xFE14,0xFEF0,0xFF59,0xFEBB, + 0xFE62,0xFF29,0x01DE,0x0490,0x0566,0x0487,0x0388,0x0380, + 0x03F8,0x04CC,0x052D,0x0512,0x04A1,0x03CF,0x043F,0x063F, + 0x08DF,0x0877,0x0585,0x0205,0x0080,0x00DF,0x01F4,0x02A7, + 0x038E,0x0385,0x021B,0xFFDA,0xFE13,0xFD6B,0xFC7F,0xFBE3, + 0xFCFF,0xFC20,0xF8DE,0xFA59,0xFE43,0x00A5,0x010A,0xFDF6, + 0xF915,0xF47B,0xF25D,0xF4F0,0xFAEA,0x0060,0x014F,0xFE1C, + 0xFB38,0xFC03,0x005A,0x036E,0x00CE,0xF88B,0xEFAA,0xEF48, + 0xFB36,0x0C4B,0x15B2,0x0FF0,0x0028,0xF1BB,0xEF00,0xF75C, + 0x0183,0x05C2,0x0663,0x088B,0x0BAA,0x0AAD,0x048E,0xFBA3, + 0xF59B,0xF767,0x0063,0x09EC,0x0D2A,0x0935,0x02E6,0xFEEE, + 0x0092,0x05E7,0x08E6,0x0451,0xFAEE,0xF36E,0xF2CC,0xFADA, + 0x07CA,0x1116,0x11D8,0x0A7B,0xFFE6,0xF66D,0xEEFC,0xEC5E, + 0xF23F,0x000D,0x1161,0x18B6,0x108E,0x00FF,0xF552,0xF323, + 0xF84E,0xFCD8,0xFCAB,0xFA16,0xFB6E,0x01D1,0x07CE,0x08C2, + 0x067A,0x022B,0xFCBD,0xF5F9,0xF34F,0xF482,0xF9B6,0x0246, + 0x0C34,0x10C3,0x0DA5,0x045C,0xF90F,0xF2AA,0xF4F1,0xFD11, + 0x064F,0x0B44,0x088F,0x017F,0xFCB8,0xFDD5,0x0229,0x0696, + 0x07FB,0x0496,0xFC12,0xF5EE,0xF625,0x00AC,0x0CFE,0x0E8F, + 0x0611,0xFC59,0xF77F,0xF91E,0xFF0F,0x0741,0x09C2,0x02F2, + 0xF7D2,0xF25A,0xF612,0xFD0B,0xFEE3,0xFA3C,0xF318,0xEE33, + 0xEC4C,0xEDA8,0xF224,0xF815,0xFBBA,0xFADA,0xF682,0xF20D, + 0xEF14,0xED78,0xEF07,0xF587,0xFE37,0x0358,0x01FE,0xFCEC, + 0xF983,0xFAF2,0xFF24,0x022C,0x03C3,0x03E2,0x033B,0x0357, + 0x05AC,0x0980,0x0C5C,0x0CD9,0x0B95,0x09EA,0x099B,0x09D5, + 0x09E6,0x0B89,0x0E3F,0x10D2,0x10E4,0x0EA2,0x0BB2,0x090E, + 0x07D6,0x0899,0x0A92,0x0AF4,0x0899,0x0534,0x032A,0x044D, + 0x0649,0x063D,0x03AB,0x002E,0xFD19,0xFB90,0xFBA8,0xFD54, + 0xFE2E,0xFFD1,0xFD61,0xF9D3,0xF95C,0xF771,0xF5FA,0xF581, + 0xF75F,0xFA55,0xFC15,0xFB18,0xF880,0xF6C4,0xF6F8,0xF8B8, + 0xFB27,0xFC7D,0xFC83,0xFB82,0xFB65,0xFC34,0xFDFF,0x001A, + 0x017F,0x025C,0x02DE,0x0232,0x0067,0xFF59,0x014A,0x053B, + 0x087B,0x0959,0x06EF,0x043D,0x030F,0x04B4,0x070B,0x0872, + 0x0800,0x06A5,0x05D0,0x05B7,0x061A,0x05F7,0x04E0,0x045D, + 0x04E7,0x049D,0x02BA,0x00D6,0xFFDB,0x00DD,0x01D5,0x01AF, + 0x00A5,0xFF30,0xFD3A,0xFB1D,0xFB09,0xFCF0,0xFCFF,0xFA62, + 0xFA3A,0xFD97,0x00E7,0xFFCC,0xF88B,0xF09E,0xECA7,0xF120, + 0xFC8C,0x071C,0x0A4E,0x04FE,0xFA52,0xEFF7,0xED05,0xF511, + 0x0279,0x0A21,0x05FA,0xFCE0,0xF7FD,0xFB1E,0x02A1,0x099D, + 0x0CD6,0x0933,0xFE74,0xF237,0xF03D,0xFD94,0x1053,0x1B04, + 0x17DC,0x0A50,0xFB5B,0xF299,0xF3AF,0xFE37,0x0B25,0x1260, + 0x0FB8,0x076F,0xFFBF,0xFC75,0xFEB0,0x0009,0x00A9,0x00E6, + 0x03F9,0x062D,0x01FC,0xFB4C,0xFA2A,0x00F7,0x0983,0x0A75, + 0x0070,0xF2BA,0xEDC5,0xF6E8,0x0758,0x131A,0x111B,0x0219, + 0xF1E1,0xED40,0xF75A,0x0596,0x09DC,0x013E,0xF817,0xFA44, + 0x0370,0x0736,0x01CD,0xF94B,0xF7F0,0x004B,0x0AAF,0x0B34, + 0xFFA6,0xF2AC,0xF1A4,0xFD9A,0x0CED,0x1412,0x0E95,0x0158, + 0xF5C3,0xF258,0xF9E8,0x05D3,0x0C5F,0x0C97,0x0A69,0x0771, + 0xFFF9,0xF74B,0xF6AC,0xFF1D,0x0811,0x0B81,0x0A1E,0x05CF, + 0xFE5B,0xF7C8,0xFA07,0x0512,0x0DFE,0x0957,0xFA4D,0xF0C1, + 0xF5B6,0x0239,0x0C47,0x0DCC,0x06D6,0xFC0E,0xF2A2,0xF0BA, + 0xF618,0xF8EA,0xF7A7,0xF619,0xF508,0xF966,0xFD81,0xFB19, + 0xF5A1,0xF22F,0xF32D,0xF5B5,0xF6A8,0xF47A,0xF2CF,0xF528, + 0xFC06,0x03F6,0x0773,0x0392,0xFAAC,0xF525,0xF7B5,0xFFDD, + 0x0715,0x0A08,0x09A0,0x08E6,0x098F,0x0AB0,0x0B34,0x0A7A, + 0x096B,0x09B2,0x0BA2,0x0DE8,0x0E82,0x0E05,0x0E05,0x0FAC, + 0x11F2,0x11AB,0x0CC0,0x0630,0x026F,0x044D,0x08FC,0x0D23, + 0x0DE1,0x0B00,0x06AF,0x0320,0x00AD,0xFF39,0xFD51,0xFC69, + 0xFDC4,0xFFC0,0x00AC,0xFF62,0xFC3E,0xF9B9,0xF877,0xFAB4, + 0xFB67,0xFA32,0xF860,0xF777,0xF827,0xFA6D,0xFCCB,0xFDE4, + 0xFC92,0xFA56,0xF7CE,0xF665,0xF631,0xF89A,0xFC5A,0xFF72, + 0x0125,0x0195,0xFFE8,0xFE39,0xFE76,0xFEFB,0xFFDA,0x0198, + 0x02BC,0x0371,0x050E,0x06AE,0x079C,0x06D3,0x0590,0x04FC, + 0x0474,0x0382,0x03D9,0x0534,0x06E0,0x0845,0x08A6,0x0784, + 0x04F4,0x02A6,0x0246,0x02A5,0x00D1,0x0076,0x014A,0x01DF, + 0x01F3,0x0190,0x013E,0x0057,0xFE45,0xFB1E,0xF8F7,0xF96E, + 0xFA4C,0xF8E5,0xF79D,0xFA77,0x009F,0x0237,0xFC69,0xF2DB, + 0xEB5B,0xEB7E,0xF201,0xF925,0xFF1A,0x009D,0xFE66,0xFBE9, + 0xFAEB,0xF994,0xF593,0xF19B,0xF146,0xF5E8,0xFDE8,0x03EE, + 0x04B9,0x0102,0xFE4A,0xFE98,0xFF51,0xFE83,0xFCE5,0xFA6A, + 0xF7C7,0xF95F,0x0205,0x0CF3,0x1116,0x0A41,0xFDBE,0xF40E, + 0xF259,0xF8C3,0x0033,0x043E,0x0589,0x05BD,0x0550,0x0294, + 0xFD5C,0xF9F6,0xF981,0xFB35,0xFF25,0x03FF,0x03F4,0xFBF5, + 0xF302,0xF253,0xFC5E,0x072C,0x07A7,0xFDF9,0xF178,0xEBA7, + 0xF39A,0x02E0,0x09A8,0x07EC,0xFCAD,0xEF83,0xEA4F,0xF205, + 0x000B,0x0A02,0x0A07,0x0005,0xF39F,0xEF57,0xF654,0x00C9, + 0x0625,0x0483,0x001D,0xFCDF,0xFD85,0x00DA,0x0335,0x01DC, + 0xFE76,0xFC79,0xFC53,0xFC3F,0xFE10,0x0327,0x0888,0x0BD1, + 0x0A89,0x0398,0xF915,0xF26C,0xF489,0xFF22,0x0D9B,0x16C4, + 0x11CF,0x0136,0xF361,0xF31E,0xFE7E,0x0930,0x0B81,0x05D3, + 0xFD21,0xF79B,0xF948,0x0108,0x07E1,0x0A73,0x08FA,0x0398, + 0xFC76,0xF66E,0xF436,0xF63D,0xFB03,0xFF97,0xFFFC,0xFAD7, + 0xF1E3,0xEC48,0xEFEF,0xF812,0xFDF6,0xFC61,0xF595,0xEFA4, + 0xEEA9,0xF221,0xF8E9,0xFEFA,0x01FF,0x014B,0xFE37,0xFB68, + 0xFB52,0xFD72,0x0083,0x0457,0x082B,0x0BAA,0x0BC6,0x08C0, + 0x0640,0x0757,0x0B2D,0x0FA6,0x11E3,0x1155,0x0E9A,0x0BF0, + 0x0C27,0x0FBD,0x1357,0x14A8,0x129E,0x0F07,0x0BD3,0x0A14, + 0x0A7D,0x0CD9,0x0F62,0x1069,0x0D36,0x0958,0x05EC,0x0391, + 0x027B,0x02D7,0x0408,0x053E,0x03FA,0x00B8,0xFD74,0xFC00, + 0xFCFE,0xFF2E,0x001E,0x0012,0xFD7A,0xFA4D,0xF79D,0xF761, + 0xF9E4,0xFD4E,0xFEA6,0xFD89,0xFB52,0xF94E,0xF8B4,0xF9C6, + 0xFBF3,0xFECD,0x00AB,0x00A4,0xFEB8,0xFCD7,0xFD5B,0xFFDC, + 0x036A,0x0574,0x0561,0x0402,0x0300,0x02A2,0x038B,0x05AE, + 0x0732,0x0801,0x0730,0x06D2,0x0762,0x07B2,0x06F4,0x05FF, + 0x0610,0x073F,0x07B7,0x0720,0x0535,0x0385,0x030A,0x0341, + 0x0473,0x050E,0x047F,0x02B5,0x0065,0xFFA3,0x0009,0x0092, + 0xFF3E,0xFD7F,0xFD29,0xFBF9,0xFA35,0xF9C4,0xFC18,0xFFAE, + 0x01C7,0xFF05,0xFA40,0xF26D,0xEE82,0xF30E,0xFBCC,0x027C, + 0x01FD,0xFC27,0xF865,0xF91E,0xFB0E,0xF906,0xF71C,0xF9D9, + 0xFE31,0x00EF,0x015D,0x0086,0xFDAE,0xFBA2,0xFC1A,0x0090, + 0x057E,0x075E,0x03ED,0xFDD4,0xF899,0xF8D0,0x0063,0x09DC, + 0x0F31,0x0E0A,0x0519,0xF985,0xF252,0xF4AE,0xFD33,0x060E, + 0x0CD0,0x0FC5,0x0B30,0xFE9A,0xF254,0xF02F,0xF9A4,0x0590, + 0x0A91,0x065C,0xFE28,0xF7C5,0xF4F6,0xF7E4,0x006F,0x0883, + 0x08CD,0xFEF8,0xF178,0xEA8D,0xEEE7,0xFBDF,0x0CEE,0x16D3, + 0x0EFC,0xFAD4,0xEA7B,0xE84C,0xF3A4,0x0202,0x0AC5,0x0A01, + 0x03E6,0xFD8A,0xFA43,0xFB41,0xFED3,0x02E5,0x049F,0x0191, + 0xFC78,0xF9FB,0xFB2D,0xFFD5,0x0633,0x0C01,0x0D38,0x0592, + 0xF9BF,0xF4AC,0xF9A5,0x02FA,0x0839,0x0577,0xFFC8,0xFE7E, + 0x02B1,0x0746,0x074A,0x00E9,0xF969,0xF517,0xF63B,0xFD73, + 0x069D,0x0BB1,0x081A,0x0157,0xFC3A,0xF99D,0xF816,0xF758, + 0xFA06,0xFEF0,0x01CA,0x00DA,0x0044,0x0093,0xFE30,0xF5F9, + 0xEC46,0xE680,0xE634,0xEB37,0xF30B,0xFB6F,0x00C6,0xFF52, + 0xF747,0xEE73,0xEA32,0xEAA1,0xED2E,0xF0B0,0xF625,0xFC96, + 0x0139,0x01C7,0xFFB5,0xFD5E,0xFBCD,0xFB14,0xFA50,0xFB29, + 0xFEB4,0x03CE,0x08B8,0x0CBD,0x0ECD,0x0EE7,0x0B83,0x05B5, + 0x022F,0x031C,0x05E6,0x09A4,0x0D23,0x0FDD,0x10DC,0x0F16, + 0x0BDC,0x0987,0x0725,0x049D,0x0227,0x0168,0x03BC,0x06EB, + 0x0838,0x06FC,0x049D,0x01C4,0xFF47,0xFB74,0xF83E,0xF716, + 0xF7CD,0xF97C,0xFBE3,0xFD66,0xFDC7,0xFACA,0xF676,0xF334, + 0xF559,0xF539,0xF446,0xF5B8,0xF67B,0xF8A0,0xFA12,0xFA1F, + 0xF9C3,0xF91E,0xF7E6,0xF784,0xF787,0xF9D7,0xFB7E,0xFC98, + 0xFE8B,0x0137,0x02FD,0x02A5,0x006F,0xFD8A,0xFD1C,0xFF0C, + 0x029F,0x057E,0x071D,0x0753,0x06FC,0x0675,0x0569,0x03D2, + 0x0296,0x0295,0x0351,0x0570,0x07B8,0x0858,0x06FD,0x0556, + 0x044F,0x0405,0x034E,0x0136,0xFF79,0xFFB3,0x01B5,0x03CC, + 0x03BE,0x017E,0xFDFB,0xFC0B,0xFD3F,0xFDE9,0xFC83,0xF9C4, + 0xF83E,0xF8DA,0xFCDA,0x01F9,0x0423,0xFFA8,0xF675,0xEE10, + 0xEAD7,0xF186,0xFF06,0x08F3,0x08AB,0x0071,0xF6E5,0xEFB8, + 0xEE25,0xF39D,0xFD1E,0x0459,0x05FE,0x0495,0x0158,0xFB6A, + 0xF650,0xF7E5,0xFFC9,0x07DA,0x0BB6,0x0909,0x01B0,0xFA4F, + 0xF63B,0xF804,0x005C,0x0B97,0x11A3,0x0DEF,0x0427,0xFCFA, + 0xFC26,0xFD7A,0xFF46,0x02B6,0x066E,0x08A2,0x090A,0x06FD, + 0x01F6,0xFB2B,0xF6AC,0xFB59,0x0631,0x0CD4,0x0992,0xFD08, + 0xF1CF,0xF163,0xF8E0,0x00EC,0x064D,0x0760,0x0397,0xFBBB, + 0xF66B,0xF90D,0xFF77,0x0211,0xFF25,0xFA46,0xF7B9,0xF841, + 0xFAF6,0x011A,0x0915,0x0CF0,0x07E3,0xF9D3,0xEC18,0xE921, + 0xF3FC,0x0399,0x0DE9,0x0FEE,0x0C8A,0x04F0,0xF9A0,0xF0B6, + 0xF058,0xFA52,0x076D,0x0E54,0x0B9E,0x040F,0xFDD9,0xFD7C, + 0x0280,0x07E1,0x083F,0xFFDE,0xF348,0xEFB5,0xFCF2,0x1087, + 0x182E,0x1024,0x0171,0xF75A,0xF59E,0xFA8E,0xFF21,0xFF92, + 0xFEFC,0x00B5,0x056A,0x09CD,0x07A4,0xFE60,0xF655,0xF781, + 0xFE3D,0x01D2,0xFAF9,0xEF5F,0xE875,0xEC21,0xF81F,0x038B, + 0x040E,0xFBEC,0xF16D,0xE8AA,0xEA0B,0xF148,0xF6CB,0xF860, + 0xF8FA,0xFBC1,0xFE6C,0xFE1A,0xF9AC,0xF58F,0xF63A,0xFB99, + 0x01C0,0x0473,0x035B,0x00D9,0x0196,0x0656,0x0BFD,0x0E92, + 0x0BCB,0x05E0,0x0350,0x0613,0x0C48,0x1126,0x11D7,0x10EF, + 0x102B,0x0F6A,0x0D76,0x0AA3,0x082C,0x079D,0x08B6,0x0B4C, + 0x0D6C,0x0CAC,0x08D2,0x04B7,0x02D7,0x0432,0x0529,0x02B9, + 0xFDF5,0xFA98,0xFA9D,0xFDAB,0x00CE,0x01C4,0xFEA1,0xF9FF, + 0xF5E2,0xF443,0xF53B,0xF6E6,0xF7CF,0xF8E4,0xFC17,0xFD33, + 0xFBE5,0xF8E9,0xF678,0xF681,0xF911,0xFB85,0xFBF2,0xFBA0, + 0xFAEB,0xFB01,0xFD26,0x0084,0x02DB,0x0276,0xFF78,0xFC96, + 0xFCE8,0x0042,0x04D2,0x06E7,0x05CA,0x04A9,0x051F,0x058D, + 0x055B,0x0508,0x0459,0x042E,0x0573,0x079D,0x0911,0x07B8, + 0x04A0,0x02E9,0x0378,0x04F0,0x0490,0x02D1,0x014A,0x0091, + 0x008D,0x0150,0x01FF,0x00D0,0xFFBC,0xFF49,0xFD9B,0xFC19, + 0xFBA0,0xFA7F,0xF868,0xF861,0xFC7E,0x01A1,0xFFBA,0xF840, + 0xF164,0xEEE9,0xF1C4,0xF965,0xFF80,0xFF6F,0xFA45,0xF3BC, + 0xF1EE,0xF7F2,0xFF78,0x0098,0xFA85,0xF3F9,0xF316,0xF77A, + 0xFD52,0x033A,0x083E,0x0804,0x0114,0xF822,0xF4E7,0xF81B, + 0xFD92,0x015C,0x0484,0x07AD,0x06F4,0x00F1,0xF968,0xF8FC, + 0x0113,0x0901,0x0A1B,0x04EE,0xFD49,0xF878,0xF6CF,0xF95C, + 0x0076,0x099D,0x0EC5,0x0BBD,0x0017,0xF27B,0xEBDF,0xF0C8, + 0xFBAE,0x05D3,0x099F,0x05A5,0xFCCB,0xF4CC,0xF281,0xF3D3, + 0xF683,0xFA41,0xFEC5,0x0240,0x01E6,0xFE1D,0xF8B0,0xF817, + 0xFAE3,0xF95E,0xF6E9,0xF496,0xF8BE,0x004C,0x042E,0x02DF, + 0x00D0,0xFFF1,0xFEBA,0xFB18,0xF4D9,0xF236,0xF768,0x02E0, + 0x0BC6,0x0C03,0x058F,0xFF0C,0xFB64,0xF955,0xFBF6,0x0178, + 0x039D,0x00B3,0xFE91,0x025B,0x091A,0x0968,0x023B,0xFB70, + 0xF9C6,0xFADD,0xFD9D,0x01FB,0x0842,0x0C17,0x0764,0xFDA4, + 0xF875,0xFBE5,0x00FE,0x0045,0xFC3C,0xFE4E,0x0444,0x062C, + 0x0250,0xFDF6,0xFD02,0xFC82,0xF995,0xF674,0xF614,0xF588, + 0xF23F,0xF075,0xF43B,0xFB85,0xFF62,0xFAEC,0xF356,0xEE32, + 0xEBF6,0xEDAA,0xF035,0xF4A8,0xFA0D,0xFCDF,0xFC6B,0xFAAC, + 0xF964,0xF928,0xF962,0xFBBA,0xFFD4,0x0290,0x02DA,0x0146, + 0x02AE,0x0789,0x0B9B,0x0C0B,0x0A33,0x0775,0x0584,0x05D6, + 0x08DC,0x0DD1,0x116F,0x123D,0x10A4,0x0EC7,0x0C86,0x0A17, + 0x083A,0x07E2,0x0961,0x0B81,0x0C81,0x0B98,0x0A0E,0x06B4, + 0x037B,0x01BE,0x019F,0x038D,0x0263,0xFFAB,0xFE5C,0xFE1E, + 0xFEAA,0xFE7B,0xFCBA,0xFADD,0xF9C3,0xF920,0xF91F,0xF835, + 0xF7AB,0xF8EA,0xFB0F,0xFBFF,0xFC0C,0xFB5E,0xF99F,0xF7B3, + 0xF77A,0xF893,0xFADC,0xFC43,0xFD19,0xFD4C,0xFE6F,0xFFC6, + 0x0015,0xFF91,0xFED4,0xFEB1,0x0003,0x0251,0x046A,0x0512, + 0x04F5,0x05D5,0x071A,0x06CA,0x063E,0x0642,0x05F6,0x05F9, + 0x0661,0x06E7,0x07F0,0x07DF,0x0722,0x0610,0x0552,0x052F, + 0x0475,0x0313,0x0201,0x01A5,0x022E,0x02D4,0x02E0,0x021F, + 0x0134,0xFF95,0xFD04,0xFAFE,0xFB19,0xFBEC,0xFC45,0xFBB0, + 0xFBF7,0xFD5A,0xFE8C,0xFCC5,0xF831,0xF41C,0xF532,0xF8B5, + 0xF9A4,0xFBCB,0xFAC5,0xFAA5,0xFC23,0xFCDA,0xFCE1,0xFB78, + 0xF906,0xF781,0xF7EF,0xFB74,0xFFAB,0x025E,0x01B4,0xFFBF, + 0xFF59,0xFFC5,0xFFA3,0xFE6D,0xFD93,0xFDAC,0xFF6D,0x02B3, + 0x06A7,0x0829,0x0736,0x05F3,0x03B9,0x005A,0xFC9A,0xFB2A, + 0xFCE2,0x01E9,0x07C5,0x0BB7,0x0B3D,0x045B,0xFA94,0xF524, + 0xF805,0xFF4D,0x0379,0x02C5,0x0047,0xFF47,0xFF07,0xFE1E, + 0xFD26,0xFCB7,0xFC3B,0xFC3A,0xFCB7,0xFD2A,0xFC72,0xF997, + 0xF7F0,0xF9C3,0xFE93,0x0327,0x0396,0x0007,0xF9F3,0xF42C, + 0xF596,0xFCAD,0x04F2,0x089D,0x07EB,0x03B7,0xFCD1,0xF6E3, + 0xF4F9,0xF8F3,0x0210,0x0B0A,0x0CD7,0x0696,0xFD15,0xF5FF, + 0xF59D,0xFC82,0x06E0,0x0C96,0x094A,0x0037,0xF88A,0xF7AB, + 0xFE88,0x06FB,0x0BCB,0x0A21,0x0337,0xFC04,0xF8F4,0xFA55, + 0xFE9D,0x034C,0x05DD,0x0599,0x0267,0xFEFE,0xFCD9,0xFBD4, + 0xFD08,0xFF4F,0xFF9F,0xFDA7,0xFD9E,0xFD6C,0xFD74,0xFDF3, + 0xFE3A,0xFD0A,0xFA27,0xF5B7,0xF33F,0xF3FA,0xF771,0xFBA0, + 0xFEC5,0xFE2C,0xFB22,0xF714,0xF39B,0xF37D,0xF5D0,0xF966, + 0xFC40,0xFE4B,0xFF68,0xFEE6,0xFCF2,0xFB26,0xFC92,0xFF52, + 0x0129,0x013F,0xFFF3,0xFF2C,0x003C,0x0389,0x06AE,0x08BD, + 0x07D5,0x04B2,0x0135,0x003C,0x0246,0x0584,0x07F0,0x08C7, + 0x07ED,0x0679,0x04B7,0x0367,0x0304,0x031B,0x0312,0x0322, + 0x031C,0x02F2,0x01EE,0x012A,0x0138,0x00F3,0x002A,0xFF18, + 0xFD8C,0xFB2E,0xF914,0xFA26,0xFD3B,0x0017,0xFFD6,0xFD19, + 0xFADC,0xF9E3,0xF914,0xF8B6,0xF902,0xF9CA,0xFB11,0xFE9D, + 0xFF4C,0xFEEF,0xFDB8,0xF9BC,0xF833,0xFA7A,0xFE0E,0xFF40, + 0xFE6F,0xFCBD,0xFD01,0xFF1F,0x015D,0x01A8,0x0126,0x00A9, + 0x006B,0x0079,0xFFD5,0x0021,0x0106,0x0218,0x02CA,0x03EF, + 0x04F5,0x04AF,0x028E,0x0046,0xFF8B,0x0140,0x02AE,0x03CB, + 0x047C,0x0411,0x03A8,0x020B,0x007A,0xFFD8,0x0036,0x002E, + 0x000C,0x0033,0x00F1,0x0037,0xFDD7,0xFBED,0xFC9B,0xFF0D, + 0xFFCD,0xFE31,0xFB9B,0xFA8B,0xFB77,0xFC44,0xFDAC,0xFEF0, + 0xFEB6,0xFC80,0xFAD0,0xFA18,0xFABE,0xFB4B,0xFB4A,0xFA7B, + 0xFB59,0xFC74,0xFB0A,0xF8AD,0xF818,0xF9B7,0xFB2A,0xFB83, + 0xFA79,0xF91A,0xF86A,0xF868,0xF8B0,0xF8B8,0xF812,0xF797, + 0xF760,0xF6A4,0xF50B,0xF4C4,0xF4C0,0xF37A,0xF364,0xF56B, + 0xF760,0xF6C2,0xF504,0xF40C,0xF407,0xF4B0,0xF4D0,0xF4DE, + 0xF4D1,0xF3D0,0xF31D,0xF395,0xF3C3,0xF37A,0xF320,0xF281, + 0xF22B,0xF165,0xF1A5,0xF196,0xEF9D,0xEED0,0xEE3C,0xEE0C, + 0xEE40,0xEDC6,0xED1E,0xEC9A,0xEC7B,0xEC70,0xEC6F,0xEC2A, + 0xEBF3,0xEC12,0xEBF9,0xEC00,0xEC01,0xEB22,0xEA9E,0xEA4F, + 0xEA10,0xEA6A,0xEA6C,0xEA39,0xE9E4,0xE99A,0xE964,0xE991, + 0xE990,0xEA35,0xE9FF,0xEA03,0xEA74,0xEA29,0xEA40,0xEA9B, + 0xEA9D,0xEA88,0xEB3C,0xEB82,0xEBB9,0xEBB4,0xEB7E,0xEBC0, + 0xEC0F,0xEC52,0xEC94,0xECBC,0xECE9,0xED4D,0xEDF9,0xEE6C, + 0xEEB4,0xEE9A,0xEED3,0xEF48,0xEF80,0xEFD1,0xF03B,0xF102, + 0xF187,0xF191,0xF210,0xF29C,0xF2E2,0xF34E,0xF3AA,0xF3B4, + 0xF44D,0xF4A5,0xF55E,0xF5D8,0xF5FF,0xF6B3,0xF797,0xF689, + 0xF680,0xF8A9,0xF7FA,0xF885,0xF921,0xF95C,0xF9E3,0xFA34, + 0xFA93,0xFA91,0xFAD8,0xFBAD,0xFC87,0xFD09,0xFD94,0xFE0C, + 0xFE2B,0xFE3A,0xFE6C,0xFEA6,0xFEEE,0xFFAC,0x002E,0x0085, + 0x0095,0x00BD,0x010E,0x013F,0x015C,0x0213,0x028E,0x029F, + 0x0248,0x029D,0x02E6,0x034D,0x0396,0x03E6,0x0412,0x0445, + 0x04A6,0x04F4,0x0541,0x0599,0x05DE,0x0658,0x06EE,0x06DA, + 0x0730,0x0741,0x0797,0x07F8,0x0812,0x0845,0x088F,0x08F3, + 0x094F,0x095C,0x09BD,0x0A39,0x0B0F,0x0D26,0x0D40,0x0D19, + 0x0D34,0x0CF9,0x0CC1,0x0C7E,0x0CDF,0x0D13,0x0D4F,0x0D17, + 0x0D02,0x0CE6,0x0CFE,0x0D58,0x0D49,0x0DB0,0x0D94,0x0D77, + 0x0CEB,0x0D3B,0x0E7A,0x0E0C,0x0D08,0x0D04,0x0CD3,0x0CCB, + 0x0CF9,0x0CEE,0x0CF9,0x0CDD,0x0CAF,0x0D3F,0x0DAA,0x0D6E, + 0x0DDE,0x0D98,0x0D53,0x0CAD,0x0CBB,0x0D2F,0x0D6B,0x0D0F, + 0x0D4E,0x0D49,0x0C07,0x0C53,0x0CF3,0x0D16,0x0D15,0x0D43, + 0x0D2B,0x0D00,0x0D08,0x0CBE,0x0C4A,0x0C19,0x0BAD,0x0BA4, + 0x0B44,0x0A82,0x0AF5,0x0ADB,0x0A8E,0x0A6C,0x0A64,0x0A3D, + 0x0A7F,0x0A87,0x0A75,0x0A97,0x0A9C,0x0A2F,0x0A28,0x0AA3, + 0x0AB8,0x0AEF,0x0B10,0x0AAB,0x0A87,0x0A95,0x0A9F,0x0A9E, + 0x0AA5,0x0AD8,0x0A82,0x0A3F,0x0A35,0x0A11,0x0A76,0x0A3E, + 0x0A1F,0x09DB,0x09B2,0x0A16,0x09FD,0x09F5,0x09CE,0x093E, + 0x096E,0x09AB,0x09D5,0x098C,0x090D,0x0919,0x08FB,0x08EB, + 0x08C1,0x0878,0x0846,0x07ED,0x07E0,0x085C,0x083A,0x0813, + 0x0882,0x08B5,0x08B8,0x08F8,0x08EF,0x079F,0x0825,0x0958, + 0x0793,0x089B,0x088D,0x084C,0x07F9,0x0815,0x084F,0x0842, + 0x0836,0x07CF,0x0767,0x078D,0x07A5,0x0767,0x07FE,0x076A, + 0x075E,0x070A,0x075F,0x07A0,0x07C6,0x07BA,0x076D,0x0730, + 0x0719,0x071B,0x0777,0x07AD,0x0789,0x0767,0x06FD,0x06D7, + 0x069D,0x0678,0x06BB,0x0684,0x0666,0x0643,0x061F,0x056E, + 0x055F,0x0598,0x05CD,0x062B,0x065E,0x060F,0x059F,0x0572, + 0x0586,0x05A3,0x05A9,0x05D0,0x05E2,0x0576,0x0542,0x0525, + 0x0533,0x051E,0x0527,0x0533,0x053D,0x04C7,0x0328,0x013B, + 0x0208,0x0236,0x0259,0x0293,0x02FB,0x02E1,0x0268,0x0239, + 0x0201,0x01F7,0x0212,0x02A2,0x0290,0x02BF,0x02C0,0x024B, + 0x02F1,0x0293,0x01E3,0x02BE,0x033B,0x02DB,0x0236,0x025E, + 0x0279,0x0269,0x02EE,0x02D5,0x02B5,0x0304,0x02F2,0x02F3, + 0x0346,0x0370,0x032F,0x02BA,0x0294,0x0304,0x0305,0x0301, + 0x02CE,0x02AE,0x0436,0x03A5,0x0277,0x024B,0x0243,0x0206, + 0x0283,0x028F,0x0220,0x0264,0x02AD,0x0317,0x0334,0x02F1, + 0x0388,0x0376,0x033E,0x0336,0x02EF,0x02FA,0x0311,0x02F3, + 0x02BC,0x025A,0x0253,0x02B9,0x029F,0x02C5,0x02DA,0x02AB, + 0x02BE,0x02E0,0x029F,0x0216,0x0238,0x023D,0x0205,0x01F2, + 0x0214,0x01BD,0x01E3,0x01A8,0x014E,0x00F9,0x00D6,0x00BA, + 0x0122,0x0139,0x00F8,0x00B0,0x009D,0x006F,0xFFFE,0x006A, + 0x00D9,0x0086,0x00DA,0x023B,0x0337,0x0365,0x035E,0x0320, + 0x032F,0x040F,0x0591,0x073D,0x07DE,0x084E,0x0869,0x0892, + 0x0874,0x0853,0x0848,0x08A8,0x0946,0x095A,0x092B,0x09CE, + 0x0A4E,0x0A6D,0x0ABD,0x0B7B,0x0C3B,0x0C19,0x0BC7,0x0C21, + 0x0D44,0x0DA6,0x0E6F,0x0EC4,0x0F76,0x0FE1,0x0F95,0x0F0A, + 0x0EDA,0x0EEA,0x0F07,0x10FF,0x13D0,0x151E,0x1408,0x1220, + 0x1250,0x1313,0x141D,0x15F4,0x174E,0x1825,0x178A,0x163B, + 0x14BB,0x146F,0x160F,0x18BF,0x1972,0x185A,0x16D4,0x162A, + 0x169C,0x17B2,0x18A4,0x189B,0x1838,0x1859,0x16A2,0x1493, + 0x146D,0x156F,0x1672,0x17A6,0x1828,0x174F,0x14CB,0x11C6, + 0x1127,0x130A,0x14A6,0x149B,0x1322,0x119F,0x10FF,0x10BF, + 0x110C,0x1145,0x11FA,0x1218,0x10A3,0x0D9C,0x0BD6,0x0D8A, + 0x0EDA,0x0EE3,0x0DE9,0x0CDD,0x0B4F,0x0A02,0x099D,0x0AB8, + 0x0A77,0x08A3,0x0735,0x079F,0x0731,0x05CF,0x03EC,0x02D4, + 0x037A,0x0443,0x03AD,0x02EE,0x01B9,0x00EA,0x013E,0x0294, + 0x039D,0x02C4,0xFF92,0xFCC1,0xFC7B,0xFE1D,0x0056,0x0180, + 0x0151,0x007C,0xFF98,0xFD99,0xFC4C,0xFB84,0xFBBD,0xFD16, + 0xFE9A,0xFE77,0xFDBE,0xFB53,0xF80E,0xF7AF,0xFA04,0xFC8C, + 0xFD84,0xFB17,0xF65C,0xF3B1,0xF49D,0xF813,0xFB8C,0xFD0B, + 0xFB71,0xF69F,0xF16A,0xEF54,0xF174,0xF633,0xFA42,0xFA89, + 0xF7C3,0xF483,0xF27D,0xF2B4,0xF36A,0xF39B,0xF378,0xF3FA, + 0xF53D,0xF5D2,0xF654,0xF1EE,0xF12D,0xF32B,0xF4FD,0xF5D8, + 0xF417,0xF0F5,0xEE2C,0xEF42,0xF411,0xF840,0xF839,0xF4BB, + 0xF0FD,0xF035,0xF0C7,0xF18D,0xF251,0xF3BA,0xF574,0xF5B7, + 0xF42B,0xF179,0xEFDA,0xEFC9,0xF149,0xF2E4,0xF350,0xF2B6, + 0xF1D5,0xF163,0xF1F0,0xF348,0xF3FB,0xF28E,0xEEAC,0xEBD7, + 0xEC63,0xF038,0xF5E7,0xF9AC,0xF809,0xF2B9,0xED03,0xE9C0, + 0xEABB,0xEEAB,0xF284,0xF529,0xF65E,0xF61C,0xF3C2,0xF03A, + 0xEDD7,0xED6B,0xEF14,0xF10D,0xF22D,0xF21E,0xF165,0xF0DF, + 0xF096,0xF14F,0xF0E5,0xF224,0xF113,0xED00,0xE89E,0xE814, + 0xEC62,0xF238,0xF637,0xF688,0xF368,0xEE66,0xEA29,0xE8DA, + 0xEB1B,0xEEBC,0xF1D1,0xF4DC,0xF7B6,0xF72E,0xF2BF,0xEC59, + 0xE9CA,0xEC87,0xF144,0xF42C,0xF4CE,0xF4A2,0xF336,0xF0B2, + 0xEFD1,0xF1AC,0xF3D6,0xF38E,0xF199,0xF03A,0xF191,0xF441, + 0xF51B,0xF338,0xF10C,0xF218,0xF432,0xF567,0xF301,0xF026, + 0xF123,0xF307,0xF4E1,0xF5D9,0xF586,0xF28E,0xEF7B,0xF0CC, + 0xF608,0xFB1C,0xFA8B,0xF499,0xEF93,0xEFDA,0xF50C,0xF96B, + 0xF9BB,0xF7D5,0xF6FE,0xF71A,0xF6DA,0xF57C,0xF3E9,0xF286, + 0xF23F,0xF4E0,0xFA4D,0xFE37,0xFBC4,0xF45D,0xEE2A,0xEEE7, + 0xF51C,0xFADA,0xFB96,0xF968,0xF7BA,0xF776,0xF69D,0xF60C, + 0xF78C,0xF903,0xF8D5,0xF866,0xF7A0,0xF6A0,0xF4E5,0xF42C, + 0xF628,0xFA20,0xFCA7,0xFC08,0xF947,0xF6C6,0xF4D5,0xF34D, + 0xF3EA,0xF894,0xFD9B,0xFF16,0xFC5B,0xF7D4,0xF47B,0xF354, + 0xF56A,0xF9D9,0xFFAD,0x0240,0xFF2D,0xF8A2,0xF3AE,0xF36A, + 0xF737,0xFCEB,0xFF86,0x010B,0xFD61,0xF733,0xF7C5,0xFD27, + 0x0135,0x009E,0xFCBC,0xF885,0xF5B8,0xF59F,0xF987,0xFFDD, + 0x04D5,0x0570,0x01A5,0xFC5A,0xF722,0xF34C,0xF23B,0xF790, + 0x0233,0x09D9,0x080D,0xFE8B,0xF5A1,0xF387,0xF7B0,0xFD96, + 0x039E,0x06CC,0x030D,0xFBB6,0xF6A0,0xF830,0xFEE1,0x0300, + 0x0186,0xFF12,0xFDCC,0xFDC2,0xFDDB,0xFE12,0xFFA6,0x00D7, + 0xFEF9,0xFC4D,0xFC54,0xFE80,0xFF4B,0xFE87,0xFE6D,0x007E, + 0x0221,0xFF45,0xFB03,0xFAD8,0xFF4B,0x0344,0x0274,0xFE9D, + 0xFD74,0xFD75,0xFF95,0x0302,0x05C1,0x058E,0x01F6,0xFDA8, + 0xFC10,0xFD59,0xFE0B,0xFD71,0xFEAA,0x02F1,0x076A,0x077E, + 0x0366,0xFED6,0xFACB,0xF795,0xF880,0xFE97,0x0529,0x085C, + 0x05C7,0xFE51,0xF89B,0xF972,0xFCFA,0xFFDD,0x011E,0x019C, + 0xFFF4,0xFB33,0xF76E,0xFA89,0x0176,0x05AA,0x0325,0xFCD4, + 0xF790,0xF5C1,0xF795,0xFC7B,0x01EB,0x03F2,0x0283,0xFEBF, + 0xF9F4,0xF85D,0xF978,0xFB8C,0xFE25,0x00A8,0x0211,0x00B2, + 0xFC01,0xF990,0xFBC4,0xFFE5,0x003F,0xFC2C,0xF5D7,0xF2B4, + 0xF49E,0xFBAB,0x0470,0x08D8,0x0470,0xF984,0xEF31,0xED64, + 0xF509,0x0019,0x04CD,0x00A8,0xFAA3,0xF94C,0xFAF8,0xFC54, + 0xFCAA,0xFBFA,0xFA1D,0xF81D,0xF82C,0xF9F5,0xFD97,0x0145, + 0x01FE,0xFFA6,0xFB50,0xF633,0xF365,0xF659,0xFD25,0x01CB, + 0x0177,0xFD68,0xF9D1,0xF961,0xFC71,0xFFF9,0xFF5F,0xFBFE, + 0xF8E3,0xF83F,0xFAD3,0xFDE9,0xFFB0,0x012E,0x0291,0x01CE, + 0xFDC4,0xF906,0xF684,0xF770,0xFC06,0x025B,0x04F8,0x02AA, + 0xFEC0,0xFECE,0xFE6E,0xFBDB,0xFAEB,0xFA2E,0xFDDF,0x0338, + 0x04E8,0x0126,0xFC8C,0xFB80,0xFED7,0x0224,0x01F8,0xFED3, + 0xFC09,0xFCBA,0x00DF,0x0513,0x049B,0x0088,0xFB4B,0xF934, + 0xFB74,0x017B,0x069D,0x0676,0x02DE,0x00B9,0x0067,0xFE73, + 0xFBC2,0xFAE8,0xFE15,0x02B3,0x04BB,0x0426,0x0358,0x01CB, + 0xFECC,0xFC7D,0xFDBD,0x0207,0x044A,0x01CA,0xFC19,0xFAA1, + 0x001B,0x0665,0x0837,0x05F1,0x017F,0xFC8C,0xF7FB,0xF74F, + 0xFCD1,0x0472,0x09AC,0x0A40,0x078E,0x0348,0xFC2D,0xF53D, + 0xF3D6,0xFADA,0x0604,0x0CF2,0x0A7F,0x0287,0xFAAB,0xF64E, + 0xF7FA,0xFF68,0x064F,0x0527,0xFDE8,0xF8C3,0xFBE5,0x02C7, + 0x0714,0x07E8,0x058D,0x002B,0xF7AD,0xF28E,0xF59C,0xFF69, + 0x0A99,0x0F32,0x0BD8,0x0364,0xFA64,0xF50D,0xF5BE,0xFC62, + 0x05A6,0x0B1E,0x0968,0x03C1,0xFF0C,0xFD33,0xFDD1,0x0137, + 0x04C9,0x0555,0x0277,0xFC8C,0xF97E,0xFD67,0x0399,0x09B5, + 0x0A97,0x0536,0xFD53,0xF868,0xF84F,0xFC2C,0x01DD,0x05F8, + 0x0643,0x0375,0x0132,0x0167,0x0370,0x055C,0x0654,0x040C, + 0xFF58,0xFBB6,0xFD99,0x03CE,0x08B1,0x0904,0x0544,0x0077, + 0xFE3B,0xFF7B,0x02C0,0x053F,0x03F0,0xFF9B,0xFCF3,0xFF55, + 0x05E6,0x08E0,0x0542,0x004A,0xFFEF,0x02D0,0x038A,0x0107, + 0xFE34,0xFDA2,0xFFDB,0x045C,0x0A1D,0x0BD4,0x05DC,0xFC1F, + 0xF78E,0xFBF4,0x03B2,0x06F1,0x046F,0x02E1,0x04F6,0x068B, + 0x0393,0xFF34,0xFDF4,0xFF18,0x0186,0x034B,0x04A5,0x0429, + 0x01B2,0x0057,0x02D0,0x0632,0x06DA,0x0369,0xFE23,0xFBC4, + 0xFD50,0xFE96,0xFFB3,0x05D3,0x0A19,0x0B2A,0x06FB,0xFFBE, + 0xFA96,0xF9FB,0xFDCB,0x0391,0x0748,0x06A6,0x0301,0xFE56, + 0xFC31,0xFEE4,0x04D1,0x072E,0x03A7,0xFEC3,0xFE07,0xFFC2, + 0xFF9D,0x0022,0x02EB,0x0642,0x05E7,0x0242,0xFD3F,0xFA3E, + 0xFBCF,0x009D,0x0553,0x0753,0x0600,0x0149,0xFB82,0xF880, + 0xFC05,0x0306,0x0790,0x068A,0x008D,0xFA77,0xF996,0xFDC4, + 0x044A,0x08D5,0x08A6,0x03BB,0xFC9D,0xF709,0xF892,0xFFF5, + 0x0748,0x0971,0x04C6,0xFDDE,0xF91C,0xFA88,0x013F,0x0A65, + 0x0D69,0x0837,0xFF4A,0xF772,0xF7C2,0x00F3,0x0C1D,0x1093, + 0x0A8A,0x0024,0xF97B,0xFAE0,0xFFDF,0x0386,0x044D,0x038D, + 0x02D6,0x02E3,0x037D,0x04B7,0x03F2,0xFF89,0xFBA2,0xFC0A, + 0xFF4D,0x00A9,0x0128,0x02E9,0x0565,0x05B1,0x01F6,0xFD9B, + 0xFBFF,0xFC29,0xFE68,0x027E,0x05CF,0x0430,0xFF73,0xFD61, + 0xFFE5,0x0394,0x042F,0xFF1B,0xF866,0xF5D0,0xFA69,0x02B1, + 0x099D,0x0938,0x01BA,0xF9BC,0xF74C,0xFA0A,0xFD54,0xFE4A, + 0xFF08,0x011F,0x031C,0x0150,0xFC74,0xF79F,0xF61A,0xF85E, + 0xFD10,0xFFDD,0xFEAA,0xFC21,0xFBA8,0xFCCD,0xFE3E,0xFEF0, + 0xFE78,0xFBFD,0xF7CA,0xF65C,0xFA54,0xFFCF,0x00EF,0xFE96, + 0xFDBA,0xFE9F,0xFD8D,0xFA0E,0xF845,0xF9EE,0xFCBA,0xFE18, + 0xFF3E,0x00FC,0x0111,0xFE71,0xFC2E,0xFD66,0xFFF6,0xFE99, + 0xFA06,0xF718,0xF91F,0xFDF8,0x0323,0x0699,0x0657,0x01EF, + 0xFAE7,0xF39D,0xF22C,0xF75F,0xFEDC,0x0506,0x0678,0x03BB, + 0xFF3F,0xFBD6,0xFB1D,0xFBB2,0xFCA1,0xFF86,0x01FB,0x009A, + 0xFCC5,0xFBBA,0xFC00,0x0254,0x07E8,0x08BC,0x04A6,0xFCF8, + 0xF512,0xF2F4,0xF74E,0xFFD7,0x07C7,0x0AD1,0x09AF,0x05BF, + 0x005B,0xF9A7,0xF4E5,0xF491,0xF901,0xFF27,0x0500,0x08D1, + 0x0A51,0x0736,0x0002,0xF9B2,0xF83B,0xFAF2,0xFD3D,0xFDC0, + 0xFE12,0xFFD4,0x034D,0x0551,0x0474,0x0138,0xFEB9,0xFD7D, + 0xFDDF,0xFD1E,0xFA8F,0xF92F,0xFC18,0x0329,0x09C7,0x0C7B, + 0x089A,0xFF5B,0xF6A4,0xF3D0,0xF78B,0xFEEF,0x05F2,0x07BF, + 0x04E5,0x0129,0xFF8F,0xFF73,0xFE4D,0xFD1E,0xFCDF,0xFEEF, + 0x014E,0x00BB,0xFE7D,0xFBA9,0xFB9A,0x0078,0x05B7,0x04E2, + 0xFCBA,0xF485,0xF2E3,0xF8E3,0x02A5,0x08AF,0x07CB,0x01BB, + 0xFB1F,0xF7BD,0xF93E,0xFD60,0x0081,0x0301,0x0445,0x03B9, + 0x0119,0xFC9A,0xF989,0xFB7F,0x02A4,0x0A09,0x0B88,0x060E, + 0xFBD8,0xF40B,0xF431,0xFDFB,0x0A22,0x1038,0x0CAB,0x03D5, + 0xFC60,0xF99F,0xF989,0xFAF9,0xFF2B,0x0633,0x0BAC,0x0CD8, + 0x0730,0xFDBA,0xF73E,0xF9F2,0x0343,0x0A04,0x077A,0xFFBB, + 0xFA94,0xFCDD,0x050E,0x0C70,0x0C7B,0x05E5,0xFC60,0xF741, + 0xF979,0x0134,0x0916,0x0C79,0x0997,0x043C,0xFF7D,0xFBD4, + 0xF9AC,0xFB46,0x00E7,0x070E,0x09DE,0x0651,0xFF05,0xFA0E, + 0xFB41,0x000B,0x0564,0x07FC,0x059F,0xFF10,0xF8FA,0xF859, + 0xFE59,0x05B3,0x0A4A,0x0AA8,0x05BE,0xFCE9,0xF5A4,0xF4A0, + 0xFB76,0x04BB,0x0AE3,0x0AE4,0x05BA,0xFED8,0xF9D7,0xF939, + 0xFD4D,0x02B5,0x057E,0x054A,0x02A7,0xFF57,0xFB79,0xFAD2, + 0xFF3F,0x06F2,0x0A88,0x0616,0xFE2C,0xF969,0xFA3C,0xFE1C, + 0x02F8,0x04A6,0x0679,0x0350,0xFE0A,0xFEAB,0x028B,0x0323, + 0x000C,0xFC4A,0xFC38,0x0006,0x0367,0x04CE,0x05BD,0x04CB, + 0x031B,0x0180,0x004B,0xFEC8,0xFC35,0xF9D8,0xFB6A,0x01A7, + 0x08F2,0x0CCB,0x0A37,0x0355,0xFCC8,0xF983,0xFA5E,0xFDEB, + 0x0047,0x0194,0x02CF,0x0493,0x057E,0x05AB,0x0475,0x0190, + 0xFD38,0xFA20,0xF9DA,0xFDEE,0x0406,0x0738,0x0504,0x006F, + 0xFCBC,0xFC47,0xFE74,0x00D0,0x0123,0x0017,0xFF2E,0xFEE7, + 0xFDFC,0xFD2F,0xFD69,0xFE7D,0xFF05,0xFE29,0xFFFA,0x0444, + 0x0373,0xFFFF,0xFD88,0xFF1E,0x01A0,0x0059,0xFDC9,0xFDBC, + 0x013F,0x0487,0x03DD,0xFF12,0xFA12,0xF819,0xFB0E,0x01C1, + 0x0704,0x0791,0x0231,0xFA6E,0xF56B,0xF633,0xFC51,0x0352, + 0x060E,0x0453,0xFFFA,0xFC84,0xFB5C,0xFAAA,0xFAD2,0xFD46, + 0x006B,0x0111,0xFEFA,0xFC37,0xFCBE,0xFFCB,0x035B,0x0353, + 0xFDF6,0xF7F6,0xF52E,0xF811,0xFEC4,0x052A,0x0612,0x00F8, + 0xFCA5,0xFD45,0x014C,0x0233,0xFCF2,0xF666,0xF7DC,0xFF7F, + 0x056F,0x0534,0xFFE7,0xFC3E,0xFAF6,0xFAE0,0xFA31,0xF9CB, + 0xFB50,0xFD38,0xFFEB,0x036F,0x04C5,0x0090,0xF88B,0xF4ED, + 0xF82A,0xFD2B,0x0000,0x009A,0x0175,0x0144,0xFF85,0xFE6D, + 0xFE6F,0xFD96,0xFAD2,0xF94E,0xFBA9,0x0179,0x0567,0x0438, + 0x002E,0xFCD0,0xFA3D,0xFA73,0xFBC5,0xFED9,0x00EC,0x007A, + 0xFE8B,0xFDCC,0xFE71,0xFFCD,0x0068,0xFEB7,0xFB9F,0xF926, + 0xF8EB,0xFB7C,0x005F,0x04C7,0x0571,0x0001,0xF907,0xF6C6, + 0xF922,0xFCB6,0xFFF7,0x0106,0x0015,0xFEAD,0xFDD9,0xFDF8, + 0x0013,0xFDFF,0xFB30,0xFCD8,0xFEB0,0x0034,0xFDB2,0xF8EB, + 0xF7E5,0xFE79,0x06C4,0x099D,0x030F,0xF770,0xF11D,0xF588, + 0xFFC0,0x07BC,0x07F5,0x01A1,0xFC40,0xFB86,0xFE1C,0xFF7B, + 0xFD8D,0xFAF9,0xFC08,0x0048,0x0439,0x03C7,0xFE86,0xFA59, + 0xFB70,0x0072,0x03B0,0x0186,0xFCCF,0xFAF3,0xFF52,0x05AC, + 0x07C3,0x0337,0xFC5C,0xF815,0xF8E6,0xFD4C,0x02C5,0x0674, + 0x061D,0x039E,0x010B,0xFFD5,0xFFC2,0xFEC6,0xFC91,0xFAFE, + 0xFD01,0x0173,0x04DA,0x05EF,0x062F,0x0528,0x01A0,0xFD43, + 0xF8D5,0xF730,0xF934,0xFC1A,0x00D1,0x04C6,0x043E,0x015E, + 0xFF5D,0xFE23,0xFC21,0xF953,0xF8B9,0xFB0F,0xFDF6,0xFF2C, + 0xFF1D,0x0058,0x03F6,0x05F7,0x0386,0xFCFE,0xF5B6,0xF266, + 0xF588,0xFD08,0x0688,0x0D17,0x0D11,0x0570,0xFA50,0xF2C6, + 0xF29C,0xF763,0xFCF4,0x01B1,0x0541,0x075A,0x0781,0x0503, + 0x0076,0xFB15,0xF71C,0xF6F2,0xFA5C,0xFD7B,0x0122,0x058E, + 0x0889,0x07BA,0x02E8,0xFAB5,0xF4B2,0xF45F,0xFA11,0x0367, + 0x0A74,0x0A08,0x0374,0xFE63,0xFF3F,0x0347,0x04E8,0x02ED, + 0xFF00,0xFB5B,0xFA1A,0xFCED,0x0303,0x08EC,0x0AF7,0x08DA, + 0x03D5,0xFC93,0xF5D8,0xF3DB,0xF8C6,0x0326,0x0C46,0x0ED8, + 0x0A6E,0x01E3,0xF9B7,0xF62E,0xF7D9,0xFF14,0x0748,0x09A6, + 0x04EC,0xFEF9,0xFCDC,0xFEB7,0x00D7,0x0238,0x0261,0x021B, + 0x019C,0x00DF,0xFE8B,0xFC8A,0xFD07,0x0123,0x06E3,0x095E, + 0x04F0,0xFBCF,0xF446,0xF671,0x0148,0x0BC8,0x0EA3,0x08CC, + 0xFFE2,0xF96F,0xF690,0xF83B,0xFCAA,0x0250,0x076D,0x0A5D, + 0x077E,0x0203,0xFEC1,0xFA51,0xF9C0,0xFD4E,0x01D9,0x0596, + 0x0655,0x0360,0xFE48,0xFC9F,0xFF34,0x0228,0x02B8,0x00D8, + 0xFF09,0xFCA5,0xFA7A,0xFB48,0x012E,0x08A6,0x09AA,0x0311, + 0xFA60,0xF594,0xF7F4,0xFF3B,0x0507,0x0715,0x0468,0xFF1C, + 0xFBCC,0xFBB7,0xFE8F,0x0071,0xFF62,0xFDF7,0xFE7F,0x0091, + 0x0133,0x0080,0xFF7D,0xFED8,0xFD0D,0xFACD,0xFAF4,0xFE61, + 0x0114,0x00E8,0xFF0E,0xFEF7,0x0087,0xFF53,0xFC41,0xFB1F, + 0xFCCA,0xFE8F,0xFE2C,0xFF3D,0x032A,0x0596,0x03F9,0xFE26, + 0xFAB0,0xFB2C,0xFCDC,0xFFC3,0x0494,0x083E,0x0676,0xFEE7, + 0xF919,0xFAB8,0x007C,0x04F7,0x057A,0x029E,0xFF94,0xFC8C, + 0xF9C9,0xFA36,0xFFCF,0x07AD,0x09A6,0x0499,0xFCF0,0xF6F6, + 0xF511,0xFA13,0x0420,0x0D82,0x0E11,0x038B,0xF62F,0xF155, + 0xF808,0x025D,0x07F8,0x06D8,0x02B3,0xFF75,0xFF33,0xFF2D, + 0xFE16,0xFE3A,0xFF10,0xFFBB,0x01E8,0x03F9,0x01B0,0xFD17, + 0xFBCD,0xFFC9,0x054E,0x0526,0xFD6C,0xF664,0xF74F,0xFE8F, + 0x03BA,0x02B0,0xFDA9,0xFB46,0xFC3E,0xFE62,0xFEC3,0xFDBE, + 0xFC53,0xFB1D,0xFA13,0xFC1F,0xFFFC,0x016F,0xFF20,0xFB8D, + 0xFAC5,0xFD31,0xFF41,0xFEF9,0xFD11,0xFBFC,0xFC73,0xFCA3, + 0xFBFC,0xFCE3,0xFFF4,0x0286,0x0243,0xFF94,0xFBE9,0xF98D, + 0xF9ED,0xFD1F,0x019C,0x0367,0x00C7,0xFA28,0xF65B,0xFA46, + 0x0285,0x0778,0x046C,0xFD64,0xF8E0,0xF7FB,0xF9CA,0xFE0F, + 0x02D2,0x0367,0xFE6F,0xFA63,0xFC05,0x0024,0x0146,0xFDFC, + 0xF9DF,0xF8E2,0xFA64,0xFC6E,0x005E,0x04D6,0x042D,0xFF5B, + 0xFC24,0xF93C,0xFB8F,0xFC43,0xFADF,0xFCED,0x035E,0x0785, + 0x04B2,0xFD85,0xF819,0xF84D,0xFBD3,0xFF60,0x0183,0x016D, + 0xFFF4,0xFF9B,0x014F,0x0347,0x0159,0xFB7B,0xF4EB,0xF421, + 0xFB5D,0x0485,0x0876,0x05B4,0x0123,0xFF33,0xFF43,0xFE14, + 0xFB71,0xF894,0xF88F,0xFC5F,0x02D4,0x0787,0x0684,0x0162, + 0xFC8A,0xFC45,0x0014,0x0232,0xFE35,0xF7F3,0xF5CE,0xFB77, + 0x063B,0x0D7C,0x0B77,0x0135,0xF5C3,0xF1DF,0xF60E,0xFD95, + 0x023C,0x01C2,0x011E,0x0360,0x04DA,0x020E,0xFC36,0xF75C, + 0xF753,0xFD06,0xFF95,0xFC41,0xF8C6,0xF85C,0xFC61,0x01D5, + 0x05BF,0x03CA,0xFD83,0xF794,0xF501,0xF7ED,0xFCE8,0x003B, + 0x013C,0x030C,0x030C,0xFF94,0xFB8A,0xF908,0xFA6D,0xFDE2, + 0xFFA3,0xFE15,0xFC02,0xFD89,0x0195,0x04AE,0x0432,0x00F9, + 0xFCD5,0xF8B0,0xF83A,0xFD2C,0x039B,0x06CE,0x052E,0x022C, + 0xFFF4,0xFE85,0xFC23,0xFC1A,0xFD1B,0xFF8A,0x01E0,0x02EC, + 0x035A,0x017B,0xFD88,0xFBA3,0xFEB4,0x0410,0x05F3,0x0276, + 0xFDE2,0xFD94,0x0161,0x04AA,0x0590,0x058C,0x0430,0x0172, + 0xFD67,0xFA84,0xFAF0,0xFEE7,0x04C9,0x09F3,0x09B2,0x0440, + 0xFC8D,0xF80D,0xFA52,0x014A,0x0692,0x05B5,0xFFC2,0xFBC7, + 0xFD92,0x01F7,0x044C,0x0461,0x02B4,0x002B,0xFD6E,0xFB59, + 0xFB80,0xFEBF,0x03C1,0x08A4,0x096E,0x0476,0xFC4C,0xF528, + 0xF473,0xFC7B,0x07AA,0x0DBA,0x092C,0xFE8C,0xF908,0xFABB, + 0xFFB6,0x03A0,0x0448,0x02CF,0x00AF,0xFE4A,0xFD7A,0xFDBC, + 0xFF67,0x0270,0x05D4,0x082E,0x0592,0xFEDB,0xF837,0xF5F1, + 0xF9E8,0x055C,0x0CFB,0x0B0D,0x02D9,0xFAD3,0xF823,0xFA67, + 0xFE43,0x0100,0x01CF,0x0252,0x024F,0x01CA,0x0012,0xFDA4, + 0xFD2C,0xFE69,0xFFF2,0x0052,0xFE5E,0xFC2C,0xFCEE,0x0065, + 0x047E,0x0555,0x0169,0xFB35,0xF73A,0xF7CA,0xFC65,0x015D, + 0x0489,0x045B,0x018B,0xFE9B,0xFCB1,0xFADC,0xF92A,0xFA6E, + 0xFD96,0x00E8,0x0212,0xFF79,0xFD2B,0xFC4D,0xFDA7,0xFFBF, + 0x00C5,0xFF65,0xFBE4,0xF9E1,0xFA20,0xFC87,0x00A2,0x03B8, + 0x0459,0x01B4,0xFC82,0xF8AA,0xF919,0xFDD8,0x03DD,0x06C9, + 0x06F8,0x02E0,0xFDDD,0xFCE9,0xFF4E,0x0204,0x0237,0x0135, + 0x00E5,0x00D3,0x0137,0x01F2,0x0296,0x0188,0xFF00,0xFD89, + 0xFE61,0x00E2,0x0354,0x0291,0x004B,0x000E,0x0177,0x01F0, + 0x010D,0xFFDE,0xFF81,0xFEB5,0xFDDC,0xFE60,0x016B,0x03E4, + 0x0387,0x01BF,0x0039,0xFEC4,0xFCF7,0xFB97,0xFCD6,0xFF9F, + 0x0264,0x03F6,0x0320,0x0067,0xFF67,0xFE4E,0xFC2E,0xFB26, + 0xFC41,0xFEC5,0x0185,0x0285,0x01A5,0x0021,0xFE38,0xFBFF, + 0xFA09,0xF93A,0xFB3A,0xFF0E,0x017A,0x01CD,0xFF73,0xFC52, + 0xFAD9,0xFBFD,0xFEC5,0x002E,0xFE81,0xFB82,0xF92B,0xF9D4, + 0xFCFB,0x013B,0x03E9,0x0314,0xFEA2,0xFA6E,0xF8DF,0xF903, + 0xF9C2,0xFC5A,0xFF92,0x0280,0x0410,0x01D4,0xFCCD,0xF7D8, + 0xF786,0xFAB3,0xFE32,0x003E,0x004D,0xFEFE,0xFE1A,0xFDF0, + 0xFE46,0xFE1D,0xFD24,0xFB71,0xFB15,0xFD10,0xFEF5,0xFEE9, + 0xFCE5,0xFB6F,0xFB99,0xFDF2,0x004B,0x0058,0xFDA0,0xFA11, + 0xF89C,0xFB39,0x0018,0x0332,0x0265,0xFE8D,0xFA28,0xFACE, + 0xFBE7,0xFEBF,0x0296,0x01A4,0xFE65,0xFC46,0xFD3C,0xFF61, + 0xFFF7,0xFF1E,0xFEAC,0xFF18,0xFF50,0xFE87,0xFD92,0xFD5C, + 0xFD8C,0xFEC0,0x0080,0x014D,0x003A,0xFEE3,0xFD86,0xFE27, + 0xFF16,0xFFF2,0xFFFA,0xFF3A,0xFEE5,0xFF96,0x00FD,0x01AB, + 0x0193,0xFF91,0xFE1C,0xFDF4,0xFF3F,0x017B,0x0307,0x0205, + 0x004B,0xFF1B,0xFF54,0x000C,0x00A1,0x00DE,0x0034,0xFF28, + 0xFE35,0xFDA7,0xFD87,0xFEEF,0x012A,0x034D,0x032F,0x00A3, + 0xFD8C,0xFC3A,0xFD0F,0xFE44,0xFEDE,0xFF3E,0x0005,0xFE9D, + 0xFD67,0xFD4C,0xFD10,0xFC50,0xFB06,0xFA86,0xFBD9,0xFE88, + 0x0059,0xFF72,0xFE08,0xFCFB,0xFD1E,0xFE02,0xFEF8,0xFED6, + 0xFE32,0xFE12,0xFCE9,0xFD47,0xFF75,0x0022,0xFF58,0xFE8C, + 0xFEE2,0xFFF8,0x008C,0xFF47,0xFD95,0xFDC5,0xFFAD,0x02A1, + 0x0348,0x013B,0xFE14,0xFBE8,0xFBED,0xFEAC,0x02A8,0x0457, + 0x0348,0x002A,0xFE46,0xFEB5,0xFEFB,0xFFE2,0x00FE,0x01CA, + 0x01D8,0x00E3,0xFF45,0xFDA1,0xFCF4,0xFF2A,0x02E5,0x04E3, + 0x0366,0xFFF1,0xFCD5,0xFC35,0xFEED,0x0273,0x0448,0x03C6, + 0x0164,0xFEB7,0xFCD3,0xFD9E,0xFFA7,0x0116,0x0163,0x00F7, + 0x0066,0x001E,0xFF74,0xFE72,0xFE87,0x0048,0x0150,0x00D4, + 0xFF6B,0xFE87,0xFEDD,0xFFAC,0x0081,0x0149,0x0116,0xFFF1, + 0xFF11,0xFEA0,0xFEE9,0xFF66,0xFFF4,0xFFD1,0x0015,0x0083, + 0x00A1,0x0000,0xFF1F,0xFEFD,0xFFE8,0xFFFA,0xFF04,0xFE82, + 0xFE9C,0xFFD3,0x00F8,0x017A,0x018D,0x00A4,0xFF3A,0xFDD3, + 0xFDF0,0xFE9F,0xFF49,0xFF27,0xFE26,0xFD95,0xFD9F,0xFBF5, + 0xFAA1,0xFB64,0xF951,0xF851,0xF78F,0xF6AE,0xF613,0xF68E, + 0xF743,0xF7E1,0xF840,0xF78A,0xF6C6,0xF5F9,0xF540,0xF522, + 0xF52F,0xF573,0xF53E,0xF529,0xF499,0xF39E,0xF2A1,0xF1AC, + 0xF168,0xF163,0xF09C,0xEFD6,0xEF21,0xEE69,0xEDD8,0xED58, + 0xED3E,0xECA9,0xEC1E,0xEB5A,0xEB11,0xEA6C,0xE9D7,0xE975, + 0xE923,0xE924,0xE895,0xE87B,0xE869,0xE847,0xE74B,0xE6B0, + 0xE709,0xE73C,0xE747,0xE6DC,0xE6D1,0xE6B4,0xE6AD,0xE67A, + 0xE67B,0xE682,0xE6C4,0xE707,0xE773,0xE9C4,0xE9EA,0xE980, + 0xE963,0xE9A4,0xEA07,0xEA06,0xEA5D,0xE9D8,0xE9FF,0xEA64, + 0xEADF,0xEB7C,0xEB83,0xEBD8,0xEBC7,0xEBFA,0xEC53,0xECB4, + 0xECCD,0xEDC5,0xEEEF,0xEEC7,0xEEA7,0xEF57,0xEFCA,0xEF6B, + 0xEF96,0xF00A,0xF059,0xF0A7,0xF166,0xF20A,0xF25F,0xF2AB, + 0xF348,0xF41A,0xF423,0xF447,0xF491,0xF472,0xF4CD,0xF555, + 0xF61A,0xF662,0xF5C3,0xF56A,0xF74B,0xF7E0,0xF7D4,0xF87E, + 0xF8D1,0xF91D,0xF9C7,0xF9D1,0xF99C,0xFA04,0xFAA9,0xFB53, + 0xFADE,0xFA7B,0xFB1C,0xFB79,0xFBEB,0xFC8E,0xFD38,0xFD94, + 0xFD69,0xFD94,0xFE21,0xFE65,0xFF30,0xFFC5,0xFFB4,0x001F, + 0x00EB,0x0150,0x0173,0x01ED,0x0270,0x0297,0x02DD,0x0350, + 0x0366,0x03EF,0x0413,0x0471,0x04D5,0x0510,0x0583,0x05B8, + 0x05DA,0x0602,0x05FE,0x0662,0x06E2,0x06FE,0x072C,0x0777, + 0x07B3,0x080C,0x0878,0x0843,0x0808,0x0830,0x08D2,0x0964, + 0x0921,0x090B,0x093F,0x0971,0x0991,0x0A36,0x0A71,0x0A3D, + 0x0A79,0x0A93,0x0A86,0x0AE9,0x0BB5,0x0B64,0x0C01,0x0D5E, + 0x0B64,0x0BE2,0x0C21,0x0BC1,0x0B89,0x0C07,0x0BC1,0x0C69, + 0x0CC1,0x0CAE,0x0C9E,0x0C9F,0x0CD7,0x0D1C,0x0DD5,0x0D92, + 0x0D35,0x0CFA,0x0D30,0x0D79,0x0DCA,0x0DD6,0x0D86,0x0DD4, + 0x0DD6,0x0DE1,0x0DE5,0x0DD0,0x0DCD,0x0D7F,0x0D6E,0x0E09, + 0x0E41,0x0DDB,0x0D85,0x0D1A,0x0D16,0x0D3A,0x0D29,0x0D2C, + 0x0D0D,0x0CBE,0x0CBC,0x0D1D,0x0D28,0x0D05,0x0D17,0x0D3D, + 0x0D3C,0x0D66,0x0D7A,0x0D69,0x0D16,0x0C8E,0x0CE4,0x0D22, + 0x0D22,0x0D00,0x0CD6,0x0C6E,0x0C45,0x0C48,0x0B53,0x0952, + 0x0A13,0x0A24,0x0A7B,0x0AA8,0x0AC8,0x0A9B,0x0A3E,0x09FE, + 0x0A87,0x0A59,0x0A58,0x0A7C,0x0A33,0x0A02,0x0A41,0x0A3D, + 0x0ADE,0x0A9A,0x09BC,0x0A50,0x0B0A,0x0ACF,0x0AA8,0x0A91, + 0x0ABC,0x0A65,0x0A81,0x0AA5,0x0AB0,0x0AAD,0x0A6B,0x0A7C, + 0x0AA2,0x0A70,0x0AC5,0x0AFB,0x0A9E,0x0A66,0x0AA9,0x0AF2, + 0x0ABF,0x0A7E,0x0B3D,0x0B1C,0x0A01,0x09D7,0x099E,0x0967, + 0x095B,0x096A,0x0924,0x0972,0x0989,0x09B9,0x0A8F,0x0A48, + 0x0A2B,0x0A49,0x0A2E,0x0A3D,0x0A2A,0x0A0B,0x0A09,0x09FF, + 0x0993,0x094D,0x0962,0x095A,0x09BE,0x09C2,0x0935,0x0935, + 0x08D7,0x0873,0x083C,0x0849,0x07CF,0x07F3,0x0818,0x0793, + 0x0748,0x071A,0x06D9,0x0710,0x06BF,0x06AB,0x06AA,0x0667, + 0x06D5,0x069C,0x0684,0x06D3,0x066A,0x05F2,0x0639,0x0644, + 0x0637,0x064D,0x0605,0x05D6,0x05C8,0x061B,0x0657,0x0659, + 0x05F4,0x060D,0x05A4,0x057D,0x058B,0x0586,0x055A,0x0579, + 0x0519,0x0511,0x0562,0x04F4,0x0498,0x04D6,0x04A2,0x02AA, + 0x0470,0x04A8,0x044D,0x0470,0x042D,0x03DC,0x03F1,0x03CB, + 0x03CF,0x03AB,0x0336,0x033E,0x02DA,0x02FB,0x033B,0x032B, + 0x030E,0x034C,0x0334,0x0357,0x031D,0x02BF,0x02AC,0x02A3, + 0x0310,0x031F,0x0351,0x033F,0x02D6,0x0278,0x0266,0x0241, + 0x0256,0x01F4,0x0230,0x01FC,0x019C,0x01CD,0x01ED,0x0219, + 0x01E9,0x018E,0x0190,0x0183,0x0165,0x0142,0x0111,0x00F6, + 0x015C,0x0147,0x014D,0x0137,0x014B,0x015E,0x00F1,0x00F5, + 0x00B9,0x00FE,0x012E,0x0162,0x02B6,0x0452,0x0334,0x02AE, + 0x02A2,0x029A,0x02A2,0x023E,0x01C0,0x01ED,0x01B4,0x01B2, + 0x01B1,0x0217,0x01D8,0x0212,0x01BD,0x0151,0x011E,0x00E0, + 0xFFC8,0x0040,0x002E,0x0062,0x0061,0x00F7,0x01E8,0x0363, + 0x0399,0x042E,0x045E,0x04DC,0x058E,0x05F5,0x0701,0x08C2, + 0x09D5,0x0ABE,0x0AB7,0x0AB6,0x0B78,0x0BA8,0x0B9D,0x0B67, + 0x0AEC,0x0976,0x0953,0x09D1,0x0A34,0x0A4F,0x0AAE,0x0AD5, + 0x0A64,0x0B1E,0x0C6B,0x0D9C,0x0E18,0x0E0C,0x0E60,0x0E6F, + 0x0EA4,0x0ED7,0x0FFA,0x11BB,0x10AB,0x1029,0x0FF3,0x0EF3, + 0x0DA5,0x0CF1,0x0D8F,0x0E7D,0x0FDD,0x119E,0x1295,0x1373, + 0x135E,0x136D,0x1408,0x14F5,0x1614,0x1702,0x1785,0x17CD, + 0x179E,0x16E5,0x16B8,0x1708,0x187F,0x19C3,0x19C2,0x1AC9, + 0x1B8D,0x1BCF,0x1B5A,0x1B31,0x1BB4,0x1C6B,0x1C4F,0x1C91, + 0x1CAB,0x1BE1,0x1AD0,0x1A58,0x19DD,0x1990,0x18F8,0x188F, + 0x1802,0x17F4,0x1782,0x168A,0x1663,0x15FD,0x154B,0x1400, + 0x123C,0x10D9,0x100D,0x0F99,0x0E72,0x0D52,0x0C35,0x0B5F, + 0x0A0C,0x0925,0x090F,0x0954,0x0879,0x076A,0x072F,0x0717, + 0x0714,0x0672,0x056A,0x0501,0x04B8,0x0404,0x0321,0x0372, + 0x03D7,0x03AE,0x02FA,0x022B,0x0209,0x024F,0x02EA,0x0360, + 0x03D0,0x039C,0x031D,0x01DB,0x0134,0x00E7,0x016F,0x018A, + 0x015C,0x0166,0x017D,0x00A9,0x003F,0xFFBC,0xFF80,0xFF85, + 0x0093,0xFF18,0xFF06,0xFFBB,0xFD7C,0xFBE0,0xFBBE,0xFBA4, + 0xFBDE,0xFB2D,0xFA1B,0xF90E,0xF82B,0xF7C5,0xF771,0xF688, + 0xF5AE,0xF59E,0xF616,0xF59E,0xF477,0xF415,0xF3C5,0xF2E0, + 0xF213,0xF1EC,0xF24C,0xF272,0xF234,0xF2B4,0xF2E2,0xF2A6, + 0xF1A4,0xF0CB,0xF17B,0xF210,0xF12B,0xF01E,0xF044,0xF1D1, + 0xF253,0xF1D9,0xF140,0xF178,0xF183,0xF0F2,0xF108,0xF324, + 0xF51E,0xF50E,0xF335,0xF0C5,0xEF08,0xEEE8,0xEFBC,0xF228, + 0xF471,0xF4DB,0xF365,0xF13E,0xF002,0xF016,0xF0D1,0xF3A8, + 0xF411,0xF3F6,0xF3EF,0xF3DF,0xF3A1,0xF2D9,0xF14A,0xEF5F, + 0xEE15,0xEE2C,0xEFE2,0xF28C,0xF3FF,0xF2F5,0xEFF4,0xEDC7, + 0xECD6,0xED43,0xEE28,0xF018,0xF205,0xF197,0xEF02,0xED13, + 0xEC1E,0xEC02,0xED2C,0xEDE1,0xEF1B,0xF116,0xF19A,0xF061, + 0xEF9F,0xEE94,0xEE8E,0xEE5A,0xEE17,0xEED3,0xF0A0,0xF25D, + 0xF130,0xEF0C,0xEE32,0xEEBC,0xEE8C,0xEFCA,0xF210,0xF311, + 0xF300,0xF15A,0xF047,0xF01A,0xF09E,0xF11A,0xF11F,0xEFFC, + 0xEF12,0xF025,0xF1A9,0xF11B,0xF03A,0xF01E,0xF096,0xF162, + 0xF220,0xF295,0xF22E,0xF0DE,0xEF99,0xEEDD,0xEFD2,0xF12A, + 0xF1CA,0xF061,0xEE11,0xECB1,0xED4C,0xEE7D,0xEE97,0xECB6, + 0xE8A3,0xE236,0xDB38,0xD57D,0xD367,0xD4B8,0xD669,0xD881, + 0xDAB8,0xDD1B,0xDFB9,0xE207,0xE474,0xE82C,0xEBF2,0xEEE0, + 0xF136,0xF348,0xF453,0xF425,0xF2B5,0xF262,0xF372,0xF5AD, + 0xF98F,0xFDEE,0x032D,0x073A,0x09CB,0x0CA9,0x0F6A,0x1291, + 0x14CC,0x15DF,0x1670,0x1679,0x1536,0x1335,0x1100,0x0E01, + 0x0D0C,0x0C16,0x090F,0x0AB6,0x0C3B,0x0C7E,0x0BA3,0x09BC, + 0x07A8,0x05F0,0x03C6,0x0228,0x0085,0xFDE1,0xFA73,0xF619, + 0xF239,0xEF3F,0xED59,0xEBDA,0xEAC8,0xEA5A,0xEB21,0xEC1E, + 0xEC8C,0xED33,0xEDA7,0xED55,0xEC3C,0xEC37,0xED18,0xEE93, + 0xEF2E,0xEE3D,0xED46,0xEC81,0xECCF,0xEEB3,0xF1F0,0xF55B, + 0xF7F3,0xF9C7,0xFB77,0xFCBE,0xFE69,0x0053,0x0296,0x03F3, + 0x0484,0x050D,0x056E,0x05F9,0x05A0,0x050A,0x0558,0x05E3, + 0x06E5,0x0785,0x085B,0x09DC,0x0A38,0x0993,0x07BC,0x0613, + 0x03CD,0x020A,0x01DA,0x00EC,0xFFE6,0xFE0B,0xFBD6,0xF95E, + 0xF7B7,0xF70E,0xF717,0xF75C,0xF752,0xF6B3,0xF5D8,0xF4EB, + 0xF42F,0xF3B1,0xF30B,0xF0D2,0xEF3D,0xF022,0xF16C,0xF224, + 0xF278,0xF2E1,0xF35A,0xF40F,0xF5BD,0xF6C3,0xF792,0xF6FB, + 0xF531,0xF462,0xF54B,0xF807,0xFBE7,0xFF13,0x001C,0x005F, + 0xFFA7,0xFF89,0x004C,0x0166,0x03D9,0x055B,0x0650,0x0740, + 0x07BA,0x06FF,0x0533,0x03AD,0x02A5,0x0361,0x058A,0x0928, + 0x0BED,0x0B8E,0x0981,0x0742,0x04B7,0x0307,0x0306,0x053F, + 0x079C,0x07A3,0x0624,0x0483,0x0376,0x0162,0xFE84,0xFC2B, + 0xFCA7,0xFDCD,0xFDFE,0xFDDF,0xFD39,0xFC5A,0xFA23,0xF711, + 0xF463,0xF4EA,0xF836,0xFCB8,0xFEB8,0xFE17,0xFC6B,0xF9E8, + 0xF790,0xF757,0xF96F,0xFCDE,0xFF07,0xFDE0,0xFB66,0xFB3D, + 0xFC37,0xFC5C,0xFC7A,0xFDD6,0x004E,0x0186,0x0214,0x0491, + 0x0671,0x05B7,0x0192,0xFD87,0xFCA6,0x0064,0x05BB,0x08D7, + 0x0876,0x06E8,0x03CF,0xFF81,0xFD91,0x001B,0x05A1,0x08BE, + 0x067C,0x018A,0x02E0,0x02A1,0xFFB8,0xFE66,0xFF62,0x00F0, + 0x0087,0xFEED,0xFE7F,0xFFF0,0x00F7,0xFFAD,0xFCDC,0xFABC, + 0xF983,0xF6FC,0xF225,0xECF4,0xE663,0xDE29,0xD522,0xCE5E, + 0xCDDE,0xD235,0xD7CB,0xDD1F,0xE1A9,0xE59B,0xE942,0xEC76, + 0xF0DA,0xF644,0xFB83,0xFE21,0xFF0A,0xFF71,0xFFB2,0xFF7D, + 0xFFB0,0x01E8,0x0563,0x0AA0,0x1112,0x1888,0x1FE7,0x261D, + 0x29BC,0x2BC0,0x2DE7,0x3056,0x323B,0x32E8,0x3222,0x2FA3, + 0x2BF7,0x276B,0x22FB,0x208A,0x1FDB,0x1FC9,0x20A8,0x2158, + 0x20D7,0x1FCB,0x1DC5,0x1AAB,0x16A6,0x12DF,0x0EBF,0x0A79, + 0x05D6,0x0114,0xFC07,0xF5EF,0xF05D,0xEC60,0xEA12,0xE997, + 0xEA40,0xEA25,0xEA2F,0xEB4C,0xEB4F,0xEA5C,0xEA0F,0xE9F9, + 0xE9C3,0xE9FD,0xE9A8,0xE9B3,0xE9A9,0xE96E,0xE9CE,0xEB4C, + 0xEDE3,0xF1EF,0xF669,0xF9F2,0xFD3B,0x0093,0x037E,0x0640, + 0x0961,0x0B92,0x0CC7,0x0D0F,0x0C4F,0x0D56,0x0E97,0x0F75, + 0x0FBA,0x1053,0x1149,0x11E4,0x1268,0x1293,0x1319,0x13B5, + 0x143C,0x1318,0x1073,0x0E2E,0x0BDE,0x0902,0x061E,0x0358, + 0x01C5,0x0023,0xFE15,0xFB20,0xF93E,0xF821,0xF772,0xF6CD, + 0xF686,0xF541,0xF324,0xF19A,0xF094,0xEFF4,0xEF24,0xEDB9, + 0xEC11,0xEA79,0xE945,0xE90C,0xEAE4,0xED25,0xEEDA,0xEFD1, + 0xF070,0xF0FA,0xF171,0xF315,0xF5CF,0xF7DB,0xF808,0xF791, + 0xF8EE,0xFBDB,0xFDFA,0xFDF2,0xFDC9,0x0000,0x0298,0x03EC, + 0x04EB,0x076F,0x0AA6,0x0BF6,0x0CAC,0x0C1E,0x0B14,0x0969, + 0x08D0,0x08E2,0x0979,0x0A06,0x0A94,0x0B1C,0x09F4,0x06DD, + 0x052F,0x01BD,0x012B,0x03F1,0x06B6,0x0845,0x0637,0x017F, + 0xFC72,0xF8F7,0xF719,0xF825,0xF9F1,0xFA68,0xF896,0xF575, + 0xF36D,0xF486,0xF65E,0xF6DA,0xF6F5,0xF729,0xF787,0xF6BA, + 0xF597,0xF533,0xF5C7,0xF5A3,0xF535,0xF5CC,0xF8EA,0xFD1C, + 0xFD97,0xFBDD,0xFA7E,0xFAC8,0xFB9B,0xFD95,0x016E,0x05B3, + 0x06A5,0x03AB,0x00B5,0x003B,0x025D,0x0480,0x05C2,0x05D9, + 0x06DA,0x07C2,0x07CC,0x07D6,0x08E4,0x0A68,0x0A09,0x068E, + 0x04BF,0x06C2,0x089F,0x0837,0x05B5,0x042B,0x02F7,0x011A, + 0xFEDC,0x000A,0x0246,0x024B,0x0013,0xFC60,0xFA27,0xFB0E, + 0xFCFE,0xFC61,0xF947,0xF5F9,0xF392,0xF07D,0xEC53,0xE762, + 0xE0C9,0xD842,0xCF76,0xC917,0xCA47,0xD155,0xD843,0xDCF7, + 0xDF9F,0xE20C,0xE4FA,0xE919,0xEF48,0xF647,0xFB7E,0xFDE3, + 0xFDEA,0xFDFB,0xFF09,0x00FD,0x02FE,0x0506,0x0821,0x0D1D, + 0x141F,0x1CC2,0x2476,0x2A6C,0x2D79,0x2CEF,0x2D7D,0x3092, + 0x3451,0x3625,0x357E,0x3180,0x2C9B,0x27CD,0x2497,0x2410, + 0x246E,0x2401,0x2381,0x2171,0x1F97,0x1EFA,0x1DE0,0x1B3A, + 0x1701,0x1253,0x0D8B,0x08B7,0x046E,0x00B6,0xFC38,0xF605, + 0xEFDB,0xEB18,0xE8B5,0xE8A3,0xE9F2,0xEB4C,0xEB2F,0xEA3D, + 0xE92B,0xE88A,0xE8C1,0xEA17,0xEB15,0xEA50,0xE947,0xE968, + 0xEA65,0xEBCD,0xED5B,0xEF50,0xF193,0xF451,0xF74C,0xFBCB, + 0x0197,0x06AE,0x08FE,0x09FC,0x0B38,0x0CD9,0x0F2E,0x115C, + 0x12A3,0x132E,0x12C2,0x1265,0x12AA,0x1377,0x1502,0x169A, + 0x1775,0x173E,0x16C1,0x1765,0x1805,0x1702,0x14CF,0x1285, + 0x0DAA,0x0B89,0x0AB5,0x0839,0x06DA,0x0460,0x0092,0xFCB6, + 0xFA61,0xF99F,0xF999,0xF9E8,0xF84A,0xF588,0xF2E8,0xF1A6, + 0xF1A3,0xF268,0xF20D,0xF0A6,0xEE6F,0xEBE8,0xE977,0xE97F, + 0xEC7D,0xEF5F,0xEFC4,0xEE1A,0xEDBB,0xEFF8,0xF275,0xF543, + 0xF961,0xFDE8,0xFECD,0xFCB7,0xFB95,0xFDF2,0x007F,0x001F, + 0xFEFD,0x00B2,0x03AB,0x0590,0x062D,0x06EB,0x0951,0x0AFC, + 0x0AEE,0x0B24,0x0C9C,0x0F44,0x106E,0x0ECD,0x0C55,0x0AC6, + 0x099B,0x085B,0x07CA,0x0971,0x0A94,0x0867,0x05FB,0x01B1, + 0x0025,0x01B0,0x03CD,0x04F3,0x03F8,0x0273,0xFF2D,0xFC24, + 0xFA6D,0xF9B6,0xF8AD,0xF5AA,0xF36A,0xF292,0xF3F6,0xF59A, + 0xF63F,0xF540,0xF46D,0xF407,0xF3C7,0xF56C,0xF95A,0xFB90, + 0xFA86,0xF871,0xF7FE,0xF90A,0xFA35,0xFAB0,0xF9EF,0xF8D9, + 0xF8A8,0xF9CC,0xFCC0,0x00EC,0x04CE,0x0665,0x045F,0x01B2, + 0x00EB,0x0254,0x0545,0x071E,0x086D,0x09AE,0x08D3,0x064E, + 0x04FB,0x05D6,0x0747,0x0766,0x060A,0x04C0,0x03DC,0x041D, + 0x0576,0x05BD,0x0337,0x0023,0xFD59,0xFBBA,0xFB43,0xFC37, + 0xFCFD,0xFCBD,0xFADD,0xF886,0xF7F7,0xF8C9,0xF981,0xF855, + 0xF4AB,0xEF22,0xE8BF,0xE193,0xD9EB,0xD233,0xCBF4,0xC817, + 0xC78B,0xCB19,0xD1E0,0xD89E,0xDE1D,0xE167,0xE418,0xE7C0, + 0xED5E,0xF402,0xF95B,0xFC45,0xFCC9,0xFB6D,0xFA12,0xFB12, + 0xFD83,0x01B6,0x06DC,0x0C53,0x127D,0x19C3,0x207C,0x2680, + 0x2B60,0x2E5A,0x2F95,0x3059,0x311B,0x311D,0x3006,0x2CF1, + 0x2874,0x23A5,0x1F88,0x1D52,0x1D0A,0x1DC6,0x1D7E,0x1DD8, + 0x1CC7,0x190F,0x17ED,0x1592,0x128D,0x0ECB,0x09DD,0x0427, + 0xFF33,0xF9B9,0xF4C1,0xEFEC,0xEB60,0xE7BC,0xE57B,0xE52C, + 0xE691,0xE8DB,0xE9D0,0xE999,0xE87F,0xE802,0xE84F,0xE923, + 0xE9B5,0xE9AE,0xE94B,0xE8FB,0xE922,0xE9F2,0xEB57,0xED76, + 0xF03C,0xF3ED,0xF93C,0xFDFB,0x021D,0x05F6,0x0912,0x0AD9, + 0x0C17,0x0DA0,0x0FB6,0x11A4,0x1206,0x1212,0x11A0,0x10DA, + 0x10A0,0x115E,0x12F3,0x14A2,0x160E,0x1689,0x16B8,0x16B2, + 0x15D3,0x13B3,0x113A,0x0F4C,0x0D8F,0x0B16,0x07C2,0x038B, + 0xFF90,0xFD0C,0xFA65,0xF8DE,0xF80C,0xF74D,0xF653,0xF561, + 0xF407,0xF29F,0xF17E,0xF03C,0xF001,0xEECF,0xEC6D,0xEAB1, + 0xE901,0xE8DA,0xE8D2,0xE957,0xEB80,0xEDC4,0xEF24,0xF0C7, + 0xF20A,0xF303,0xF342,0xF427,0xF5A1,0xF97B,0xFDB7,0xFFDC, + 0x005B,0x0045,0xFFFF,0x005B,0x01D7,0x0346,0x0557,0x083A, + 0x0B1F,0x0B8C,0x0A9F,0x0BF1,0x0E1A,0x0EEE,0x0E2F,0x0C72, + 0x0BE3,0x0C9A,0x0D0B,0x0D9A,0x0EDB,0x0E92,0x0A6C,0x04EE, + 0x02CD,0x053D,0x07DE,0x07D8,0x06D9,0x0591,0x0281,0xFEE0, + 0xFDDC,0x0059,0x025A,0x0063,0xFC65,0xF940,0xF81D,0xF837, + 0xF77F,0xF6C5,0xF704,0xF6E9,0xF6EF,0xF641,0xF683,0xF78F, + 0xF685,0xF462,0xF418,0xF726,0xFBEE,0xFE75,0xFD7B,0xFA37, + 0xF783,0xF7AB,0xFA38,0xFEDA,0x0286,0x03BE,0x0284,0x014A, + 0x014B,0x0300,0x058F,0x062C,0x0565,0x0524,0x057E,0x079A, + 0x0B32,0x0DA1,0x0C7D,0x0789,0x028E,0x01A0,0x05B9,0x0AF0, + 0x0D61,0x0C5A,0x097C,0x05B6,0x02D1,0x02CA,0x053F,0x05BA, + 0x02D4,0x01B9,0xFE36,0xFC5A,0xFE0A,0xFF3F,0xFEAD,0xFB2B, + 0xF658,0xF3A6,0xF3A0,0xF4B0,0xF3D3,0xEF12,0xE631,0xD9E7, + 0xCED0,0xC8E3,0xC960,0xCE4F,0xD3E4,0xD857,0xDBA4,0xDE26, + 0xE17F,0xE63F,0xEBE4,0xF16C,0xF589,0xF99E,0xFD12,0xFF20, + 0x0075,0x0010,0xFF68,0xFEFD,0x0189,0x0766,0x0FBA,0x1887, + 0x2041,0x25D8,0x27EC,0x291D,0x2B18,0x2EE4,0x3294,0x3490, + 0x3471,0x31DF,0x2D4F,0x2824,0x23F6,0x214C,0x1FA1,0x1E22, + 0x1D31,0x1D28,0x1D87,0x1CF0,0x1B31,0x19C5,0x1657,0x1165, + 0x0D83,0x0A93,0x0794,0x032E,0xFCB3,0xF572,0xEF4D,0xEB19, + 0xE8C4,0xE801,0xE811,0xE8BF,0xE945,0xE8E0,0xE859,0xE86B, + 0xE85D,0xE879,0xE98A,0xE9B0,0xE929,0xE8FB,0xE994,0xE963, + 0xE9EC,0xEB07,0xED1D,0xF01D,0xF42A,0xF86E,0xFCF7,0x00FC, + 0x0428,0x0706,0x0928,0x0AED,0x0C6B,0x0E18,0x0F2E,0x1008, + 0x108D,0x0FA3,0x0F96,0x1125,0x117A,0x11E6,0x133F,0x149C, + 0x15C7,0x1603,0x15BE,0x14EE,0x12B7,0x0FD8,0x0D09,0x0B1A, + 0x095C,0x0635,0x02D0,0xFF80,0xFC8C,0xFA1F,0xF822,0xF636, + 0xF4E0,0xF48C,0xF431,0xF284,0xF045,0xEEF8,0xEE48,0xED71, + 0xEC90,0xECEC,0xEE1A,0xEDC0,0xEBDA,0xE95B,0xE731,0xE6E6, + 0xE86C,0xEBF9,0xEFC5,0xF214,0xF1CA,0xF066,0xEFBA,0xF167, + 0xF540,0xF843,0xF9FB,0xFB91,0xFCA1,0xFD56,0xFEF2,0x01A0, + 0x039E,0x0408,0x0418,0x04E1,0x0635,0x075B,0x07C5,0x0824, + 0x08B7,0x0964,0x09E3,0x0BB2,0x0CDE,0x0BE2,0x082D,0x0592, + 0x04AE,0x0438,0x048D,0x05AF,0x05DB,0x030B,0xFF36,0xFF3D, + 0xFD1C,0xFD58,0xFDD0,0xFBED,0xFAD5,0xF9B9,0xF8F1,0xF8F8, + 0xF935,0xF8E1,0xF65F,0xF253,0xEF80,0xEF2B,0xF1BA,0xF509, + 0xF7C6,0xF8DD,0xF779,0xF3E2,0xF06B,0xEFF1,0xF20E,0xF600, + 0xF8F2,0xFBFA,0xFD34,0xFB7D,0xF7BC,0xF542,0xF75A,0xFC18, + 0xFFB9,0x00D6,0x02F6,0x04D4,0x045C,0x020F,0x0108,0x020D, + 0x0438,0x05B9,0x06F2,0x08E6,0x0AA9,0x0B1A,0x093B,0x06C9, + 0x04C0,0x03C8,0x03D7,0x043A,0x059A,0x0729,0x077D,0x067E, + 0x0427,0x023B,0x016C,0x0172,0x0198,0x01DF,0x00B8,0xFD89, + 0xFBC5,0xFB76,0xFB8A,0xF9D5,0xF5DE,0xF248,0xEFCE,0xEDA8, + 0xEB24,0xE7C3,0xE268,0xDA34,0xD017,0xC819,0xC712,0xCC5E, + 0xD4C2,0xDBF6,0xDED3,0xE169,0xE3B4,0xE5DF,0xE950,0xEFCF, + 0xF67A,0xFACE,0xFD3C,0xFDEC,0xFE12,0xFEE7,0x0041,0x0242, + 0x062E,0x0B97,0x1295,0x1A77,0x2240,0x2846,0x2BB0,0x2C60, + 0x2D2D,0x2FF8,0x3220,0x33AF,0x33B8,0x316E,0x2D92,0x287A, + 0x239F,0x2150,0x215C,0x2204,0x216C,0x2090,0x1FE0,0x1E8B, + 0x1CB0,0x1A7F,0x16BC,0x124D,0x0DE9,0x092B,0x0450,0x0004, + 0xFBCF,0xF6A2,0xF0CB,0xEBDC,0xE8F5,0xE80D,0xE8BB,0xEA1F, + 0xEAEF,0xEA07,0xE8C9,0xE824,0xE83F,0xE8F1,0xE982,0xE98F, + 0xE9AA,0xE93B,0xE8ED,0xE9BA,0xEB37,0xED4D,0xEF4B,0xF206, + 0xF553,0xF955,0xFE3B,0x02C4,0x060D,0x0837,0x090D,0x0A56, + 0x0C10,0x0DFB,0x0FEB,0x111F,0x11A7,0x1156,0x10E7,0x1118, + 0x124B,0x1368,0x1497,0x156F,0x167F,0x168D,0x15A2,0x13F9, + 0x11B8,0x0F3A,0x0D66,0x0B5C,0x098D,0x079B,0x05D5,0x00E7, + 0xFE4A,0xFCB6,0xF9AC,0xF91B,0xF8B7,0xF870,0xF842,0xF686, + 0xF2ED,0xF033,0xEF52,0xEFB3,0xF088,0xF027,0xEDDB,0xEA9C, + 0xE843,0xE802,0xE9BF,0xEBE6,0xEDDC,0xF05B,0xF1C1,0xF2B4, + 0xF3F7,0xF5C7,0xF6E2,0xF6AE,0xF623,0xF790,0xFA2F,0xFD99, + 0x00F3,0x0305,0x0428,0x040E,0x0383,0x03F3,0x05A1,0x0770, + 0x08BD,0x0A64,0x0C04,0x0D69,0x0DA3,0x0C1A,0x09E3,0x08DB, + 0x08D7,0x0867,0x0847,0x09A4,0x0B13,0x09DD,0x05EC,0x0296, + 0x01FF,0x0365,0x03CD,0x02F1,0x02C8,0x0455,0x01A2,0xFDEB, + 0xFBF9,0xFBFF,0xFC81,0xFA6D,0xF78C,0xF7A3,0xF951,0xFA79, + 0xFA3D,0xF8F1,0xF6AC,0xF424,0xF34A,0xF445,0xF646,0xF788, + 0xF5AB,0xF434,0xF4CA,0xF5E6,0xF7D2,0xFA2A,0xFBA6,0xFCD0, + 0xFD18,0xFCA5,0xFE1B,0xFFD9,0x0164,0x01D8,0x00F5,0xFED3, + 0xFE69,0x0001,0x0220,0x03D0,0x04E1,0x049C,0x03CF,0x0387, + 0x0496,0x06F8,0x08E1,0x0A77,0x0A4B,0x082B,0x05D1,0x038B, + 0x0175,0x0024,0x0103,0x0293,0x01B0,0xFF70,0xFED4,0xFEFF, + 0xFD13,0xF9F5,0xFA8C,0xFD5A,0xFE1E,0xFCB0,0xFBC9,0xFB90, + 0xF989,0xF504,0xEF64,0xEADE,0xE717,0xE1ED,0xDB1F,0xD42B, + 0xCED3,0xCB65,0xCA24,0xCC74,0xD2F0,0xDA16,0xE00C,0xE3C9, + 0xE6E9,0xEAA9,0xEE9B,0xF17B,0xF4A1,0xF815,0xFAA0,0xFB2E, + 0xFAE5,0xFC03,0xFED4,0x0282,0x06AE,0x0BFB,0x12C1,0x1A23, + 0x209D,0x262A,0x2AFD,0x2DD5,0x2EEB,0x2F23,0x2F05,0x2EB6, + 0x2DB8,0x2B66,0x2845,0x24C2,0x21D5,0x1F63,0x1E09,0x1DA6, + 0x1DF2,0x1D82,0x1C90,0x1B5B,0x1903,0x1528,0x1261,0x0E9C, + 0x0810,0x03B2,0xFE49,0xF932,0xF479,0xF04F,0xEC56,0xE91F, + 0xE6A6,0xE558,0xE5CA,0xE741,0xE854,0xE857,0xE87E,0xE7B1, + 0xE6B0,0xE572,0xE573,0xE67F,0xE776,0xE721,0xE701,0xE736, + 0xE866,0xEAC9,0xEDD8,0xF1E7,0xF6A3,0xFB29,0xFE92,0x01AC, + 0x0441,0x067C,0x088B,0x0A54,0x0BC7,0x0C9B,0x0D95,0x0E7D, + 0x0F17,0x0F66,0x103E,0x110C,0x1196,0x12B1,0x1405,0x1509, + 0x1581,0x152E,0x1413,0x129D,0x1075,0x0E64,0x0C85,0x0A2A, + 0x078F,0x0461,0x0175,0xFF02,0xFD33,0xFB89,0xF89A,0xF610, + 0xF591,0xF493,0xF2F4,0xF1E3,0xF123,0xEFA9,0xED78,0xEB46, + 0xEA68,0xEAB7,0xEBE2,0xECCC,0xEC4B,0xEA9C,0xE976,0xE9A0, + 0xEB17,0xEC60,0xEE04,0xF0ED,0xF336,0xF413,0xF572,0xF7B4, + 0xF9F2,0xFC05,0xFD10,0xFCC6,0xFC82,0xFE7A,0x023F,0x056A, + 0x0640,0x0679,0x0775,0x0865,0x090E,0x0A4C,0x0C26,0x0D9C, + 0x0E17,0x0E09,0x0F14,0x0E44,0x0C38,0x09E1,0x07A7,0x06FF, + 0x0823,0x0A12,0x0B4D,0x0B2B,0x080C,0x044B,0x01AB,0x013E, + 0x0271,0x03A5,0x0381,0x0235,0xFF16,0xFAC2,0xF7FD,0xF7F1, + 0xF929,0xF8F7,0xF74A,0xF5D4,0xF62A,0xF680,0xF669,0xF5EF, + 0xF5A4,0xF571,0xF593,0xF508,0xF627,0xF8DD,0xFA08,0xF96A, + 0xF7D4,0xF6E7,0xF69D,0xF769,0xF939,0xFC8E,0xFFBF,0x0102, + 0x00F6,0x0190,0x0319,0x04AA,0x047F,0x038D,0x02F4,0x039F, + 0x0475,0x0577,0x07AC,0x0924,0x0839,0x0597,0x038B,0x0445, + 0x06C1,0x0884,0x0892,0x078D,0x062B,0x050B,0x0496,0x0524, + 0x05B9,0x0571,0x0371,0x0087,0xFF22,0xFFFB,0xFFD0,0xFE9D, + 0xFFF1,0xFDA5,0xFAE7,0xF9E7,0xFA1D,0xFA14,0xF882,0xF4DF, + 0xEFDF,0xEA8C,0xE688,0xE454,0xE429,0xE5F3,0xE7AB,0xE877, + 0xE962,0xEBE1,0xEF5D,0xF2A6,0xF553,0xF79B,0xFA3D,0xFCB8, + 0xFE87,0xFFB5,0x0079,0x00D5,0x007B,0x00E4,0x02A5,0x0588, + 0x0938,0x0CE5,0x104C,0x12E7,0x14B8,0x168A,0x18CF,0x1AAD, + 0x1BC3,0x1C82,0x1C95,0x1B21,0x18F2,0x16E7,0x1526,0x1386, + 0x1227,0x1189,0x1122,0x1101,0x1060,0x0F81,0x0EBB,0x0D87, + 0x0C15,0x09DC,0x0837,0x06D7,0x061E,0x0384,0xFF14,0xFC1A, + 0xFA2D,0xF827,0xF5BA,0xF4F4,0xF496,0xF415,0xF3E5,0xF40C, + 0xF4A8,0xF4BA,0xF467,0xF470,0xF4A1,0xF4AF,0xF492,0xF3C4, + 0xF302,0xF3B8,0xF3A8,0xF41D,0xF5E3,0xF8D3,0xFACE,0xFBE7, + 0xFD25,0xFE5C,0xFFE8,0x01CA,0x0393,0x05C5,0x0756,0x0833, + 0x07A1,0x0721,0x070C,0x077A,0x07FB,0x0857,0x0936,0x0A21, + 0x0A6A,0x09BB,0x08A4,0x0910,0x09BD,0x09AB,0x0974,0x0971, + 0x07FE,0x05BE,0x0398,0x015E,0xFFB2,0xFDFD,0xFCAA,0xFBE2, + 0xFA61,0xF935,0xF831,0xF795,0xF707,0xF64D,0xF57A,0xF447, + 0xF3DF,0xF42D,0xF437,0xF3A5,0xF352,0xF2DC,0xF1B4,0xF08F, + 0xF07A,0xF1A3,0xF243,0xF2B3,0xF35F,0xF431,0xF549,0xF679, + 0xF72F,0xF81C,0xF9B9,0xFAF5,0xFBA2,0xFBF7,0xFC57,0xFCFA, + 0xFDA9,0xFE69,0xFE6B,0xFFA9,0x00CD,0x00B2,0x0155,0x0242, + 0x032D,0x0408,0x0448,0x044A,0x0414,0x0404,0x03F4,0x03C6, + 0x03A2,0x0282,0x0216,0x013F,0x00B9,0x0045,0x004F,0x00AC, + 0x00C3,0xFFD0,0xFEF4,0xFE15,0xFCCB,0xFBF7,0xFD97,0xFB99, + 0xFB3D,0xFAFD,0xF9B1,0xF8BA,0xF86E,0xF849,0xF7A9,0xF775, + 0xF803,0xF842,0xF83F,0xF86C,0xF874,0xF949,0xF970,0xF940, + 0xF90E,0xF925,0xF975,0xF9C6,0xF9B9,0xF996,0xFA07,0xFA29, + 0xF9CC,0xF999,0xF971,0xF90C,0xF936,0xF8B0,0xF7BD,0xF74F, + 0xF6E3,0xF66A,0xF645,0xF5D4,0xF598,0xF551,0xF4EB,0xF4C2, + 0xF4B3,0xF538,0xF50E,0xF50B,0xF4E1,0xF46E,0xF43E,0xF3BA, + 0xF367,0xF35E,0xF357,0xF2B3,0xF228,0xF1B9,0xF143,0xF09F, + 0xF047,0xEFE1,0xEF79,0xEF32,0xEE79,0xED67,0xEB00,0xEA4C, + 0xE9F5,0xE938,0xE905,0xE8CC,0xE8E5,0xE8F2,0xE845,0xE82E, + 0xE817,0xE7F9,0xE7CB,0xE7EA,0xE7DF,0xE7E4,0xE7DA,0xE86B, + 0xE858,0xE74E,0xE7AD,0xE8A7,0xE85E,0xE892,0xE8FD,0xE95E, + 0xE970,0xE98A,0xE9A8,0xE9B4,0xE9F3,0xEA34,0xEAF6,0xEB5F, + 0xEB5F,0xEB1E,0xEB78,0xEBBE,0xEBE4,0xEC67,0xECB9,0xED66, + 0xEDB4,0xEF15,0xEF63,0xEE92,0xEE9D,0xEF0E,0xEF61,0xEFBF, + 0xF05C,0xF0B3,0xF171,0xF20A,0xF2C0,0xF36F,0xF39A,0xF3C3, + 0xF4BA,0xF506,0xF568,0xF5F8,0xF698,0xF6AF,0xF6B5,0xF704, + 0xF7F0,0xF8A4,0xF8D9,0xF8EE,0xF97A,0xF9BD,0xF9CD,0xFA63, + 0xFA84,0xFAF9,0xFB4D,0xFB95,0xFBE8,0xFC47,0xFD04,0xFD8B, + 0xFDD0,0xFE21,0xFE35,0xFEC7,0xFF33,0xFFC0,0xFFDD,0xFFD6, + 0x000C,0x0080,0x0093,0x00C1,0x0107,0x013C,0x0192,0x0201, + 0x01FE,0x0261,0x02C8,0x032E,0x032D,0x0359,0x03AD,0x03E5, + 0x042A,0x0495,0x051B,0x0568,0x05CC,0x0648,0x061D,0x067F, + 0x06CF,0x0716,0x0740,0x0733,0x077E,0x085E,0x06A2,0x07D2, + 0x0961,0x0871,0x08BD,0x0959,0x099D,0x0991,0x09E3,0x0A91, + 0x0ACA,0x0AD1,0x0AB3,0x0B0F,0x0B6A,0x0BAA,0x0BA4,0x0BCB, + 0x0BD2,0x0BBC,0x0BE3,0x0C37,0x0C54,0x0C94,0x0C91,0x0CF8, + 0x0D14,0x0CD2,0x0CE1,0x0CAE,0x0CD3,0x0CCD,0x0CEC,0x0D81, + 0x0D65,0x0D5E,0x0D31,0x0D26,0x0D80,0x0D9B,0x0D71,0x0DAD, + 0x0DDC,0x0DD6,0x0D9D,0x0DCF,0x0E08,0x0DFC,0x0DDB,0x0E13, + 0x0E6A,0x0EB3,0x0E86,0x0E0E,0x0DF8,0x0E39,0x0EB8,0x0E9E, + 0x0E63,0x0E75,0x0EB6,0x0F74,0x117D,0x10CE,0x108A,0x106B, + 0x106C,0x103D,0x103E,0x0FD8,0x0F98,0x0FAE,0x0FBC,0x0F78, + 0x0F63,0x0F55,0x0F5D,0x0EFD,0x0EC3,0x0E63,0x0E22,0x0D85, + 0x0E31,0x0E86,0x0DCE,0x0CEB,0x0D23,0x0D45,0x0CC4,0x0D3A, + 0x0D1E,0x0D56,0x0D2D,0x0CCF,0x0CB3,0x0CB0,0x0C0C,0x0C61, + 0x0C57,0x0C9E,0x0C70,0x0BCF,0x0B9A,0x0B96,0x0B30,0x0BA5, + 0x0BBA,0x0A40,0x0A86,0x0B5D,0x0B3D,0x0AD6,0x0AF6,0x0AC7, + 0x0AFA,0x0B0A,0x0ADE,0x0A68,0x097C,0x0958,0x08F1,0x0872, + 0x0821,0x086A,0x08B8,0x08F5,0x082B,0x07DC,0x07BD,0x0761, + 0x079A,0x0790,0x07DC,0x0825,0x07E4,0x07FB,0x0836,0x0769, + 0x076D,0x07BF,0x079F,0x0780,0x0798,0x076F,0x0766,0x06E2, + 0x067D,0x06A8,0x06E8,0x06D8,0x066D,0x061E,0x0632,0x0614, + 0x05DB,0x059C,0x059B,0x0593,0x0592,0x054E,0x053C,0x04C5, + 0x04A6,0x04B7,0x047E,0x0414,0x040B,0x044E,0x042B,0x03DA, + 0x03AD,0x03E5,0x03FC,0x03A4,0x0394,0x039B,0x03B0,0x0445, + 0x0418,0x03ED,0x03E1,0x03D9,0x0323,0x0476,0x04D1,0x0366, + 0x03F8,0x035C,0x0386,0x0380,0x038A,0x038A,0x03F5,0x0433, + 0x0442,0x0407,0x03DC,0x03B1,0x03E3,0x0432,0x0414,0x0425, + 0x0421,0x0440,0x0423,0x0429,0x03CC,0x03B8,0x0365,0x038C, + 0x03C9,0x038A,0x0397,0x032B,0x033B,0x035E,0x0350,0x0315, + 0x02AF,0x020F,0x0241,0x0265,0x0223,0x0238,0x026D,0x0265, + 0x022B,0x021A,0x01BA,0x01FD,0x01EE,0x01FE,0x0217,0x0231, + 0x0226,0x0233,0x0228,0x023F,0x0213,0x01E7,0x0183,0x0167, + 0x0199,0x01AC,0x01B5,0x0175,0x00E9,0xFF14,0xFE03,0xFED7, + 0x002E,0x0072,0x00C3,0x01B9,0x0219,0x0284,0x0368,0x0443, + 0x0583,0x0606,0x05C1,0x0560,0x0554,0x0582,0x064B,0x069D, + 0x072F,0x0764,0x070D,0x0829,0x075E,0x0622,0x061E,0x06E9, + 0x07AD,0x0815,0x0860,0x08ED,0x08AF,0x08F2,0x09B7,0x0AF6, + 0x0B8D,0x0CC8,0x0E58,0x0FD2,0x10EC,0x10F7,0x1069,0x108C, + 0x1116,0x11C7,0x1285,0x13B9,0x14BB,0x148A,0x13E3,0x13EF, + 0x1520,0x16BE,0x1725,0x1794,0x1808,0x187D,0x190A,0x191B, + 0x18CE,0x192A,0x18F7,0x1822,0x17D2,0x1893,0x1A11,0x1A73, + 0x190A,0x1771,0x166C,0x16D8,0x17F7,0x18DE,0x1915,0x18DD, + 0x1811,0x168B,0x1567,0x1528,0x1522,0x151C,0x1522,0x1556, + 0x1530,0x1450,0x13BA,0x13B9,0x13C0,0x1379,0x136A,0x1326, + 0x137E,0x1386,0x1309,0x121D,0x1162,0x1094,0x1122,0x1096, + 0x0EE3,0x1081,0x0F97,0x0EEA,0x0F37,0x0F4B,0x0F60,0x0FA8, + 0x0F22,0x0E05,0x0D02,0x0C7A,0x0C49,0x0D1E,0x0D05,0x0BEC, + 0x0AD3,0x0A24,0x09DA,0x0990,0x08CD,0x089D,0x08DA,0x08E0, + 0x0818,0x0759,0x06C2,0x052B,0x0407,0x0409,0x048C,0x04E6, + 0x04C5,0x03FF,0x027D,0x00E2,0x0011,0x004D,0x00A3,0x0071, + 0x0075,0x005A,0xFFCB,0xFF38,0xFEA3,0xFE75,0xFD65,0xFC51, + 0xFBC7,0xFB73,0xFBEF,0xFC8D,0xFD2C,0xFD3A,0xFC10,0xF97B, + 0xF76A,0xF7BC,0xF989,0xFAC9,0xFAEE,0xFCF5,0xFD78,0xFB07, + 0xF895,0xF7D7,0xF92B,0xFA80,0xFA1E,0xF8ED,0xF865,0xF956, + 0xF985,0xF89E,0xF6D2,0xF684,0xF648,0xF594,0xF5B8,0xF68E, + 0xF6AE,0xF53D,0xF3C2,0xF2E5,0xF359,0xF57E,0xF6A3,0xF587, + 0xF42E,0xF378,0xF1D0,0xF0D4,0xF19F,0xF340,0xF332,0xF0EE, + 0xEF76,0xEF96,0xF0EE,0xF14B,0xF04B,0xEFD4,0xEFD5,0xEF3E, + 0xEE69,0xEF24,0xEFDE,0xEF56,0xEEF8,0xEDE2,0xEDC9,0xEEC6, + 0xEF9B,0xEFB7,0xEFC7,0xEFFA,0xEF1C,0xEDC3,0xEC83,0xEC78, + 0xED97,0xEEB0,0xEF36,0xEE82,0xEDA7,0xEC9E,0xEB85,0xEA6B, + 0xEB3A,0xED93,0xEF5E,0xEF9D,0xEFA6,0xEEB4,0xED40,0xEC2D, + 0xEBB5,0xEC4C,0xECF7,0xEDA1,0xEDB7,0xEDE8,0xEF92,0xF07B, + 0xEF3A,0xED4A,0xED25,0xEE26,0xEED0,0xEF64,0xF085,0xF0D7, + 0xEF95,0xED3E,0xEB77,0xEC26,0xEDD7,0xEEC7,0xEED4,0xEF8F, + 0xEF96,0xEEF4,0xEE52,0xEE8E,0xEECE,0xEF83,0xF027,0xF05E, + 0xF13E,0xF2F3,0xF26A,0xF04A,0xED19,0xEC69,0xED20,0xEDCB, + 0xEF13,0xF175,0xF33A,0xF3C6,0xF2B3,0xF117,0xF02A,0xF234, + 0xEFC9,0xF004,0xF287,0xF4D5,0xF641,0xF54D,0xF2E4,0xF112, + 0xEF9E,0xEE67,0xEFAA,0xF35C,0xF7F3,0xF922,0xF712,0xF3B1, + 0xF128,0xEFFA,0xF075,0xF25D,0xF5D9,0xF8A6,0xF820,0xF635, + 0xF517,0xF4D9,0xF4F6,0xF53F,0xF560,0xF5FD,0xF67B,0xF61F, + 0xF603,0xF714,0xF7F8,0xF6DD,0xF53B,0xF3E1,0xF43A,0xF6B0, + 0xF99A,0xFACF,0xFA77,0xF8FD,0xF801,0xF6FF,0xF678,0xF72F, + 0xF8BB,0xF81A,0xF680,0xF5FC,0xF73F,0xF88B,0xF94A,0xF953, + 0xF91E,0xF954,0xF994,0xF933,0xF861,0xF8CE,0xF8F2,0xF6F9, + 0xF5E9,0xF5E0,0xF746,0xF7F9,0xF6E2,0xF57C,0xF649,0xF892, + 0xF8E1,0xF84F,0xF86C,0xF94B,0xF9EE,0xF964,0xF89A,0xF93C, + 0xFA8E,0xFA5C,0xF7F4,0xF76A,0xF87A,0xF8DD,0xF967,0xFB4F, + 0xFD7E,0xFD44,0xFBED,0xFAC6,0xFA00,0xFA95,0xFBFE,0xFC3A, + 0xFB34,0xFABD,0xFB2F,0xFBBD,0xFBD2,0xFC79,0xFDCE,0xFEA6, + 0xFE87,0xFD28,0xFCB8,0xFD53,0xFD24,0xFD3C,0xFC9A,0xFB5B, + 0xFBD2,0xFD04,0xFD9C,0xFC6C,0xFBA4,0xFC7E,0xFE76,0x0037, + 0x0114,0x025C,0x02A0,0x00D4,0xFD57,0xFA5D,0xF984,0xFB54, + 0xFF45,0x027A,0x0407,0x036E,0xFFDF,0xFC34,0xFB02,0xFD03, + 0xFF94,0x01BC,0x0371,0x0377,0x0298,0x012F,0xFF4C,0xFD69, + 0xFCE8,0xFD83,0xFE98,0x00AA,0x0246,0x0252,0x00AC,0xFE84, + 0xFCB4,0xFC81,0xFE17,0x00C1,0x0292,0x0374,0x0289,0x01E8, + 0x0190,0x00D3,0x004A,0xFFD5,0xFE84,0xFD3A,0xFD12,0xFDF3, + 0xFF18,0xFEE0,0xFDD0,0xFE13,0xFF27,0x0143,0x0461,0x056B, + 0x0381,0xFF84,0xFD40,0xFD1E,0xFDCF,0xFFC4,0x0101,0xFDA0, + 0xFD37,0xFDAE,0xFDAB,0xFFC9,0x013E,0x00D4,0xFFEB,0xFEFE, + 0xFF49,0x0144,0x037D,0x03F8,0x0305,0x00C8,0xFF90,0xFF3A, + 0xFF61,0xFF50,0xFE35,0xFDB7,0xFD4D,0xFC29,0xFCFD,0xFFDD, + 0x0381,0x048F,0x0396,0x0216,0x0033,0xFF76,0xFFBC,0xFF33, + 0xFDF7,0xFE28,0xFF35,0xFF9D,0xFF1E,0xFE2C,0xFDA0,0xFCC5, + 0xFC2D,0xFDAF,0x0281,0x0600,0x063F,0x032B,0xFF42,0xFD03, + 0xFD5F,0xFF01,0x0205,0x03EB,0x02A1,0xFEF6,0xFB2F,0xF8EA, + 0xF9E7,0xFD55,0xFFC2,0x005E,0x0227,0x05E5,0x0501,0x0251, + 0x00BE,0x0131,0x0268,0x011C,0xFF2E,0xFF1C,0xFFEB,0xFF1B, + 0xFD48,0xFBAD,0xFC86,0xFFEA,0x01E6,0x02A2,0x039D,0x04F2, + 0x03B5,0x0126,0xFF2E,0xFFA7,0x0207,0x035A,0x0143,0xFEB5, + 0xFE57,0xFDD9,0xFC14,0xFC36,0xFF53,0x0312,0x043C,0x02AD, + 0x025C,0x0264,0x020E,0x002C,0xFE68,0xFE30,0xFF1B,0x0035, + 0x013A,0x00D2,0xFE5D,0xFC6F,0xFCEB,0xFDD3,0xFF7C,0x022C, + 0x053F,0x0715,0x060F,0x02E1,0x0044,0xFEA7,0xFD02,0xFAFB, + 0xF941,0xF9DB,0xFDD8,0x0048,0x002D,0xFE47,0xFD1E,0xFCE4, + 0xFBC9,0xFBD6,0xFE1D,0x0124,0x0251,0x0153,0xFFD9,0xFFC9, + 0xFF62,0xFCB4,0xF9E1,0xF9E9,0xFC34,0xFF08,0x00C0,0x0007, + 0xFEA7,0xFC8F,0xFB0F,0xFAA1,0xFBF4,0xFF2F,0x01F1,0x0201, + 0xFF8A,0xFD57,0xFDFC,0xFEBC,0xFDFF,0xFD32,0xFD30,0xFCC5, + 0xFAE0,0xF968,0xFA90,0xFDEF,0x002F,0xFF0A,0xFCDA,0xFC44, + 0xFE32,0xFF66,0xFF94,0xFE77,0xFDF7,0xFD02,0xFBB4,0xFB83, + 0xFF49,0x0253,0x01AC,0xFE9C,0xFD3C,0xFCBE,0xFE86,0xFF10, + 0xFE05,0x00DB,0x0153,0xFFCA,0xFD31,0xFC22,0xFCAD,0xFE91, + 0xFFCB,0x0157,0x0313,0x03D9,0x023C,0xFEF6,0xFCDD,0xFD1F, + 0xFF56,0xFFB6,0xFE6D,0xFE78,0x004B,0x00D5,0xFEE1,0xFD54, + 0xFEDB,0x0150,0x0066,0xFFE4,0x0278,0x05AD,0x0490,0x001A, + 0xFD4B,0xFE5B,0xFFA9,0xFED4,0xFF7F,0x0215,0x03E0,0x0207, + 0xFF82,0x002A,0x0219,0x01AD,0xFF46,0xFEAD,0x0168,0x040C, + 0x04BC,0x0374,0x0263,0x0141,0xFE58,0xFA87,0xFA1C,0xFF01, + 0x0406,0x048D,0x0211,0x00EF,0x01C6,0x00CD,0xFDCC,0xFD82, + 0x0176,0x02DE,0x0130,0xFF3D,0xFED7,0xFDDE,0xFB16,0xF97D, + 0xFB38,0xFE92,0x0067,0x017B,0x0289,0x02B1,0x0088,0xFD2E, + 0xFC74,0xFE26,0x000D,0x0364,0x05DC,0x062C,0x0470,0x0022, + 0xFC10,0xFB63,0xFDFB,0x0151,0x04B1,0x06B5,0x06B6,0x03F3, + 0xFF35,0xFC5D,0xFC01,0xFE8E,0x0268,0x0652,0x072D,0x058A, + 0x01CC,0xFDBE,0xFCAF,0xFC83,0xFFA0,0x030B,0x04D3,0x04DC, + 0x0384,0x02AB,0x01D7,0x0132,0x00B6,0x01D3,0x0330,0x0435, + 0x05CC,0x0680,0x0551,0x0215,0xFE54,0xFD65,0x0054,0x03F8, + 0x061A,0x0699,0x0657,0x0597,0x026B,0xFF86,0xFFC0,0x01C9, + 0x0368,0x0477,0x05EC,0x06CC,0x0677,0x03E4,0x00D2,0xFE98, + 0xFEC6,0x00DC,0x02D8,0x0524,0x0772,0x088F,0x0705,0x0308, + 0x001A,0xFF12,0xFECA,0xFF26,0x0144,0x0480,0x0618,0x052B, + 0x0237,0xFE85,0xFBFD,0xFC13,0xFE70,0x01FD,0x0448,0x04EB, + 0x04DF,0x0328,0x014E,0x010D,0x0118,0x0173,0x0187,0x019B, + 0x0177,0x00E2,0x001D,0x0016,0x010A,0x01A5,0x0036,0xFE84, + 0x017D,0x0240,0x0205,0x01E5,0x025D,0x02DC,0x0213,0x00BA, + 0x00B7,0x0169,0x0165,0x0168,0x014A,0x01DF,0x024E,0x0116, + 0xFEFD,0xFE21,0xFF0F,0x008E,0x0230,0x0328,0x032E,0x0159, + 0xFEF3,0xFD30,0xFE18,0x00F0,0x0450,0x0656,0x0571,0x01DD, + 0xFE73,0xFD17,0xFE34,0x00BA,0x029A,0x032B,0x0264,0x0026, + 0xFCF3,0xFB24,0xFC12,0xFE89,0x0003,0x0026,0x0092,0x0249, + 0x0327,0x00D6,0xFE5D,0xFE09,0xFF4A,0xFF91,0xFF31,0x003D, + 0x0281,0x02B7,0xFFEA,0xFD03,0xFE59,0x00B4,0x0240,0x042C, + 0x05A9,0x0671,0x0557,0x016C,0xFCD0,0xFB54,0xFD40,0x0033, + 0x02DD,0x0435,0x03F7,0x0156,0xFCE7,0xFA50,0xFC88,0x0091, + 0x03DD,0x0604,0x0538,0x0355,0x00DD,0xFE21,0xFC6C,0xFC8B, + 0xFD4F,0xFDBF,0xFDCB,0xFEEE,0x0068,0xFFED,0xFC7A,0xF971, + 0xF8AB,0xFB71,0xFF43,0x0287,0x04E4,0x05E2,0x03CE,0xFFCE, + 0xFC0D,0xF8F6,0xF7A6,0xF9E5,0xFD90,0xFFC3,0x0012,0xFF3A, + 0xFD93,0xFBD6,0xF99B,0xF9FD,0xFD58,0x020E,0x0571,0x05CE, + 0x01C1,0xFCBC,0xF802,0xF5FC,0xF80B,0xFC4F,0xFFA4,0xFF18, + 0xFB9B,0xF8FF,0xF8F2,0xFA8C,0xFC7E,0xFE4F,0x0095,0x0272, + 0x025A,0x01E3,0x01F9,0x00E9,0xFD27,0xF97B,0xF7DC,0xF8D4, + 0xFB5B,0xFE2C,0xFFF2,0xFF98,0xFDA0,0xFBC3,0xFB0E,0xFBCD, + 0xFEA2,0x0224,0x0362,0x00DB,0xFD81,0xFC8D,0xFC22,0xFB72, + 0xFB34,0xFB6A,0xFB8A,0xFB94,0xFC06,0xFCDC,0xFDE2,0xFE7B, + 0xFE34,0xFD6C,0xFDB7,0xFF1F,0x019F,0x02C9,0x01CD,0xFEFD, + 0xFCE5,0xFA9B,0xF9A4,0xFBE8,0xFE2B,0xFFAD,0x027D,0xFF97, + 0xFCD2,0xFBA4,0xFBF0,0xFE6F,0x0183,0x0283,0x00FC,0xFF66, + 0xFDC3,0xFD8D,0xFD9B,0xFF05,0xFFE5,0xFF9A,0xFCDD,0xFA95, + 0xFBE9,0xFEC0,0x017D,0x02D9,0x02A9,0x00C6,0xFE0D,0xFC46, + 0xFC92,0xFE17,0xFF09,0xFEE4,0xFDC0,0xFCE1,0xFD0A,0xFF94, + 0x020F,0x0249,0x0012,0xFDEC,0xFDE9,0xFFE2,0x0269,0x03AB, + 0x0149,0xFD96,0xFB99,0xFBB1,0xFDA4,0x0073,0x0350,0x0409, + 0x0179,0xFE3D,0xFE7B,0x010B,0x032A,0x03CD,0x02C7,0x0268, + 0x01AC,0x00E0,0x00D1,0x021F,0x0204,0xFE16,0xF95B,0xF8FF, + 0xFB40,0xFEA2,0x00BC,0x0104,0x0132,0x00AD,0xFFCC,0xFF97, + 0x00E0,0x01D6,0x0054,0xFE29,0xFD80,0xFEEF,0x00DF,0x01F3, + 0x02E1,0x0207,0x0063,0xFF16,0xFF02,0x0004,0x0178,0x026A, + 0x031B,0x03DE,0x02C8,0x0110,0x004F,0xFF5D,0xFE89,0xFEB3, + 0x0010,0x01BD,0x0311,0x03DB,0x03D4,0x01DE,0xFFDC,0xFFAE, + 0x019A,0x044B,0x0538,0x03D1,0x029E,0x0150,0x004F,0x0044, + 0x01E0,0x02B3,0x007E,0xFE19,0xFE62,0x002B,0x01E8,0x0336, + 0x0450,0x048A,0x0477,0x0452,0x0512,0x064F,0x0664,0x0421, + 0x009C,0xFF9D,0x0154,0x0354,0x02FE,0x0191,0x0046,0xFF8A, + 0xFED6,0xFF33,0x0096,0x02DB,0x03D3,0x0301,0x02AD,0x0405, + 0x057B,0x05E6,0x038C,0xFFE4,0xFD35,0xFC88,0xFDD3,0xFFA1, + 0x00AF,0x014E,0x018E,0x006D,0xFFE9,0x0105,0x0351,0x04ED, + 0x0557,0x0561,0x04A6,0x02E3,0x01CF,0x00B1,0xFF5F,0xFDB0, + 0xFCAA,0xFDE2,0x00F1,0x0320,0x0460,0x042F,0x02EC,0x01A5, + 0x0151,0x03A5,0x0738,0x0908,0x07B2,0x0314,0xFB61,0xF942, + 0xFB13,0xFE9B,0x022B,0x02EE,0x01B1,0x008F,0xFF01,0xFEC9, + 0x0152,0x0462,0x053C,0x038F,0x018F,0x0000,0xFF62,0xFFE2, + 0x0022,0xFEDC,0xFCBB,0xFBF4,0xFCC8,0xFF2F,0x01E8,0x02C8, + 0x011D,0xFE99,0xFCB5,0xFD06,0x0064,0x047A,0x058F,0x0337, + 0xFEF9,0xFC34,0xFB17,0xFB3F,0xFE19,0x0168,0x0207,0xFFD5, + 0xFEB2,0xFF72,0xFF92,0xFDE4,0xFD3B,0xFE7E,0x0023,0xFFFB, + 0xFFCF,0x016D,0x0244,0xFFBA,0xFC03,0xFB60,0xFD43,0xFEC2, + 0xFF91,0x0050,0x0183,0x01EB,0x0127,0xFE33,0xFE47,0x01C4, + 0x03A6,0x032C,0x025C,0x02F3,0x026E,0xFFB8,0xFD02,0xFD55, + 0x0042,0x0272,0x017B,0x003B,0x009B,0x00A7,0xFE9A,0xFCF5, + 0x00FC,0x04F3,0x039F,0x004A,0xFFE3,0x010C,0x0006,0xFE22, + 0xFD25,0xFE56,0xFFCE,0xFFFF,0x00A9,0x02FC,0x03D9,0x00B5, + 0xFBFB,0xF9DC,0xFB3E,0xFECD,0x023C,0x055D,0x0679,0x0480, + 0xFF51,0xF8EA,0xF7E4,0xFCCF,0x01AE,0x0517,0x061F,0x0589, + 0x0299,0xFE4C,0xFB01,0xF9A4,0xF9AB,0xFB72,0xFE35,0x0000, + 0x0009,0xFE62,0xFB40,0xF850,0xF866,0xFB6E,0xFEAD,0x0146, + 0x02B0,0x0124,0xFCA1,0xF770,0xF545,0xF707,0xFA4E,0xFD8D, + 0xFFCF,0x00D1,0xFF3C,0xFC8D,0xF948,0xF8E0,0xFB92,0xFE87, + 0xFFD1,0xFEF6,0xFE4E,0xFD6A,0xFB9F,0xF9C1,0xFA09,0xFBF7, + 0xFDED,0xFE6C,0xFEC9,0xFF0D,0xFD9B,0xFACF,0xF883,0xF805, + 0xFABC,0xFF0E,0x01EE,0x028D,0x018C,0xFF62,0xFD37,0xFBC8, + 0xFB20,0xFBFF,0xFD8C,0xFE86,0xFDDD,0xFBE4,0xFAEA,0xFBA3, + 0xFBD6,0xFCE9,0xFDC8,0xFECA,0xFDC4,0xFE7B,0xFE94,0xFE6B, + 0x005A,0x0035,0xFF5B,0xFD50,0xFBAD,0xFB84,0xFD17,0xFEC2, + 0xFEE6,0xFD82,0xFD0F,0xFEA2,0x00AC,0x0146,0x00B1,0xFFC6, + 0xFF02,0xFF32,0x0000,0x007B,0x013C,0x008B,0xFD9B,0xFA17, + 0xF79E,0xF89B,0xFCA5,0x008B,0x021C,0x0175,0x00BA,0xFF4B, + 0xFE8D,0xFE7E,0xFFAE,0x0239,0x0219,0xFFC3,0xFE04,0xFDA8, + 0xFED9,0xFF15,0xFDDF,0xFD75,0xFDFF,0xFDFD,0xFDF1,0x0019, + 0x02B1,0x0362,0x0258,0xFF9C,0xFD1B,0xFC2D,0xFBB6,0xFBF1, + 0xFCCD,0xFF52,0x020D,0x01DA,0xFF06,0xFBD1,0xFB2D,0xFC67, + 0xFC59,0xFD23,0xFF16,0x0090,0xFF98,0xFD78,0xFBBE,0xFA65, + 0xF987,0xF99F,0xFB4E,0xFF30,0x02B8,0x0322,0xFFE9,0xFC2F, + 0xF969,0xF95C,0xFB7A,0xFF0E,0x0296,0x042A,0x01D1,0xFD9B, + 0xFB3D,0xFBEB,0xFD5C,0xFDD8,0xFEA0,0x0172,0x03BE,0x0262, + 0xFFD7,0xFF36,0xFF93,0xFED6,0xFDBD,0xFE60,0x01F6,0x04BE, + 0x04CB,0x040E,0x01CC,0xFF8A,0xFCB7,0xFAAF,0xFB1C,0xFDAC, + 0x00AA,0x01E5,0x021A,0x0214,0x029D,0x02A2,0x0203,0x02EA, + 0x051C,0x060D,0x04C3,0x020D,0x00F0,0x0172,0x0067,0xFE0F, + 0xFD11,0xFE67,0xFFE4,0x00BE,0x02AF,0x05AC,0x06FE,0x04B1, + 0x0136,0xFF5E,0xFFB1,0x00AA,0x01B7,0x038E,0x0541,0x0426, + 0x00EC,0xFDE0,0xFDBC,0xFEAE,0xFF49,0xFEFE,0xFF80,0x0221, + 0x046B,0x0469,0x02DE,0x015A,0x0006,0xFF12,0xFEB1,0x0022, + 0x0383,0x065F,0x0633,0x01B0,0xFD11,0xFB94,0xFC88,0xFDD7, + 0x0030,0x0372,0x0593,0x043F,0x0075,0xFD22,0xFC8C,0xFD5D, + 0xFE93,0x00EB,0x054C,0x0887,0x076F,0x01E1,0xFCB9,0xFD8F, + 0xFCD5,0xFCC0,0xFE56,0x010E,0x0390,0x03F2,0x00C0,0xFD4D, + 0xFC58,0xFD7D,0xFE5F,0xFF1B,0x02B8,0x05E8,0x05A3,0x0186, + 0xFDBC,0xFD0A,0xFE7E,0xFEE7,0xFE2A,0xFEEC,0xFFE7,0xFEC7, + 0xFBD6,0xFB6C,0xFDA1,0xFF60,0xFFCA,0xFFE5,0x0142,0x0348, + 0x0348,0x00C8,0xFF8A,0xFFBA,0xFF73,0xFDD1,0xFC9F,0xFD19, + 0xFDF0,0xFD67,0xFBD6,0xFB10,0xFC8A,0xFF65,0x022E,0x0391, + 0x02AE,0x013D,0x003A,0xFF88,0xFE9F,0xFE37,0xFE0E,0xFD87, + 0xFBF8,0xFCB1,0x0010,0x0491,0x04A9,0x00B8,0xFDB9,0xFE3E, + 0x00A7,0x0427,0x0735,0x0736,0x03B4,0xFFA0,0xFC25,0xFB3D, + 0xFD10,0x0091,0x0289,0x019D,0xFF29,0xFD37,0xFBDB,0xFCDB, + 0x00DA,0x0488,0x0546,0x0376,0x0126,0xFFA0,0xFF8E,0xFF6F, + 0xFEB6,0xFE4E,0xFD99,0xFBEC,0xFA6E,0xFB10,0xFE6A,0x0093, + 0xFF90,0xFDE0,0xFDDF,0xFFAB,0x0117,0x0166,0x003E,0xFEA3, + 0xFBDA,0xFA09,0xFBF6,0xFE89,0x004D,0xFFFE,0xFC35,0xF880, + 0xF7B3,0xFB25,0xFF51,0x00C9,0x00B2,0x003D,0xFF43,0xFD70, + 0xFC7D,0xFC6E,0xFC20,0xFAF3,0xF9CC,0xFA08,0xFA78,0xFA6E, + 0xFA9F,0xFACD,0xFAA1,0xFA00,0xFA23,0xFD1B,0x00B7,0x02A7, + 0x02B7,0x01F2,0xFF05,0xFABD,0xF72C,0xF6C9,0xF949,0xFCDE, + 0xFE92,0xFE6C,0xFE4A,0xFDB3,0xFCB9,0xFCB7,0xFE73,0x015C, + 0x03A2,0x0456,0x038E,0x0277,0x0024,0xFC15,0xF739,0xF54F, + 0xF830,0xFCB3,0xFFC1,0x00A1,0xFF92,0xFD20,0xFB34,0xFADF, + 0xFD0A,0x0260,0x0556,0x050E,0x02D3,0xFF81,0xFC14,0xF948, + 0xF856,0xF9CB,0xFC2E,0xFE04,0xFD7B,0xFDE4,0xFC18,0xFD30, + 0xFE0B,0xFE4F,0x0076,0x02F5,0x02F8,0x00E8,0xFF1E,0xFDAD, + 0xFCFD,0xFC5E,0xFC7C,0xFD11,0xFD60,0xFBBF,0xFB0E,0xFCB8, + 0xFFA5,0x00C6,0x0002,0x005A,0x0116,0x0066,0xFEDA,0xFE89, + 0xFFE5,0x00E8,0xFF57,0xFCD3,0xFC03,0xFC39,0xFC2E,0xFB66, + 0xFC28,0xFE6C,0x0099,0x010B,0x0107,0x01FC,0x0204,0x0102, + 0x0011,0x00BC,0x02CB,0x0375,0x0136,0xFDD4,0xFB6E,0xFAEE, + 0xFA4B,0xFA3C,0xFC79,0xFF02,0x0052,0x000C,0x002D,0x0149, + 0x0235,0x022E,0x009E,0xFEC0,0xFD49,0xFBF1,0xFBDA,0xFB8C, + 0xFB4B,0xFBA1,0xFAA9,0xF989,0xFA8E,0xFDC1,0x0038,0x0014, + 0xFF75,0xFFB6,0xFFD3,0xFF00,0xFE08,0xFF3E,0x00F3,0xFF3D, + 0xFB6E,0xFAFC,0xFDA8,0xFEB3,0xFD16,0xFC45,0xFE2D,0x0053, + 0xFFF3,0xFFA5,0x0234,0x05AF,0x049F,0x0076,0xFE03,0xFEF3, + 0xFFFE,0xFFCD,0x00AB,0x02CF,0x0378,0x0162,0xFDAF,0xFCC1, + 0xFF45,0x00CB,0xFFCF,0x00C1,0x0234,0x02A4,0x0098,0xFEA3, + 0xFEEE,0x013D,0x033D,0x0400,0x0388,0x0327,0x02C7,0x0274, + 0x0115,0x0053,0x018A,0x02E0,0x0374,0x02CE,0x028C,0x0343, + 0x0324,0x01B8,0x016D,0x02AC,0x036F,0x0335,0x02D8,0x030D, + 0x0301,0x010E,0xFEEA,0xFEB7,0x0095,0x0205,0x0128,0x001D, + 0x004D,0x010A,0x00D0,0x00FF,0x0280,0x04D8,0x04EA,0x023C, + 0xFF79,0xFED8,0xFF8F,0xFFFE,0x004D,0x009A,0x002E,0xFE3A, + 0xFCA0,0xFD36,0xFFBE,0x01E0,0x0302,0x03FB,0x044C,0x0468, + 0x036A,0x01A1,0x006E,0x0004,0xFF6E,0xFEEA,0xFF4C,0x0049, + 0x00E8,0xFF83,0xFE2A,0xFEA0,0x0106,0x00B6,0x036F,0x05F3, + 0x04AE,0x0308,0x005E,0xFDCF,0xFD94,0xFF9A,0x0156,0x009A, + 0xFEA9,0xFE50,0xFF46,0xFF46,0xFF19,0xFF4F,0x0018,0x0152, + 0x0232,0x027B,0x02B0,0x02D2,0x01F6,0xFF5D,0xFDDA,0xFDBB, + 0xFEB3,0x0003,0x0055,0x0044,0xFFFA,0xFF46,0xFE2F,0xFEE9, + 0x00E4,0x02F4,0x037F,0x0350,0x01DE,0xFF7A,0xFE4D,0xFEDE, + 0xFFA4,0xFF58,0xFF80,0xFF86,0xFFAC,0xFF4A,0xFF3D,0xFFE0, + 0x00F0,0x0150,0x014C,0x01CD,0x02DB,0x021F,0xFFE3,0xFE2F, + 0xFE5E,0xFF7E,0x0126,0x033F,0x0322,0x02F2,0x0184,0x0115, + 0x01C5,0x0376,0x0511,0x0431,0x02B3,0x0153,0x00B2,0x00AE, + 0x00D3,0x008F,0x00B3,0x0035,0xFFDA,0xFFE8,0x0054,0x0214, + 0x0256,0x0017,0xFE06,0xFD91,0xFECF,0x0111,0x01E0,0x0176, + 0xFFB7,0xFE5A,0xFE02,0xFE26,0xFE36,0xFE28,0xFEA0,0xFE0D, + 0xFD26,0xFCDB,0xFE41,0xFFDB,0xFFC3,0xFDC8,0xFD49,0xFD7E, + 0xFD27,0xFE78,0xFF6F,0xFFE1,0xFFBD,0xFE4C,0xFCC6,0xFD35, + 0xFEC7,0xFF2A,0xFD66,0xFBCA,0xFBD6,0xFC9C,0xFC17,0xFBFF, + 0xFCE2,0xFD00,0xFC29,0xFB06,0xFAF8,0xFBAD,0xFC35,0xFC36, + 0xFB64,0xFB0A,0xFB94,0xFC16,0xFBA6,0xFB02,0xFA9C,0xFAE2, + 0xFB21,0xFBCB,0xFD03,0xFE06,0xFE6A,0xFDCA,0xFCFF,0xFCE7, + 0xFCBE,0xFC17,0xFC12,0xFD26,0xFD65,0xFD52,0xFD2D,0xFCF0, + 0xFC5A,0xFBB4,0xFB69,0xFCA5,0xFE2D,0xFECB,0xFE95,0xFDC9, + 0xFD2C,0xFC38,0xFAD4,0xFB38,0xFCB0,0xFD7D,0xFDCD,0xFCE5, + 0xFC2D,0xFB1E,0xFAD4,0xFB17,0xFBA2,0xFD5D,0xFEFC,0xFE65, + 0xFDD6,0xFDD4,0xFDE7,0xFC9F,0xFE14,0xFEC8,0xFE27,0xFF63, + 0xFEAE,0xFE1E,0xFDDB,0xFD80,0xFCDC,0xFDB7,0xFEA4,0xFF49, + 0xFF09,0xFE40,0xFDC6,0xFD62,0xFDA3,0xFDA9,0xFDA7,0xFDAF, + 0xFEAB,0xFEBC,0xFEDC,0xFEA2,0xFEA4,0xFDD1,0xFD43,0xFD63, + 0xFD8D,0xFE70,0xFF73,0x000A,0xFFC9,0xFF31,0xFDD5,0xFD0C, + 0xFD16,0xFDFF,0xFF16,0xFF3C,0xFEDA,0xFECC,0xFE47,0xFD36, + 0xFC95,0xFD7C,0xFE13,0xFE32,0xFE68,0xFE69,0xFE29,0xFDA0, + 0xFCCD,0xFCB3,0xFD59,0xFD70,0xFE6F,0xFF7F,0xFF72,0xFEDF, + 0xFD44,0xFC5D,0xFC71,0xFD68,0xFCEA,0xFC5E,0xFCAD,0xFC16, + 0xFB8A,0xFAD2,0xFABC,0xFB22,0xFB52,0xFAE3,0xFA5D,0xFA6B, + 0xF9F7,0xF93D,0xF90B,0xF851,0xF770,0xF6CA,0xF68B,0xF577, + 0xF565,0xF608,0xF4EA,0xF37E,0xF348,0xF3B9,0xF3C2,0xF429, + 0xF50B,0xF547,0xF528,0xF43B,0xF39F,0xF396,0xF3A1,0xF34B, + 0xF320,0xF322,0xF2D0,0xF252,0xF180,0xF0FE,0xF0CD,0xF0CA, + 0xF1A7,0xF04D,0xEF16,0xEEC6,0xEE5F,0xED9C,0xECD4,0xEC55, + 0xEC75,0xEC6F,0xEC6E,0xECD7,0xEC8F,0xEC28,0xEC36,0xEC00, + 0xEB7B,0xEBA0,0xEB9D,0xEB1B,0xEAFA,0xEAFF,0xEABB,0xEA5F, + 0xEA4D,0xEA2B,0xEA45,0xEA3C,0xEA4E,0xEA3F,0xEA2C,0xEA42, + 0xEA3E,0xE9C4,0xE9F4,0xEA6D,0xEAA4,0xEAF7,0xEB46,0xEB19, + 0xEB56,0xEB53,0xEB6E,0xEBE8,0xEC3D,0xEC89,0xECF6,0xED3F, + 0xED44,0xED73,0xED97,0xEE09,0xEE5E,0xEEEF,0xEF67,0xEFC8, + 0xF07C,0xF118,0xF18C,0xF193,0xF1C6,0xF261,0xF24F,0xF35D, + 0xF44D,0xF4AA,0xF4A8,0xF52F,0xF557,0xF56C,0xF56E,0xF646, + 0xF705,0xF77D,0xF798,0xF860,0xF7C3,0xF736,0xF976,0xF8F1, + 0xF9C9,0xFAB9,0xFAF1,0xFB73,0xFBBF,0xFC0C,0xFC4D,0xFC3F, + 0xFC85,0xFCE2,0xFD6B,0xFDE8,0xFE17,0xFE74,0xFEAA,0xFF16, + 0xFF8F,0xFFE1,0x0084,0x00E9,0x0149,0x0179,0x01CC,0x01AB, + 0x0205,0x029B,0x02AF,0x02FE,0x03A8,0x0421,0x0434,0x043D, + 0x044A,0x044A,0x04C8,0x057C,0x05F6,0x05CF,0x05A6,0x05C9, + 0x05E5,0x0649,0x0692,0x06CA,0x0722,0x0748,0x077E,0x0796, + 0x07FC,0x0810,0x080C,0x0859,0x08BE,0x091E,0x098B,0x099D, + 0x09C4,0x0A42,0x0C86,0x0D67,0x0D32,0x0D10,0x0D01,0x0C5D, + 0x0BF8,0x0C23,0x0C74,0x0CB2,0x0D04,0x0D40,0x0D86,0x0D76, + 0x0D5B,0x0DB2,0x0D90,0x0D6D,0x0D40,0x0CEB,0x0D42,0x0E8E, + 0x0E91,0x0DA3,0x0D4A,0x0DEA,0x0D80,0x0D89,0x0D9F,0x0DB4, + 0x0D9A,0x0DA1,0x0D59,0x0D7A,0x0D8D,0x0DDD,0x0DD9,0x0DCA, + 0x0DD6,0x0DB4,0x0DAD,0x0DD0,0x0D95,0x0D89,0x0E0E,0x0D8B, + 0x0C91,0x0D74,0x0DF4,0x0DAE,0x0DB9,0x0D6E,0x0D56,0x0D78, + 0x0DCE,0x0DA8,0x0D3F,0x0CEC,0x0CC6,0x0C43,0x0B23,0x0B96, + 0x0BF3,0x0BA3,0x0B8F,0x0B26,0x0AC7,0x0B00,0x0B62,0x0B7D, + 0x0B44,0x0B73,0x0B43,0x0AFF,0x0AE5,0x0B0B,0x0B52,0x0B69, + 0x0B79,0x0B1C,0x0AF5,0x0AE4,0x0AFE,0x0B13,0x0B86,0x0BD5, + 0x0B77,0x0AF1,0x0AAA,0x0A74,0x09F4,0x09F6,0x0A70,0x0ABB, + 0x0AB1,0x0A05,0x0987,0x0926,0x092B,0x0907,0x0883,0x08B8, + 0x08EE,0x08B6,0x08A9,0x085F,0x085E,0x085E,0x07FF,0x0817, + 0x08A5,0x08AC,0x08A7,0x0857,0x07F0,0x085B,0x0899,0x088C, + 0x08E0,0x0921,0x083A,0x07FC,0x09A6,0x0791,0x0824,0x0851, + 0x085A,0x0811,0x07F9,0x07B8,0x07BA,0x07BA,0x07C6,0x07E0, + 0x079E,0x07F3,0x0836,0x0894,0x0812,0x07D0,0x07B9,0x077F, + 0x0754,0x0783,0x07A5,0x07C9,0x07C2,0x0792,0x07F1,0x0776, + 0x0726,0x06D0,0x06F7,0x0734,0x06DF,0x06AA,0x06B2,0x0662, + 0x0615,0x0648,0x05E2,0x0633,0x05F1,0x05A3,0x0575,0x05DC, + 0x056F,0x0589,0x05B7,0x05CF,0x05E9,0x05BD,0x05D6,0x0588, + 0x0530,0x054E,0x054D,0x0577,0x05C0,0x058D,0x0582,0x0576, + 0x04EA,0x04AD,0x046F,0x03A0,0x023E,0x023A,0x0265,0x0219, + 0x01FD,0x0221,0x0293,0x028F,0x02AB,0x027D,0x028E,0x026D, + 0x02B0,0x02D0,0x02BE,0x02E3,0x02D4,0x0362,0x0338,0x0238, + 0x02C3,0x0370,0x02F9,0x02AE,0x030F,0x0330,0x02E4,0x0347, + 0x02FA,0x02E2,0x02B9,0x02BC,0x0353,0x0339,0x0321,0x0344, + 0x0398,0x041A,0x03CD,0x0329,0x0324,0x035D,0x0356,0x041E, + 0x0467,0x0381,0x0293,0x0271,0x0277,0x026B,0x02CC,0x0300, + 0x02E5,0x0288,0x029E,0x02EE,0x0341,0x036A,0x0400,0x0382, + 0x0351,0x0360,0x0342,0x02FC,0x02D4,0x02A2,0x0286,0x0259, + 0x02A6,0x029F,0x02AA,0x0282,0x0210,0x0206,0x0254,0x0240, + 0x022D,0x01EA,0x01E0,0x0189,0x0155,0x0185,0x0203,0x01DD, + 0x0189,0x019C,0x0112,0x00DD,0x00E6,0x00FE,0x010A,0x00A7, + 0x00A1,0x00B2,0x00B5,0x00A9,0x00DA,0x0080,0x0078,0x00AA, + 0x00A7,0x00B1,0x0095,0x0078,0x007C,0x00B0,0x0094,0x0091, + 0xFF9D,0xFF9E,0xFF96,0xFFB4,0xFF7E,0xFEA3,0xFE47,0xFE2E, + 0xFEC1,0xFFD4,0x0062,0x00D3,0x014F,0x0193,0x0227,0x037F, + 0x04D1,0x059C,0x05A6,0x060D,0x06DD,0x06EE,0x06E7,0x06D3, + 0x068B,0x06F7,0x070E,0x075C,0x078C,0x07EB,0x0815,0x0858, + 0x09A4,0x0B75,0x0B18,0x0B25,0x0BE9,0x0C89,0x0C5D,0x0CE1, + 0x0E0D,0x0F11,0x0F7A,0x1003,0x10D1,0x119F,0x1155,0x10F7, + 0x1196,0x1298,0x1357,0x132F,0x12F2,0x1539,0x1671,0x1597, + 0x14AF,0x14D2,0x1491,0x147C,0x14F5,0x152D,0x1538,0x1503, + 0x155A,0x1660,0x16C9,0x167F,0x158E,0x14FF,0x1560,0x1553, + 0x14D4,0x1466,0x13F5,0x13DC,0x144C,0x14AD,0x141E,0x1382, + 0x13E0,0x1469,0x14AD,0x142E,0x138A,0x131D,0x129B,0x1253, + 0x132C,0x135A,0x12A1,0x1182,0x0F8F,0x0F14,0x1040,0x1157, + 0x10BA,0x0F41,0x0E3B,0x0E39,0x0E66,0x0D99,0x0D2F,0x0E22, + 0x0EBB,0x0DB1,0x0CDB,0x0CF4,0x0CF6,0x0BE5,0x0A30,0x09A8, + 0x0AAC,0x0B3B,0x0A09,0x0824,0x06D0,0x063B,0x060A,0x06BA, + 0x0729,0x0728,0x0636,0x03FA,0x029B,0x02B8,0x036A,0x0277, + 0x0078,0xFF55,0xFEBC,0xFCD5,0xFA12,0xF79A,0xF6C4,0xF892, + 0xFB42,0xFC89,0xFC27,0xFA81,0xF900,0xF797,0xF81B,0xF9E4, + 0xFB1C,0xFA9A,0xF8ED,0xF8A6,0xFA76,0xFB87,0xFBB8,0xFC9F, + 0xFECA,0xFFEB,0x01D5,0xFFA0,0xFB57,0xFB94,0xFBD8,0xFD9B, + 0xFFA1,0x0095,0xFFA8,0xFD26,0xFB8A,0xFCA6,0xFEAB,0xFF2F, + 0xFD4B,0xFAC0,0xF8EB,0xF813,0xF7CA,0xF763,0xF6F5,0xF6A7, + 0xF71C,0xF694,0xF50E,0xF284,0xF098,0xF085,0xF126,0xF147, + 0xF01C,0xEE55,0xED79,0xEE1D,0xEEBB,0xEF63,0xEFB3,0xEF11, + 0xEE51,0xEE00,0xEE2E,0xEE20,0xEE82,0xEEFC,0xEF77,0xEFA8, + 0xEF63,0xF015,0xF1CB,0xF321,0xF374,0xF392,0xF2E2,0xF25D, + 0xF218,0xF277,0xF3E5,0xF4ED,0xF524,0xF472,0xF3B2,0xF3B1, + 0xF403,0xF3C7,0xF23F,0xF136,0xF14B,0xF08F,0xF0C7,0xF0A6, + 0xF0E4,0xF096,0xF07F,0xF0DA,0xF11E,0xF096,0xEF9E,0xEE65, + 0xECF5,0xEC66,0xED4C,0xEF0B,0xEFB1,0xEDF1,0xECB1,0xED40, + 0xEE6F,0xEEF3,0xEEF2,0xEF16,0xEE7A,0xED73,0xEDF7,0xEFB4, + 0xF147,0xF035,0xEE73,0xEEA1,0xF12B,0xF332,0xF3FF,0xF3E2, + 0xF250,0xF1F2,0xF2D4,0xF44C,0xF4D3,0xF5BE,0xF741,0xF5E3, + 0xF58A,0xF5DE,0xF632,0xF645,0xF6FC,0xF795,0xF72F,0xF68E, + 0xF665,0xF750,0xF74F,0xF6F0,0xF84D,0xFA3F,0xFA78,0xF7E2, + 0xF4C2,0xF4CF,0xF6DC,0xF709,0xF5A0,0xF59D,0xF5DE,0xF56F, + 0xF4BE,0xF536,0xF604,0xF61C,0xF5B4,0xF5BF,0xF582,0xF4E8, + 0xF4C3,0xF479,0xF431,0xF4AE,0xF519,0xF4E7,0xF675,0xF77E, + 0xF660,0xF505,0xF60C,0xF722,0xF72D,0xF65F,0xF667,0xF7ED, + 0xF7F4,0xF773,0xF7FA,0xF926,0xF8AA,0xF6C0,0xF71E,0xF9C7, + 0xFAAA,0xF952,0xF7A2,0xF7C4,0xF8FC,0xF965,0xF889,0xF8C1, + 0xF9CD,0xF9BC,0xF88D,0xF845,0xF967,0xFA3C,0xF8B2,0xF6BD, + 0xF75B,0xFAAB,0xFA72,0xF6F6,0xF6AF,0xF716,0xF846,0xF852, + 0xF7B5,0xF8E8,0xF9F1,0xF7B8,0xF513,0xF594,0xF88B,0xFA6A, + 0xF817,0xF603,0xF7B6,0xFA6D,0xF982,0xF699,0xF72D,0xFAB7, + 0xFBEB,0xF89F,0xF6A8,0xF90D,0xFC19,0xFAC3,0xF749,0xF8A0, + 0xFC4F,0xFD68,0xF9D6,0xF61B,0xF5FB,0xF621,0xF280,0xECCB, + 0xEA5C,0xEB82,0xEDAB,0xF024,0xF301,0xF50D,0xF561,0xF346, + 0xF204,0xF3F0,0xF62F,0xF6A4,0xF43B,0xF290,0xF46A,0xF88B, + 0xFBCA,0xFE8A,0x0181,0x04AA,0x05F2,0x05A0,0x0500,0x04C6, + 0x06E6,0x083E,0x0954,0x0B32,0x0B50,0x0A20,0x099D,0x0B8D, + 0x0E62,0x0F99,0x0E2B,0x0B13,0x0864,0x062C,0x0475,0x03AD, + 0x0371,0x02DB,0x0227,0x0152,0x0155,0x0169,0xFF58,0xFC23, + 0xFA84,0xFA0A,0xF925,0xF775,0xF472,0xF333,0xF493,0xF63C, + 0xF6ED,0xF719,0xF697,0xF6AE,0xF6A0,0xF6A4,0xF61F,0xF5F7, + 0xF610,0xF613,0xF70E,0xF98C,0xFBE9,0xFB97,0xFBA2,0xFDD7, + 0xFFC7,0x013C,0x015F,0x0088,0x0007,0xFFFD,0x0104,0x02C2, + 0x02E6,0x029D,0x02F6,0x0331,0x02AC,0x02B6,0x02C8,0x0226, + 0x00F1,0xFF8A,0xFE81,0xFED3,0xFF93,0xFF58,0xFE75,0xFD98, + 0xFD5D,0xFD69,0xFCE0,0xFBDC,0xFB32,0xF9AA,0xF86F,0xF862, + 0xF900,0xF944,0xF82F,0xF729,0xF6E6,0xF7F3,0xF93F,0xF8DF, + 0xF7AC,0xF5DB,0xF519,0xF706,0xF94D,0xF99C,0xF83E,0xF928, + 0xFAFC,0xFAF2,0xFB1E,0xFCD4,0xFE9B,0xFF09,0xFE44,0xFE4D, + 0xFF9B,0xFFEB,0xFE48,0xFE02,0x0042,0x0345,0x042A,0x024A, + 0x0137,0x0277,0x0296,0x023C,0x02C6,0x03F7,0x03F6,0x0136, + 0xFE6E,0xFFE6,0x044E,0x0222,0x0093,0xFFFF,0xFFD0,0xFFF5, + 0xFFDE,0xFDE1,0xFC2F,0xFC05,0xFD54,0xFD80,0xFBAC,0xFC65, + 0xFD90,0xFC53,0xFA70,0xFB92,0xFD60,0xFCDA,0xFAA4,0xF9AC, + 0xFACE,0xFC11,0xFBED,0xFB5A,0xFC86,0xFE3C,0xFE60,0xFC82, + 0xFC6C,0xFE93,0x0038,0xFED8,0xFD21,0xFF50,0x01DB,0x0051, + 0xFDFD,0x011C,0x0661,0x0635,0x00F9,0xFEB6,0x01FE,0x05C1, + 0x033F,0xFF95,0x01AC,0x05A1,0x03C1,0xFF0D,0x0022,0x03BB, + 0x03F0,0x013B,0xFFA9,0x024B,0x036B,0xFFC9,0xFD7A,0xFEFF, + 0x00A6,0xFF9A,0xFC9E,0xFDA5,0xFF2D,0xFCE9,0xFB02,0xFCDD, + 0x003B,0xFFB7,0xFD18,0xFC6B,0xFE97,0xFEFF,0xFD82,0xFE29, + 0x0076,0x0143,0x0011,0xFF80,0x00CF,0x0213,0x0177,0xFF38, + 0xFF9F,0x027A,0x04DF,0x03A6,0x000B,0xFE2B,0xFF01,0xFF37, + 0xFD53,0xFA23,0xF74E,0xF498,0xF2C8,0xF3F3,0xF855,0xFD1D, + 0xFE91,0xFCC7,0xFBB9,0xFB87,0xFB32,0xFBFC,0xFC75,0xFBBC, + 0xFCA3,0xFD97,0xFE7B,0x00BD,0x0490,0x0765,0x0994,0x0B4E, + 0x0CA0,0x0C89,0x0A71,0x0998,0x0AEC,0x0CE1,0x0EAD,0x0F38, + 0x0F7E,0x1011,0x10C4,0x110B,0x113C,0x11AE,0x10A7,0x0D3A, + 0x08D5,0x066E,0x064E,0x07C6,0x0883,0x07B1,0x0628,0x0485, + 0x033B,0x0245,0x021D,0x01A2,0xFFD3,0xFD0D,0xFADA,0xFA31, + 0xFA17,0xF9C7,0xF9C8,0xFB23,0xFD29,0xFE54,0xFD08,0xFA4E, + 0xF91C,0xF93B,0xFAA5,0xFC78,0xFD66,0xFDC1,0xFD12,0xFCAD, + 0xFEDC,0x0234,0x04A5,0x0542,0x051D,0x0512,0x04D7,0x03B5, + 0x0352,0x038F,0x054E,0x0747,0x08F5,0x094F,0x0854,0x06AB, + 0x06A2,0x07F5,0x078C,0x08CD,0x0753,0x038A,0x0313,0x040B, + 0x0512,0x053D,0x047C,0x0335,0x0251,0x0225,0x01DA,0x00D4, + 0xFE9F,0xFC71,0xFBE8,0xFCE5,0xFDE5,0xFDB7,0xFBFE,0xFAB6, + 0xFBB3,0xFD9F,0xFE0C,0xFC51,0xFA62,0xFAE1,0xFBD5,0xFC01, + 0xFC50,0xFE1D,0xFE81,0xFDFC,0xFE5E,0x009F,0x02B1,0x0170, + 0xFF7C,0xFF78,0x00AE,0x01D4,0x0260,0x027A,0x0108,0x007E, + 0x0306,0x05CB,0x059F,0x0370,0x01EF,0x0247,0x0438,0x050D, + 0x036C,0x00BE,0x003C,0x01E4,0x025C,0x016A,0x014C,0x0306, + 0x046E,0x0125,0x0073,0x0157,0x0077,0xFED4,0xFDBB,0xFEAB, + 0x0000,0xFF3E,0xFD09,0xFD7D,0xFE84,0xFD75,0xFB74,0xFC10, + 0xFD7B,0xFD42,0xFB7A,0xF9BC,0xFB9C,0xFE4C,0xFE56,0xFC9B, + 0xFD80,0xFFB8,0x0077,0xFE3F,0xFC38,0xFDC8,0x00A6,0x0088, + 0xFE22,0xFE7E,0x015C,0x02FD,0x004E,0xFDCE,0x0093,0x0533, + 0x0478,0x0016,0xFE33,0x008C,0x01EA,0x000F,0xFECB,0x005C, + 0x01BF,0x004A,0xFE13,0xFE26,0x00EF,0x0200,0xFFAB,0xFD0C, + 0xFCAA,0xFCF0,0xFBFE,0xFB56,0xFCCA,0xFDF2,0xFBF4,0xF976, + 0xF9E6,0xFD28,0xFDF1,0xFB00,0xF892,0xF987,0xFC0D,0xFC08, + 0xFA5A,0xFAD4,0xFCD7,0xFDFA,0xFD5C,0xFD3C,0xFE17,0xFE0E, + 0xFD1B,0xFDF4,0x000B,0x005D,0xFE7A,0xFD0F,0xFDD9,0xFF84, + 0xFF5A,0xFD9B,0xFC8D,0xFABA,0xF695,0xF304,0xF170,0xF0F6, + 0xF093,0xF11E,0xF3D6,0xF795,0xFA74,0xF964,0xF680,0xF51F, + 0xF624,0xF840,0xF910,0xF7F8,0xF72C,0xF819,0xFAB4,0xFE19, + 0x01B2,0x0402,0x054F,0x06A1,0x0742,0x0798,0x06EA,0x04E4, + 0x0340,0x0756,0x0A61,0x0B0A,0x0BCB,0x0AD9,0x0B3F,0x0D0D, + 0x0E46,0x0D61,0x0B70,0x0851,0x059E,0x040B,0x04E6,0x057B, + 0x04C9,0x03DD,0x0393,0x040D,0x03B5,0x0220,0xFFC9,0xFDEB, + 0xFD30,0xFC86,0xFA1F,0xF7F2,0xF790,0xF8A8,0xFA81,0xFBE0, + 0xFB9F,0xFA8A,0xFA8C,0xFA5D,0xFA82,0xFA86,0xF9A5,0xF8FB, + 0xFA2D,0xFCBC,0xFEAB,0xFFB3,0x001A,0x0166,0x02DE,0x049F, + 0x04D0,0x042E,0x039B,0x0381,0x03F3,0x04D3,0x061E,0x0790, + 0x08D0,0x091D,0x08C6,0x0847,0x0811,0x07AF,0x0724,0x069A, + 0x0626,0x03BE,0x0147,0x005C,0x002C,0x015F,0x0305,0x0312, + 0x016D,0xFF38,0xFCF4,0xFBC6,0xFC30,0xFCE9,0xFD17,0xFD1A, + 0xFC48,0xFB5E,0xFAEF,0xFBDD,0xFBA5,0xFB8A,0xFC76,0xFC49, + 0xFB68,0xFC42,0xFC03,0xFA55,0xFB01,0xFE63,0xFFC3,0xFF6E, + 0x001C,0x02F1,0x030F,0xFF34,0xFE61,0x034D,0x06CD,0x04B9, + 0x0162,0x0151,0x03FD,0x05CB,0x0556,0x065A,0x0747,0x0776, + 0x0603,0x049A,0x04EC,0x04FD,0x0376,0x02F4,0x0575,0x07CB, + 0x0604,0x032B,0x037C,0x0607,0x0722,0x04B9,0x016E,0x01C5, + 0x0309,0x0118,0xFEF1,0xFF7D,0x01F2,0x025C,0xFFD4,0xFDB7, + 0xFF7F,0x0289,0x01BB,0xFE9C,0xFEB3,0x0060,0xFF83,0xFDAD, + 0xFE7F,0x01C1,0x02D5,0x0033,0xFF5A,0x0210,0x03CE,0x01CC, + 0x0041,0x0196,0x03EE,0x03A5,0x018E,0x014A,0x0399,0x0487, + 0x0378,0x0317,0x049F,0x0673,0x0424,0x011C,0x0221,0x0451, + 0x0471,0x02CD,0x02BD,0x048B,0x0505,0x0279,0x0148,0x0319, + 0x04CD,0x0204,0xFE6A,0x000C,0x03CA,0x022E,0xFCC2,0xFB7E, + 0x0130,0x0325,0xFFA7,0xFDA9,0xFCAE,0xFEDA,0xFE55,0xFAFE, + 0xFBDA,0xFFA0,0xFF70,0xFBD0,0xFACD,0xFD93,0x00BB,0xFF82, + 0xFB95,0xFB6F,0xFFED,0x0248,0xFE9F,0xFA69,0xFB8E,0x002D, + 0x0151,0xFF98,0xFE98,0xFFAF,0x00AC,0xFE64,0xFB2B,0xFA45, + 0xF9A7,0xF5B3,0xEFF7,0xEDB3,0xF08A,0xF507,0xF77C,0xF839, + 0xF8E0,0xF8EE,0xF7C8,0xF66D,0xF6FE,0xF8CB,0xF901,0xF835, + 0xF7F4,0xFA30,0xFE17,0x00F9,0x02C6,0x0574,0x089F,0x09F2, + 0x086C,0x065D,0x05CC,0x0722,0x0894,0x0925,0x0AC1,0x0EF4, + 0x1007,0x0EA1,0x0E40,0x0F07,0x0FCC,0x0E77,0x0C25,0x0A57, + 0x085C,0x063C,0x04A8,0x04B9,0x05DC,0x06B2,0x062B,0x04F5, + 0x0331,0x0105,0xFE3A,0xFD0C,0xFDAF,0xFCE0,0xFAAA,0xF8F3, + 0xF824,0xF846,0xF89E,0xF9B0,0xFADF,0xFBE0,0xFB64,0xF937, + 0xF72B,0xF68E,0xF730,0xF7E9,0xF970,0xFBB2,0xFD64,0xFD72, + 0xFC90,0xFD45,0xFFD6,0x0262,0x0320,0x017D,0x0186,0x0171, + 0x0189,0x0297,0x0451,0x05C4,0x0642,0x05AF,0x056F,0x0576, + 0x0567,0x047D,0x02E2,0x0120,0x00E2,0x0095,0xFFA5,0xFED1, + 0xFE40,0xFEE7,0xFFEC,0xFF9C,0xFEA3,0xFD69,0xFB7F,0xF9EB, + 0xFA06,0xFA56,0xFA0B,0xF87D,0xF70A,0xF6BC,0xF841,0xF9AF, + 0xF9A3,0xF8CA,0xF87C,0xF858,0xF833,0xF843,0xF8B2,0xF912, + 0xF88A,0xF914,0xFB72,0xFCEE,0xFCC3,0xFB4D,0xFB41,0xFE42, + 0x00A9,0x0061,0xFE0F,0xFCCC,0xFE17,0xFF29,0xFEAE,0xFF46, + 0x0262,0x049B,0x01AE,0xFE3D,0xFF3B,0x02EB,0x02E3,0x0129, + 0x0034,0x002D,0xFF81,0xFEAB,0xFEC3,0x0004,0x012A,0x008A, + 0xFF4E,0x0046,0xFF3C,0xFF29,0xFD02,0xFA51,0xFB96,0xFF71, + 0xFF63,0xFB4A,0xF966,0xFB4B,0xFDB1,0xFD9D,0xFCC1,0xFC1E, + 0xFC0E,0xFB1C,0xFA15,0xFABE,0xFC9C,0xFE20,0xFCAB,0xFAE4, + 0xFC41,0x002D,0x0211,0x0024,0xFCE6,0xFCEE,0x0012,0x013D, + 0xFF78,0xFE6E,0xFFD2,0x01DD,0x0283,0x0189,0x0199,0x0298, + 0x028B,0x0183,0x0203,0x029D,0x0254,0x00B4,0xFF83,0x0025, + 0x0125,0x0117,0x0026,0x0020,0x011B,0x0138,0xFF8D,0xFD8C, + 0xFC37,0xFD14,0xFF3A,0xFFCA,0xFE77,0xFD8C,0xFD9B,0xFDF3, + 0xFC47,0xFABA,0xFB8A,0xFBB0,0xFBC1,0xFB6B,0xFB53,0xFA78, + 0xF9D3,0xFA0E,0xFCA5,0xFE6B,0xFD1D,0xFBE8,0xFCC2,0xFE8D, + 0xFDD1,0xFC22,0xFE0A,0xFFDF,0xFFD1,0xFFA3,0xFF1B,0xFE26, + 0xFCFF,0xFC11,0xFB31,0xF8D4,0xF5DA,0xF23F,0xF07B,0xF1B4, + 0xF563,0xF8FC,0xFB07,0xFB9C,0xFB2D,0xF9F9,0xF950,0xF97C, + 0xFA4D,0xFAEC,0xFAF4,0xFB1B,0xFD47,0xFF86,0x020A,0x055E, + 0x08A6,0x0A39,0x0A8C,0x09E7,0x0906,0x08FA,0x08FE,0x09C9, + 0x0B8F,0x0D7D,0x0EE9,0x106B,0x10E3,0x10CE,0x1141,0x118C, + 0x1076,0x0DEF,0x0AC3,0x08AC,0x07A0,0x0753,0x0732,0x0727, + 0x06A3,0x05CF,0x0595,0x0506,0x034F,0x0113,0xFF14,0xFDEF, + 0xFCE1,0xFB50,0xF9E2,0xF96A,0xF9E3,0xFAC0,0xFB8B,0xFD1A, + 0xFD6B,0xFC75,0xFA4F,0xF993,0xFACB,0xFC0F,0xFC34,0xFBCD, + 0xFCF1,0xFF07,0x0089,0x00F8,0x0132,0x0236,0x03F2,0x0442, + 0x03D1,0x035E,0x033C,0x0426,0x04E6,0x0604,0x06ED,0x0775, + 0x073D,0x06D5,0x066C,0x075E,0x08AC,0x07FE,0x0644,0x04C2, + 0x0408,0x027A,0x0444,0x041A,0x02B8,0x026A,0x01C4,0x0105, + 0x006C,0xFF88,0xFE31,0xFD37,0xFBDE,0xFB0D,0xFB2E,0xFB78, + 0xFB35,0xFB04,0xFB05,0xFAF0,0xFB00,0xFB6B,0xFB4D,0xFAA9, + 0xFA37,0xFABB,0xFB43,0xFBF7,0xFC08,0xFC6A,0xFE6C,0xFFD6, + 0xFF0B,0xFEA8,0xFFF5,0x004D,0xFF73,0xFF55,0x0156,0x02D7, + 0x01D2,0x0107,0x028A,0x04D7,0x03DE,0x0269,0x0345,0x04D3, + 0x03A8,0x015C,0x01B8,0x03A4,0x0390,0xFFD7,0xFE24,0x017D, + 0x0309,0x00FE,0xFE9C,0xFED2,0x0108,0x0112,0xFFA4,0xFF3C, + 0xFE47,0xFF07,0xFE45,0xFD43,0xFE4F,0xFF21,0xFF3D,0xFD0D, + 0xFA9A,0xFBEE,0xFEBB,0xFF43,0xFD6A,0xFBB2,0xFC88,0xFE4D, + 0xFE57,0xFBD0,0xFA9B,0xFE4D,0x027F,0x01A9,0xFE16,0xFD9C, + 0xFF68,0xFFA0,0xFEA8,0xFF17,0x0291,0x0400,0x0147,0xFF7B, + 0xFFCB,0x01EB,0x03D4,0x0252,0x00C7,0x01B5,0x0341,0x0229, + 0xFF89,0xFF6C,0x019E,0x029D,0x01DB,0xFF1A,0xFFBB,0x023E, + 0x00E4,0xFD4F,0xFC97,0xFFB8,0x00A3,0xFE0A,0xFBCC,0xFC41, + 0xFD4E,0xFC1D,0xF9CA,0xFABA,0xFD2E,0xFC26,0xF9A0,0xF907, + 0xFB15,0xFC46,0xFA55,0xF967,0xFAF1,0xFD13,0xFC92,0xFACE, + 0xFBA0,0xFD7E,0xFE18,0xFCC7,0xFC78,0xFE54,0xFEAD,0xFD28, + 0xFCCF,0xFE69,0xFE96,0xFD34,0xFBBF,0xFA92,0xF8BE,0xF4F2, + 0xF106,0xEF8F,0xF0A1,0xF26D,0xF456,0xF6C7,0xF9AD,0xFAC3, + 0xF8F7,0xF6BB,0xF63F,0xF712,0xF86A,0xF86E,0xF882,0xF986, + 0xFB4F,0xFCBA,0x0017,0x036C,0x05F8,0x06D9,0x0719,0x0796, + 0x0789,0x05F9,0x053D,0x0559,0x0792,0x0A06,0x0AFD,0x0AC5, + 0x0D78,0x0CD4,0x0BE7,0x0C54,0x0B35,0x09A5,0x07BF,0x0544, + 0x034A,0x02EA,0x0330,0x03AB,0x02CA,0x025F,0x0284,0x0230, + 0x0087,0xFD7D,0xFAAB,0xF84F,0xF776,0xF71F,0xF75E,0xF75D, + 0xF771,0xF7E8,0xF8CB,0xF94F,0xF932,0xF947,0xF8D5,0xF86F, + 0xF7E3,0xF7AA,0xF76C,0xF7BF,0xF949,0xFBE5,0xFE9B,0x00A2, + 0x008C,0xFFE6,0xFF77,0x0051,0x0257,0x02EE,0x01AD,0x003D, + 0x0109,0x033E,0x0514,0x0630,0x05D1,0x0554,0x0559,0x0517, + 0x0525,0x04EF,0x03D3,0x020C,0x00BE,0x0126,0x02B3,0x02B8, + 0xFFB8,0xFD67,0xFD78,0xFE0C,0xFE01,0xFC8B,0xFB03,0xF9F6, + 0xF8F4,0xF873,0xF877,0xF89E,0xF8B4,0xF9BF,0xFA9D,0xFAC0, + 0xFA2B,0xF9DF,0xFA03,0xF8D1,0xF931,0xFA1D,0xFA49,0xF995, + 0xF952,0xFA3E,0xFCF3,0x0024,0x0096,0xFDEB,0xFCC6,0xFEE2, + 0x015A,0x010E,0xFF7D,0x0076,0x0384,0x034B,0xFFC0,0x008A, + 0x04AF,0x062B,0x052E,0x03F7,0x030D,0x03B7,0x02D7,0x006C, + 0xFF98,0x01FE,0x04B3,0x0383,0x012B,0x018E,0x01E7,0x00E2, + 0x015A,0x0244,0x02EF,0x01F5,0xFF9B,0xFD91,0xFE28,0xFFCD, + 0xFF3E,0xFCE8,0xFE4E,0x015B,0x0121,0xFD9E,0xFC0D,0xFE5F, + 0xFFA6,0xFD62,0xFBA5,0xFEBF,0x014D,0xFE98,0xFBF4,0xFDD5, + 0x0155,0x01DB,0xFF0A,0xFE62,0x00F7,0x01D0,0x0095,0xFEFD, + 0xFFE3,0x02D7,0x0363,0x0140,0x00EF,0x02C1,0x03A0,0x0177, + 0xFED3,0x00E5,0x040C,0x0302,0x0017,0xFFD8,0x025D,0x0238, + 0xFF41,0xFE14,0x0061,0x02B3,0x01DE,0xFFBA,0xFF4E,0x0046, + 0x003B,0xFEA5,0xFCEF,0xFE51,0x003D,0xFFA3,0xFD9C,0xFD22, + 0xFCFA,0xFD86,0xFF06,0xFCD3,0xFCD5,0xFDFC,0xFD26,0xFC93, + 0xFDA2,0xFE1A,0xFE68,0xFE2E,0xFE11,0xFE2C,0xFE6D,0xFF75, + 0x0018,0xFF3B,0xFE68,0xFF79,0x00E7,0x00F8,0xFFC5,0xFEEF, + 0xFE21,0xFC03,0xF829,0xF4E2,0xF314,0xF238,0xF1C1,0xF393, + 0xF79C,0xFB3F,0xFC5E,0xFA50,0xF7E6,0xF87C,0xFA1B,0xFADF, + 0xFA55,0xF98C,0xF961,0xFA75,0xFD7B,0x00DF,0x046E,0x0700, + 0x080C,0x0836,0x081E,0x083A,0x0823,0x07DE,0x07E0,0x0924, + 0x0B82,0x0D0B,0x0D5B,0x0D28,0x0D32,0x0DFB,0x106F,0x1027, + 0x0E9C,0x0C4C,0x086B,0x056D,0x0499,0x0613,0x0817,0x081D, + 0x06D1,0x04E5,0x0263,0x00C5,0xFFB8,0xFE79,0xFDAB,0xFD0E, + 0xFB7E,0xF927,0xF84A,0xF91B,0xF942,0xFA4B,0xFC71,0xFDDF, + 0xFC4C,0xF9E5,0xF835,0xF857,0xF9A2,0xFA90,0xFBAA,0xFCC3, + 0xFDD6,0xFF26,0xFFC0,0x00AE,0x0217,0x02A1,0x02BD,0x02D6, + 0x027A,0x02FB,0x0357,0x0316,0x0339,0x0633,0x07B4,0x07B6, + 0x07A1,0x070A,0x0661,0x056E,0x04CD,0x048D,0x03C3,0x0268, + 0x01B7,0x00C3,0x0069,0x0107,0x007D,0xFF85,0xFD4B,0xFBBD, + 0xFB53,0xFAF9,0xFA79,0xF98B,0xF906,0xF839,0xF75D,0xF73C, + 0xF840,0xF876,0xF7EC,0xF70D,0xF73A,0xF801,0xF81A,0xF790, + 0xF75E,0xF805,0xF867,0xF9D0,0xFB39,0xFB28,0xFA33,0xF9FB, + 0xFC26,0xFECC,0xFF59,0xFE4A,0xFE2A,0xFED3,0xFF15,0xFF29, + 0x0055,0x0208,0x00FB,0xFFB0,0x00EC,0x0260,0x021D,0x0014, + 0xFF16,0x0091,0x018C,0x00A1,0xFED7,0xFDA5,0xFDEC,0xFDF4, + 0xFDB0,0xFEC7,0xFEFC,0xFE3B,0xFDA4,0xFD00,0xFC75,0xFD72, + 0xFE80,0xFA6C,0xFB16,0xFD02,0xFD1D,0xFBD3,0xFA00,0xF97C, + 0xFAE9,0xFCC8,0xFCEA,0xFBA4,0xFB59,0xFB9D,0xFB27,0xFB85, + 0xFCC4,0xFE60,0xFD84,0xFCAD,0xFD18,0xFF11,0x0026,0xFF8F, + 0xFE99,0xFE9D,0xFFF3,0x010E,0x00E6,0x0041,0xFFB1,0x004D, + 0x0166,0x022E,0x0125,0x0016,0x002A,0x0134,0x0280,0x02EE, + 0x0141,0xFF1B,0xFE62,0xFEFF,0x006A,0x00DA,0x0056,0xFF64, + 0xFE4F,0xFD50,0xFD5D,0xFF1D,0x002B,0xFEC3,0xFCF2,0xFD3A, + 0xFE4D,0xFE74,0xFC9C,0xFB96,0xFC8A,0xFE64,0xFE9D,0xFCAE, + 0xFA74,0xFA7D,0xF9F5,0xFAC0,0xFCA4,0xFD92,0xFDC0,0xFD21, + 0xFD6D,0xFE09,0xFDE1,0xFE2F,0xFE74,0xFEB1,0xFF48,0x0024, + 0x00A2,0xFFE8,0xFDB0,0xFC37,0xFD81,0xFEEC,0xFE1A,0xFCA1, + 0xFB73,0xFC3D,0xFE33,0x0005,0x003B,0xFFB3,0xFEF2,0xFD46, + 0xFD29,0xFEAF,0xFF79,0xFEDB,0xFDA4,0xFD43,0xFEE7,0x00E0, + 0x01D3,0x014E,0x0086,0x0237,0x0310,0x019F,0x00A7,0x003C, + 0x00C2,0x0106,0x01A2,0x0288,0x0307,0x0306,0x031A,0x03E6, + 0x0497,0x0579,0x0532,0x0347,0x01AD,0x0118,0x01E2,0x0375, + 0x03F7,0x035A,0x0228,0x0206,0x022D,0x0164,0x00BB,0x00E0, + 0x0132,0x00C5,0xFFA4,0xFEB1,0xFE87,0xFEE2,0xFE3A,0xFE26, + 0xFED2,0xFF38,0xFE43,0xFC95,0xFBA9,0xFB66,0xFAE9,0xFA28, + 0xF93E,0xF86D,0xF786,0xF6A7,0xF5DE,0xF536,0xF5D9,0xF68F, + 0xF65A,0xF5E7,0xF528,0xF4EF,0xF560,0xF52E,0xF4C1,0xF52C, + 0xF65A,0xF759,0xF740,0xF699,0xF5C6,0xF594,0xF561,0xF50E, + 0xF491,0xF37E,0xF30B,0xF281,0xF1F2,0xF17F,0xF1A9,0xF12C, + 0xEE6B,0xEF5C,0xEF9F,0xEE55,0xEE26,0xED56,0xECB6,0xEBEA, + 0xEBD7,0xEBF1,0xEBA2,0xEB86,0xEAF3,0xEA84,0xEA26,0xEA11, + 0xE9DC,0xEA15,0xE99C,0xE96B,0xE977,0xE92D,0xE8EB,0xE8F1, + 0xE8F7,0xE955,0xE972,0xE94C,0xE932,0xE93B,0xE8D0,0xE8F8, + 0xE945,0xE9AA,0xE99F,0xE947,0xE923,0xE98E,0xEA49,0xEA5C, + 0xEA53,0xEA6A,0xEAEF,0xEB38,0xEBA9,0xEC28,0xEC3B,0xEC0E, + 0xEC1B,0xED23,0xEDB7,0xEE27,0xEE29,0xEE1F,0xEE13,0xEECD, + 0xEF3F,0xEF39,0xEFA7,0xF012,0xF064,0xF293,0xF4DC,0xF4AF, + 0xF478,0xF480,0xF48B,0xF4FE,0xF554,0xF5AA,0xF5FE,0xF66B, + 0xF667,0xF725,0xF76C,0xF804,0xF870,0xF870,0xF8EE,0xF934, + 0xF946,0xF952,0xFAA8,0xFB50,0xFAD7,0xFB1F,0xFC19,0xFC8A, + 0xFC97,0xFCCF,0xFD26,0xFDAA,0xFE35,0xFE30,0xFE8C,0xFE63, + 0xFEBD,0xFF67,0xFF84,0x0040,0x007D,0x00A5,0x0095,0x0148, + 0x0173,0x01F3,0x020F,0x014E,0x0201,0x02F4,0x0327,0x03FE, + 0x04A8,0x0478,0x04FA,0x04C0,0x0500,0x0547,0x04E0,0x04A8, + 0x0499,0x0407,0x0433,0x04B4,0x0568,0x056D,0x05D0,0x05E9, + 0x05EB,0x063E,0x0680,0x0673,0x06B0,0x06B6,0x0716,0x07CA, + 0x082D,0x085F,0x087B,0x0889,0x0898,0x08A1,0x08D3,0x08ED, + 0x091D,0x096C,0x09CA,0x0A08,0x0AA6,0x0A78,0x0A5C,0x0A62, + 0x0AB1,0x0AEB,0x0B19,0x0B77,0x0B36,0x0B3D,0x0BF2,0x0C2F, + 0x0C20,0x0C17,0x0BD5,0x0BCF,0x0BE0,0x0B92,0x0BB6,0x0BEA, + 0x0BD0,0x0B95,0x0BAA,0x0BF4,0x0C12,0x0C87,0x0C9B,0x0C90, + 0x0CD0,0x0D55,0x0CE7,0x0D14,0x0D63,0x0D8A,0x0C81,0x0E6C, + 0x0D50,0x0C3C,0x0D64,0x0D0C,0x0D1E,0x0D35,0x0CD3,0x0C53, + 0x0C7C,0x0CDA,0x0D19,0x0CE5,0x0D2D,0x0D16,0x0D45,0x0D1A, + 0x0D53,0x0D81,0x0D32,0x0D0F,0x0CD7,0x0C8F,0x0CA3,0x0CCD, + 0x0C5E,0x0CAD,0x0C85,0x0C75,0x0C93,0x0C73,0x0C69,0x0C1B, + 0x0BE7,0x0C05,0x0BD3,0x0BE1,0x0BFF,0x0BC5,0x0BC7,0x0BB3, + 0x0BB9,0x0B94,0x0BA1,0x0BC6,0x0B8A,0x0BA6,0x0B65,0x0B91, + 0x0B75,0x0B9A,0x0B72,0x0BC4,0x0BEA,0x0B7E,0x0B36,0x0AF3, + 0x0AF9,0x0B16,0x0AF4,0x0B44,0x0B1A,0x0ADC,0x0A56,0x08E9, + 0x082F,0x0946,0x092D,0x08E2,0x08B5,0x0896,0x08A7,0x087C, + 0x082C,0x0837,0x085A,0x0892,0x08D4,0x08DB,0x08C1,0x0857, + 0x083F,0x0890,0x07E8,0x07A6,0x0886,0x086C,0x0826,0x082A, + 0x0814,0x0804,0x0811,0x0849,0x07E8,0x07D5,0x07B9,0x07B2, + 0x0758,0x072D,0x07C9,0x0886,0x084C,0x07E7,0x083D,0x07DA, + 0x077C,0x076B,0x0865,0x0909,0x07CC,0x076A,0x0738,0x0710, + 0x06EF,0x0738,0x06F7,0x0734,0x074E,0x0739,0x073D,0x078D, + 0x07A4,0x08AC,0x08B4,0x084E,0x07F2,0x0796,0x073E,0x06F9, + 0x06E5,0x06C3,0x06E1,0x06CD,0x06C9,0x0687,0x0653,0x065D, + 0x061C,0x05C1,0x05AC,0x058A,0x0560,0x0562,0x052E,0x052F, + 0x0510,0x04F1,0x04BE,0x045D,0x047F,0x04B4,0x0471,0x0429, + 0x03E5,0x0379,0x037E,0x03D1,0x037E,0x034F,0x034E,0x0350, + 0x03A6,0x0376,0x0396,0x0359,0x035C,0x034A,0x02F5,0x028D, + 0x02A3,0x02C4,0x02DF,0x0280,0x0245,0x021E,0x0259,0x0202, + 0x0222,0x01FE,0x0210,0x01C9,0x0158,0x01A9,0x0285,0x013B, + 0x00B3,0x0247,0x0160,0x0169,0x024F,0x01FE,0x0179,0x0191, + 0x019E,0x01E1,0x01AC,0x01B7,0x0185,0x0189,0x014B,0x015B, + 0x0146,0x0162,0x0144,0x013B,0x00EF,0x00C7,0x0159,0x0142, + 0x00D3,0x010C,0x00CB,0x00FA,0x00B4,0x0099,0xFFEB,0xFFC4, + 0xFFA8,0xFF9B,0xFEF8,0xFF12,0xFFED,0xFFA0,0xFF16,0xFECA, + 0xFF00,0xFF0B,0xFF07,0xFF3D,0xFED5,0xFEBB,0xFEAE,0xFEF7, + 0xFEDE,0xFE4F,0xFE7B,0xFF2A,0xFF33,0xFF29,0xFED4,0xFE94, + 0xFE5F,0xFE4E,0xFE44,0xFEC9,0xFE02,0xFD92,0xFE6F,0xFEF6, + 0xFED2,0xFEFC,0xFEF4,0xFE83,0xFE80,0xFE74,0xFE8B,0xFDF4, + 0xFD8A,0xFDA9,0xFD49,0xFCD2,0xFCC4,0xFC92,0xFC75,0xFC8E, + 0xFC71,0xFC54,0xFC8B,0xFC78,0xFC96,0xFC99,0xFD05,0xFD2C, + 0xFD8A,0xFD3D,0xFC9D,0xFCF3,0xFD48,0xFD5E,0xFDAB,0xFDF4, + 0xFDC9,0xFDBF,0xFDDB,0xFE2E,0xFDB0,0xFDA6,0xFDFC,0xFE00, + 0xFDD1,0xFDA9,0xFD78,0xFD9F,0xFD8B,0xFDD5,0xFDA5,0xFD3A, + 0xFD88,0xFD51,0xFD0C,0xFD05,0xFD44,0xFD86,0xFD7B,0xFDEE, + 0xFE82,0xFE76,0xFDBD,0xFD78,0xFD63,0xFDA6,0xFD9A,0xFDDB, + 0xFD82,0xFD54,0xFDD7,0xFE11,0xFDC2,0xFE03,0xFE9F,0xFDFF, + 0xFE38,0xFFD0,0xFDE9,0xFE49,0xFE6B,0xFE7A,0xFE6A,0xFE9E, + 0xFEA8,0xFEC7,0xFEAA,0xFEA6,0xFE8B,0xFE8C,0xFE8F,0xFE4A, + 0xFE7F,0xFE5C,0xFEC0,0xFEAD,0xFED3,0xFEE1,0xFEBA,0xFEE1, + 0xFEB5,0xFE6B,0xFE3F,0xFE76,0xFE6A,0xFEDF,0xFF31,0xFEF8, + 0xFEBE,0xFEB2,0xFEE3,0xFF02,0xFEFE,0xFEE1,0xFEAF,0xFEFC, + 0xFF38,0xFF63,0xFF6C,0xFF96,0xFF6D,0xFEF0,0xFF27,0xFF1E, + 0xFF3D,0xFFB9,0xFFD6,0xFFCB,0xFFC5,0xFFBC,0xFFB4,0xFF7A, + 0xFF69,0xFFC1,0xFFE5,0xFF93,0xFF1D,0xFF14,0xFF2B,0xFF37, + 0xFEBB,0xFD63,0xFEC9,0xFF54,0xFEFB,0xFED3,0xFF3C,0x00A3, + 0x01A6,0x0205,0x02CE,0x0491,0x05D8,0x0630,0x06DD,0x0793, + 0x0866,0x08AD,0x094F,0x09F6,0x08F9,0x08F2,0x098E,0x098D, + 0x0906,0x097E,0x0A30,0x0AA1,0x0B6D,0x0B77,0x0ABF,0x0AAB, + 0x0B45,0x0BD2,0x0BA6,0x0C5A,0x0E53,0x1073,0x10DE,0x1037, + 0x0F57,0x0FED,0x10F7,0x11D6,0x13B3,0x1536,0x1469,0x133C, + 0x128B,0x135A,0x150A,0x158D,0x14CD,0x1588,0x174F,0x185E, + 0x17EB,0x17A0,0x1867,0x19F3,0x19C4,0x17F7,0x173B,0x1941, + 0x1B3F,0x1AF5,0x1975,0x18CD,0x1968,0x196F,0x1880,0x182F, + 0x18F6,0x1910,0x1805,0x16F2,0x17FA,0x1938,0x18E5,0x16E3, + 0x1587,0x1641,0x1705,0x15FB,0x14D4,0x14DB,0x1522,0x142D, + 0x12F0,0x127F,0x1330,0x12D6,0x11D0,0x1164,0x118A,0x10CF, + 0x100B,0x0FB3,0x0EEE,0x0E4E,0x0E41,0x0E43,0x0D71,0x0C38, + 0x0BB2,0x0C3E,0x0B82,0x0999,0x098A,0x0B56,0x0BCF,0x0ABB, + 0x08E3,0x078C,0x0614,0x057F,0x0569,0x060B,0x0741,0x080F, + 0x07F6,0x04F5,0x0620,0x0624,0x02A7,0x0142,0x02B9,0x04B3, + 0x0414,0x01F8,0x0189,0x0278,0x014C,0xFEF7,0xFF46,0x017D, + 0x0183,0xFF1C,0xFDA9,0xFD71,0xFD1C,0xFB80,0xFA2B,0xFB03, + 0xFD55,0xFE28,0xFC4F,0xFAAA,0xFAA7,0xFA50,0xF967,0xF855, + 0xF8BD,0xF9E6,0xF9AD,0xF856,0xF72C,0xF6F2,0xF7D7,0xF868, + 0xF69D,0xF52C,0xF58D,0xF640,0xF64B,0xF5DC,0xF545,0xF53E, + 0xF4C6,0xF3AC,0xF338,0xF491,0xF5D0,0xF40A,0xF23E,0xF175, + 0xF206,0xF294,0xF25E,0xF2BD,0xF403,0xF3DA,0xF2A7,0xF331, + 0xF2BB,0xF409,0xF3E6,0xF293,0xF18D,0xF297,0xF4A7,0xF465, + 0xF1D8,0xF0F7,0xF200,0xF312,0xF268,0xF0BD,0xF0E1,0xF299, + 0xF31B,0xF233,0xF100,0xF22C,0xF346,0xF107,0xEFBE,0xF1AE, + 0xF2AE,0xF16D,0xF08C,0xF109,0xF1A1,0xF150,0xF09E,0xF1F3, + 0xF37E,0xF1B9,0xF037,0xF071,0xF0FD,0xF12C,0xF0ED,0xF005, + 0xEF54,0xF144,0xF356,0xF1FE,0xEF40,0xF092,0xF2E9,0xF149, + 0xEEE5,0xEF63,0xF214,0xF3D6,0xF217,0xF035,0xF128,0xF177, + 0xF005,0xEF20,0xF0D1,0xF316,0xF119,0xEE08,0xEE95,0xF172, + 0xF110,0xEDC5,0xEE2B,0xF2AE,0xF39C,0xEFEE,0xED61,0xEF56, + 0xF2D4,0xF10F,0xED9A,0xEE40,0xF23E,0xF3AA,0xF0DD,0xEF95, + 0xF254,0xF35B,0xF09E,0xEE07,0xF08E,0xF56D,0xF53A,0xEFC1, + 0xECA2,0xEFC0,0xF3B8,0xF2E0,0xF0CB,0xF206,0xF3F2,0xF35F, + 0xF0D3,0xF061,0xF332,0xF45D,0xF27A,0xF052,0xF0B8,0xF2E1, + 0xF40F,0xF352,0xF2EC,0xF379,0xF3A4,0xF2D1,0xF1C1,0xF30E, + 0xF5FF,0xF5B5,0xF292,0xF0AA,0xF2FC,0xF499,0xF4C6,0xF457, + 0xF561,0xF52F,0xF416,0xF58B,0xF371,0xF280,0xF41D,0xF59C, + 0xF509,0xF347,0xF2E4,0xF5FE,0xF79F,0xF5EB,0xF4AE,0xF6E5, + 0xF844,0xF4ED,0xF1EF,0xF4F9,0xF9A1,0xF7CF,0xF4AA,0xF50B, + 0xF7DF,0xF89F,0xF646,0xF5B1,0xF7D9,0xF954,0xF819,0xF5D8, + 0xF5B3,0xF865,0xF8CF,0xF593,0xF4F7,0xF8E7,0xFC1C,0xF989, + 0xF4B4,0xF558,0xFA3D,0xFAF9,0xF766,0xF5C4,0xFA5E,0xFCFE, + 0xF980,0xF663,0xF8EF,0xFBF6,0xFA5C,0xF6D8,0xF7D0,0xFC01, + 0xFC35,0xF8C0,0xF752,0xF8FB,0xFA3B,0xFA34,0xF937,0xF93E, + 0xFAC1,0xFB64,0xF8D0,0xF586,0xF625,0xF959,0xFAF0,0xFA0B, + 0xF919,0xFAAB,0xFAEE,0xF934,0xF746,0xF943,0xFCEE,0xFD43, + 0xF944,0xF747,0xFAA8,0xFC88,0xFA80,0xF891,0xFA4F,0xFD97, + 0xFDF6,0xFA88,0xF91A,0xFC3C,0xFE87,0xFB31,0xF8BB,0xFC1E, + 0x0085,0xFEA0,0xFABB,0xFB64,0xFE9F,0xFEB2,0xFB74,0xFA69, + 0xFC2E,0xFF19,0xFEB0,0xFC30,0xFC8F,0xFD88,0xFDC6,0xFD42, + 0xFCA1,0xFEC0,0x0020,0xFD95,0xFC64,0xFD91,0xFF25,0xFF6B, + 0xFFCF,0x01E0,0x030C,0x01B0,0xFFF5,0xFFFD,0x009E,0x0190, + 0x023B,0x021B,0x01A1,0x0155,0x012D,0x0013,0x0115,0x036D, + 0x0298,0xFF12,0xFF35,0x02E0,0x03EB,0xFF6D,0xFCEF,0x004F, + 0x0334,0x0076,0xFCF0,0xFFA0,0x0497,0x01EA,0xFB05,0xFC18, + 0x0352,0x0641,0x0246,0xFDAE,0xFE37,0x015B,0x0202,0xFE82, + 0xFE65,0x0323,0x03D1,0xFFF6,0xFDBA,0x0007,0x0354,0x0255, + 0xFE26,0xFDCA,0x0229,0x04BA,0x0147,0xFD1C,0x006F,0x052E, + 0x02A6,0xFD6F,0xFCDE,0x0152,0x0471,0x0111,0xFD1D,0xFF13, + 0x025C,0x0089,0xFF36,0xFF52,0x03CA,0x054F,0x004C,0xFBE3, + 0xFDB7,0x0265,0x021F,0xFF34,0xFE39,0x00FD,0x03A8,0x0124, + 0xFDB4,0xFF6E,0x0364,0x0148,0xFBCC,0xFD61,0x03D9,0x05DD, + 0x014D,0xFD0F,0xFE93,0x0220,0x015B,0xFF91,0xFFF3,0x01EA, + 0x0155,0xFF2E,0xFDC4,0xFE27,0xFF3D,0x00B0,0x0174,0x00E4, + 0xFF8C,0xFF35,0xFFF9,0x0036,0xFEB5,0xFD71,0xFFAD,0x028A, + 0x00CA,0xFD08,0xFDE4,0x00E4,0x00C8,0xFE67,0xFE20,0xFFAE, + 0x00A0,0xFFE1,0xFDF3,0xFD8B,0xFFDD,0x0107,0x02C8,0x02A9, + 0x0253,0x0277,0x027A,0x0194,0x00A4,0x016A,0x02D2,0x02F8, + 0x00FB,0x010D,0x02E7,0x0223,0x000D,0xFFF6,0x01D2,0x0298, + 0x029C,0x00E1,0xFFCB,0x0012,0xFEDB,0xFF03,0x01F8,0x0331, + 0x0076,0xFED4,0xFE19,0xFE62,0xFF83,0x000A,0xFE82,0xFF08, + 0x01C7,0x0315,0xFF8D,0xFC67,0xFE9A,0x011A,0x0094,0xFF91, + 0xFF56,0x004A,0x01CE,0x00E6,0xFD08,0xFC54,0xFF34,0x0312, + 0x02E2,0xFEE3,0xFDC8,0x0102,0x003F,0xFB44,0xFA34,0x005F, + 0x03A5,0xFEED,0xFA8E,0xFD52,0x01AA,0x0018,0xFA5B,0xFACE, + 0x0024,0x0086,0xFCBF,0xFAE1,0xFD59,0x00A1,0xFE0E,0xFABD, + 0xFD8A,0x00BE,0xFFCB,0xFC5C,0xFBB2,0xFDAD,0xFF29,0xFE10, + 0xFBB3,0xFCBD,0x00EA,0x00FB,0xFC1C,0xFAAE,0xFE59,0x0172, + 0xFFF8,0xFD17,0xFCEE,0xFD7B,0xFDF7,0xFF46,0xFF08,0xFEA0, + 0xFF6B,0xFFBE,0xFE58,0xFE41,0xFEDE,0xFD7C,0xFC67,0xFE58, + 0xFFE4,0xFEDF,0xFC79,0xFD4C,0x0040,0x0063,0xFDB5,0xFBAB, + 0xFDA8,0x01B9,0x0158,0xFD21,0xFB8B,0xFEB7,0x00A4,0xFF23, + 0xFFEF,0x004E,0x010D,0xFEB2,0xFDD3,0xFF5A,0x0032,0xFE01, + 0xFCF6,0xFF72,0x0146,0x00E8,0xFFB0,0x00BE,0x0337,0x00A9, + 0xFCE2,0xFD9C,0x0324,0x0409,0xFFB8,0xFDD7,0xFF6B,0x0053, + 0xFE45,0xFC6B,0xFFF7,0x0489,0x03D1,0xFE8E,0xFBA8,0xFE1F, + 0x0163,0x000D,0xFD1C,0xFDCD,0x00FC,0x0298,0xFFBA,0xFD55, + 0xFE95,0x02BD,0x02A8,0xFEA2,0xFC76,0xFFC1,0x0347,0x00D5, + 0xFD5A,0xFDE9,0x00A1,0x0199,0x0067,0x0036,0x0145,0x00CE, + 0xFE8C,0xFDE8,0xFEE7,0xFFFD,0x00C0,0x0118,0x000D,0xFE8C, + 0xFD6B,0xFF32,0xFF21,0xFD7D,0xFBF9,0xFCC9,0xFFE3,0x0043, + 0xFD02,0xFCA0,0xFF86,0xFFB7,0xFC13,0xFC23,0x014C,0x036C, + 0xFFD8,0xFBE7,0xFD4C,0x01EE,0x02B9,0xFF39,0xFE34,0x01DE, + 0x0318,0x0021,0xFD8A,0xFF5E,0x03BB,0x04BF,0x00DF,0xFF07, + 0x02E9,0x06EF,0x049D,0xFF72,0xFF75,0x0348,0x0505,0x0122, + 0xFF35,0x03F5,0x07BF,0x0502,0xFFBD,0xFF35,0x04A5,0x0646, + 0x0120,0xFEB6,0x0245,0x0584,0x048F,0x00E3,0x0203,0x067B, + 0x0763,0x0365,0x0154,0x03A4,0x0575,0x0457,0x0429,0x04BE, + 0x03CA,0x02A6,0x03BB,0x0576,0x03F7,0x016A,0x0301,0x05F4, + 0x0542,0x020A,0x00E3,0x0399,0x052C,0x0196,0x002F,0x03C6, + 0x0639,0x04B6,0x017E,0x005A,0x02C3,0x0511,0x0350,0xFFAC, + 0x0071,0x0538,0x0527,0xFEC3,0xFCC6,0x03A7,0x08BE,0x03E4, + 0xFDCB,0xFE68,0x0337,0x033C,0xFFB6,0xFEA7,0x010C,0x045B, + 0x03BB,0xFFB6,0xFFF7,0x0444,0x04DA,0x0120,0xFEF8,0x0093, + 0x01BD,0x0275,0x02B5,0x0245,0x00E0,0x006A,0x0173,0x0296, + 0x01C6,0x03AF,0x036F,0x021C,0x024F,0x0090,0xFE2B,0xFF95, + 0x033E,0x0569,0x047F,0x0284,0x0195,0x017B,0x01C7,0x0181, + 0xFFC2,0xFF2D,0x00F3,0x0326,0x0302,0x009A,0xFF18,0x00AE, + 0x01FA,0xFFB8,0xFE66,0x0222,0x0513,0x0167,0xFC69,0xFD93, + 0x0353,0x0295,0xFDD5,0xFDD6,0x015B,0x01DD,0xFE57,0xFC1D, + 0xFE16,0x0138,0x004F,0xFD81,0xFD98,0x00A9,0x00BF,0xFDB8, + 0xFD20,0xFFD1,0x013E,0xFF9E,0xFD67,0xFD95,0xFF89,0xFFC4, + 0xFE58,0xFDA1,0xFE02,0xFEAC,0xFF67,0x0025,0x00D0,0xFF1A, + 0x0057,0x02B5,0x0148,0xFEB6,0xFF59,0x00C8,0xFFA1,0xFD34, + 0xFE15,0x010D,0x01C1,0xFFB1,0xFDFA,0xFDE8,0xFF5F,0x00D8, + 0xFF6C,0xFB7F,0xFCC9,0x00B8,0x011D,0xFE60,0xFD0C,0xFF30, + 0x00C3,0xFD4E,0xFA22,0xFDC7,0x0373,0x021E,0xFAF1,0xF923, + 0xFE69,0x0242,0xFFCB,0xFD06,0xFDE8,0x00AE,0x004E,0xFC4E, + 0xFA35,0xFE90,0x017F,0xFE3C,0xFC78,0xFE61,0x001E,0xFF94, + 0xFD9E,0xFD65,0xFDBE,0xFDC6,0xFED4,0xFF14,0xFDF8,0xFDDC, + 0xFDE0,0xFC73,0xFBAE,0xFD7E,0xFE72,0xFE49,0xFED7,0xFD27, + 0xFC1E,0xFCFE,0xFDDA,0xFDBB,0xFDE7,0xFE25,0xFF03,0x0004, + 0xFEB7,0xFBC0,0xFCAF,0xFF4B,0xFF2A,0xFECF,0xFEC3,0xFEF4, + 0xFF59,0xFF0A,0xFE32,0xFD55,0xFBF1,0xFD75,0x00E9,0x0083, + 0xFE16,0xFE20,0x0062,0x00E3,0xFD87,0xFBCE,0xFF09,0x01CB, + 0xFF00,0xFB88,0xFD1D,0xFFA0,0x0050,0xFF84,0xFED3,0x00C0, + 0x017E,0xFF0E,0xFCF1,0xFEFF,0x0050,0xFDA7,0xFC81,0xFF1A, + 0x02FA,0x028A,0xFDC9,0xFC1A,0x003B,0x03A9,0x001B,0xFCF7, + 0xFD4D,0x01FC,0x03C6,0xFD4A,0xFB4F,0x00E7,0x04DA,0x0144, + 0xFD63,0xFF93,0x040B,0x0365,0xFD41,0xFA6A,0xFF09,0x0444, + 0x0219,0xFDDD,0xFFED,0x0395,0x01D5,0xFC47,0xFB47,0x01C5, + 0x05CD,0x02A7,0xFCB3,0xFC76,0xFFF9,0x003C,0xFCF7,0xFC95, + 0x00E3,0x0337,0x0091,0xFD0B,0xFD99,0x00E1,0x0017,0xFCE1, + 0xFEC1,0x033E,0x01CD,0xFD4B,0xFE71,0x0330,0x02A2,0xFE5C, + 0xFD1F,0x01E8,0x05ED,0x01E2,0xFD8A,0xFFC1,0x02E1,0x0146, + 0xFE1C,0xFFAD,0x04D5,0x0677,0x0192,0xFC9D,0xFD27,0x011F, + 0x012F,0xFC72,0xFAE7,0x0010,0x0408,0x016E,0xFC8A,0xFD53, + 0x0219,0x022A,0xFD5E,0xFCE4,0x015F,0x0384,0xFECD,0xF986, + 0xFC48,0x030A,0x03A5,0xFE50,0xFC23,0x00E9,0x04A7,0x00E5, + 0xFC5C,0xFE54,0x0314,0x043C,0xFEF3,0xFD07,0x02E8,0x0768, + 0x0334,0xFD38,0xFE69,0x044E,0x04EA,0xFF5D,0xFDE8,0x03B9, + 0x06C1,0x00A6,0xFC5A,0x0187,0x05E3,0x0382,0xFE55,0xFE26, + 0x0359,0x057B,0x00F8,0xFCA1,0x01C0,0x07CA,0x04E5,0xFE1E, + 0xFFD6,0x07A4,0x089E,0x018E,0xFDB0,0x0338,0x088A,0x0481, + 0xFEDD,0x004C,0x0626,0x07A7,0x02E3,0x00A6,0x04C5,0x062C, + 0x01B9,0xFFBE,0x0330,0x0622,0x0423,0x01FD,0x0391,0x0605, + 0x0458,0xFF40,0xFF5D,0x0389,0x041D,0x026D,0x0234,0x03AE, + 0x0385,0x007C,0xFF6D,0x02A8,0x03D8,0x0238,0x00FA,0x00ED, + 0x0194,0x0233,0x0104,0xFF1F,0x0107,0x0494,0x03E8,0x00B2, + 0x0052,0x0287,0x02D3,0xFE4E,0xFC2E,0xFFE9,0x0484,0x028C, + 0xFDD6,0xFE9F,0x03BC,0x03AF,0xFDCA,0xFB6E,0x022A,0x0605, + 0x0132,0xFC05,0xFAF6,0xFFA8,0x021E,0x0021,0xFF5B,0x010F, + 0x0268,0xFFE0,0xFBF4,0xFDB4,0x01F6,0x011A,0xFCA4,0xFAFA, + 0xFE01,0x010A,0x013D,0xFFB4,0xFE77,0xFF69,0xFF81,0xFD2A, + 0xFC5D,0xFF1F,0x001F,0xFE90,0xFD1E,0xFD2F,0xFEDC,0x0093, + 0x0038,0xFECA,0xFD25,0xFCDB,0xFE43,0xFDA5,0xFC8E,0xFE3D, + 0x013C,0x005A,0xFCFE,0xFC6E,0xFF7B,0x0101,0xFEAD,0xFB91, + 0xFC4E,0xFF41,0xFF03,0xFC1B,0xFBA6,0xFF89,0x0171,0xFE2A, + 0xFAA0,0xFC04,0x005B,0x0076,0xFCE3,0xFD51,0x0076,0x02C6, + 0x01E7,0xFE7E,0xFDF9,0x0065,0x0042,0xFF29,0xFEB2,0xFF49, + 0xFF5E,0xFF6C,0xFF3A,0xFE3F,0xFCBC,0xFDAF,0x012F,0x01F1, + 0xFD34,0xFAE3,0xFEB8,0x00BB,0xFE4A,0xFB8D,0xFC5C,0xFE57, + 0xFE5A,0xFB6D,0xFC4E,0x0002,0x0051,0xFC02,0xF8EE,0xFCBF, + 0x00AE,0xFE18,0xF9E8,0xFC48,0x00D2,0xFDFE,0xF949,0xFA31, + 0xFEB0,0x0078,0xFC20,0xFA11,0xFE7E,0xFEEF,0xFAD3,0xF99F, + 0xFDD5,0x0071,0xFF65,0xFCAB,0xFBC1,0xFD9F,0xFEE1,0xFCF2, + 0xF8FE,0xF96C,0xFE27,0xFEB2,0xFAD7,0xF9E2,0xFC81,0xFE16, + 0xFBE2,0xF93D,0xFB4E,0xFE27,0xFD05,0xFA8A,0xFB91,0xFDF7, + 0xFD73,0xFA7D,0xF8BE,0xFC44,0x0052,0xFE9C,0xFB2F,0xFB64, + 0xFD0A,0xFDF6,0xFC24,0xFA9F,0xFAE7,0xFCD8,0xFD72,0xFC81, + 0xFC93,0xFDB1,0xFE1D,0xFD5C,0xFAD5,0xFAF7,0xFE79,0x0135, + 0xFE24,0xFA54,0xFB5A,0xFEC2,0x0014,0xFD4D,0xFB6B,0xFE37, + 0x015A,0xFE30,0xF893,0xFA19,0x0055,0x011E,0xFB2F,0xF82C, + 0xFCBE,0x0134,0x0018,0xFD2E,0xFE37,0xFEE1,0xFD9E,0xFD44, + 0xFCAC,0xFF31,0xFFD1,0xFEE4,0xFDE0,0xFF33,0x013F,0x007A, + 0xFDE1,0xFDB8,0xFFFC,0x00C2,0xFE62,0xFC03,0xFEA9,0x01C3, + 0xFF08,0xFBF6,0xFF7F,0x0437,0x028F,0xFCB6,0xFB0F,0xFE0A, + 0xFFB3,0xFCBD,0xFB25,0xFF9E,0x0396,0x012A,0xFC1B,0xFC9E, + 0x00E5,0x008B,0xFB7A,0xF99C,0xFE28,0x0257,0x0016,0xFA94, + 0xFA98,0x00F1,0x0290,0xFD8C,0xFC70,0x00E4,0x03B8,0x0094, + 0xFA3E,0xF97B,0xFE1B,0x00D5,0xFF31,0xFE45,0xFF63,0x016D, + 0x011F,0xFDAF,0xFACB,0xFC5B,0xFF11,0xFE61,0xFB16,0xF982, + 0xFE76,0x00B5,0xFCFC,0xF9AC,0xFB5D,0xFE93,0xFD21,0xF96C, + 0xFB54,0x002B,0xFEF7,0xF94E,0xF854,0xFD90,0x0131,0xFE64, + 0xFD2D,0xFF23,0x004F,0xFEDD,0xFC3D,0xFBBC,0xFD9A,0xFFEF, + 0x0072,0x0045,0x01BB,0x015A,0xFFB4,0xFE0A,0xFCBD,0xFDE0, + 0x002C,0x01CC,0x00B3,0x001A,0x0090,0x00DE,0x00AA,0xFF86, + 0xFF0F,0x005F,0x04A6,0x0502,0xFF6F,0xFDA8,0xFFF3,0x010A, + 0xFF8F,0xFF6F,0x01D5,0x0414,0x0427,0x01C5,0xFF94,0x018D, + 0x03E3,0x02EA,0x0105,0x029F,0x0444,0x03C8,0x03B3,0x050D, + 0x04CD,0x023B,0x0108,0x040C,0x05E0,0x037D,0x00B9,0x0116, + 0x04A8,0x0761,0x0489,0x0072,0x01ED,0x068A,0x0535,0xFFF4, + 0x001A,0x0574,0x07C3,0x0272,0xFD57,0x018E,0x07E7,0x0622, + 0x008E,0x0032,0x03EE,0x05F8,0x02D6,0xFEC8,0xFF42,0x025A, + 0x0389,0x008C,0xFD84,0x0044,0x04E9,0x04A9,0x0138,0xFF1B, + 0x020C,0x0410,0x00A9,0xFE8E,0x0184,0x041F,0x0148,0xFD3B, + 0xFE02,0x0291,0x042B,0x0174,0xFF18,0xFFF6,0x02D4,0x0035, + 0xFF3F,0xFF65,0xFF35,0xFF60,0xFFEB,0x01EC,0x01CA,0xFF68, + 0xFDC6,0xFD91,0xFF19,0x00C1,0x0024,0xFE77,0xFE3B,0xFF61, + 0xFF4E,0xFD38,0xFCFD,0x0120,0x0307,0x004A,0xFE3E,0xFEB3, + 0xFFE9,0xFDF6,0xFBE4,0xFDD3,0x01FF,0x00F6,0xFC8C,0xFCC0, + 0x01D8,0x0338,0xFD91,0xFAF7,0x0048,0x0344,0x006C,0xFC40, + 0xFC5A,0x006F,0x00D3,0xFCF8,0xFCD0,0x013B,0x0312,0xFF5F, + 0xFCE1,0xFDA2,0xFEB0,0xFE12,0xFD89,0xFEC7,0x0133,0x0180, + 0xFF82,0xFED5,0x0010,0xFEF8,0xFF66,0x02B4,0x02FF,0x00D6, + 0x0014,0x02FB,0x03C6,0x000D,0xFD6D,0xFEE9,0x033A,0x04ED, + 0x0215,0xFFAE,0xFFC5,0xFFBD,0xFE40,0xFCD9,0xFEAB,0x011D, + 0x0088,0x008E,0x0182,0x0004,0xFCBD,0xFDD4,0x00AD,0x0066, + 0xFE5D,0xFDD3,0xFEBF,0xFF21,0xFFDA,0xFFEF,0xFEED,0xFD1A, + 0xFE84,0xFFED,0xFE03,0xFD3C,0xFF37,0xFFDD,0xFC44,0xFAE3, + 0xFEA3,0x00F3,0xFD8C,0xFAF4,0xFD6E,0x006D,0xFF77,0xFD02, + 0xFC07,0xFD94,0xFF5C,0xFEED,0xFCE1,0xFAAA,0xFC8B,0x006F, + 0xFEB4,0xFAB6,0xFAEC,0xFEC6,0xFF60,0xFBBE,0xFAAD,0xFCFA, + 0xFF87,0xFDFF,0xFA30,0xFA07,0xFD59,0xFFCA,0xFF0E,0xFC1C, + 0xFAAC,0xFBE4,0xFDCC,0xFD87,0xFC6E,0xFCC7,0xFBF4,0xFBD8, + 0xFD54,0xFF59,0xFFB1,0xFDB8,0xFC2F,0xFC56,0xFCCB,0xFC7C, + 0xFCAA,0xFE05,0xFDE1,0xFCD2,0xFD60,0xFD4C,0xFCD1,0xFDCF, + 0x0031,0xFFA8,0xFBD2,0xFA05,0xFD17,0xFFAD,0xFCA3,0xF8EB, + 0xFC1E,0x00B7,0x004B,0xFCCF,0xFD0B,0x00FA,0x0095,0xFCD6, + 0xFB8D,0xFDD2,0x0047,0xFE6A,0xFC42,0xFC7C,0x00FD,0x0093, + 0xFE28,0x0000,0x0282,0x0200,0xFD52,0xFB3C,0xFE60,0x01BA, + 0xFF72,0xFCF2,0xFE5C,0x0368,0x04AD,0xFFF8,0xFC86,0xFD7A, + 0xFEEC,0xFDDE,0xFC9D,0xFEC8,0x0264,0x0173,0xFD1C,0xFC8B, + 0x0093,0x0291,0xFF98,0xFC9B,0xFE8A,0x0167,0xFF3E,0xFB26, + 0xFB3F,0xFED7,0x00FF,0xFF47,0xFDC1,0xFFEC,0x021D,0x00A3, + 0xFE03,0xFE03,0xFE37,0xFCB5,0xFC14,0xFDA5,0x0088,0x0229, + 0x0173,0xFEF5,0xFD78,0xFDE2,0xFE32,0xFEFF,0xFF40,0xFE45, + 0xFD8F,0xFDEA,0xFF43,0xFF6C,0xFEE7,0xFFE7,0xFEC9,0xFC65, + 0xFB10,0xFC87,0xFF8E,0xFDBD,0xF8BE,0xF83D,0xFC33,0xFF35, + 0xFEF1,0xFE30,0xFF5A,0x0038,0xFDDA,0xFB68,0xFBA8,0xFE28, + 0x0074,0xFEEF,0xFD2E,0xFDCC,0xFFBB,0x0174,0x00E7,0xFEB9, + 0xFE46,0xFEDC,0xFE1B,0xFDD4,0xFF6F,0x00D3,0x00E2,0xFF6E, + 0xFDBD,0xFDF5,0x0179,0x046C,0x035F,0x0038,0xFE2A,0xFDEB, + 0xFDF2,0xFF12,0x0105,0x01AB,0x02CF,0x021A,0x019D,0x020B, + 0x0154,0xFF70,0xFDC8,0xFDCA,0xFF71,0x01AF,0x02F4,0x03E6, + 0x039B,0x0253,0x00BC,0x008B,0x025D,0x0372,0x028F,0x0281, + 0x0341,0x016B,0xFE79,0xFF6A,0x02AE,0x0502,0x044F,0x031F, + 0x02E8,0x024C,0x00C3,0xFF24,0xFF27,0x00C3,0x02B1,0x030D, + 0x029A,0x01E8,0x026A,0x0295,0x01A1,0x0056,0x0097,0x01DA, + 0x0226,0x00E2,0xFF6A,0xFF6A,0xFFCF,0xFFB8,0x005B,0x02DE, + 0x0428,0x0237,0xFFDD,0xFECF,0xFF3E,0xFFF2,0xFFA1,0xFFEF, + 0x014C,0x02F1,0x0243,0xFFF7,0xFEFC,0x0004,0x010A,0x004B, + 0xFFA9,0x0021,0x008B,0xFF46,0xFDA0,0xFFAF,0x0063,0x0078, + 0x00B8,0x0012,0x0143,0x00F1,0xFEFE,0xFE09,0xFF25,0xFFFB, + 0xFF74,0xFEC1,0x0020,0x02AD,0x020B,0xFF50,0xFE6C,0xFFE5, + 0x010A,0x0065,0xFF59,0xFF18,0x0055,0xFFF5,0xFE2B,0xFE10, + 0x007A,0x0295,0x01CB,0x001C,0xFFDD,0x002C,0xFF61,0xFDFD, + 0xFEA0,0x00B1,0x0109,0xFFB5,0xFF31,0x00DA,0x01A4,0xFFC3, + 0xFE20,0xFEE6,0x00CE,0xFFF3,0xFDE2,0xFE40,0x0035,0x0058, + 0xFF9A,0xFFBD,0x0164,0x021E,0x0029,0xFE51,0xFF27,0x0015, + 0xFEA2,0xFDAE,0xFFFA,0x031D,0x045A,0x017F,0x0035,0x01E1, + 0x0256,0x00F3,0x0029,0x01A9,0x02B5,0x0107,0xFEC3,0xFE36, + 0xFF37,0x0010,0x000D,0xFFE5,0xFFA2,0xFF75,0xFF76,0xFE67, + 0xFE97,0x001A,0xFF93,0xFD74,0xFDB7,0xFF8C,0x001A,0xFF65, + 0xFE88,0xFE26,0xFE67,0xFDBB,0xFE3F,0xFF79,0xFFEB,0xFF39, + 0xFD9D,0xFC82,0xFD36,0xFEFC,0xFFBB,0xFF22,0xFED3,0xFEA6, + 0xFE21,0xFCF5,0xFCB3,0xFEAA,0xFF37,0xFE09,0xFDD3,0xFE88, + 0xFF3C,0xFF5C,0xFE94,0xFE23,0xFDC4,0xFD2E,0xFCF7,0xFCE3, + 0xFCE9,0xFD25,0xFC65,0xFB23,0xFAFA,0xFC2C,0xFD9A,0xFDD0, + 0xFC83,0xFB92,0xFBAB,0xFC22,0xFC46,0xFC40,0xFD2F,0xFD42, + 0xFB7A,0xF996,0xFAE9,0xFDED,0xFF84,0xFEB5,0xFCEE,0xFC2A, + 0xFC11,0xFB68,0xFC25,0xFDF9,0xFF00,0xFE2F,0xFC36,0xFBD8, + 0xFD98,0xFF2E,0xFEA8,0xFD1B,0xFC79,0xFCD9,0xFD1A,0xFCD0, + 0xFD2A,0xFD85,0xFD43,0xFCA7,0xFC8E,0xFDF3,0xFF73,0xFFBC, + 0xFEB8,0xFD53,0xFCE6,0xFCF4,0xFC53,0xFBD9,0xFBD3,0xFC73, + 0xFC17,0xFB27,0xFB00,0xFB2E,0xFA00,0xF956,0xF9B1,0xF723, + 0xF70F,0xF657,0xF553,0xF546,0xF54D,0xF50C,0xF5D3,0xF5F1, + 0xF595,0xF4E6,0xF45C,0xF485,0xF4BE,0xF54B,0xF50D,0xF4C3, + 0xF413,0xF405,0xF410,0xF36D,0xF2D7,0xF1F0,0xF166,0xF0E3, + 0xF0DE,0xEFD1,0xEF2C,0xEE6F,0xEE6A,0xEDD5,0xED83,0xECE5, + 0xECA2,0xEC25,0xEB75,0xEB42,0xEA9F,0xEA05,0xE9DF,0xE9AE, + 0xE97A,0xE93A,0xE904,0xE8B3,0xE873,0xE820,0xE83E,0xE81C, + 0xE83F,0xE7F8,0xE815,0xE814,0xE810,0xE7D6,0xE7A9,0xE7F3, + 0xE7E9,0xE7AC,0xE79D,0xE7A3,0xE7DC,0xE6D2,0xE51A,0xE5E6, + 0xE675,0xE70C,0xE7A5,0xE7E9,0xE812,0xE89F,0xE90B,0xE905, + 0xE91B,0xE98A,0xE9CC,0xEAD6,0xEA65,0xEAD3,0xEB9E,0xEC66, + 0xEC93,0xEC21,0xED6D,0xEE2E,0xEE1D,0xEE6B,0xEF3F,0xEFDB, + 0xF084,0xF0C8,0xF128,0xF18B,0xF218,0xF299,0xF31E,0xF3E2, + 0xF43F,0xF463,0xF4DC,0xF5DB,0xF648,0xF6B9,0xF700,0xF785, + 0xF76F,0xF903,0xF9C0,0xF909,0xF907,0xF904,0xF9A8,0xFA36, + 0xFA97,0xFB4F,0xFC25,0xFC85,0xFD17,0xFD9A,0xFE8A,0xFFA9, + 0x0035,0x003D,0x0078,0x0094,0x0103,0x0202,0x0218,0x024B, + 0x02B6,0x0321,0x035F,0x03B2,0x042A,0x047A,0x04AB,0x04E0, + 0x0505,0x056C,0x05DD,0x063F,0x06B3,0x0692,0x068B,0x06DB, + 0x0770,0x078F,0x07BE,0x07A7,0x07FE,0x0827,0x0860,0x086A, + 0x08AA,0x091B,0x0956,0x0992,0x09A5,0x09F2,0x0A2A,0x0A1C, + 0x0A15,0x0A48,0x0AE6,0x0B04,0x0B37,0x0B3C,0x0B78,0x0BC1, + 0x0C46,0x0C8F,0x0CD2,0x0CC1,0x0CD7,0x0CF9,0x0CED,0x0CB6, + 0x0CCB,0x0D65,0x0D77,0x0D04,0x0DBA,0x0E36,0x0C69,0x0DF3, + 0x0E27,0x0D76,0x0DD2,0x0DF8,0x0E2F,0x0EA7,0x0E7B,0x0E21, + 0x0E40,0x0EB5,0x0ED1,0x0EA5,0x0E62,0x0E60,0x0EAA,0x0F19, + 0x0EF1,0x0EEF,0x0F60,0x0F6C,0x0EEF,0x0EDF,0x0F12,0x0F0F, + 0x0F71,0x0F17,0x0F3C,0x0F52,0x0F3C,0x0F3B,0x0F5C,0x0F89, + 0x0F71,0x0F8D,0x0F09,0x0EDA,0x0F08,0x0EC4,0x0EB2,0x0EF3, + 0x0F03,0x0F29,0x0F9F,0x0F2F,0x0EE6,0x0EB2,0x0EA0,0x0E3C, + 0x0DE7,0x0DB3,0x0DB4,0x0D89,0x0DD6,0x0E45,0x0E28,0x0E11, + 0x0DDC,0x0E06,0x0DD2,0x0EE7,0x105D,0x0F7D,0x0F28,0x0ED4, + 0x0EC6,0x0E8C,0x0E1D,0x0DDD,0x0DFB,0x0DDD,0x0D9C,0x0D6F, + 0x0D4E,0x0D72,0x0D43,0x0CC0,0x0C7E,0x0C6B,0x0C2F,0x0C24, + 0x0CE7,0x0CA4,0x0B90,0x0ADB,0x0B1B,0x0B3F,0x0B1C,0x0B3F, + 0x0B16,0x0A96,0x0A60,0x09FE,0x0A18,0x09FE,0x09B1,0x0966, + 0x0971,0x0950,0x0909,0x0901,0x0936,0x0901,0x08F6,0x08C6, + 0x086B,0x074F,0x0804,0x08F5,0x08D7,0x0874,0x0862,0x07EB, + 0x083F,0x0831,0x07B9,0x06F0,0x065C,0x0608,0x05FC,0x0581, + 0x055F,0x0560,0x0591,0x0557,0x04FA,0x0490,0x04A2,0x04A8, + 0x04BE,0x04F9,0x04DA,0x04A8,0x04A9,0x04BA,0x049D,0x0470, + 0x0403,0x041F,0x043C,0x0419,0x0424,0x0423,0x0425,0x046A, + 0x0414,0x03DE,0x0407,0x03DA,0x037A,0x032C,0x02D6,0x02F3, + 0x0359,0x03B0,0x03B9,0x0387,0x035A,0x0367,0x032F,0x032B, + 0x032F,0x0342,0x0321,0x0362,0x0328,0x02E6,0x02C7,0x02D2, + 0x02F6,0x0320,0x0305,0x030C,0x02B3,0x0269,0x024E,0x02B9, + 0x029E,0x0297,0x02DE,0x026E,0x017F,0x0359,0x0201,0x014A, + 0x0276,0x01DE,0x01D1,0x01E1,0x01EA,0x01E9,0x02A2,0x0216, + 0x0276,0x0267,0x028E,0x0260,0x0298,0x026E,0x01CA,0x019D, + 0x0211,0x026F,0x021C,0x01CE,0x016C,0x017A,0x0180,0x01DC, + 0x01B5,0x01B8,0x018C,0x0115,0x0116,0x0140,0x00EE,0x0091, + 0x00AE,0x00CE,0x0089,0x00A9,0x00C5,0x00A6,0xFFAB,0x0016, + 0x00BA,0x00FF,0x022C,0x02F8,0x0343,0x0382,0x039F,0x039A, + 0x0403,0x0532,0x06CD,0x08B2,0x09AA,0x0A6B,0x0AB7,0x0A7E, + 0x0A8D,0x0B2A,0x0B67,0x0B93,0x0B73,0x0BBE,0x0D2C,0x0C50, + 0x0B8D,0x0B51,0x0B7E,0x0C2B,0x0CB3,0x0E16,0x0F7C,0x0FDA, + 0x0F7D,0x0F65,0x0FB6,0x109C,0x12AC,0x13FB,0x1498,0x1500, + 0x14A0,0x1401,0x13A7,0x14A0,0x15A0,0x159C,0x1573,0x165A, + 0x16E5,0x1709,0x16B9,0x1728,0x1751,0x1701,0x16BC,0x1746, + 0x1843,0x18BE,0x1810,0x1733,0x171C,0x177A,0x17AE,0x17D0, + 0x17F2,0x179B,0x177D,0x1719,0x1691,0x1684,0x16F4,0x169C, + 0x16A5,0x1720,0x16E5,0x161D,0x1520,0x14EB,0x152F,0x1504, + 0x146B,0x141E,0x1406,0x1364,0x1294,0x11D9,0x11B0,0x11A0, + 0x10A3,0x101D,0x0FB5,0x0F72,0x0EE3,0x0E16,0x0D5E,0x0D32, + 0x0CB8,0x0D4F,0x0C5E,0x0B14,0x0C80,0x0AD4,0x09D7,0x09E2, + 0x0A0C,0x09CA,0x092B,0x0894,0x081C,0x0781,0x06FF,0x06AF, + 0x06C6,0x062A,0x0540,0x042D,0x036F,0x03C0,0x040A,0x03FD, + 0x0354,0x02B0,0x01D0,0x00F2,0x00FA,0x0135,0x01A8,0x015F, + 0x0081,0x000F,0xFFCA,0xFF68,0xFE5F,0xFDB9,0xFD1E,0xFD3F, + 0xFD77,0xFD46,0xFCCE,0xFC77,0xFC16,0xFB79,0xFAA4,0xFA5F, + 0xFAD6,0xFAFB,0xFA9C,0xFA44,0xF8AF,0xF63C,0xF41F,0xF2A0, + 0xF0F2,0xEF33,0xECE0,0xE9CC,0xE6C4,0xE514,0xE576,0xE656, + 0xE8CA,0xE949,0xE870,0xE843,0xE867,0xE864,0xE822,0xE876, + 0xE8CB,0xE93E,0xE9AD,0xEAE2,0xEBB2,0xEBCA,0xEB36,0xEB06, + 0xEC60,0xEE3F,0xF048,0xF1B8,0xF2F1,0xF4FE,0xF586,0xF596, + 0xF6BA,0xF90A,0xFB09,0xFD0E,0xFD8D,0xFDF4,0xFEC4,0xFFBB, + 0x00B5,0x023C,0x0388,0x0471,0x0575,0x063C,0x07A6,0x08D4, + 0x0993,0x0986,0x08F1,0x095F,0x0A0E,0x0A23,0x0957,0x09FD, + 0x0A1B,0x09AB,0x08AA,0x07C9,0x07A6,0x076F,0x06AE,0x0559, + 0x0405,0x02B9,0x01CA,0x011B,0xFF96,0xFE84,0xFD26,0xFB36, + 0xF98C,0xF82F,0xF7B9,0xF71B,0xF5F1,0xF4AA,0xF26B,0xEFF7, + 0xEE33,0xED1F,0xECA4,0xEC15,0xEB72,0xEA32,0xE878,0xE68D, + 0xE51D,0xE4A3,0xE428,0xE3EB,0xE382,0xE2E0,0xE233,0xE16D, + 0xE0B7,0xE0D9,0xE0D6,0xE0B2,0xE049,0xE04A,0xE0BD,0xE134, + 0xE1A1,0xE15F,0xE0FA,0xE11B,0xE180,0xE26B,0xE337,0xE421, + 0xE4A1,0xE485,0xE45F,0xE4A7,0xE5BB,0xE6AF,0xE7E0,0xE8C2, + 0xE976,0xEA1D,0xEB16,0xECB6,0xEE80,0xEF54,0xF04D,0xF0C0, + 0xF158,0xF202,0xF491,0xF387,0xF476,0xF5F6,0xF632,0xF759, + 0xF7F1,0xF81E,0xF889,0xF91D,0xF966,0xFA88,0xFBAB,0xFC56, + 0xFC2D,0xFC4D,0xFC33,0xFC2D,0xFC6E,0xFCB6,0xFD8B,0xFDF7, + 0xFD2F,0xFBFD,0xFBAB,0xFBAF,0xFBBD,0xFBF9,0xFBF7,0xFBD0, + 0xFABC,0xF990,0xF8FA,0xF91A,0xF90D,0xF8DE,0xF85E,0xF799, + 0xF6D0,0xF617,0xF5AA,0xF64E,0xF6A3,0xF608,0xF43E,0xF31C, + 0xF34D,0xF3A3,0xF39F,0xF354,0xF32C,0xF264,0xF1B0,0xF18E, + 0xF217,0xF2E3,0xF24A,0xF0F2,0xF016,0xF001,0xF0C6,0xF1AA, + 0xF205,0xF138,0xEED1,0xEE33,0xEE18,0xEF24,0xF0F4,0xF21D, + 0xF21D,0xF204,0xF226,0xF217,0xF202,0xF28B,0xF38B,0xF44B, + 0xF43E,0xF482,0xF52D,0xF6B7,0xF771,0xF6CD,0xF719,0xF785, + 0xF7E3,0xF882,0xFA67,0xFB9C,0xFBBF,0xFB9B,0xFB26,0xFB7D, + 0xFC6A,0xFD87,0xFEFC,0xFFED,0xFFB3,0xFFB2,0x0033,0xFFF6, + 0x0077,0x00DF,0x0144,0x01C7,0x0235,0x0385,0x033F,0xFFC5, + 0xFBE1,0xF88F,0xF5D8,0xF2F3,0xEF8A,0xE9CE,0xE215,0xDAF5, + 0xD6AC,0xD601,0xD7F2,0xDA41,0xDBEB,0xDB49,0xD96E,0xD7FF, + 0xD81E,0xDA36,0xDCDD,0xDF63,0xE072,0xE0A9,0xE059,0xE12B, + 0xE246,0xE3BE,0xE57E,0xE79B,0xEAC4,0xEECA,0xF368,0xF7CD, + 0xFB62,0xFE42,0x00AB,0x035C,0x0751,0x0BD2,0x1065,0x149E, + 0x17B2,0x1972,0x1B3E,0x1DB0,0x2125,0x2486,0x2783,0x2A89, + 0x2D01,0x2F67,0x30EE,0x32CE,0x3481,0x355F,0x3608,0x36F8, + 0x3840,0x39F0,0x3A39,0x39CE,0x38D6,0x3737,0x357E,0x347B, + 0x3484,0x34BF,0x339D,0x307B,0x2D86,0x2B61,0x291B,0x26C4, + 0x24BC,0x237C,0x1ED9,0x1CBE,0x1A54,0x1662,0x136A,0x1082, + 0x0D3B,0x0A04,0x0781,0x0479,0x0195,0xFF38,0xFC8A,0xF95B, + 0xF5CB,0xF2B4,0xF0C7,0xEEEA,0xEC9C,0xEA66,0xE84E,0xE627, + 0xE3EE,0xE201,0xE10B,0xE07C,0xDF46,0xDDD7,0xDD13,0xDC90, + 0xDB63,0xDAA6,0xDB1C,0xDBA3,0xDC57,0xDC50,0xDCC9,0xDDA0, + 0xDE95,0xDF24,0xDF45,0xE002,0xE21D,0xE445,0xE5AD,0xE721, + 0xE903,0xEAB3,0xEBC4,0xED11,0xEEDF,0xF1B7,0xF45A,0xF646, + 0xF7D6,0xF951,0xFAD5,0xFC61,0xFE35,0x007F,0x02C1,0x0604, + 0x093F,0x095A,0x0A74,0x0C32,0x0D78,0x0E87,0x0F37,0x1061, + 0x11A6,0x1232,0x12CB,0x12ED,0x1365,0x13C0,0x1434,0x142B, + 0x147B,0x1423,0x1386,0x1245,0x1202,0x11D8,0x1193,0x1136, + 0x1111,0x0F9A,0x0DB3,0x0CB4,0x0C30,0x0B40,0x0A68,0x097A, + 0x0846,0x0670,0x04CB,0x03D5,0x0279,0x017B,0xFFE5,0xFE6A, + 0xFD54,0xFC00,0xFAF7,0xFA86,0xF8CF,0xF5C4,0xF4F1,0xF4A7, + 0xF498,0xF51A,0xF4DF,0xF35B,0xF148,0xF032,0xEF74,0xEEED, + 0xEEAD,0xEEBF,0xEF70,0xEDF6,0xEC0B,0xEB61,0xEC36,0xECDB, + 0xECF2,0xECB5,0xECF4,0xEDE0,0xEEFC,0xEF35,0xEF81,0xEFE9, + 0xF056,0xF186,0xF22F,0xF34C,0xF4DB,0xF647,0xF6B2,0xF665, + 0xF6AF,0xF7FC,0xF967,0xFA71,0xFB3F,0xFC35,0xFC90,0xFD07, + 0xFDB2,0xFECF,0xFFE4,0x00CB,0x01A9,0x02AF,0x034F,0x0440, + 0x04D2,0x0576,0x05FB,0x0670,0x0698,0x0656,0x069F,0x077A, + 0x0800,0x0747,0x04D2,0x0215,0xFE47,0xFA63,0xF684,0xF1C6, + 0xEB7A,0xE3F9,0xDD93,0xDA89,0xD929,0xDA25,0xDB9C,0xDBD7, + 0xDAF2,0xDB41,0xDA07,0xD86F,0xDB3F,0xDD5A,0xDEE8,0xDF5B, + 0xDFCF,0xDFAB,0xE087,0xE105,0xE26D,0xE4D6,0xE78F,0xEA9D, + 0xED8E,0xF207,0xF71B,0xFB79,0xFE21,0x00C7,0x03B9,0x080B, + 0x0CA4,0x10EC,0x14B1,0x1860,0x1AD4,0x1C53,0x1E99,0x2239, + 0x25A1,0x28D6,0x2B80,0x2DBC,0x30D8,0x337E,0x3593,0x3718, + 0x3804,0x38AE,0x3941,0x3A8C,0x3BE5,0x3D0D,0x3D18,0x3C29, + 0x3A74,0x38D1,0x37DD,0x378E,0x3744,0x3628,0x34B5,0x324F, + 0x2FC6,0x2D4B,0x2AA6,0x280F,0x258E,0x2375,0x213F,0x1E99, + 0x1B5A,0x164B,0x1157,0x0E5E,0x0B35,0x08BD,0x0694,0x03C3, + 0x007D,0xFD36,0xF9E7,0xF71E,0xF42B,0xF18C,0xEF9C,0xEDC1, + 0xEBC8,0xE99F,0xE74A,0xE57D,0xE2B9,0xE0AA,0xE03C,0xE019, + 0xDEEB,0xDD99,0xDCFB,0xDCEA,0xDCB7,0xDCD6,0xDC54,0xDC4F, + 0xDC95,0xDCF0,0xDE0E,0xDEC0,0xDFAE,0xE124,0xE278,0xE2D5, + 0xE440,0xE58C,0xE762,0xE903,0xEB4B,0xEE10,0xEEDC,0xEF32, + 0xF081,0xF2BF,0xF591,0xF820,0xF9EC,0xFB88,0xFD3F,0xFF64, + 0x01B7,0x041C,0x067F,0x08C0,0x09D5,0x0A54,0x0BAD,0x0D61, + 0x0F68,0x10B8,0x120C,0x12A2,0x12DD,0x132B,0x13A1,0x14EF, + 0x1600,0x1637,0x15AA,0x153B,0x1455,0x13E3,0x142D,0x146F, + 0x14D7,0x13DD,0x1224,0x110A,0x1064,0x0FCD,0x0F2A,0x0EAE, + 0x0D70,0x0C04,0x0AC4,0x096F,0x08A9,0x080C,0x0755,0x058E, + 0x03B4,0x0203,0x008B,0x0064,0xFFD5,0xFE35,0xFC74,0xFB31, + 0xFA47,0xF953,0xF8B8,0xF7C5,0xF6C3,0xF4F4,0xF3F0,0xF359, + 0xF38B,0xF3C8,0xF3E2,0xF235,0xF0CC,0xF056,0xF0DC,0xF1E7, + 0xF2F6,0xF20C,0xF01D,0xF158,0xF002,0xF02F,0xF1D6,0xF3A1, + 0xF420,0xF36D,0xF2D0,0xF358,0xF40A,0xF540,0xF630,0xF6E6, + 0xF751,0xF776,0xF7E5,0xF8DB,0xFA70,0xFBDA,0xFC21,0xFC66, + 0xFD12,0xFE2E,0xFF7E,0x00AF,0x0175,0x021C,0x027C,0x02F9, + 0x039E,0x04C4,0x061E,0x06CE,0x06A9,0x0659,0x0676,0x0703, + 0x080F,0x08D7,0x08F6,0x0893,0x07FF,0x068D,0x042F,0x0152, + 0xFECD,0xFBE1,0xF73F,0xF0FA,0xE98D,0xE26B,0xDCB5,0xD90E, + 0xD857,0xD9D1,0xDB03,0xDB3D,0xDA69,0xD98A,0xD9EA,0xDCD5, + 0xDE13,0xDE5E,0xDFD1,0xE164,0xE26B,0xE336,0xE374,0xE38E, + 0xE398,0xE4D4,0xE791,0xEBB7,0xF0EA,0xF5D3,0xF928,0xFB59, + 0xFD09,0xFFEB,0x036B,0x083C,0x0E01,0x121F,0x1533,0x179D, + 0x1988,0x1B43,0x1DD9,0x2048,0x235C,0x273B,0x2B67,0x2EEE, + 0x30F4,0x3125,0x31F9,0x32A1,0x33C4,0x359C,0x3821,0x3A81, + 0x3AA6,0x39F7,0x38EC,0x37F4,0x3683,0x351C,0x360E,0x36AF, + 0x35D2,0x341C,0x31C5,0x2F14,0x2C78,0x29E5,0x27BA,0x2518, + 0x225B,0x1FD3,0x1CB8,0x190F,0x15AB,0x1299,0x0F27,0x0B90, + 0x084F,0x05C1,0x03C9,0x0133,0xFE26,0xFA60,0xF6FE,0xF412, + 0xF193,0xEEC8,0xEC8C,0xEA96,0xE89D,0xE6B5,0xE417,0xE208, + 0xE054,0xDE29,0xDBF8,0xDAE8,0xDAB5,0xDB1D,0xDAAB,0xD986, + 0xD868,0xD74A,0xD6BB,0xD775,0xD8A8,0xDA02,0xDB18,0xDBB1, + 0xDB91,0xDC43,0xDD56,0xDF16,0xE10B,0xE336,0xE4CD,0xE627, + 0xE799,0xE93C,0xEB46,0xED23,0xEF19,0xF0F3,0xF2A6,0xF4C7, + 0xF725,0xFA34,0xFC99,0xFD90,0xFDAF,0xFF1C,0x018F,0x03B1, + 0x061A,0x0A1A,0x09E1,0x0A1B,0x0A36,0x0A58,0x0C7E,0x0EED, + 0x1085,0x117F,0x1213,0x1235,0x11E5,0x11F9,0x128D,0x1304, + 0x130D,0x1282,0x1314,0x139E,0x1304,0x120D,0x1086,0x0F71, + 0x0E7A,0x0E1C,0x0E0D,0x0D77,0x0C7E,0x0ACA,0x086A,0x06FC, + 0x0629,0x059C,0x04C9,0x03AA,0x0250,0x0092,0xFF39,0xFDCE, + 0xFCD9,0xFB73,0xF9DA,0xF8F8,0xF801,0xF6CB,0xF61E,0xF4ED, + 0xF3FB,0xF28A,0xF0F9,0xF05B,0xEFE5,0xEF82,0xEFA1,0xEF85, + 0xEEB3,0xEDE0,0xED52,0xED7C,0xEDE5,0xEEAF,0xEF25,0xEF14, + 0xEE2A,0xEC7B,0xECB0,0xEDB2,0xEE9E,0xEF3A,0xEF64,0xF077, + 0xF19C,0xF2A0,0xF3A3,0xF3EA,0xF4CF,0xF5A3,0xF67E,0xF7F7, + 0xF91F,0xFA09,0xFBD3,0xFCCF,0xFC83,0xFDFF,0xFF73,0xFF87, + 0x0098,0x01C2,0x0383,0x04D7,0x0593,0x06DD,0x0712,0x0745, + 0x07E4,0x088F,0x0960,0x0AA8,0x0C00,0x0CE9,0x0C78,0x0B07, + 0x0A02,0x0949,0x0801,0x053B,0x0207,0xFE74,0xF86C,0xF165, + 0xE98B,0xE233,0xDCF2,0xDB2C,0xDB6D,0xDC96,0xDE35,0xDEEE, + 0xDDC2,0xDB9C,0xDB26,0xDD8A,0xE006,0xE22E,0xE409,0xE474, + 0xE457,0xE3BF,0xE379,0xE47B,0xE697,0xE947,0xEC42,0xEFF9, + 0xF42C,0xF831,0xFB64,0xFDBB,0x00E9,0x050C,0x0931,0x0DB9, + 0x11CA,0x15D6,0x192D,0x1C05,0x1DD2,0x1FBB,0x2287,0x2617, + 0x297F,0x2C4F,0x2F9F,0x3267,0x346E,0x35CD,0x36E3,0x3870, + 0x3A63,0x3BD3,0x3CFC,0x3DED,0x3E7F,0x3EB2,0x3DCF,0x3C8E, + 0x3B3E,0x3A3E,0x3937,0x38A8,0x387A,0x3755,0x34D0,0x3165, + 0x2E44,0x2BAC,0x2935,0x2741,0x25DF,0x2362,0x2030,0x1C96, + 0x194A,0x1396,0x11B4,0x1022,0x0BDF,0x08DC,0x05EF,0x02E4, + 0xFF6F,0xFBF8,0xF860,0xF54E,0xF229,0xEF83,0xEDA0,0xEBFC, + 0xEA50,0xE805,0xE4D9,0xE1E4,0xDFC0,0xDEC4,0xDE31,0xDD4B, + 0xDD2F,0xDCAC,0xDB6A,0xD952,0xD7B0,0xD806,0xD956,0xDA35, + 0xDABB,0xDB11,0xDBC0,0xDC62,0xDC8B,0xDD30,0xDEF6,0xE08F, + 0xE209,0xE3CE,0xE552,0xE75F,0xE906,0xEA70,0xEBCB,0xEDB1, + 0xEFA3,0xF18C,0xF41C,0xF647,0xF845,0xFA34,0xFBA5,0xFCD0, + 0xFE48,0x0037,0x0291,0x051B,0x068E,0x0798,0x0A1F,0x0CD6, + 0x0D45,0x0E58,0x0FF4,0x10B3,0x1127,0x11A2,0x126C,0x12F9, + 0x1379,0x13AE,0x13A9,0x1346,0x12ED,0x139F,0x13CD,0x136B, + 0x11F7,0x1027,0x0E51,0x0E3B,0x0E8C,0x0DFA,0x0D01,0x0C1B, + 0x09B3,0x0763,0x0628,0x05A6,0x04EF,0x0437,0x0316,0x0118, + 0xFF45,0xFD9E,0xFD53,0xFC4F,0xFA97,0xF8E9,0xF7E5,0xF72A, + 0xF5C5,0xF447,0xF3DA,0xF2F0,0xF0BF,0xEFA6,0xEFA2,0xEF29, + 0xEF0B,0xEEC5,0xEDDA,0xED55,0xED2E,0xED11,0xEC81,0xEBA2, + 0xEB64,0xEB58,0xEB11,0xEB29,0xEBBC,0xEB6B,0xEBF0,0xECA7, + 0xED6D,0xEE04,0xEEE2,0xEFAA,0xF023,0xF0B4,0xF14D,0xF1AC, + 0xF2AC,0xF3A9,0xF515,0xF688,0xF7A8,0xF860,0xF8FF,0xF9A5, + 0xFA40,0xFB8A,0xFCFB,0xFE64,0xFF7D,0xFFB2,0xFFC7,0x0080, + 0x019F,0x02E7,0x03A0,0x044D,0x04E6,0x0530,0x051B,0x05B5, + 0x0680,0x0696,0x06C1,0x05D5,0x04A5,0x023D,0xFF53,0xFB9F, + 0xF7A7,0xF332,0xEC0F,0xE272,0xDA51,0xD4FA,0xD2FD,0xD443, + 0xD747,0xDAF1,0xDDCB,0xDC5C,0xDB07,0xDBC6,0xDE09,0xE01D, + 0xE342,0xE36F,0xE234,0xE349,0xE1D1,0xE0D8,0xE0E1,0xE1E4, + 0xE35A,0xE69F,0xEC48,0xF362,0xF98F,0xFE0A,0x00F5,0x031C, + 0x05F0,0x0A06,0x0F1E,0x13EC,0x17DB,0x19A6,0x1A14,0x1A14, + 0x1B39,0x1E14,0x21DE,0x2663,0x29FE,0x2D87,0x30A6,0x332F, + 0x34E9,0x364B,0x376E,0x388B,0x392C,0x3A0C,0x3B1D,0x3BF3, + 0x3B3B,0x3890,0x3661,0x3471,0x337C,0x334B,0x3365,0x336A, + 0x3274,0x3094,0x2D5C,0x2A8E,0x2864,0x269E,0x248B,0x217A, + 0x1E25,0x1A9A,0x1754,0x13E9,0x0FEE,0x0BE2,0x081A,0x04D1, + 0x00F4,0xFE1D,0xFCD7,0xFA9A,0xF7B1,0xF48D,0xF15F,0xEEA2, + 0xEC65,0xEA37,0xE88F,0xE6E0,0xE422,0xE17D,0xDF58,0xDD5B, + 0xDBD0,0xDAC3,0xDABC,0xDA6E,0xDA2E,0xDA7B,0xDA41,0xD93D, + 0xD8D1,0xD8B7,0xDA2C,0xDB5E,0xDC2E,0xDC8A,0xDD54,0xDE05, + 0xDF33,0xE0C2,0xE218,0xE35B,0xE4A5,0xE65C,0xE8B9,0xEAF1, + 0xECD8,0xEE82,0xEF9E,0xF22E,0xF4E1,0xF5CF,0xF772,0xF97D, + 0xFBE6,0xFD97,0xFEFA,0x0057,0x0250,0x0421,0x069C,0x090F, + 0x0ADC,0x0BA5,0x0CB2,0x0E01,0x0EFC,0x1097,0x1199,0x1292, + 0x138A,0x13AB,0x1339,0x12C6,0x1324,0x1386,0x139A,0x132D, + 0x13DC,0x1455,0x137A,0x1218,0x10E2,0x1042,0x0F9C,0x0ECD, + 0x0E0B,0x0D2A,0x0C47,0x0AD1,0x08EA,0x0754,0x0624,0x0594, + 0x047B,0x034F,0x01DF,0x004F,0xFFD0,0xFE73,0xFD28,0xFBE8, + 0xFA34,0xF884,0xF774,0xF71F,0xF651,0xF522,0xF3BE,0xF1E5, + 0xF18C,0xF0FE,0xF047,0xF09A,0xF0A2,0xF013,0xEF10,0xEE6F, + 0xEE46,0xEE93,0xEE6C,0xEE49,0xEED5,0xEEE5,0xEF79,0xF0D2, + 0xF07C,0xEF67,0xF1D9,0xF1E0,0xF256,0xF2E1,0xF39A,0xF476, + 0xF536,0xF5C6,0xF696,0xF7AD,0xF8C1,0xF93A,0xF9E8,0xFAB5, + 0xFC0E,0xFD02,0xFD5B,0xFE35,0xFF56,0x00A6,0x0127,0x01F2, + 0x0297,0x0393,0x044E,0x04E3,0x0587,0x06CF,0x0771,0x077E, + 0x07C5,0x0838,0x0911,0x094F,0x094D,0x096A,0x09AD,0x08D1, + 0x0678,0x038B,0x0049,0xFCCA,0xF79E,0xF050,0xE74F,0xDE15, + 0xD633,0xD1E4,0xD1F8,0xD501,0xD9CB,0xDCFB,0xDDBD,0xDD87, + 0xDDDC,0xDF80,0xE235,0xE47E,0xE60A,0xE5B2,0xE561,0xE2FC, + 0xDFCA,0xDEC2,0xDF45,0xE0D8,0xE4A3,0xEA37,0xF0F7,0xF811, + 0xFDEE,0x029B,0x06B2,0x09CB,0x0DAA,0x11EC,0x15EC,0x18AC, + 0x196E,0x1849,0x17D4,0x1999,0x1B7A,0x1DA8,0x2201,0x26F2, + 0x2B3D,0x2FD4,0x33C9,0x3761,0x3A78,0x3C33,0x3C9C,0x3D12, + 0x3CFF,0x3D68,0x3CB8,0x3A78,0x3720,0x33EC,0x31FD,0x31E3, + 0x3277,0x333C,0x32FB,0x33A0,0x3325,0x3164,0x304B,0x2ED6, + 0x2BFA,0x2856,0x247C,0x20A7,0x1BE7,0x17EC,0x13D4,0x0F7F, + 0x0B0F,0x0736,0x03C0,0x02D6,0x0244,0x00D7,0xFE8D,0xFBC4, + 0xF868,0xF4F2,0xF274,0xEFF7,0xED4C,0xEA26,0xE65A,0xE31C, + 0xE06D,0xDDC7,0xDC04,0xDA97,0xD9E6,0xD9EE,0xDAD6,0xDB0E, + 0xDB53,0xDB5E,0xDAA2,0xD9D9,0xD94A,0xD8F0,0xD952,0xD9F2, + 0xD9C9,0xD9F7,0xD9F7,0xDA78,0xDB74,0xDCF8,0xDF24,0xE1C2, + 0xE47C,0xE697,0xE8E4,0xEBCC,0xEE4D,0xEF6F,0xF01C,0xF161, + 0xF2D2,0xF444,0xF59B,0xF76C,0xF9F3,0xFB81,0xFBDC,0xFCF0, + 0xFF92,0x038B,0x06BA,0x0829,0x0A72,0x0CE1,0x0D88,0x0D51, + 0x0F77,0x0E72,0x0F04,0x0F55,0x0EE6,0x0F15,0x0FE4,0x107B, + 0x10D8,0x10EB,0x10F2,0x115D,0x115B,0x1142,0x113B,0x116B, + 0x1085,0x0F62,0x0DF5,0x0C5F,0x0AA4,0x0977,0x0861,0x0763, + 0x06B1,0x04E7,0x032B,0x01F3,0x00F7,0x0031,0xFFC7,0xFF3D, + 0xFE91,0xFD5D,0xFB8E,0xF980,0xF7EB,0xF730,0xF622,0xF4BA, + 0xF313,0xF21A,0xF13A,0xF0AC,0xEFF9,0xEF53,0xEF2E,0xEF50, + 0xEF5F,0xEF08,0xEED0,0xEEB6,0xEF08,0xEEE6,0xEE72,0xED63, + 0xECD1,0xEDB4,0xEECF,0xEF45,0xEF6E,0xEFC8,0xEFFA,0xF050, + 0xEFE7,0xF149,0xF261,0xF31F,0xF3E1,0xF4C2,0xF61F,0xF73A, + 0xF7E9,0xF834,0xF872,0xF93F,0xFA3C,0xFBCA,0xFD1C,0xFE7D, + 0xFF33,0x000A,0x0088,0x012C,0x0332,0x0566,0x056A,0x0528, + 0x05AD,0x05CB,0x0644,0x07C0,0x083E,0x0867,0x0841,0x07E5, + 0x083C,0x08D9,0x09A2,0x0921,0x070D,0x043E,0x0175,0xFE6F, + 0xFA57,0xF4CE,0xEF2D,0xE852,0xE1E1,0xDF7C,0xDFE1,0xE2D2, + 0xE601,0xE7BA,0xE7B8,0xE6F9,0xE74E,0xE978,0xEC42,0xEE00, + 0xEE2E,0xECD7,0xEB2D,0xE8EE,0xE767,0xE6BB,0xE70E,0xE89F, + 0xEAF4,0xEF09,0xF4C7,0xFA32,0xFE1C,0x0087,0x02E4,0x0609, + 0x086C,0x0B53,0x0E55,0x1028,0x10A3,0x101A,0x0F73,0x0FE8, + 0x11DA,0x1557,0x18BB,0x1BDF,0x1F5E,0x22C7,0x25C0,0x27C9, + 0x2A32,0x2BF0,0x2C0A,0x2BD8,0x2B76,0x2B50,0x2B2A,0x29E6, + 0x26F2,0x2488,0x2391,0x23B2,0x24B4,0x25DE,0x2732,0x2724, + 0x25B0,0x2382,0x2289,0x21DB,0x20C9,0x1EF7,0x1C5F,0x1957, + 0x162A,0x11FB,0x0E6F,0x0BDB,0x0A0D,0x081D,0x0680,0x05A6, + 0x0272,0x02AB,0x01ED,0xFEED,0xFCEE,0xFB1B,0xF902,0xF640, + 0xF420,0xF202,0xEF92,0xEC82,0xEA03,0xE859,0xE6EB,0xE5FC, + 0xE566,0xE5EC,0xE6C4,0xE70C,0xE6B9,0xE6D1,0xE712,0xE722, + 0xE66A,0xE5E2,0xE5D9,0xE68B,0xE6D0,0xE649,0xE5A1,0xE61E, + 0xE75A,0xE8C0,0xEA51,0xEC69,0xEEFC,0xF0A8,0xF1A5,0xF333, + 0xF54A,0xF69C,0xF6D5,0xF6F3,0xF807,0xF9B5,0xFB43,0xFC5E, + 0xFCFE,0xFE30,0xFF30,0x0016,0x01B5,0x0400,0x0640,0x079E, + 0x08C7,0x092F,0x097D,0x0A28,0x0AB9,0x0C40,0x0EB5,0x0EBD, + 0x0E24,0x0D7C,0x0D15,0x0D5E,0x0E20,0x0E39,0x0E4D,0x0EF8, + 0x0F2E,0x0F45,0x0E98,0x0DCA,0x0D2A,0x0C8A,0x0B0C,0x09C2, + 0x08A1,0x075E,0x0795,0x06C4,0x04DB,0x03A7,0x02D9,0x01DD, + 0x0129,0x0108,0x00CF,0x005C,0xFF42,0xFE3C,0xFCE0,0xFB8B, + 0xF9E4,0xF972,0xF8C6,0xF7CF,0xF6D9,0xF5BC,0xF4BC,0xF3F4, + 0xF3A8,0xF38C,0xF313,0xF1E4,0xF2AE,0xF399,0xF356,0xF30E, + 0xF350,0xF309,0xF242,0xF1CB,0xF1D4,0xF21B,0xF195,0xF1A2, + 0xF179,0xF148,0xF12A,0xF1CC,0xF2DF,0xF395,0xF3AE,0xF3B9, + 0xF405,0xF536,0xF691,0xF706,0xF6FD,0xF6F3,0xF6EE,0xF7A0, + 0xF8FF,0xFA6E,0xFB0A,0xFB7A,0xFBA5,0xFBE5,0xFCC5,0xFDA9, + 0xFECF,0xFFEE,0x0092,0x00DD,0x00E0,0x01AD,0x024C,0x0312, + 0x02EF,0x027F,0x0234,0x029D,0x03B3,0x04FE,0x051A,0x03E7, + 0x02E8,0x01F2,0x004F,0xFE51,0xFCB9,0xFBC2,0xFACA,0xF93A, + 0xF7BF,0xF74D,0xF7CA,0xF840,0xF83C,0xF8A6,0xF968,0xFA4D, + 0xFA97,0xFB18,0xFA93,0xF9F2,0xF945,0xF8D7,0xF72F,0xF84B, + 0xF80A,0xF75F,0xF89D,0xF8CB,0xF9A4,0xFA79,0xFB7F,0xFC8D, + 0xFE39,0xFEE1,0x0001,0x009E,0x00E5,0x010D,0x0137,0x0127, + 0x011E,0x019F,0x0238,0x02C2,0x02FE,0x03B2,0x049A,0x0599, + 0x06A3,0x07F0,0x090B,0x09A2,0x0952,0x091E,0x09CA,0x0A35, + 0x0AA0,0x0A24,0x0958,0x08ED,0x089F,0x088F,0x0898,0x0941, + 0x09DC,0x09AC,0x0949,0x0967,0x09AB,0x0954,0x08BC,0x085F, + 0x081F,0x0712,0x0621,0x05D4,0x05E8,0x0584,0x04B4,0x0332, + 0x026F,0x027E,0x0236,0x01D0,0x018A,0x00F2,0xFFF6,0xFDB7, + 0xFBCE,0xFB9F,0xFB1C,0xFA89,0xF97B,0xF84A,0xF7CA,0xF737, + 0xF6B5,0xF5CE,0xF4DB,0xF3F3,0xF30E,0xF259,0xF218,0xF242, + 0xF246,0xF209,0xEFEC,0xEEB1,0xEF1E,0xEF47,0xEF25,0xEF1D, + 0xEEF9,0xEE6D,0xEE3A,0xEE32,0xEDEC,0xEDCE,0xEDA8,0xED1A, + 0xED39,0xECE4,0xEC91,0xEC4B,0xEC10,0xEBAB,0xEB55,0xEAEE, + 0xEB14,0xEAB3,0xEAC2,0xEB53,0xEA29,0xE90A,0xE8FB,0xE8F4, + 0xE8E1,0xE8DF,0xE899,0xE86A,0xE8B5,0xE8E4,0xE926,0xE930, + 0xE95C,0xE9FA,0xEA1A,0xE96B,0xE912,0xE8D8,0xE88F,0xE888, + 0xE84D,0xE879,0xE8A4,0xE8D5,0xE8E9,0xE8A7,0xE8EA,0xE8A2, + 0xE862,0xE8AB,0xE91A,0xE998,0xE9CA,0xE9E3,0xEA4D,0xEA30, + 0xEA42,0xEA6F,0xEAAD,0xEAD4,0xEB0A,0xEB1B,0xEB77,0xEBA5, + 0xEBE4,0xEC52,0xECA7,0xECC1,0xED97,0xEE2B,0xEE9B,0xEF90, + 0xF041,0xF05C,0xF035,0xF0B7,0xF18D,0xF285,0xF376,0xF441, + 0xF4BB,0xF4DB,0xF57C,0xF61D,0xF69E,0xF711,0xF7BA,0xF808, + 0xF855,0xF892,0xF8FB,0xF9B3,0xFA46,0xFA7F,0xFB73,0xFB5B, + 0xFABE,0xFD82,0xFD05,0xFC66,0xFD5A,0xFDDA,0xFDE2,0xFE44, + 0xFEC1,0xFEFE,0xFF11,0xFF4C,0xFF77,0xFFFA,0x0006,0x0077, + 0x013A,0x0196,0x01EB,0x01D6,0x0210,0x0290,0x0308,0x031C, + 0x0340,0x03CA,0x0467,0x047D,0x04D9,0x0521,0x0560,0x05C5, + 0x0607,0x0669,0x06EE,0x0750,0x0770,0x07B1,0x082B,0x0823, + 0x0842,0x08B0,0x0910,0x090D,0x0930,0x096F,0x09BD,0x09F2, + 0x0A2D,0x0A87,0x0A61,0x0A72,0x0A74,0x0A97,0x0AC6,0x0AFC, + 0x0B50,0x0B67,0x0B62,0x0BC1,0x0C5F,0x0E61,0x0E50,0x0D1E, + 0x0D4A,0x0D75,0x0D6A,0x0D13,0x0D68,0x0D53,0x0D30,0x0D50, + 0x0D13,0x0D3F,0x0CD3,0x0C9A,0x0C68,0x0CB2,0x0CEB,0x0CE6, + 0x0C92,0x0CED,0x0DD7,0x0DB9,0x0D1E,0x0CF5,0x0D9F,0x0D5F, + 0x0D6E,0x0D87,0x0DA1,0x0E02,0x0DCD,0x0D83,0x0D98,0x0DD6, + 0x0DC3,0x0DBC,0x0DC8,0x0D96,0x0D4B,0x0D78,0x0D91,0x0DC4, + 0x0DA2,0x0DE3,0x0D6A,0x0C32,0x0D1C,0x0DB5,0x0DBE,0x0DE9, + 0x0D99,0x0D30,0x0D1B,0x0CE2,0x0CD7,0x0C29,0x0BB4,0x0B60, + 0x0B60,0x0A8F,0x0AA0,0x0AAA,0x0A91,0x0A91,0x0A2B,0x09EF, + 0x09F6,0x0A61,0x0A63,0x0A1C,0x0A36,0x0A3A,0x0A45,0x0A6B, + 0x0AAB,0x0AE8,0x0AF1,0x0ADF,0x0B14,0x0B15,0x0AEC,0x0AB2, + 0x0AD7,0x0AB2,0x0A73,0x0A99,0x0A99,0x0A95,0x0AAF,0x0A81, + 0x0A48,0x098E,0x098A,0x09BF,0x092F,0x0912,0x0915,0x0951, + 0x0972,0x0937,0x08CC,0x0850,0x0895,0x091A,0x090F,0x08A9, + 0x0896,0x0834,0x083E,0x0889,0x08B6,0x08F7,0x087A,0x0801, + 0x08B7,0x08C5,0x08FC,0x0924,0x0951,0x090B,0x08FA,0x09F0, + 0x0821,0x088A,0x0872,0x0815,0x0851,0x084B,0x07F3,0x07D5, + 0x07A8,0x0769,0x0740,0x0733,0x0789,0x0765,0x07EC,0x074D, + 0x0713,0x06D5,0x069D,0x06F2,0x0762,0x0795,0x0762,0x0736, + 0x072B,0x06BE,0x0693,0x068D,0x061A,0x0680,0x0673,0x06B1, + 0x0658,0x05E5,0x05D9,0x05DB,0x05FC,0x0599,0x0597,0x05A0, + 0x05E6,0x05B3,0x055F,0x056E,0x056E,0x059D,0x05AB,0x058A, + 0x0553,0x052D,0x04D8,0x049A,0x04C3,0x04D3,0x04C8,0x0469, + 0x0473,0x04D2,0x0465,0x03CE,0x03B6,0x0396,0x0279,0x00CF, + 0x0112,0x01EB,0x01D1,0x01F3,0x01F3,0x01C0,0x01A1,0x021B, + 0x0242,0x01C1,0x01D1,0x01AF,0x01EF,0x01EE,0x022F,0x023B, + 0x02B4,0x01E9,0x0100,0x01B2,0x022C,0x022C,0x0209,0x0249, + 0x0257,0x01FE,0x0265,0x02C5,0x025B,0x025F,0x0282,0x02C8, + 0x02D7,0x02AA,0x0281,0x01F7,0x019B,0x01EB,0x0241,0x0252, + 0x02D3,0x0275,0x0313,0x032B,0x01E3,0x01B2,0x01DD,0x0234, + 0x0241,0x0239,0x0238,0x025A,0x027D,0x0291,0x02EC,0x035C, + 0x0369,0x038C,0x0357,0x0323,0x031A,0x0314,0x037C,0x035D, + 0x0332,0x02F9,0x02F8,0x02A2,0x025C,0x0283,0x0288,0x02B8, + 0x034F,0x02CF,0x029D,0x0284,0x0241,0x01FC,0x019D,0x01A5, + 0x01B7,0x0193,0x015F,0x014E,0x014D,0x013E,0x01A3,0x01B6, + 0x017D,0x017C,0x0139,0x0146,0x00D8,0x0095,0x00E1,0x0133, + 0x0136,0x00E1,0x00DE,0x0126,0x0121,0x0106,0x010E,0x00E0, + 0x00FA,0x00FB,0x008A,0xFFD8,0xFFBE,0xFFD6,0xFFFC,0xFFDD, + 0xFFD8,0xFF95,0xFF5F,0xFF97,0xFFD1,0xFFB1,0xFF1D,0xFF15, + 0xFF71,0xFF53,0xFEFF,0xFF4D,0xFFCB,0xFDD4,0xFF1C,0x0124, + 0x00B6,0x00FC,0x0173,0x01F2,0x02F8,0x03D2,0x0449,0x0544, + 0x05AD,0x05B3,0x0617,0x07AC,0x0A21,0x0B12,0x0A7E,0x0A12, + 0x0A68,0x0A72,0x0A3D,0x09C7,0x0977,0x0966,0x09CC,0x0A65, + 0x0AF0,0x0A94,0x097D,0x084F,0x08D2,0x0A4F,0x0C35,0x0C00, + 0x0A35,0x0915,0x09A8,0x0BB4,0x0CF9,0x0D30,0x0CAC,0x0C0F, + 0x0C4F,0x0DCD,0x0F01,0x0E91,0x0D83,0x0E00,0x0EEE,0x106C, + 0x10E8,0x1044,0x0F35,0x0E64,0x0EFC,0x1077,0x11BC,0x11B5, + 0x1112,0x1083,0x117A,0x136A,0x12F6,0x1279,0x11E0,0x11EC, + 0x12A3,0x13D8,0x14BF,0x1445,0x1253,0x110C,0x11A2,0x1394, + 0x14D7,0x13E7,0x1253,0x10E8,0x107A,0x10AC,0x1136,0x1349, + 0x13F0,0x120F,0x0FE8,0x1093,0x115A,0x1152,0x1079,0x0F78, + 0x0FDD,0x10B9,0x10CE,0x0FFE,0x0F10,0x0E4B,0x0F06,0x100C, + 0x10D6,0x10A1,0x0FC5,0x0E60,0x0DAB,0x0DA2,0x0F08,0x0FF1, + 0x0DF2,0x0D77,0x0DC6,0x0C89,0x0D06,0x0D69,0x0D03,0x0C3B, + 0x0BAD,0x0AEF,0x09E5,0x0674,0x021B,0xFED8,0xFB19,0xF7D3, + 0xF612,0xF3FC,0xF357,0xF387,0xF510,0xF6A5,0xF66C,0xF424, + 0xF0E3,0xEDEF,0xED48,0xEE48,0xEF9A,0xF000,0xEEEC,0xEDF9, + 0xEED0,0xF0CB,0xF291,0xF3C9,0xF480,0xF4EA,0xF409,0xF33E, + 0xF45F,0xF634,0xF851,0xF9CE,0xFB05,0xFC57,0xFDAF,0xFE8A, + 0xFFB2,0x0132,0x02A0,0x042D,0x056E,0x063E,0x06C3,0x079A, + 0x0910,0x0A9F,0x0BD7,0x0CB5,0x0D25,0x0D2B,0x0D80,0x0E46, + 0x0F0B,0x0F20,0x0F1A,0x0F28,0x0ED6,0x0F26,0x0EF4,0x0E2A, + 0x0E28,0x0E55,0x0D6C,0x0B92,0x0C95,0x0B9C,0x0918,0x0972, + 0x081A,0x0766,0x06A0,0x05D5,0x045F,0x0306,0x0191,0x005E, + 0xFEA6,0xFCB8,0xFB9E,0xFAB4,0xF915,0xF6E7,0xF52B,0xF37D, + 0xF28D,0xF17E,0xEFF5,0xEE62,0xED45,0xEBCA,0xEA22,0xE929, + 0xE7D6,0xE66B,0xE519,0xE4E6,0xE4CD,0xE4C1,0xE374,0xE1BD, + 0xE0FC,0xE0B0,0xE05F,0xE0D5,0xE11B,0xE078,0xDF44,0xDE8F, + 0xDF96,0xE0FF,0xE147,0xE116,0xE154,0xE1E4,0xE20D,0xE288, + 0xE343,0xE41A,0xE46B,0xE55F,0xE666,0xE7E7,0xE893,0xE7F3, + 0xE867,0xEA0A,0xEB54,0xEBE4,0xEAB0,0xEA73,0xEBD2,0xECA4, + 0xEDDD,0xEF68,0xF052,0xF057,0xF089,0xF0D1,0xF31C,0xF4D7, + 0xF582,0xF501,0xF475,0xF532,0xF72A,0xF8A1,0xF997,0xF83E, + 0xF6F6,0xF80E,0xF95F,0xFA0F,0xF9CC,0xF93C,0xF8FF,0xF91B, + 0xF9D3,0xF9CC,0xF9A2,0xF916,0xF8B7,0xF8DD,0xF929,0xF8A6, + 0xF808,0xF713,0xF6BF,0xF770,0xF793,0xF6BF,0xF587,0xF485, + 0xF589,0xF553,0xF502,0xF531,0xF46E,0xF30A,0xF1EC,0xF1C6, + 0xF295,0xF2E2,0xF2CE,0xF24C,0xF1F2,0xF1BC,0xF207,0xF1AC, + 0xF12E,0xF159,0xF11A,0xF103,0xF182,0xF159,0xF0CF,0xEFD8, + 0xEFC1,0xF0D3,0xF1B7,0xF1E5,0xF0CA,0xF03E,0xF03B,0xF0FA, + 0xF220,0xF360,0xF3B0,0xF38E,0xF318,0xF3B6,0xF4C3,0xF534, + 0xF53B,0xF5AE,0xF6D2,0xF7CC,0xF7AF,0xF772,0xF818,0xF947, + 0xF9C2,0xF9ED,0xFA4A,0xFB3F,0xFADD,0xFA2D,0xFA54,0xFBBC, + 0xFCF0,0xFDAA,0xFDEF,0xFDC9,0xFDDF,0xFE27,0xFE5D,0xFF0E, + 0xFF8E,0xFFAF,0xFF40,0xFF4D,0xFFA8,0xFFE6,0xFE3B,0xFB4E, + 0xF6F0,0xF226,0xED04,0xE71C,0xDF57,0xDA74,0xDCC2,0xDF00, + 0xE289,0xE5C1,0xE4D9,0xE042,0xDA4A,0xD6AC,0xD720,0xD974, + 0xDAED,0xDA80,0xD999,0xDA28,0xDC44,0xDF53,0xE254,0xE533, + 0xE7E1,0xEAD1,0xECB6,0xED22,0xECD0,0xEE2B,0xF1C7,0xF68D, + 0xFCB6,0x0207,0x04A8,0x05D2,0x0706,0x09B8,0x0D7D,0x1226, + 0x161E,0x18D1,0x1A44,0x1ADA,0x1CB2,0x2008,0x23FC,0x2745, + 0x2948,0x2AEF,0x2C73,0x2D52,0x2DC2,0x2E13,0x2F3A,0x302B, + 0x315D,0x31F9,0x31D4,0x311C,0x2F9A,0x2ECA,0x2E01,0x2DBC, + 0x2D48,0x2C1A,0x2BA5,0x292C,0x2608,0x2396,0x2170,0x2048, + 0x1F63,0x1D37,0x1926,0x14F0,0x11A9,0x1014,0x0E9D,0x0C41, + 0x0905,0x05C6,0x02E7,0x005E,0xFD91,0xFA32,0xF862,0xF758, + 0xF4E1,0xF156,0xEE5C,0xEC87,0xEA62,0xE84B,0xE5F5,0xE529, + 0xE50D,0xE425,0xE1A3,0xDF1A,0xDD68,0xDD2E,0xDD45,0xDDCB, + 0xDE11,0xDD7E,0xDC7F,0xDBFD,0xDC16,0xDD5F,0xDF2A,0xDFC1, + 0xDFED,0xE0FC,0xE1A3,0xE274,0xE37D,0xE533,0xE77E,0xE9B8, + 0xEB1C,0xEC73,0xEC71,0xEC62,0xEE40,0xF076,0xF216,0xF459, + 0xF645,0xF78C,0xF86C,0xF8EB,0xFA20,0xFCE1,0x0001,0x020B, + 0x0383,0x039C,0x0435,0x05BF,0x076E,0x091E,0x0A97,0x0B1E, + 0x0BE9,0x0CFC,0x0DB4,0x0DEF,0x0D22,0x0C17,0x0CB0,0x0E12, + 0x0FE3,0x0FF7,0x0E88,0x0C01,0x0A33,0x0A73,0x0BB3,0x0CB0, + 0x0D0F,0x0B9A,0x0927,0x06E8,0x05EC,0x06E0,0x079D,0x0661, + 0x045A,0x020D,0x00C8,0xFF8B,0xFEA2,0xFDB6,0xFD50,0xFC98, + 0xFAE6,0xF902,0xF7B9,0xF71F,0xF6D4,0xF696,0xF585,0xF4D4, + 0xF41A,0xF22F,0xF0C8,0xF0A4,0xF35D,0xF18C,0xF0A3,0xEFD0, + 0xEEC9,0xEE85,0xEEFA,0xEFAB,0xEF91,0xEF34,0xEF75,0xEFF2, + 0xEFE2,0xF034,0xF07A,0xF0E7,0xF0D6,0xF1DA,0xF36A,0xF3FC, + 0xF3A0,0xF2C9,0xF329,0xF54B,0xF7CB,0xF8E2,0xF8FF,0xF937, + 0xF9AB,0xFA2C,0xFB48,0xFCAE,0xFDF3,0xFF16,0xFF7A,0xFFE0, + 0x00E1,0x01F0,0x028D,0x02FD,0x03E6,0x05F9,0x070E,0x06A0, + 0x05A2,0x0561,0x0681,0x083B,0x0934,0x0958,0x08CE,0x07D5, + 0x075D,0x07F2,0x078A,0x0457,0xFE3D,0xF683,0xEF40,0xE8B6, + 0xE378,0xDF53,0xDED3,0xE20F,0xE588,0xE7FD,0xE5B6,0xDFCD, + 0xD98D,0xD5AC,0xD584,0xD800,0xDAFD,0xDBDD,0xDADC,0xD8C8, + 0xD88F,0xDC1E,0xE230,0xE70D,0xEA5F,0xEBB5,0xEB05,0xEA0F, + 0xEB5A,0xEEE7,0xF40A,0xFA4C,0x00F9,0x0624,0x0890,0x0997, + 0x0AAD,0x0D81,0x128A,0x18B4,0x1E8D,0x20B7,0x20CC,0x20A9, + 0x2305,0x2773,0x2CD2,0x31E4,0x34DA,0x359F,0x3575,0x36AD, + 0x3826,0x37EC,0x3891,0x3A8C,0x3C31,0x3DFF,0x3E76,0x3D03, + 0x3A87,0x38D5,0x39CA,0x3C13,0x3C51,0x3A3F,0x375D,0x33B0, + 0x3120,0x2F98,0x2E44,0x2CF7,0x2B0B,0x27E3,0x23C0,0x2062, + 0x1D86,0x1A89,0x176D,0x147E,0x11FC,0x0FAF,0x0C97,0x0865, + 0x0450,0x0117,0xFE3D,0xFBE0,0xF9FA,0xF822,0xF510,0xF186, + 0xEDD5,0xEB27,0xE9C7,0xE8AB,0xE752,0xE57E,0xE3AB,0xE1C5, + 0xE02D,0xDEF9,0xDE32,0xDDC2,0xDD5B,0xDDBE,0xDDFF,0xDDE7, + 0xDD0B,0xDC10,0xDC62,0xDE5B,0xE0AC,0xE23A,0xE2E1,0xE355, + 0xE3AA,0xE4C6,0xE6B2,0xE858,0xEA99,0xEC3A,0xEE12,0xEFBC, + 0xF139,0xF339,0xF551,0xF77E,0xF7A6,0xFBDC,0xFF00,0xFF96, + 0x00B6,0x0108,0x0249,0x04C5,0x0778,0x0A1F,0x0AA5,0x0ABB, + 0x0B6D,0x0C6D,0x0E24,0x1092,0x11FA,0x11C8,0x10D7,0x10C5, + 0x120C,0x13A2,0x1483,0x1406,0x131C,0x12E9,0x1323,0x12F8, + 0x1264,0x1163,0x1026,0x0FE5,0x105D,0x10D6,0x0FCB,0x0D26, + 0x0A42,0x09CD,0x09C0,0x09C5,0x08BB,0x0663,0x039A,0x01C4, + 0x00B5,0x005E,0xFFDE,0xFE86,0xFD10,0xFB88,0xF9D7,0xF8C0, + 0xF794,0xF68D,0xF605,0xF5A8,0xF4EE,0xF408,0xF2D7,0xF119, + 0xEFC8,0xF0EF,0xF40B,0xF428,0xF2E8,0xF0FA,0xEF49,0xEF1C, + 0xEFCA,0xF0AE,0xF12A,0xF0BB,0xF082,0xF051,0xF07C,0xF14B, + 0xF21F,0xF234,0xF244,0xF327,0xF46F,0xF4F7,0xF540,0xF4E3, + 0xF4F4,0xF69F,0xF93C,0xFA83,0xFADF,0xFAC0,0xFA8B,0xFB54, + 0xFCD1,0xFE6B,0xFF61,0xFF80,0xFFD8,0x012C,0x0210,0x0256, + 0x02AF,0x03F0,0x0582,0x0640,0x05D4,0x05E0,0x05B0,0x04EE, + 0x057E,0x07C9,0x093C,0x0941,0x07DC,0x052A,0x00EC,0xFBB9, + 0xF534,0xEDA3,0xE64D,0xE03E,0xDDDD,0xDEE2,0xE330,0xE7CF, + 0xE82E,0xE2E2,0xDC22,0xD7F4,0xD774,0xD913,0xDA07,0xD98C, + 0xD8F6,0xD8D9,0xD9F1,0xDCB2,0xE036,0xE41D,0xE712,0xE856, + 0xE9EE,0xEC09,0xECBA,0xED1F,0xEF48,0xF42F,0xFABD,0x0080, + 0x040E,0x0585,0x0690,0x0900,0x0D59,0x12E3,0x1794,0x1AD2, + 0x1C62,0x1D3D,0x1F25,0x226F,0x2733,0x2B59,0x2DE2,0x2F91, + 0x315D,0x32BA,0x32ED,0x331D,0x33F1,0x35A7,0x3790,0x3946, + 0x39C1,0x3890,0x36B2,0x350C,0x34C9,0x360E,0x369F,0x35C1, + 0x32F2,0x2F14,0x2AD2,0x2AAA,0x29D1,0x26EF,0x259B,0x229A, + 0x2046,0x1D68,0x1A19,0x1667,0x137F,0x10D5,0x0E7F,0x0B95, + 0x08D1,0x0588,0x01C0,0xFE05,0xFB14,0xF9B5,0xF7FC,0xF53E, + 0xF175,0xEEA6,0xECAE,0xEAC8,0xE7C7,0xE51D,0xE334,0xE243, + 0xE15D,0xE0CC,0xDF4C,0xDD17,0xDB64,0xDA4F,0xDB2E,0xDC67, + 0xDCEB,0xDBE4,0xDA68,0xDA0B,0xDB1E,0xDD6B,0xDEF7,0xDF52, + 0xDF93,0xE0DA,0xE237,0xE384,0xE49B,0xE62D,0xE7FC,0xEA02, + 0xEBFC,0xEDE0,0xEFD8,0xF110,0xF1CC,0xF3DE,0xF776,0xFA90, + 0xFCDC,0xFD6C,0xFDD0,0xFDCA,0xFE66,0x00B9,0x0361,0x0568, + 0x0740,0x086F,0x08EA,0x09EA,0x0BEF,0x0D4E,0x0E43,0x0F7D, + 0x1101,0x11FD,0x1193,0x1124,0x120D,0x138C,0x134B,0x131E, + 0x142E,0x13A9,0x124D,0x11E1,0x125B,0x1265,0x10F4,0x0F04, + 0x0E24,0x0E1A,0x0E51,0x0D80,0x0BA0,0x09C0,0x0854,0x0735, + 0x06A5,0x064D,0x0560,0x03B4,0x01D0,0xFFEE,0xFF68,0x0001, + 0xFE3B,0xFC67,0xFB38,0xF9D9,0xF85E,0xF782,0xF668,0xF5CA, + 0xF601,0xF4F9,0xF41E,0xF310,0xF2E8,0xF374,0xF2CD,0xF19B, + 0xF14B,0xF1ED,0xF1E7,0xF149,0xF069,0xF01F,0xF0C6,0xF198, + 0xF23D,0xF27D,0xF297,0xF208,0xF28C,0xF39E,0xF493,0xF55A, + 0xF4EE,0xF4F1,0xF609,0xF788,0xF89B,0xF94B,0xF970,0xFA64, + 0xFB78,0xFCB6,0xFDAA,0xFDF9,0xFDD6,0xFE77,0x0004,0x0213, + 0x02F4,0x0276,0x0238,0x0326,0x04E1,0x0646,0x071F,0x0738, + 0x06E7,0x06B1,0x075E,0x087F,0x096A,0x09B6,0x092A,0x087B, + 0x0761,0x048E,0x0045,0xFA75,0xF41E,0xECD2,0xE5F9,0xE017, + 0xDD46,0xDF4E,0xE5D4,0xE8E4,0xE7B4,0xE492,0xDD53,0xD835, + 0xD700,0xD808,0xDA17,0xDBA8,0xDC3B,0xDB2A,0xDAB7,0xDCCC, + 0xE09C,0xE510,0xE829,0xEA08,0xEB0F,0xEC02,0xED13,0xEE48, + 0xF07B,0xF5A9,0xFC32,0x0244,0x0601,0x0736,0x0896,0x0AE5, + 0x0EDD,0x1404,0x1920,0x1C8F,0x1E42,0x1FBF,0x2164,0x24F3, + 0x2958,0x2D2C,0x2F90,0x3168,0x32E8,0x3476,0x34EB,0x357E, + 0x366F,0x384B,0x39F0,0x3A8C,0x3A88,0x397E,0x383A,0x36F6, + 0x364E,0x36AC,0x371C,0x363E,0x3398,0x2FFE,0x2D46,0x2B96, + 0x2AA9,0x2B90,0x29BD,0x25E4,0x2259,0x1EEC,0x1B4D,0x182D, + 0x15D9,0x13D6,0x1175,0x0DE8,0x0987,0x051A,0x01B9,0xFF7A, + 0xFDBA,0xFBEF,0xF966,0xF65D,0xF205,0xEE16,0xECBF,0xEBE1, + 0xEA51,0xE7E8,0xE5DC,0xE372,0xE1B3,0xDFC1,0xDE52,0xDE26, + 0xDE63,0xDD94,0xDC14,0xDADB,0xDB48,0xDBD8,0xDB2D,0xDA82, + 0xDB70,0xDEAD,0xE021,0xDF12,0xDE38,0xDF76,0xE0CD,0xE28C, + 0xE531,0xE783,0xE989,0xEA67,0xEA46,0xEB32,0xEE08,0xF16E, + 0xF371,0xF352,0xF42C,0xF69A,0xF854,0xF8B4,0xFAF3,0xFD5D, + 0xFF58,0x0090,0x01DA,0x03EB,0x05A2,0x0686,0x0727,0x0840, + 0x0A36,0x0BC0,0x0CC1,0x0D3B,0x0DC8,0x0EB8,0x0EB2,0x0E4F, + 0x0E87,0x1009,0x10A7,0x0FFA,0x0F48,0x0FC3,0x0FEF,0x0F35, + 0x0E5D,0x0D99,0x0CE5,0x0C2A,0x0BBA,0x0AE4,0x0994,0x0832, + 0x06C3,0x0614,0x05A6,0x04F0,0x031B,0x00FE,0xFEF9,0xFE19, + 0xFDFA,0xFDBE,0xFC59,0xFA2F,0xF7E0,0xF61C,0xF58C,0xF637, + 0xF633,0xF48C,0xF226,0xF00C,0xF0B5,0xF17C,0xF0EE,0xEF99, + 0xEEEC,0xEE2F,0xEE2A,0xEF83,0xED8A,0xED9C,0xED7F,0xED1F, + 0xED63,0xEEB5,0xEF4E,0xEF6E,0xEEC4,0xEE78,0xEF19,0xF048, + 0xF17D,0xF1A6,0xF1FE,0xF2C2,0xF3C6,0xF4B0,0xF4F1,0xF556, + 0xF60B,0xF73B,0xF863,0xF988,0xFA28,0xFAB1,0xFB46,0xFC78, + 0xFDD8,0xFF21,0x001C,0x00FE,0x00E8,0x0172,0x028E,0x03DE, + 0x0582,0x0673,0x0682,0x0641,0x0626,0x06F2,0x088A,0x0942, + 0x0973,0x08CE,0x0811,0x07BD,0x0722,0x0524,0x0084,0xF9E1, + 0xF241,0xEA73,0xE341,0xDE8F,0xDE35,0xE26B,0xE8DB,0xEC93, + 0xEAD3,0xE47B,0xDC53,0xD61D,0xD568,0xD7BC,0xDAA4,0xDB42, + 0xD9DC,0xD85F,0xDA2F,0xDF02,0xE4DC,0xE853,0xE955,0xE9C7, + 0xEAC5,0xEBC5,0xECC6,0xEE5C,0xF253,0xF842,0xFE05,0x03FD, + 0x083F,0x09FC,0x0A55,0x0C90,0x109E,0x15E0,0x1A3C,0x1D5F, + 0x1F0B,0x20A9,0x22DE,0x25E7,0x2A7F,0x2FD9,0x3394,0x345E, + 0x3382,0x331C,0x33C3,0x3606,0x37CC,0x3965,0x3B72,0x3C25, + 0x3A7F,0x399B,0x399C,0x3952,0x37A9,0x359B,0x34BF,0x3540, + 0x34A6,0x317A,0x2D1E,0x2A3D,0x29E0,0x2A77,0x2922,0x263F, + 0x21AC,0x1C7F,0x17EF,0x153E,0x1500,0x13B3,0x0FE1,0x0AF0, + 0x06C7,0x0425,0x01C6,0xFEF6,0xFBEF,0xF952,0xF6B0,0xF414, + 0xF0E8,0xEDFE,0xEB78,0xE953,0xE7B0,0xE6C9,0xE64F,0xE440, + 0xE0DF,0xDDD4,0xDD02,0xDDF7,0xDE84,0xDD59,0xDBDF,0xDA5C, + 0xDA03,0xDA25,0xDA89,0xDB87,0xDCAA,0xDC72,0xDCEE,0xDDB5, + 0xDFA1,0xE0CA,0xE122,0xE25D,0xE560,0xE81C,0xE9B9,0xEA6C, + 0xEB06,0xEC6D,0xEEDF,0xF1EB,0xF449,0xF640,0xF737,0xF7A8, + 0xF905,0xFCA2,0x0083,0x00B5,0x02F7,0x048D,0x0520,0x0765, + 0x08E5,0x098A,0x0B32,0x0CC0,0x0E03,0x0EEF,0x0EFF,0x0F2D, + 0x0FEA,0x111D,0x12A9,0x13BC,0x13DA,0x12AC,0x1175,0x119E, + 0x1284,0x132F,0x1271,0x1167,0x106B,0x0FDF,0x0F69,0x0E84, + 0x0D69,0x0C24,0x0B02,0x09CF,0x0936,0x086D,0x0712,0x04E5, + 0x02DD,0x024F,0x027C,0x0203,0x0000,0xFD57,0xFB68,0xFA95, + 0xF9FD,0xF95F,0xF82F,0xF66D,0xF505,0xF430,0xF397,0xF2FD, + 0xF1F2,0xF0EE,0xF01C,0xEF94,0xEF5A,0xEF1A,0xEE45,0xEDAD, + 0xEE9D,0xF08B,0xF008,0xF024,0xEFFA,0xEF19,0xEEA7,0xEEFB, + 0xF007,0xF0C1,0xF02D,0xEFBA,0xF10E,0xF2F6,0xF46E,0xF3D6, + 0xF390,0xF46B,0xF5D1,0xF6FF,0xF73D,0xF856,0xF9A1,0xF950, + 0xF9B0,0xFB95,0xFD66,0xFDD3,0xFDBE,0xFE09,0xFF6A,0x015D, + 0x025D,0x0213,0x01DE,0x020C,0x03CD,0x0543,0x0610,0x064B, + 0x0654,0x0673,0x06FE,0x0761,0x082B,0x0829,0x0595,0x0286, + 0xFFD8,0xFC2C,0xF6E8,0xEF23,0xE4EF,0xDC4C,0xD8E5,0xDCB7, + 0xE46C,0xEB4F,0xEE10,0xEA3C,0xE118,0xD981,0xD54F,0xD40C, + 0xD417,0xD44F,0xD4E4,0xD74B,0xDAE0,0xDFE0,0xE48A,0xE796, + 0xE9F6,0xEA93,0xEA43,0xE999,0xE7D0,0xE6DB,0xE8C1,0xEF22, + 0xF912,0x02A6,0x08CF,0x0A9B,0x0A9D,0x0B1A,0x0C54,0x0EC0, + 0x11D8,0x1437,0x166F,0x1952,0x1DB2,0x23A6,0x297F,0x2E04, + 0x316C,0x3301,0x32B1,0x30E2,0x2EAF,0x2DF6,0x2ED8,0x3223, + 0x36A1,0x3984,0x3A2D,0x39DA,0x38F2,0x379D,0x3626,0x342D, + 0x3271,0x2FFC,0x2D2B,0x2B38,0x2AC9,0x2A40,0x2A1A,0x29DF, + 0x28AB,0x25C3,0x2394,0x1D46,0x15F0,0x1271,0x0FDB,0x0F0B, + 0x0DBA,0x0C21,0x0955,0x06BD,0x038D,0x001E,0xFD3C,0xFA3F, + 0xF60B,0xF130,0xECE3,0xEA7F,0xE8FF,0xE758,0xE6C6,0xE6C1, + 0xE680,0xE4CE,0xE1BB,0xDE11,0xDB57,0xDA2C,0xD99F,0xD97F, + 0xD988,0xD955,0xD906,0xD994,0xDAC0,0xDC3C,0xDCF1,0xDCB6, + 0xDBFE,0xDB98,0xDBF6,0xDCB0,0xDE44,0xE068,0xE3BD,0xE6F5, + 0xE8D6,0xE996,0xEA65,0xEB22,0xECDA,0xEEDF,0xF0FE,0xF2AB, + 0xF47B,0xF689,0xF93D,0xFC7E,0xFF53,0x0153,0x022E,0x0337, + 0x049C,0x0507,0x043A,0x04EC,0x06DF,0x0883,0x0A55,0x0CCA, + 0x0F87,0x1003,0x0F6E,0x0ECF,0x0F40,0x1038,0x1062,0x1080, + 0x10DE,0x10D4,0x11B2,0x1202,0x124E,0x10FD,0x0FEA,0x0FC8, + 0x0FA4,0x0F39,0x0E40,0x0C59,0x0A28,0x08A7,0x08E9,0x09C6, + 0x0B02,0x09AA,0x060D,0x028B,0x006C,0x0042,0x0050,0xFFCB, + 0xFE9B,0xFC62,0xFA95,0xFAE2,0xFAE2,0xFA14,0xF938,0xF5F9, + 0xF45C,0xF532,0xF4F4,0xF333,0xF0B1,0xEF25,0xEF9F,0xF1D1, + 0xF3D3,0xF3F6,0xF19B,0xEE6D,0xED9B,0xEF2B,0xF1E8,0xF332, + 0xF1CF,0xEFFC,0xEF49,0xF049,0xF21D,0xF3CC,0xF46C,0xF3D6, + 0xF34A,0xF47A,0xF614,0xF735,0xF752,0xF721,0xF7D1,0xFACF, + 0xFD73,0xFE03,0xFD0C,0xFBF8,0xFC1F,0xFEBC,0x01E4,0x0350, + 0x0270,0x0140,0x01A9,0x0395,0x05C2,0x06AC,0x064D,0x05E7, + 0x0636,0x0789,0x08FF,0x0971,0x07F4,0x0753,0x08A4,0x0AF0, + 0x0CCC,0x0C1F,0x08D1,0x0512,0x018F,0xFDAB,0xF82A,0xF189, + 0xE8B4,0xE1B3,0xE070,0xE655,0xEEE8,0xF545,0xF4B7,0xEE4E, + 0xE6E4,0xE21B,0xDD87,0xDB99,0xDD38,0xDD47,0xDE98,0xE13F, + 0xE4B8,0xE863,0xEB7F,0xEE14,0xF011,0xF0A7,0xEFC8,0xECD2, + 0xEA73,0xEB15,0xEF24,0xF66C,0xFE78,0x057E,0x0979,0x0B45, + 0x0B55,0x0B17,0x0B7A,0x0D3D,0x0F0E,0x1183,0x1495,0x181B, + 0x1C6F,0x20BC,0x245A,0x2854,0x2BD3,0x2D33,0x2C3E,0x2968, + 0x2714,0x267E,0x27E7,0x2B2B,0x2F49,0x3290,0x33CD,0x3332, + 0x31B1,0x2FC4,0x2D6F,0x2B84,0x2A18,0x2829,0x26A1,0x24F1, + 0x2400,0x2414,0x2460,0x2402,0x2283,0x1F30,0x1B7A,0x171C, + 0x148D,0x1173,0x0F43,0x0E2A,0x0C2C,0x09A2,0x07EC,0x06E6, + 0x04C7,0x018D,0xFE90,0xFB73,0xF782,0xF399,0xF048,0xEEB9, + 0xEDFF,0xEDA4,0xEC8A,0xEB69,0xEB38,0xEA3F,0xE69D,0xE2AB, + 0xE09A,0xE059,0xDFD7,0xDFE8,0xDFD9,0xDF87,0xDF86,0xE023, + 0xE120,0xE230,0xE234,0xE196,0xE0A1,0xE052,0xE130,0xE29F, + 0xE38F,0xE4A6,0xE6D9,0xEA98,0xEDAF,0xED3F,0xEC09,0xED36, + 0xEF9F,0xF183,0xF363,0xF507,0xF6CC,0xF7D4,0xF89D,0xFA56, + 0xFDA7,0x00DE,0x0198,0x00BB,0xFFF0,0x019E,0x0308,0x040E, + 0x0515,0x067C,0x07EA,0x091F,0x0AA5,0x0CBA,0x0D97,0x0CBB, + 0x0B11,0x0A83,0x0BE8,0x0D2D,0x0CF8,0x0BF0,0x0BB1,0x0C1C, + 0x0C55,0x0CEE,0x0D01,0x0C58,0x0AED,0x0958,0x0884,0x0846, + 0x0737,0x0655,0x056C,0x04BF,0x0478,0x0421,0x03A0,0x01FF, + 0x0029,0xFEF9,0xFE63,0xFCFB,0xFB14,0xF958,0xF857,0xF7DF, + 0xF801,0xF7BE,0xF6B0,0xF509,0xF3CD,0xF365,0xF39B,0xF301, + 0xF1B2,0xEF87,0xEF50,0xF0F3,0xF18E,0xF0EC,0xF06C,0xF025, + 0xEF80,0xEFAC,0xF164,0xEF6F,0xF024,0xF0B6,0xF098,0xF108, + 0xF195,0xF18F,0xF1C5,0xF2AF,0xF385,0xF49C,0xF547,0xF55B, + 0xF526,0xF5B6,0xF651,0xF6F0,0xF773,0xF910,0xFAB7,0xFBE9, + 0xFC08,0xFC00,0xFC5E,0xFCF5,0xFD9B,0xFECD,0x0043,0x00D5, + 0x00F2,0x0096,0x00A5,0x01AF,0x0300,0x03C2,0x045F,0x057E, + 0x063F,0x051F,0x0380,0x0347,0x0467,0x059D,0x0665,0x05FC, + 0x03F3,0x009D,0xFD1D,0xFA89,0xFA08,0xF984,0xF8F8,0xF93B, + 0xFA85,0xFC04,0xFCA0,0xFAEB,0xF821,0xF5DB,0xF473,0xF3C9, + 0xF38D,0xF338,0xF1E7,0xF27A,0xF31A,0xF42B,0xF676,0xF825, + 0xF827,0xF7D1,0xF721,0xF688,0xF635,0xF6BB,0xF81E,0xFA68, + 0xFCDB,0xFF13,0x0177,0x0375,0x02F2,0x016B,0x0196,0x025F, + 0x03B0,0x0572,0x0721,0x0862,0x0895,0x09D1,0x0B53,0x0D73, + 0x0F4C,0x1007,0x0EEE,0x0D10,0x0BD2,0x0CA8,0x0F81,0x11A5, + 0x1256,0x11D0,0x11C4,0x1314,0x1303,0x1402,0x12DB,0x10C5, + 0x0F6B,0x0EF3,0x0F9C,0x10A5,0x1044,0x0E6F,0x0CCD,0x0E0C, + 0x1132,0x1242,0x0F8A,0x0B79,0x08C4,0x0792,0x08AB,0x0A2F, + 0x0A9B,0x0957,0x0718,0x053E,0x0542,0x0566,0x04D7,0x0238, + 0x0061,0x005C,0x00A5,0xFFD8,0xFDAC,0xFB47,0xFAD2,0xFC75, + 0xFE2F,0xFD8B,0xFAF5,0xF7D0,0xF5F9,0xF661,0xF77F,0xF827, + 0xF804,0xF6C6,0xF593,0xF612,0xF74F,0xF776,0xF60B,0xF465, + 0xF50F,0xF760,0xF8E6,0xF85E,0xF67F,0xF53B,0xF5FC,0xF758, + 0xF8A7,0xF974,0xF88F,0xF759,0xF663,0xF646,0xF6F0,0xF6F2, + 0xF699,0xF5C8,0xF4E6,0xF45F,0xF3BF,0xF330,0xF28B,0xF274, + 0xF352,0xF52D,0xF4D2,0xF664,0xF5E2,0xF49A,0xF55D,0xF6CB, + 0xF812,0xF899,0xF87E,0xF7C0,0xF74A,0xF74F,0xF76E,0xF713, + 0xF68E,0xF659,0xF5C5,0xF553,0xF4DE,0xF420,0xF335,0xF2A9, + 0xF262,0xF1F5,0xF1BB,0xF11E,0xF08F,0xF021,0xEFCC,0xEF6E, + 0xEEEA,0xEE92,0xEE04,0xED3E,0xEC62,0xEC3C,0xEC38,0xEB6F, + 0xEB1C,0xEAEB,0xEA91,0xEA95,0xEA1F,0xE997,0xE990,0xE90B, + 0xE8DE,0xE89B,0xE859,0xE8B0,0xE8C2,0xE8BC,0xE86E,0xE829, + 0xE7F6,0xE7E2,0xE80E,0xE7F5,0xE808,0xE89F,0xE8D9,0xE9C3, + 0xEB82,0xEBA7,0xEBBA,0xEBBF,0xEBF5,0xEC0A,0xEC17,0xEC72, + 0xECB7,0xECAD,0xED05,0xED8E,0xED90,0xEE2F,0xEED5,0xEF17, + 0xEF64,0xEFFB,0xEFE8,0xF048,0xF1FE,0xF2A6,0xF22E,0xF238, + 0xF34B,0xF35D,0xF3A2,0xF443,0xF4B9,0xF4F2,0xF5A2,0xF558, + 0xF5CE,0xF661,0xF6D8,0xF70C,0xF716,0xF7B6,0xF83F,0xF8AF, + 0xF8E1,0xF91F,0xF957,0xFA73,0xFAAC,0xF97F,0xFA32,0xFAEE, + 0xFB20,0xFB5F,0xFC2F,0xFCF6,0xFCC0,0xFC85,0xFC59,0xFC8B, + 0xFCE3,0xFD24,0xFD80,0xFCEE,0xFCF0,0xFD88,0xFDB7,0xFE27, + 0xFE5E,0xFEC7,0xFEA1,0xFEE9,0xFFB0,0x0008,0x005B,0x00D9, + 0x014C,0x022C,0x02DA,0x035A,0x0384,0x0418,0x049F,0x04CD, + 0x053F,0x0596,0x0612,0x0685,0x06A1,0x06AB,0x0733,0x072B, + 0x074E,0x077B,0x07FE,0x07C7,0x082A,0x0817,0x07CA,0x07DF, + 0x07AD,0x085C,0x088A,0x0887,0x0880,0x085E,0x087D,0x0861, + 0x08DD,0x091F,0x08FB,0x08CD,0x0842,0x08DA,0x08F3,0x0970, + 0x09B1,0x095F,0x09D5,0x0AD2,0x0A34,0x0A77,0x0A94,0x0AD4, + 0x0A3A,0x0C0F,0x0BA5,0x0B08,0x0C21,0x0BE0,0x0B7F,0x0C2E, + 0x0CFF,0x0CB6,0x0D16,0x0D37,0x0D77,0x0D49,0x0DDC,0x0DD4, + 0x0DE4,0x0DB5,0x0DB4,0x0DF0,0x0D9F,0x0E00,0x0DC5,0x0DE0, + 0x0DD6,0x0D90,0x0D6B,0x0D9A,0x0D88,0x0D02,0x0D25,0x0D30, + 0x0D22,0x0D1A,0x0C9D,0x0C11,0x0BDD,0x0BF4,0x0C4D,0x0C25, + 0x0C1C,0x0C41,0x0C47,0x0C3B,0x0C20,0x0C66,0x0C41,0x0C4F, + 0x0C7D,0x0C66,0x0C07,0x0C3A,0x0CA3,0x0C9F,0x0C7F,0x0C4A, + 0x0C7B,0x0C65,0x0C69,0x0C61,0x0C44,0x0C75,0x0C65,0x0C09, + 0x0C2C,0x0A7E,0x097F,0x0A27,0x0A9B,0x0AE2,0x0B28,0x0AD2, + 0x0A92,0x0A4B,0x0A70,0x0AA4,0x0AC3,0x0AC3,0x0AE3,0x0AB2, + 0x0A9A,0x0A70,0x0A51,0x0ADD,0x0A2B,0x0A3C,0x0ABC,0x0A7F, + 0x0A25,0x0A33,0x0A57,0x0AAC,0x0AB6,0x0AFD,0x0A9C,0x0ABF, + 0x0A7D,0x0A5B,0x0A8C,0x0A3E,0x0A5A,0x0AC8,0x0B43,0x0AE0, + 0x0AB4,0x0A5D,0x0A31,0x0A6A,0x0AF0,0x0C12,0x0B5D,0x0A89, + 0x09AC,0x0974,0x0983,0x09CC,0x09C8,0x095E,0x0999,0x09E8, + 0x0A2E,0x0A1A,0x09FD,0x0A53,0x0A33,0x0A09,0x0A2D,0x0A3A, + 0x0A3B,0x09EA,0x098B,0x095A,0x096F,0x096E,0x0987,0x093F, + 0x08DB,0x08B4,0x0871,0x0879,0x0827,0x07E3,0x081C,0x0846, + 0x0828,0x07B3,0x078E,0x074F,0x06D2,0x06F4,0x073F,0x07A6, + 0x0735,0x06E7,0x06B9,0x06B1,0x0687,0x0674,0x05F9,0x056C, + 0x059C,0x0586,0x0538,0x058B,0x0576,0x0529,0x04D2,0x04E0, + 0x04F9,0x0530,0x051B,0x04A0,0x0463,0x0443,0x0428,0x03EC, + 0x041E,0x03D8,0x038F,0x03A9,0x041B,0x0426,0x03BB,0x03C3, + 0x046A,0x034F,0x0381,0x04E1,0x03A0,0x032B,0x036A,0x0356, + 0x036F,0x0389,0x0375,0x0356,0x0304,0x02AB,0x026C,0x0285, + 0x0268,0x0274,0x02A5,0x0293,0x0260,0x0222,0x01C0,0x01D4, + 0x01F7,0x0210,0x0272,0x0286,0x0239,0x01D7,0x0157,0x0142, + 0x013F,0x017D,0x0170,0x019B,0x01A3,0x0181,0x0137,0x0166, + 0x0153,0x00F1,0x00EE,0x0103,0x012F,0x0113,0x0134,0x0133, + 0x00A1,0xFF33,0xFF41,0xFF30,0xFF16,0xFF03,0xFED3,0xFEF0, + 0xFEA4,0xFED4,0xFF1E,0xFF19,0xFF05,0xFED1,0xFEBF,0xFF0E, + 0xFF28,0xFF76,0xFF8E,0xFE8C,0xFD90,0xFE97,0xFF60,0xFF77, + 0xFF79,0xFFBD,0xFF3B,0xFEE7,0xFE51,0xFE47,0xFE70,0xFDF7, + 0xFDF2,0xFDB8,0xFC8F,0xFCE2,0xFD00,0xFCDE,0xFC7C,0xFCBD, + 0xFD10,0xFD04,0xFD44,0xFD44,0xFD3A,0xFD2A,0xFCF4,0xFD01, + 0xFDCE,0xFDE4,0xFDAC,0xFD4E,0xFD80,0xFE10,0xFE00,0xFDEC, + 0xFDF2,0xFDFE,0xFE32,0xFDF1,0xFDE0,0xFDF8,0xFE03,0xFDE0, + 0xFE02,0xFE2C,0xFE44,0xFDF0,0xFD94,0xFDCC,0xFD6A,0xFD7C, + 0xFDAD,0xFDFA,0xFDE6,0xFDD7,0xFDDE,0xFE07,0xFDF4,0xFDE5, + 0xFD6A,0xFD65,0xFD90,0xFDF4,0xFE4C,0xFDCA,0xFDCD,0xFDA5, + 0xFDCB,0xFE8C,0xFEA8,0xFE67,0xFE6C,0xFE0C,0xFD90,0xFE4D, + 0xFFF8,0xFDFD,0xFE6B,0xFE81,0xFDFC,0xFEBD,0xFEE9,0xFE85, + 0xFE96,0xFEE7,0xFEE7,0xFF22,0xFEEE,0xFF33,0xFF6C,0xFF9B, + 0xFF7B,0xFF76,0xFFED,0xFFFF,0xFF7E,0xFF9B,0xFF87,0xFF4E, + 0xFF97,0xFFB1,0xFF4D,0xFEF7,0xFF3D,0xFF17,0xFF22,0xFE93, + 0xFE23,0xFE6D,0xFE7F,0xFEA5,0xFEE0,0xFEF5,0xFEFF,0xFEB1, + 0xFE66,0xFEAA,0xFEEB,0xFEF8,0xFF19,0xFEAA,0xFEB2,0xFF0B, + 0xFF01,0xFEA5,0xFEEB,0xFEDF,0xFEC5,0xFEAD,0xFE8F,0xFE54, + 0xFE24,0xFE7C,0xFE85,0xFE8B,0xFEFE,0xFEDB,0xFEB8,0xFE75, + 0xFD3D,0xFE8C,0xFFE3,0x0040,0x0052,0x011A,0x0217,0x03B0, + 0x04F7,0x0581,0x0610,0x06C5,0x069C,0x06DB,0x0731,0x0783, + 0x0790,0x07CF,0x0785,0x0671,0x06FC,0x07C6,0x07A5,0x080E, + 0x08D3,0x0946,0x0916,0x09EE,0x0AA9,0x0B25,0x0B48,0x0C63, + 0x0EE1,0x1052,0x104E,0x0EB3,0x0E19,0x0F50,0x1218,0x13EE, + 0x146B,0x1479,0x13FF,0x147F,0x1437,0x13A0,0x1540,0x175C, + 0x17CC,0x16B9,0x162A,0x15C5,0x164B,0x16CA,0x1803,0x19CE, + 0x1B1D,0x1AD3,0x19F2,0x1900,0x18B1,0x18F9,0x1838,0x171A, + 0x1541,0x12A6,0x0FE9,0x0DDD,0x0D35,0x0F20,0x11A6,0x134D, + 0x1305,0x106C,0x0D32,0x0AD2,0x0AA6,0x0D0C,0x100D,0x1172, + 0x11B2,0x113A,0x1132,0x1245,0x1315,0x1354,0x13CA,0x14CD, + 0x1596,0x16DC,0x17D8,0x180A,0x1799,0x17B0,0x1933,0x1B67, + 0x1B66,0x1A0C,0x1801,0x174D,0x18B8,0x1AB2,0x1B98,0x19FB, + 0x1715,0x14D5,0x1469,0x1639,0x16E7,0x1568,0x1287,0x0FE4, + 0x0F62,0x0ECF,0x0DCE,0x0C21,0x0A07,0x0968,0x0902,0x07A1, + 0x0318,0x0278,0x01DC,0x00B0,0x00E7,0x0023,0xFEB6,0xFC46, + 0xF9E2,0xF8E1,0xFA06,0xFB41,0xF9EA,0xF7D3,0xF6D1,0xF6BB, + 0xF739,0xF728,0xF67D,0xF687,0xF674,0xF704,0xF7B2,0xF7CE, + 0xF719,0xF6B6,0xF766,0xF950,0xFACB,0xFA8A,0xF8D6,0xF829, + 0xF8D0,0xFA7A,0xFBC5,0xFC5F,0xFC1A,0xFB72,0xFA7E,0xF9F6, + 0xFADD,0xFC09,0xFC7B,0xFBD0,0xFAF9,0xFA72,0xFA5A,0xF95A, + 0xF875,0xF85A,0xF858,0xF848,0xF77E,0xF667,0xF5C6,0xF588, + 0xF4C0,0xF369,0xF24D,0xF1F7,0xF23A,0xF297,0xF388,0xF234, + 0xF155,0xF02C,0xEF45,0xEEE5,0xEF37,0xEF8C,0xEEB6,0xED61, + 0xEC44,0xEC19,0xEC81,0xEC83,0xEC90,0xEC2B,0xEC94,0xECC0, + 0xECA1,0xEBFB,0xEC90,0xED07,0xED86,0xEE16,0xEF23,0xEF21, + 0xEE95,0xEEAD,0xEF14,0xF00D,0xF0B4,0xF11F,0xF165,0xF134, + 0xF11F,0xF134,0xF19E,0xF226,0xF1F6,0xF177,0xF125,0xF1BF, + 0xF25D,0xF2EB,0xF1E8,0xF0B7,0xF11A,0xF224,0xF1E1,0xF19B, + 0xF1B1,0xF13C,0xF05F,0xEFB1,0xEFC0,0xEF3E,0xEE26,0xED55, + 0xED93,0xED9D,0xED59,0xEBEF,0xEAA2,0xEAA8,0xEB72,0xEBDB, + 0xEB50,0xEA89,0xEA19,0xEA01,0xEAD8,0xEC5E,0xECAE,0xEBDC, + 0xEB1D,0xEC0E,0xED37,0xEDA1,0xECC4,0xEC8C,0xEE14,0xEFE9, + 0xF05A,0xEF0F,0xEE55,0xEEA0,0xEF9F,0xF075,0xF13D,0xF221, + 0xF25B,0xF176,0xF0E6,0xF148,0xF302,0xF426,0xF414,0xF32B, + 0xF337,0xF51D,0xF593,0xF4D1,0xF48F,0xF493,0xF4B4,0xF47D, + 0xF440,0xF4E5,0xF4CC,0xF559,0xF4F9,0xF448,0xF489,0xF4CD, + 0xF42B,0xF3EB,0xF47D,0xF5F1,0xF6E2,0xF5F1,0xF308,0xF346, + 0xF2DB,0xF0AC,0xEF22,0xEA15,0xE2A3,0xDA5C,0xD2C5,0xCF53, + 0xD288,0xDA67,0xE2DB,0xE650,0xE2C6,0xDA14,0xD1FD,0xCE9F, + 0xD2D8,0xDC42,0xE5AA,0xEAD6,0xEAA4,0xE973,0xE9EB,0xECBB, + 0xF1C3,0xF71A,0xFC50,0x0067,0x02BF,0x0410,0x05C8,0x09AD, + 0x0F89,0x1606,0x1B87,0x1D69,0x1B60,0x17A0,0x16F4,0x1B7A, + 0x222B,0x26B6,0x2729,0x23FF,0x1F9F,0x1CB2,0x1B79,0x1BE9, + 0x1C9D,0x1C3A,0x19CB,0x1514,0x1146,0x0E92,0x0C60,0x09A9, + 0x066B,0x0382,0x01BB,0xFF1C,0xFA5B,0xF4CC,0xF0F3,0xEEE9, + 0xEEBF,0xEE68,0xEBBC,0xE7FC,0xE422,0xE236,0xE33E,0xE51B, + 0xE614,0xE556,0xE3B5,0xE339,0xE435,0xE604,0xE7DC,0xE940, + 0xEB42,0xEDF9,0xEF15,0xF04C,0xF1C4,0xF42F,0xF807,0xFB9D, + 0xFDF6,0xFED2,0xFFAE,0x01CD,0x04B7,0x07E1,0x0A61,0x0BB4, + 0x0CB2,0x0DA8,0x0E6A,0x0FC3,0x1082,0x1116,0x11BF,0x12A8, + 0x126B,0x10E4,0x0F03,0x0EC3,0x0DE8,0x0DBD,0x0D49,0x0BA7, + 0x087B,0x055E,0x042F,0x03E8,0x0322,0x020D,0x0080,0xFDED, + 0xFB49,0xFA5C,0xF994,0xF866,0xF6E8,0xF56C,0xF441,0xF2ED, + 0xF157,0xF056,0xF038,0xF137,0xF1F2,0xF0AA,0xEEF7,0xEE34, + 0xEF3E,0xF102,0xF1AD,0xF2B9,0xF35D,0xF3D3,0xF4E2,0xF674, + 0xF7CF,0xF8D8,0xF9EF,0xFB3C,0xFD56,0xFF60,0x00AD,0x0131, + 0x0194,0x0305,0x04D1,0x06DC,0x0794,0x0734,0x0711,0x07F5, + 0x09A2,0x0B53,0x0B85,0x0A61,0x08C8,0x0889,0x09F2,0x0B91, + 0x0BAF,0x09E6,0x081D,0x06D0,0x066C,0x05B0,0x04B1,0x03DD, + 0x02BC,0x015A,0x013E,0x008E,0xFED4,0xFCE2,0xFC5E,0xFAF9, + 0xFAD6,0xFCDD,0xFAE4,0xF8EA,0xF7D6,0xF753,0xF7BC,0xF895, + 0xF8B6,0xF82E,0xF74E,0xF721,0xF7D3,0xF8B3,0xF900,0xF89A, + 0xF7E0,0xF8BA,0xFA7F,0xFC91,0xFD10,0xFC90,0xFBF4,0xFD3B, + 0xFF47,0x009B,0x0125,0x0147,0x0120,0x01EB,0x0331,0x04F3, + 0x062C,0x0618,0x0583,0x055F,0x05DD,0x06B2,0x06F2,0x0711, + 0x06B4,0x065C,0x06A1,0x0687,0x056B,0x044D,0x0427,0x04ED, + 0x057C,0x0413,0x0270,0x0112,0x00CA,0x01CD,0x018C,0xFFEB, + 0xFE55,0xFD7A,0xFD2B,0xFC45,0xF98B,0xF596,0xED27,0xE1C2, + 0xD72E,0xCF80,0xCD30,0xD28F,0xDCB4,0xE663,0xE86D,0xE0AF, + 0xD3E1,0xCABB,0xCA6E,0xD31B,0xDE84,0xE64B,0xE9BF,0xEB39, + 0xEC92,0xEFED,0xF4F3,0xFA18,0xFF49,0x0536,0x0A62,0x0DFE, + 0x117F,0x15EB,0x1C1D,0x23CB,0x2BE8,0x30AC,0x2FC9,0x2BA2, + 0x29CF,0x2CE0,0x3443,0x3A97,0x3D2A,0x3BB7,0x3765,0x3305, + 0x3052,0x2ECF,0x2D3F,0x2CB4,0x2C85,0x29BC,0x248A,0x1D60, + 0x171C,0x1334,0x1185,0x10B6,0x0DC1,0x0769,0xFDF6,0xF607, + 0xF1EF,0xF110,0xF1E3,0xF090,0xEC47,0xE66B,0xE0F6,0xDD56, + 0xDCDA,0xDDED,0xDF04,0xDF15,0xDE26,0xDD27,0xDCD5,0xDD85, + 0xDF14,0xE190,0xE4B6,0xE7E5,0xE9EF,0xEB6A,0xECF0,0xF011, + 0xF41D,0xF875,0xFC2B,0xFE4C,0x0086,0x02FE,0x059D,0x0872, + 0x0B7A,0x0EAB,0x113F,0x128D,0x13FE,0x14EC,0x1635,0x16EF, + 0x1711,0x1759,0x181A,0x18D4,0x183D,0x161F,0x1385,0x1262, + 0x127B,0x114C,0x0F14,0x0C2E,0x08C0,0x0636,0x046A,0x02D0, + 0x00CD,0xFDB9,0xFA89,0xF87C,0xF6BE,0xF3A1,0xF1AE,0xF11D, + 0xEDB0,0xED1F,0xEC25,0xEA63,0xE911,0xE81D,0xE79C,0xE81B, + 0xE8CE,0xE869,0xE810,0xE7F8,0xE9AC,0xEB96,0xEDE8,0xEED0, + 0xF00F,0xF1D8,0xF32D,0xF413,0xF576,0xF854,0xFBB5,0xFE84, + 0xFFBC,0x0051,0x011F,0x02B5,0x052A,0x0775,0x091D,0x0A0A, + 0x0B0E,0x0BDD,0x0CB6,0x0CE8,0x0D1F,0x0CF7,0x0DB4,0x0F74, + 0x107C,0x0FB6,0x0D4D,0x0A65,0x0952,0x09E4,0x0AD4,0x0B04, + 0x0932,0x066C,0x03A2,0x0151,0x00FB,0x0127,0xFFF6,0xFE02, + 0xFBE3,0xFA88,0xFA19,0xF8E9,0xF6FD,0xF583,0xF4A2,0xF401, + 0xF3E8,0xF2BC,0xF04C,0xEF19,0xF07B,0xF326,0xF4D5,0xF4E8, + 0xF353,0xF23A,0xF313,0xF558,0xF811,0xF9B2,0xF9D9,0xFA14, + 0xFBD5,0xFD07,0xFDFC,0xFFE9,0x014D,0x0219,0x0304,0x0482, + 0x05AA,0x063B,0x06A0,0x06D0,0x0884,0x0B1C,0x0C90,0x0C58, + 0x0A76,0x0981,0x0ADF,0x0C99,0x0D12,0x0C41,0x0B2C,0x0A51, + 0x09B2,0x08DA,0x0950,0x0983,0x07CE,0x077E,0x0627,0x03FD, + 0x0234,0x0128,0x01A6,0x028B,0x0254,0x017B,0xFFB3,0xFC67, + 0xF800,0xF1C4,0xE9AD,0xDF9C,0xD57C,0xCEC6,0xCDBA,0xD329, + 0xDC06,0xE3C4,0xE5CD,0xDF70,0xD3A8,0xCAC5,0xCA2E,0xD2DF, + 0xE002,0xEAA1,0xEF5D,0xF05D,0xEFF2,0xF165,0xF641,0xFD99, + 0x05B7,0x0B88,0x0FAC,0x1335,0x179F,0x1CC3,0x224B,0x28CF, + 0x2FD4,0x3480,0x3582,0x3351,0x314D,0x3346,0x3925,0x3F1B, + 0x3FC8,0x3FB3,0x3B21,0x3553,0x3315,0x3319,0x341C,0x334F, + 0x2FB3,0x2A96,0x24B1,0x1FDC,0x1B9F,0x17D7,0x1417,0x10DC, + 0x0C83,0x07B2,0x01DB,0xFADD,0xF54D,0xF347,0xF2FF,0xF07E, + 0xEDDD,0xE82A,0xE17B,0xDE66,0xDE10,0xDFF8,0xE229,0xE240, + 0xE04F,0xDD73,0xDCAC,0xDE54,0xE1B7,0xE565,0xE82E,0xEA1C, + 0xEB9C,0xEC73,0xEE01,0xF1A1,0xF64A,0xFACC,0xFEC1,0x025C, + 0x04E2,0x05D2,0x06ED,0x0986,0x0E52,0x134A,0x1634,0x1718, + 0x167F,0x162C,0x169E,0x185D,0x1A9F,0x1C91,0x1D15,0x1C1D, + 0x19EA,0x16BF,0x144E,0x13CE,0x141B,0x143D,0x1289,0x0EE1, + 0x0A61,0x064C,0x0472,0x033A,0x0175,0xFF76,0xFC88,0xF96B, + 0xF5F1,0xF236,0xF037,0xF02F,0xF0FF,0xF10C,0xEE6F,0xEC57, + 0xEA93,0xE8F9,0xE85B,0xE922,0xEAAB,0xEB4C,0xEAF4,0xEA0C, + 0xEA2D,0xEBD4,0xED9A,0xEF6B,0xF118,0xF28B,0xF481,0xF5C4, + 0xF690,0xF957,0xFBF4,0xFDCF,0xFFAF,0x01AF,0x02E0,0x0470, + 0x05C9,0x06DB,0x08F9,0x0AB9,0x0C68,0x0CCC,0x0B8A,0x0B70, + 0x0CD7,0x0E13,0x0EB4,0x0DF4,0x0D28,0x0C46,0x0A92,0x098F, + 0x0976,0x094F,0x0759,0x0594,0x03FE,0x0269,0x0123,0xFFBE, + 0xFDA0,0xFC3A,0xFBFB,0xFB78,0xF90E,0xF5B1,0xF33C,0xF25A, + 0xF0FC,0xF0FB,0xF176,0xF0C1,0xEF2C,0xECD5,0xEC27,0xED08, + 0xEE73,0xEF4D,0xEF39,0xEEFA,0xEF7F,0xF069,0xF107,0xF147, + 0xF20A,0xF3A3,0xF5BC,0xF756,0xF7F2,0xF8CC,0xF966,0xFAB3, + 0xFC65,0xFE2E,0x001D,0x010B,0x00C4,0x0027,0x011A,0x0394, + 0x064E,0x07CF,0x0763,0x063F,0x05A4,0x05F5,0x06B0,0x0765, + 0x0889,0x088D,0x07E3,0x06BE,0x05D5,0x055E,0x04BE,0x0491, + 0x04E4,0x0406,0x02B1,0x00E2,0xFFC7,0xFFBD,0xFF25,0xFED4, + 0xFEB0,0xFD6E,0xFB41,0xF77F,0xF2C9,0xEBD2,0xE490,0xD925, + 0xCEA2,0xCA89,0xCB3B,0xD236,0xDC7C,0xE478,0xE33E,0xD8B8, + 0xCB33,0xC49F,0xC945,0xD5F0,0xE2C6,0xEA4E,0xED02,0xECC5, + 0xED09,0xEF80,0xF62D,0xFE08,0x0588,0x0B8B,0x0F99,0x11FF, + 0x145A,0x18E4,0x20F7,0x2A66,0x324E,0x34F4,0x31A2,0x2D57, + 0x2CB8,0x3232,0x3A18,0x3EA8,0x3F49,0x3DF4,0x37E4,0x325C, + 0x308C,0x3151,0x31AC,0x2FE8,0x2C88,0x27E0,0x22AF,0x1CEA, + 0x1782,0x138C,0x10F3,0x0E8E,0x0A2A,0x03FC,0xFCA3,0xF605, + 0xF270,0xF20B,0xF21C,0xF0AD,0xEC44,0xE504,0xDD2D,0xDA6E, + 0xDC65,0xDF59,0xE146,0xDFAD,0xDD36,0xDB88,0xDB38,0xDD51, + 0xE098,0xE427,0xE6D9,0xE811,0xEA21,0xED02,0xF00B,0xF374, + 0xF6B6,0xF958,0xFD43,0x01E5,0x050D,0x06DC,0x08E3,0x0BBE, + 0x0FCA,0x14A4,0x1747,0x16A0,0x15F8,0x16C6,0x1935,0x1BEA, + 0x1D43,0x1D5B,0x1CAD,0x1B37,0x1955,0x1824,0x17B1,0x1717, + 0x1525,0x132A,0x11FB,0x0EA9,0x0B23,0x0810,0x058F,0x03CA, + 0x01A1,0xFEA6,0xFC34,0xF9A3,0xF748,0xF59B,0xF489,0xF389, + 0xF209,0xEF11,0xEC71,0xEB19,0xEAB4,0xEB0C,0xEB6D,0xEB47, + 0xEB19,0xEA2B,0xE9AF,0xEAA3,0xEC22,0xED86,0xEEA2,0xEF1A, + 0xF0FA,0xF407,0xF727,0xF855,0xF877,0xF967,0xFBA9,0xFF78, + 0x032C,0x0518,0x0522,0x05C3,0x0729,0x08E0,0x0B64,0x0DB1, + 0x0E36,0x0E52,0x0E12,0x0EA2,0x0FD5,0x0FF9,0x0F38,0x0F29, + 0x0F53,0x0F2A,0x0E20,0x0BF3,0x09F3,0x0958,0x09A7,0x096F, + 0x07A8,0x057F,0x02C7,0x0044,0xFEB0,0xFE86,0xFEEC,0xFE3E, + 0xFB5F,0xF841,0xF5DC,0xF4FE,0xF5B1,0xF61A,0xF4C2,0xF32C, + 0xF39B,0xF1F9,0xF1F5,0xF2CE,0xF37D,0xF3C4,0xF3EE,0xF45E, + 0xF572,0xF663,0xF61E,0xF5E8,0xF717,0xF992,0xFB61,0xFB8A, + 0xFB10,0xFB84,0xFD5E,0x0004,0x01F1,0x0270,0x02E4,0x030E, + 0x040E,0x0563,0x0673,0x0809,0x08A4,0x0910,0x08FB,0x0888, + 0x08AE,0x08E1,0x0935,0x09CF,0x09BA,0x0953,0x07FF,0x071A, + 0x06B3,0x06DF,0x06BF,0x05A8,0x03EE,0x0264,0x0113,0xFFB8, + 0xFEB9,0xFF3D,0xFFD6,0xFF26,0xFCCE,0xF9A8,0xF580,0xF04E, + 0xE8FD,0xDF52,0xD4C1,0xCBFE,0xCA9E,0xCE8D,0xD841,0xE2E7, + 0xE760,0xE1D3,0xD4FB,0xC989,0xC5FD,0xCBE5,0xD7BE,0xE344, + 0xEA82,0xEEBD,0xF0F6,0xF23E,0xF3A1,0xF621,0xFA84,0x0114, + 0x0995,0x111B,0x1576,0x188A,0x1CDE,0x2333,0x2A77,0x30E9, + 0x32E4,0x300E,0x2C7A,0x2CB5,0x3291,0x3AFA,0x3EBD,0x3EF2, + 0x3CF9,0x362E,0x30DE,0x2E90,0x2E54,0x2DF8,0x2CC7,0x2B0B, + 0x26E9,0x2037,0x1906,0x13DE,0x0FD3,0x0D50,0x0B25,0x079A, + 0x0178,0xFA04,0xF2F1,0xEF1D,0xEE5B,0xEE76,0xEC5A,0xE5F7, + 0xDEDA,0xDB0C,0xDA01,0xDBBD,0xDD72,0xDDA7,0xDC84,0xDBC5, + 0xDBE4,0xDBF2,0xDC35,0xDD72,0xE02E,0xE4E0,0xE9E1,0xED2B, + 0xEDB2,0xED98,0xEF2D,0xF424,0xFADF,0xFFDD,0x017B,0x0219, + 0x03B5,0x078A,0x0C27,0x0FCC,0x122F,0x138A,0x14B3,0x1623, + 0x17BD,0x18CF,0x1931,0x18B8,0x18AA,0x1A89,0x1BC2,0x1A5B, + 0x168C,0x12D8,0x1162,0x1153,0x10D9,0x0E5B,0x0AAD,0x06CD, + 0x03B6,0x01CE,0x008A,0xFE4A,0xFB27,0xF702,0xF4D5,0xF423, + 0xF24C,0xEF4B,0xEC94,0xEB02,0xE9CF,0xE9BC,0xE9E6,0xE5FB, + 0xE560,0xE59D,0xE62C,0xE6E9,0xE784,0xE6BA,0xE682,0xE7E3, + 0xEAA8,0xEDED,0xEF1C,0xEE88,0xEEDA,0xF191,0xF513,0xF7B1, + 0xF8E9,0xFA55,0xFD07,0xFFCA,0x0190,0x032A,0x04E4,0x0684, + 0x0799,0x08E9,0x0AB2,0x0C23,0x0D64,0x0CF1,0x0D42,0x0DCB, + 0x0E09,0x0E2B,0x0E0C,0x0DAD,0x0C4D,0x0A76,0x09A7,0x092D, + 0x08C5,0x0803,0x06B7,0x0531,0x034B,0x0121,0xFEF2,0xFD0F, + 0xFCDD,0xFC98,0xFB8E,0xF929,0xF5C9,0xF403,0xF39C,0xF407, + 0xF3D9,0xF2ED,0xF1D5,0xF077,0xEF90,0xEE74,0xECE5,0xED7B, + 0xEE43,0xEF43,0xEF79,0xF036,0xF12B,0xF23D,0xF2B0,0xF36B, + 0xF51E,0xF73F,0xF8CE,0xF990,0xFA58,0xFBA2,0xFD61,0x0036, + 0x010D,0x01B5,0x039A,0x0469,0x0417,0x054B,0x073F,0x0860, + 0x08AD,0x09E6,0x0AB8,0x0A73,0x0998,0x091B,0x09F4,0x0B21, + 0x0AEE,0x09B1,0x08B6,0x07FF,0x07E8,0x07C3,0x074C,0x05DD, + 0x03E3,0x03C6,0x040F,0x02B0,0x00BF,0xFE95,0xFCEC,0xFD7C, + 0xFE2A,0xFC15,0xF7D3,0xF09E,0xE70C,0xDBF7,0xD148,0xC9E3, + 0xC910,0xCF7A,0xDD5F,0xEBA4,0xEFAC,0xE5EB,0xD25C,0xC383, + 0xC095,0xC71F,0xDA79,0xEBC3,0xF678,0xF997,0xF7F8,0xF525, + 0xF3D2,0xF4D1,0xF919,0x0158,0x0C46,0x1654,0x1E29,0x23A2, + 0x287E,0x2D47,0x3088,0x3100,0x2DF1,0x29AF,0x2846,0x2E04, + 0x3A1B,0x402D,0x3F8E,0x3FF3,0x3DED,0x3346,0x2A94,0x2680, + 0x2788,0x2BBB,0x3098,0x3212,0x2EEA,0x27A5,0x1D04,0x11E3, + 0x09F2,0x061C,0x04E8,0x037F,0x0144,0xFE59,0xFBE1,0xF7F2, + 0xF416,0xEEE3,0xE7BC,0xE0B2,0xDC59,0xDB16,0xDC52,0xE2B9, + 0xE63F,0xE6CE,0xE5EC,0xE25F,0xDD15,0xD8B6,0xD7E1,0xDD03, + 0xE5DD,0xEE9B,0xF398,0xF49E,0xF372,0xF27F,0xF379,0xF685, + 0xFADC,0xFF93,0x036A,0x0708,0x0B98,0x10E3,0x1534,0x1612, + 0x143D,0x12C1,0x126F,0x13DD,0x16B5,0x1A70,0x1DF6,0x1FDB, + 0x1FF1,0x1E30,0x1B23,0x1721,0x12A1,0x0FC0,0x0F35,0x10B2, + 0x1280,0x12BC,0x102C,0x0B81,0x05EB,0x00B4,0xFC93,0xFA29, + 0xF8BC,0xF84B,0xF843,0xF754,0xF508,0xF1C1,0xEEBA,0xEC40, + 0xEAB3,0xE90D,0xE7D0,0xE883,0xEA8A,0xEB71,0xED18,0xEE3C, + 0xEDC4,0xEBDF,0xEA3B,0xEA5E,0xEBE6,0xEEB3,0xF1D4,0xF537, + 0xF7C6,0xF9AF,0xFABB,0xFABF,0xFAF3,0xFBFE,0xFD77,0xFFA5, + 0x041E,0x0822,0x09F7,0x0A7C,0x0AD7,0x0A66,0x0A04,0x0A7E, + 0x0B6B,0x0D52,0x0E5C,0x0E55,0x0E66,0x0E41,0x0DB9,0x0D27, + 0x0C11,0x0A8C,0x0859,0x069D,0x05D4,0x050C,0x051C,0x0479, + 0x0216,0x01E3,0x0001,0xFC71,0xF8E7,0xF740,0xF73D,0xF816, + 0xF8E3,0xF835,0xF5E0,0xF294,0xF070,0xF008,0xEF7A,0xEDBC, + 0xECEC,0xEDF1,0xEFC4,0xF122,0xF154,0xEFFD,0xEE10,0xED97, + 0xEF97,0xF283,0xF4D3,0xF566,0xF5AC,0xF70F,0xF8B8,0xF933, + 0xF8D0,0xF97F,0xFB62,0xFE50,0x00EF,0x0248,0x0242,0x01F4, + 0x0269,0x0412,0x0626,0x0723,0x0667,0x0521,0x0527,0x06C1, + 0x0838,0x08C1,0x0771,0x0624,0x05CE,0x0666,0x061A,0x049F, + 0x02DA,0x012D,0x00F6,0x01EB,0x027D,0x0191,0xFEC3,0xFC3A, + 0xFA41,0xFA6C,0xFACE,0xFB8B,0xFABD,0xF722,0xF207,0xEA5C, + 0xDFD9,0xD48E,0xC98E,0xC301,0xC494,0xD1B8,0xDFB0,0xE8CC, + 0xE84C,0xDAD0,0xC957,0xBFFB,0xBF75,0xC78C,0xDA3D,0xEB8F, + 0xF601,0xF7ED,0xF4A3,0xF0AB,0xEFD5,0xF1CA,0xF7FC,0x01A1, + 0x0C84,0x1617,0x1C78,0x2148,0x26C5,0x2CBA,0x2F32,0x2D58, + 0x2969,0x2631,0x2721,0x2E71,0x3A8A,0x3F4E,0x3EAB,0x3F95, + 0x3902,0x2C40,0x259A,0x24F2,0x28EE,0x2E5B,0x3188,0x306E, + 0x2A23,0x20AE,0x16B3,0x0DC7,0x07F7,0x04F3,0x02DF,0x00B9, + 0xFE72,0xFB5E,0xF88F,0xF57B,0xF15C,0xEB61,0xE430,0xDD58, + 0xD93E,0xD966,0xDC88,0xE0BF,0xE393,0xE2CD,0xE05E,0xDC00, + 0xD6AE,0xD3F4,0xD5E7,0xDCA2,0xE53A,0xEC8B,0xF0A6,0xF103, + 0xF019,0xF010,0xF19F,0xF57B,0xFA4D,0xFE97,0x025C,0x06CE, + 0x0A93,0x0EE5,0x1361,0x15C3,0x1519,0x13A7,0x1275,0x12DA, + 0x15A5,0x1A10,0x1E5B,0x219F,0x20F4,0x1CF7,0x1797,0x13E2, + 0x11D7,0x118C,0x1228,0x137D,0x1337,0x0FD7,0x0A8F,0x0713, + 0x05F7,0x02EC,0xFEC0,0xFA44,0xF724,0xF5BD,0xF52C,0xF571, + 0xF510,0xF3A4,0xF0AD,0xEBA6,0xE80F,0xE641,0xE69B,0xE87C, + 0xEAAC,0xEC52,0xED54,0xEC9A,0xEACD,0xE8EC,0xE7E7,0xE8C0, + 0xEB82,0xEFB7,0xF3B5,0xF62A,0xF719,0xF8A2,0xFA8F,0xFBBA, + 0xFBF4,0xFCD3,0xFEFC,0x0221,0x0575,0x07FF,0x0987,0x0A0D, + 0x0A9F,0x0BB2,0x0CF9,0x0DB5,0x0CDC,0x0B9D,0x0C45,0x0EB9, + 0x1117,0x11BE,0x1014,0x0D25,0x0AF8,0x0A35,0x0AC0,0x0A67, + 0x08B0,0x0706,0x05DD,0x0582,0x0489,0x02C8,0x006D,0xFDB9, + 0xFB90,0xFA25,0xF9F9,0xF9D3,0xF8F5,0xF702,0xF518,0xF45D, + 0xF441,0xF2AE,0xF0C8,0xF07E,0xF296,0xF31E,0xF3AA,0xF430, + 0xF166,0xF0FE,0xF2DE,0xF50E,0xF5F3,0xF55B,0xF53D,0xF670, + 0xF8E6,0xFB65,0xFD4C,0xFDB7,0xFD88,0xFDE4,0x0006,0x0257, + 0x02E2,0x02F3,0x037E,0x05F3,0x0854,0x0957,0x08E4,0x07ED, + 0x073C,0x0781,0x0910,0x0B14,0x0C17,0x0B4D,0x0A16,0x0964, + 0x089F,0x07B7,0x0683,0x063B,0x068F,0x06FE,0x06E3,0x0588, + 0x030C,0x010A,0xFFDF,0xFFDC,0x00B0,0x0090,0xFE92,0xFBEB, + 0xF98C,0xF7AC,0xF538,0xF063,0xEA3F,0xE519,0xE2CC,0xE5AB, + 0xEBEA,0xF264,0xF4C7,0xF2F3,0xEB56,0xE556,0xE3DC,0xE657, + 0xEB57,0xF1E1,0xF73C,0xFAA7,0xFC56,0xFBE1,0xFAB5,0xFACF, + 0xFC14,0xFF1E,0x0383,0x083B,0x0CCB,0x0FC8,0x11DD,0x14B2, + 0x1747,0x1747,0x1591,0x1437,0x1358,0x14DA,0x195C,0x1E92, + 0x2227,0x222E,0x1EDB,0x195D,0x1429,0x1120,0x11B2,0x13B1, + 0x156D,0x15A3,0x14CC,0x11C2,0x0CBD,0x06C6,0x0357,0x021D, + 0x00BF,0xFEA6,0xFDC8,0xFC05,0xFA0A,0xF8A7,0xF800,0xF736, + 0xF4D4,0xF087,0xEC12,0xEA02,0xEA5E,0xEC4B,0xEDB9,0xEE0F, + 0xEDE3,0xECBC,0xEB50,0xEA82,0xE9FC,0xEA99,0xED14,0xF0D7, + 0xF417,0xF58E,0xF512,0xF4DF,0xF604,0xF812,0xFA55,0xFC6A, + 0xFE30,0xFFAB,0x01BB,0x0458,0x064B,0x0761,0x078B,0x078A, + 0x07C7,0x092D,0x0A22,0x0B23,0x0B4F,0x0B7D,0x0C4F,0x0D17, + 0x0CF8,0x0B64,0x087A,0x05DA,0x04E7,0x05B7,0x070B,0x06D9, + 0x055D,0x0302,0x00A9,0xFEAE,0xFD37,0xFC3D,0xFB30,0xF97F, + 0xF88A,0xF863,0xF886,0xF839,0xF60B,0xF3BE,0xF2E6,0xF24C, + 0xF1A1,0xF18D,0xF1AD,0xF1C9,0xF45D,0xF698,0xF35B,0xF171, + 0xF015,0xF148,0xF3EA,0xF658,0xF71A,0xF7AE,0xF814,0xF8BB, + 0xF938,0xFA9C,0xFCFF,0xFE0E,0xFDF8,0xFDFD,0xFF70,0x0116, + 0x02AB,0x03BC,0x0524,0x05B0,0x054E,0x04A9,0x0434,0x04D6, + 0x0537,0x055D,0x06C2,0x07C8,0x079F,0x06F7,0x05AD,0x046F, + 0x0383,0x033E,0x03A0,0x0378,0x031B,0x025A,0x0138,0x003F, + 0xFE64,0xFCE5,0xFBEF,0xFB42,0xFABB,0xF9D2,0xF847,0xF70E, + 0xF5A0,0xF4B3,0xF43B,0xF2D7,0xF0C2,0xEEBA,0xECF2,0xED21, + 0xEE9B,0xEF42,0xEF4D,0xEE98,0xECED,0xEBDB,0xED20,0xEDAC, + 0xED7D,0xED30,0xEE2A,0xEF8E,0xEFA1,0xEFD3,0xEF9F,0xEEFC, + 0xEEDA,0xEEF8,0xEF10,0xEF09,0xEEB3,0xEEB1,0xEF14,0xEE43, + 0xED92,0xED7C,0xED4A,0xECA4,0xEBFB,0xEC72,0xECFD,0xECD5, + 0xEC6C,0xEB9D,0xEAF6,0xEA56,0xEA2F,0xEA2A,0xEA23,0xE9B3, + 0xE93D,0xE968,0xE93A,0xE964,0xE981,0xE913,0xE86B,0xE837, + 0xE995,0xE96D,0xE7FE,0xE804,0xE858,0xE8E1,0xE8CA,0xE92A, + 0xE926,0xE8D0,0xE93F,0xE9EB,0xEAFC,0xEBC4,0xEC95,0xED0D, + 0xED3E,0xED1C,0xED6F,0xEDB9,0xEE66,0xEF35,0xEFAF,0xF04C, + 0xF047,0xF0B1,0xF0B7,0xF0B2,0xF14C,0xF23B,0xF2AC,0xF2DB, + 0xF2D0,0xF2A7,0xF32B,0xF430,0xF4BD,0xF521,0xF511,0xF4A8, + 0xF559,0xF5D1,0xF613,0xF68E,0xF6CC,0xF6F3,0xF72F,0xF7A3, + 0xF854,0xF882,0xF8AF,0xF8F1,0xF961,0xF99D,0xFA17,0xFA72, + 0xFAD5,0xFB49,0xFBC7,0xFC3F,0xFCBD,0xFD1C,0xFD67,0xFE49, + 0xFE98,0xFF07,0xFF87,0xFFEA,0x0054,0x008B,0x0046,0x0110, + 0x01AD,0x01CB,0x0224,0x0282,0x0325,0x01D9,0x03C6,0x0441, + 0x03A3,0x043A,0x04DF,0x0507,0x056E,0x05A2,0x0594,0x05C7, + 0x062A,0x06F9,0x0778,0x071D,0x06E9,0x069A,0x06A8,0x06F5, + 0x0772,0x080E,0x07E3,0x079F,0x0805,0x0867,0x08B6,0x0909, + 0x0941,0x0971,0x08FE,0x090D,0x09AE,0x09E2,0x09BA,0x0A57, + 0x0A8C,0x0AA7,0x0AD3,0x0A91,0x0AA9,0x0ADA,0x0AE1,0x0B66, + 0x0BAF,0x0C24,0x0CA1,0x0CC5,0x0CC8,0x0CD1,0x0CAE,0x0CB0, + 0x0CF8,0x0D65,0x0D67,0x0D67,0x0D7D,0x0D59,0x0D5B,0x0D88, + 0x0D90,0x0DD0,0x0F89,0x10E3,0x0FCA,0x0FAB,0x0FEE,0x0F77, + 0x0F96,0x0F78,0x0F58,0x0F20,0x0F3B,0x0F45,0x0F5A,0x0F6D, + 0x0F83,0x0F29,0x0EDC,0x0EEE,0x0F14,0x0F02,0x0E50,0x0EDE, + 0x0EB1,0x0DF5,0x0DF1,0x0E78,0x0E17,0x0E0E,0x0DC8,0x0D28, + 0x0D2A,0x0D8A,0x0D65,0x0D5E,0x0D50,0x0D46,0x0D40,0x0CE4, + 0x0CBA,0x0C53,0x0CB2,0x0CBD,0x0C9C,0x0C53,0x0C73,0x0BD6, + 0x0B0C,0x0BC7,0x0D0C,0x0CA2,0x0C0C,0x0BAC,0x0BD8,0x0BDE, + 0x0B8A,0x0B61,0x0B47,0x0A7C,0x0A5F,0x0A1F,0x090F,0x0937, + 0x08D4,0x08A4,0x08E8,0x08D0,0x0898,0x0886,0x08D3,0x08B0, + 0x08E3,0x08F3,0x08DD,0x08D4,0x08FC,0x08E8,0x08E4,0x0903, + 0x092B,0x08B6,0x08D8,0x0939,0x0913,0x08BA,0x0886,0x0825, + 0x081F,0x0830,0x083A,0x0815,0x07E2,0x075F,0x06FD,0x06F7, + 0x072B,0x0761,0x07A2,0x077B,0x0772,0x0762,0x0727,0x076A, + 0x075F,0x0721,0x06D9,0x06AA,0x066D,0x06A8,0x0667,0x05FE, + 0x067F,0x0650,0x0660,0x064E,0x0615,0x066B,0x06B0,0x067C, + 0x0681,0x067B,0x0610,0x0568,0x0746,0x0676,0x05C8,0x067A, + 0x0639,0x0625,0x05FA,0x0610,0x062A,0x064A,0x05C4,0x060A, + 0x0636,0x0632,0x062C,0x05CD,0x0555,0x0539,0x0545,0x0537, + 0x053D,0x0581,0x05F6,0x057E,0x04F4,0x053B,0x055A,0x05A7, + 0x05B6,0x0570,0x04C2,0x04C8,0x04C0,0x048F,0x0472,0x04A7, + 0x0499,0x04AF,0x04C4,0x0471,0x0442,0x03FD,0x0406,0x03E5, + 0x040D,0x040E,0x03E1,0x03CE,0x03A7,0x039D,0x03D3,0x03C0, + 0x0332,0x0313,0x02FF,0x02DF,0x031E,0x033D,0x0317,0x02CC, + 0x0293,0x02A1,0x02A2,0x023B,0x0020,0x006A,0x0057,0x004A, + 0x006C,0x00AB,0x0070,0x0038,0x0074,0x0054,0x0014,0x0015, + 0x001E,0x002B,0x0014,0x00F7,0x023E,0x030D,0x03F6,0x04B2, + 0x04E6,0x0592,0x057C,0x0598,0x0622,0x070E,0x07C1,0x08B7, + 0x0901,0x091A,0x0931,0x0A29,0x0810,0x090C,0x0B28,0x0A31, + 0x0A78,0x0A61,0x0A66,0x0AB3,0x0AF6,0x0BAA,0x0C93,0x0D18, + 0x0D75,0x0E22,0x0DF9,0x0DC5,0x0E37,0x0F09,0x0F64,0x0FF7, + 0x108C,0x10BB,0x10E7,0x1221,0x1351,0x1421,0x1490,0x142A, + 0x13FF,0x13E6,0x1365,0x13A5,0x147C,0x159C,0x169B,0x169C, + 0x16A9,0x1708,0x16E2,0x15FF,0x1523,0x153F,0x162F,0x1697, + 0x169F,0x171D,0x1794,0x17B4,0x16E8,0x1620,0x1669,0x16A5, + 0x15F7,0x14EA,0x14C6,0x152F,0x1586,0x15A2,0x1616,0x1665, + 0x15C9,0x1507,0x1629,0x153C,0x14EB,0x1452,0x1417,0x138B, + 0x142D,0x1479,0x13DF,0x127C,0x1153,0x1079,0x0FB8,0x0F32, + 0x0F7A,0x0F9C,0x0F10,0x0E75,0x0DC2,0x0D2C,0x0CD9,0x0C7B, + 0x0B00,0x09F2,0x09E7,0x0A34,0x0971,0x0911,0x0841,0x07E7, + 0x07C7,0x0770,0x0728,0x06AB,0x05E5,0x0505,0x03B2,0x026C, + 0x01BC,0x01E2,0x02E0,0x0329,0x02F8,0x027F,0x01D3,0xFFA0, + 0xFEB1,0xFF19,0xFEAC,0xFE6E,0xFF1A,0xFF98,0xFF3C,0xFE6D, + 0xFD87,0xFCAE,0xFBAB,0xFB3D,0xFAF7,0xFAEC,0xFA84,0xFA44, + 0xF936,0xF834,0xF7C0,0xF835,0xF8E9,0xF909,0xF907,0xF836, + 0xF6DD,0xF525,0xF252,0xEDB4,0xE64A,0xDCEE,0xD319,0xCBEB, + 0xC93A,0xCD40,0xD886,0xE8BD,0xF7B2,0xFF5E,0xFDF9,0xF4B1, + 0xE87F,0xE02B,0xDFD2,0xE8A4,0xF871,0x08D8,0x1535,0x1BB6, + 0x1C82,0x18A7,0x119B,0x09D3,0x03FF,0x0213,0x035C,0x0604, + 0x08EC,0x0981,0x0770,0x0485,0x00A3,0xFD04,0xF88E,0xF2C8, + 0xEB4F,0xE2EB,0xDC30,0xD8E4,0xDAF6,0xE12C,0xE815,0xEC3E, + 0xED1E,0xEA70,0xE49F,0xE066,0xDE0F,0xDB7C,0xDF69,0xE713, + 0xF06C,0xFA3D,0x019A,0x043B,0x02E2,0xFF94,0xFBA3,0xFA27, + 0xFB0E,0xFEA7,0x0258,0x0402,0x0436,0x0484,0x0456,0x03A7, + 0x01CE,0xFDFE,0xF8C7,0xF2A7,0xEDB2,0xEA4D,0xE8C1,0xE864, + 0xE99A,0xEB8F,0xED79,0xEC71,0xE9C5,0xE625,0xE188,0xDD5D, + 0xDC1C,0xDED9,0xE3D4,0xE9A7,0xEE50,0xF171,0xF304,0xF3A8, + 0xF34F,0xF380,0xF402,0xF507,0xF674,0xF826,0xFB9E,0xFF0F, + 0x01A5,0x0308,0x0309,0x0189,0xFE95,0xFBE3,0xF99C,0xF715, + 0xF56A,0xF3B3,0xF22C,0xF0BF,0xF0A2,0xF24D,0xF202,0xEF3A, + 0xEADB,0xE673,0xE2FE,0xE1DD,0xE33B,0xE671,0xE9F3,0xEC1C, + 0xED06,0xED57,0xEDFB,0xEE88,0xEEAD,0xEF3F,0xEF6E,0xF103, + 0xF442,0xF71A,0xF99D,0xFC37,0xFD99,0xFE18,0xFE94,0xFF8D, + 0xFF4B,0xFD99,0xFAC7,0xF8DE,0xF92D,0xFA5A,0xFBB9,0xFD3A, + 0xFDF8,0xFBB2,0xF789,0xF3CE,0xF1E0,0xF094,0xEF3E,0xEF7B, + 0xEF3C,0xEFC7,0xF12D,0xF21D,0xF1FE,0xF130,0xEFF6,0xEE53, + 0xEEF5,0xF0AB,0xF39B,0xF5B9,0xF6AB,0xF8A3,0xFADF,0xFC2B, + 0xFD6C,0xFE0A,0xFE6D,0xFE9F,0xFEC8,0xFE6A,0xFE4E,0xFE46, + 0xFECA,0x0007,0x012A,0x0152,0xFFF0,0xFDFD,0xFB6E,0xF95C, + 0xF830,0xF75E,0xF72F,0xF775,0xF7BC,0xF788,0xF6FB,0xF5F7, + 0xF45C,0xF308,0xF362,0xF3F1,0xF4DB,0xF5A9,0xF5D3,0xF5C0, + 0xF539,0xF600,0xF80D,0xFA5D,0xFC3B,0xFCB0,0xFB64,0xFA6C, + 0xFA2F,0xFB46,0xFCF9,0xFE56,0x0014,0x0096,0x004E,0xFF6F, + 0xFE2E,0xFD6A,0xFDCE,0xFDB4,0xFD02,0xFB2C,0xFB1B,0xFB24, + 0xFACA,0xFA3D,0xFAA2,0xFA8A,0xF84E,0xF8F4,0xF7B9,0xF728, + 0xF786,0xF7D1,0xF7BA,0xF762,0xF422,0xEC99,0xDEF4,0xCA18, + 0xBF3E,0xBFFE,0xBF6A,0xC003,0xC080,0xC298,0xE837,0x10E1, + 0x20E3,0x1755,0xF9D9,0xD90B,0xC74A,0xCE39,0xEC09,0x18DD, + 0x3BE8,0x3ED0,0x3EF0,0x3F2E,0x3EF6,0x3FB0,0x3A7A,0x2DF9, + 0x2AC0,0x2EAA,0x356E,0x3A5B,0x39B8,0x340F,0x2C0F,0x23F5, + 0x1B6E,0x0FDC,0xFDC5,0xE615,0xCCF3,0xC05D,0xC011,0xC1A1, + 0xD438,0xE90A,0xF58F,0xF4FE,0xE9E1,0xDA1B,0xCB9E,0xC44F, + 0xC784,0xD8C4,0xF2A2,0x0D9B,0x2470,0x3201,0x3576,0x2F50, + 0x25BC,0x1F27,0x1ED2,0x23E4,0x2A49,0x2F92,0x3257,0x3308, + 0x32CB,0x32CC,0x3197,0x2BBF,0x1F9C,0x0F9A,0xFF73,0xF003, + 0xE54F,0xE21A,0xE569,0xEB3C,0xF023,0xF159,0xEDA1,0xE4BC, + 0xD83E,0xCC13,0xC4DD,0xC5B6,0xCECC,0xDE0C,0xEE56,0xFB9A, + 0x02D2,0x048F,0x02FA,0x0189,0x0241,0x05FA,0x0A0D,0x0E28, + 0x14F1,0x1B93,0x21AF,0x262E,0x28B4,0x288B,0x248A,0x1D5B, + 0x1438,0x0B12,0x034E,0xFE41,0xFBA0,0xFB89,0xFD09,0xFE22, + 0xFC0F,0xF61A,0xECCA,0xE246,0xD843,0xD249,0xD21A,0xD656, + 0xDCBE,0xE28E,0xE7E6,0xEBBB,0xEDB1,0xEE0D,0xED6E,0xEE10, + 0xF04D,0xF404,0xF8C0,0xFE8C,0x05E6,0x0CD9,0x113C,0x1485, + 0x164E,0x1714,0x15F5,0x1232,0x0D98,0x09CD,0x0811,0x086B, + 0x0A3C,0x0BC8,0x0AF1,0x07CF,0x0285,0xFC33,0xF51B,0xEE15, + 0xE8A3,0xE663,0xE684,0xE846,0xEA45,0xEB9A,0xEC55,0xEB93, + 0xE9C6,0xE91F,0xE9A2,0xEB2B,0xEDCE,0xF105,0xF4C8,0xF94B, + 0xFDC3,0x0243,0x065E,0x0C15,0x0C1E,0x0C4F,0x0C20,0x0A4C, + 0x0A00,0x0B0F,0x0CE6,0x0F10,0x107A,0x1061,0x0FCB,0x0CBD, + 0x0801,0x02CF,0xFE74,0xFAFA,0xF8B0,0xF787,0xF749,0xF78B, + 0xF6ED,0xF52B,0xF290,0xF059,0xEEBD,0xEDD9,0xEDB1,0xEEEC, + 0xF0CA,0xF2EA,0xF4F3,0xF75E,0xF9F1,0xFCE9,0xFEEC,0x0056, + 0x0100,0x0218,0x037D,0x045D,0x05FC,0x0852,0x0AAF,0x0CA3, + 0x0DFD,0x0E4C,0x0DD0,0x0BFB,0x090B,0x060C,0x03EA,0x028F, + 0x01D7,0x0160,0x00EF,0xFFF6,0xFE82,0xFC56,0xF941,0xF6E2, + 0xF569,0xF456,0xF2C2,0xF041,0xF09F,0xF25B,0xF399,0xF2CA, + 0xEE63,0xE5C2,0xD7EC,0xC512,0xBE79,0xBF0E,0xBEE4,0xBFCD, + 0xBF63,0xCA93,0xFA01,0x1FAD,0x2BA8,0x1BB1,0xF920,0xD9CE, + 0xCD56,0xD976,0xFC0E,0x2B19,0x3FE1,0x3E73,0x3F73,0x3F89, + 0x3F28,0x3FFA,0x3947,0x2E5A,0x2D74,0x31FB,0x3735,0x39FB, + 0x376A,0x30E9,0x28B5,0x2165,0x195A,0x0C62,0xF9EC,0xE26B, + 0xC939,0xC065,0xC074,0xC66B,0xDCF1,0xF285,0xFE2C,0xFC3D, + 0xEF6D,0xDE89,0xD048,0xCA32,0xD04B,0xE3D9,0xFEB8,0x1ACE, + 0x2FE9,0x3A4C,0x3ABE,0x3293,0x27AD,0x20C0,0x2077,0x253A, + 0x2C0A,0x312E,0x33B8,0x33D9,0x3308,0x318A,0x2E1C,0x274D, + 0x1BA8,0x0B2E,0xF98C,0xEB35,0xE394,0xE239,0xE662,0xED3C, + 0xF2B3,0xF465,0xF036,0xE6B8,0xDA37,0xCEC6,0xC8DD,0xCC04, + 0xD745,0xE749,0xF789,0x0421,0x0B07,0x0B35,0x08D2,0x073B, + 0x0879,0x0BBE,0x0F9F,0x1499,0x1A86,0x1FEC,0x2500,0x293D, + 0x2B3B,0x2A65,0x25DF,0x1E38,0x14BA,0x0B88,0x042B,0xFF1B, + 0xFCC3,0xFD65,0x0031,0xFFFE,0xFECA,0xFACF,0xF0DF,0xE6CC, + 0xDD94,0xD7F9,0xD82E,0xDC6E,0xE2B7,0xEA7A,0xF153,0xF619, + 0xF843,0xF767,0xF652,0xF5EB,0xF739,0xFABD,0x0050,0x07CD, + 0x0FEE,0x1642,0x192F,0x1AEE,0x1B65,0x1AAF,0x18F4,0x1574, + 0x119E,0x0E47,0x0BA6,0x0A95,0x0AA1,0x0B44,0x0B1F,0x08A0, + 0x0329,0xFBC7,0xF4EA,0xEE50,0xE93C,0xE70A,0xE7B6,0xE9F0, + 0xECCC,0xEF3C,0xF0F1,0xF073,0xEE79,0xEC56,0xEBAF,0xED8A, + 0xF08B,0xF4A1,0xF992,0xFF03,0x0381,0x06D7,0x0910,0x0B05, + 0x0D24,0x0FAD,0x0E75,0x0DEA,0x0E8A,0x0F3D,0x0F80,0x103C, + 0x10D7,0x0F93,0x0D34,0x0A1B,0x06BD,0x036E,0xFEA5,0xFA48, + 0xF717,0xF548,0xF50F,0xF579,0xF4D8,0xF4D3,0xF436,0xF12D, + 0xEE24,0xED03,0xED39,0xEDF6,0xEF09,0xF0DB,0xF4EC,0xF954, + 0xFCA5,0xFECF,0xFF61,0xFF66,0x0051,0x0148,0x027B,0x044D, + 0x0765,0x0975,0x0A25,0x0AD5,0x0BE8,0x0C27,0x09F8,0x0730, + 0x05A6,0x0383,0x0203,0x00F2,0xFFFE,0xFF92,0xFE7D,0xFC63, + 0xFA48,0xF838,0xF69A,0xF5AB,0xF36A,0xF0D5,0xEFE8,0xEFF5, + 0xF1D1,0xF3C2,0xF48E,0xF338,0xEDB2,0xE3D0,0xD3CA,0xC19D, + 0xBE0B,0xBE59,0xBE36,0xBF75,0xBE91,0xD6CF,0x07EB,0x25B0, + 0x2835,0x1127,0xEE96,0xD31E,0xCD33,0xE074,0x0751,0x31BD, + 0x3E5A,0x3D69,0x3E4E,0x3E3F,0x3E12,0x3E03,0x3354,0x28AC, + 0x28D9,0x2EAA,0x3591,0x37E6,0x343D,0x2CEB,0x2461,0x1BF2, + 0x12B3,0x0514,0xF140,0xD8B1,0xC2E8,0xBEF3,0xBF80,0xCB3E, + 0xE20C,0xF422,0xFBC8,0xF730,0xE963,0xD7AD,0xCA67,0xC802, + 0xD279,0xE6F7,0x02D8,0x1DE4,0x2F3D,0x3816,0x3515,0x2BCC, + 0x22D6,0x1E33,0x1E22,0x230B,0x299B,0x2F2E,0x3195,0x31E3, + 0x310D,0x2EC1,0x2A53,0x210F,0x1391,0x0373,0xF3D9,0xE77C, + 0xE131,0xE122,0xE648,0xED54,0xF2BB,0xF2D6,0xECF9,0xE1A5, + 0xD48D,0xC9A2,0xC640,0xCC5D,0xD9D9,0xEABF,0xF979,0x0374, + 0x087A,0x097F,0x07ED,0x066C,0x0671,0x091C,0x0E14,0x145D, + 0x1AD4,0x2124,0x2653,0x2961,0x28D2,0x260C,0x213D,0x1ACD, + 0x12E5,0x09E8,0x01E7,0xFCB1,0xFACD,0xFC33,0xFEEE,0xFFCC, + 0xFD1C,0xF5E6,0xEA32,0xDE77,0xD772,0xD459,0xD65B,0xDBF6, + 0xE2ED,0xE9C4,0xEF51,0xF2FA,0xF3E3,0xF329,0xF2C6,0xF342, + 0xF60B,0xFB2D,0x01A0,0x089A,0x0EBB,0x124F,0x148C,0x17BA, + 0x1A57,0x1A35,0x17B1,0x1365,0x0E76,0x0A7A,0x08AA,0x087A, + 0x09F1,0x0B20,0x0AE6,0x0835,0x01D3,0xF9FF,0xF240,0xEC65, + 0xE8E8,0xE810,0xE95F,0xEC7B,0xEEA1,0xEFDC,0xF097,0xEEFA, + 0xECEB,0xEC10,0xEC45,0xEE91,0xF2B1,0xF776,0xFBA6,0xFF22, + 0x026C,0x062B,0x0A50,0x0D18,0x0FAF,0x10A1,0x0F93,0x0DEA, + 0x0CAB,0x0CF0,0x0EC0,0x1109,0x1205,0x1122,0x0E9C,0x0AEE, + 0x0615,0x0146,0xFDCD,0xFB51,0xF9D4,0xF84D,0xF747,0xF6DD, + 0xF6B2,0xF6B9,0xF4FD,0xF286,0xF061,0xEF3A,0xEFDC,0xF1B7, + 0xF415,0xF637,0xF815,0xFA72,0xFD51,0xFFF0,0x01E3,0x03E8, + 0x0456,0x04C4,0x050D,0x0682,0x08CC,0x0B5D,0x0D8C,0x0E70, + 0x0DD2,0x0CDF,0x0B8A,0x09D1,0x0898,0x06A5,0x0459,0x0180, + 0xFF49,0xFE87,0xFE8E,0xFE89,0xFD54,0xFB44,0xF8BF,0xF692, + 0xF4A1,0xF41D,0xF3B7,0xF30B,0xF592,0xF538,0xF25F,0xECE7, + 0xE1F6,0xCFD8,0xC0E2,0xBFE9,0xBFB1,0xBFDB,0xC0B9,0xC201, + 0xE4BE,0x12B0,0x28D1,0x23D1,0x07E0,0xE60A,0xD0CC,0xD31F, + 0xED2C,0x179D,0x3B11,0x3F15,0x3F1A,0x3F6A,0x3F33,0x3F36, + 0x3DBA,0x3171,0x2AC3,0x2D12,0x328A,0x3700,0x3746,0x321F, + 0x2A40,0x21E4,0x19AC,0x0F5B,0xFF31,0xE88C,0xCEF3,0xC08B, + 0xC048,0xC0A1,0xD007,0xE685,0xF4AE,0xF710,0xEEB6,0xDFAB, + 0xD0C3,0xC80A,0xC983,0xD688,0xEDD0,0x08C8,0x2180,0x31E9, + 0x3984,0x3590,0x2AA9,0x21FB,0x1EF7,0x21F5,0x27CC,0x2D11, + 0x306E,0x317A,0x315A,0x3069,0x2E4E,0x28CF,0x1EB6,0x1012, + 0xFF05,0xEEF1,0xE3C5,0xDEFA,0xE044,0xE724,0xED71,0xF05A, + 0xEE7F,0xE7BA,0xDC06,0xD027,0xC82F,0xC779,0xCE5E,0xDBE4, + 0xEC7C,0xFB5D,0x04FC,0x08A0,0x081C,0x0636,0x050E,0x05F8, + 0x0A1D,0x0FF6,0x15A6,0x1B44,0x2017,0x23EB,0x258A,0x26BD, + 0x2545,0x1FD6,0x17EA,0x0E81,0x053B,0xFDF4,0xFA3F,0xF9D2, + 0xFB89,0xFD93,0xFCC6,0xF7BD,0xEEBB,0xE4C7,0xDB6E,0xD4F2, + 0xD314,0xD5E2,0xDC3F,0xE390,0xE99B,0xEDB7,0xF003,0xEFEF, + 0xEF20,0xEF69,0xF1FA,0xF663,0xFC26,0x0206,0x0742,0x0C4A, + 0x103C,0x1378,0x164F,0x185D,0x1816,0x14EB,0x1056,0x0BD9, + 0x085C,0x0756,0x0880,0x09CD,0x0A07,0x08B5,0x0477,0xFE0C, + 0xF667,0xEF59,0xE9DB,0xE67F,0xE66B,0xE8BC,0xEC16,0xEDD2, + 0xED8B,0xEC39,0xEAF4,0xEA21,0xEB3D,0xECF2,0xEF8B,0xF1FA, + 0xF4EC,0xF802,0xFCE4,0x02D4,0x07FA,0x0B26,0x0CAE,0x0CE5, + 0x0C24,0x0B1D,0x0C8E,0x0A98,0x0A9E,0x0CAB,0x0DA1,0x0ED3, + 0x0E6D,0x0BD3,0x0767,0x0273,0xFDAB,0xFA0D,0xF819,0xF7CC, + 0xF735,0xF60A,0xF405,0xF25E,0xF180,0xF0EA,0xF053,0xEFAA, + 0xEEFE,0xEEAF,0xEF4D,0xF02D,0xF2D4,0xF616,0xF9C6,0xFC97, + 0xFEFE,0x01EA,0x041C,0x04A2,0x045F,0x04AA,0x05BD,0x0793, + 0x0A1F,0x0D18,0x0EC7,0x0E39,0x0BC1,0x0840,0x062B,0x054B, + 0x050A,0x0466,0x032B,0x013B,0xFF45,0xFD51,0xFBFE,0xFADF, + 0xF990,0xF877,0xF6AC,0xF4BB,0xF372,0xF3BF,0xF48E,0xF4F6, + 0xF576,0xF426,0xEED2,0xE7EF,0xDB31,0xC816,0xBE6B,0xBEE9, + 0xBEBD,0xBF8C,0xBF48,0xC695,0xF154,0x19A0,0x28D3,0x1C32, + 0xFE26,0xDE6D,0xCD35,0xD54E,0xF485,0x20FD,0x3D80,0x3E89, + 0x3F5B,0x3F72,0x3F07,0x3FB6,0x39E2,0x2D18,0x29CA,0x2DFB, + 0x34AD,0x38BB,0x3796,0x311E,0x28F4,0x2086,0x18B2,0x0DA4, + 0xFCDB,0xE5E3,0xCC96,0xC095,0xC0AE,0xC4FA,0xD8E1,0xED49, + 0xFAA5,0xFB6E,0xF0A0,0xE001,0xD160,0xC990,0xCD1C,0xDDF3, + 0xF769,0x139A,0x2AB1,0x37EB,0x3A4C,0x339B,0x299E,0x21AB, + 0x1F6B,0x22C7,0x28D0,0x2DEA,0x30CC,0x31B3,0x31C8,0x30A8, + 0x2DDD,0x27BC,0x1CDA,0x0D57,0xFBBD,0xEC41,0xE2D8,0xE005, + 0xE307,0xE996,0xF05D,0xF2CB,0xEF03,0xE62A,0xDA51,0xCEA4, + 0xC7D4,0xC90C,0xD298,0xE194,0xF17B,0xFE56,0x05DF,0x0785, + 0x0673,0x050A,0x04AC,0x06DB,0x0B6C,0x10B6,0x1665,0x1B96, + 0x201A,0x23F5,0x261F,0x265B,0x2398,0x1D65,0x14DE,0x0BE3, + 0x0339,0xFC7F,0xF962,0xF939,0xFBB6,0xFE08,0xFCBE,0xF7B0, + 0xEFC7,0xE6A5,0xDBA8,0xD68B,0xD700,0xD9DB,0xE091,0xE775, + 0xED76,0xF176,0xF370,0xF3D8,0xF3F8,0xF4CF,0xF6FD,0xFA87, + 0xFEC9,0x040F,0x0A20,0x1062,0x1514,0x189C,0x1AAE,0x1A9D, + 0x18FD,0x155D,0x112A,0x0D56,0x0B08,0x09F6,0x0A1F,0x0A4D, + 0x0A6A,0x08B5,0x041F,0xFE20,0xF716,0xEFB8,0xEA22,0xE78E, + 0xE7C5,0xE9C1,0xECEC,0xEF1A,0xF035,0xEF7F,0xEDB3,0xEBDD, + 0xEB56,0xED42,0xF015,0xF46C,0xF898,0xFCC8,0x00E4,0x04FD, + 0x0928,0x0C29,0x0D30,0x0D1C,0x0CD5,0x0C6C,0x0C5D,0x0D2E, + 0x0FFA,0x10A6,0x1150,0x10A3,0x0F32,0x0CE2,0x09DD,0x04E8, + 0xFECC,0xF9EE,0xF77A,0xF712,0xF778,0xF83A,0xF7FE,0xF6A4, + 0xF3BD,0xF0DC,0xEF00,0xEE53,0xEF87,0xF08C,0xF085,0xF201, + 0xF57E,0xF8B9,0xFB75,0xFDB3,0xFF52,0x00D7,0x0185,0x02FB, + 0x04E5,0x0690,0x0710,0x0740,0x07CC,0x096F,0x0B3E,0x0CD5, + 0x0C64,0x0A38,0x070A,0x03C1,0x0127,0xFE4C,0xFD37,0xFDEE, + 0xFD51,0xFBB7,0xFA1C,0xF975,0xF83F,0xF5DE,0xF312,0xF0C6, + 0xEF4E,0xEF5A,0xF0CB,0xF255,0xF35C,0xF273,0xED4A,0xE398, + 0xD573,0xC3A4,0xBDC5,0xBE34,0xBDEF,0xBF2A,0xBE64,0xCC23, + 0xFB5F,0x1F07,0x26F1,0x149B,0xF368,0xD534,0xCAA3,0xD9B8, + 0xFDB3,0x2A1C,0x3E07,0x3D98,0x3E45,0x3E41,0x3DC8,0x3E3E, + 0x3547,0x2A2A,0x28A4,0x2CE7,0x32B1,0x3560,0x3284,0x2C53, + 0x2516,0x1DF0,0x14A2,0x06F4,0xF344,0xDA60,0xC460,0xBF1B, + 0xBF07,0xC53F,0xDA84,0xEE29,0xF77B,0xF536,0xE8C6,0xD866, + 0xCA57,0xC5C9,0xCDB2,0xE0D4,0xFA9B,0x1497,0x2969,0x341C, + 0x3357,0x2D16,0x2383,0x1BC8,0x1C3E,0x207D,0x26AB,0x2BA1, + 0x2E8F,0x2F97,0x2FD1,0x2DDD,0x2947,0x20EC,0x14BB,0x05FE, + 0xF5AC,0xE899,0xE10D,0xDF35,0xE21A,0xE7DF,0xED50,0xEFB3, + 0xEC15,0xE29E,0xD659,0xCBBB,0xC694,0xC962,0xD496,0xE431, + 0xF49F,0x0040,0x06AD,0x0844,0x06FD,0x0565,0x042A,0x05E8, + 0x0A9E,0x114D,0x1862,0x1F00,0x23FC,0x2723,0x2703,0x2420, + 0x1EFE,0x18FA,0x121B,0x0AC5,0x034E,0xFD2E,0xF9BD,0xF97D, + 0xFB10,0xFB85,0xF9F7,0xF522,0xEC6F,0xE235,0xD9C9,0xD552, + 0xD5DB,0xD834,0xDD27,0xE478,0xEAD5,0xEF64,0xF1AC,0xF1BD, + 0xF160,0xF0C6,0xF27C,0xF6B7,0xFCEF,0x0481,0x0BFF,0x115D, + 0x148B,0x161C,0x1639,0x15CA,0x1384,0x1116,0x0ECD,0x0C02, + 0x097D,0x086C,0x0865,0x0872,0x074C,0x04D3,0x0057,0xFAEC, + 0xF4D4,0xEF43,0xEAC5,0xE763,0xE64F,0xE881,0xEBD1,0xEDFF, + 0xEF76,0xEF9A,0xEE23,0xEC74,0xEC28,0xEEC6,0xF1BE,0xF4E7, + 0xF919,0xFDE5,0x028B,0x06BC,0x0A27,0x0C31,0x0D61,0x0DA2, + 0x0D7A,0x0D1A,0x0D3D,0x0DF5,0x0EDF,0x0ECC,0x0EBC,0x0E53, + 0x0D1D,0x0AAD,0x080A,0x0432,0xFF40,0xFAF4,0xF813,0xF624, + 0xF64F,0xF6A1,0xF684,0xF59E,0xF39E,0xF225,0xF0D1,0xF011, + 0xF064,0xF0E1,0xF1CC,0xF3D5,0xF6B4,0xF9D5,0xFCE2,0xFF83, + 0x0112,0x025B,0x03CA,0x04F1,0x05CA,0x065E,0x0785,0x092B, + 0x0AB2,0x0C66,0x0D76,0x0DA4,0x0CB1,0x0AA9,0x0896,0x0658, + 0x0490,0x034D,0x016A,0xFFCD,0xFEC7,0xFE4D,0xFDBD,0xFC2E, + 0xFA7A,0xF7D4,0xF5B8,0xF3FC,0xF437,0xF4C2,0xF5BA,0xF637, + 0xF5CF,0xF102,0xE800,0xDE4F,0xCD6C,0xC068,0xBFFF,0xC060, + 0xBFEF,0xC4F1,0xE540,0x08AE,0x1E3C,0x1F6A,0x0D82,0xF48A, + 0xE185,0xDF3A,0xF00B,0x0DD1,0x2E7B,0x3EAC,0x3EDB,0x3F0C, + 0x3EE0,0x3EC9,0x3455,0x2761,0x21B4,0x218E,0x2528,0x27E7, + 0x27D1,0x24C6,0x1F47,0x198E,0x142C,0x0CFC,0x017F,0xF0A6, + 0xDE04,0xCEC4,0xC76E,0xCB5F,0xD85B,0xE9B4,0xF68A,0xFA64, + 0xF652,0xEBEA,0xE13F,0xD9E4,0xD88F,0xE011,0xEFA3,0x0396, + 0x16F2,0x24CC,0x2AB4,0x28CA,0x2208,0x1AD1,0x171C,0x1A4A, + 0x1EF8,0x22B7,0x24B1,0x24EF,0x2404,0x2370,0x2294,0x1F73, + 0x191D,0x0ED7,0x01AE,0xF49B,0xEAD0,0xE661,0xE6AA,0xEAA6, + 0xEF66,0xF36A,0xF3E8,0xEFC5,0xE8D4,0xDF24,0xD6D6,0xD407, + 0xD88A,0xE2A4,0xF01F,0xFC91,0x0460,0x0701,0x05F2,0x0409, + 0x0385,0x04B3,0x0865,0x0C9C,0x103D,0x1372,0x169D,0x19E3, + 0x1C2B,0x1C71,0x1A80,0x16F7,0x1174,0x0A61,0x046D,0xFF06, + 0xFABE,0xF852,0xF976,0xFB9F,0xFD05,0xFB5E,0xF681,0xEE95, + 0xE553,0xDF43,0xDD42,0xDED4,0xE3FF,0xE99C,0xEE2F,0xF13B, + 0xF2C6,0xF3BC,0xF42D,0xF4E9,0xF5EF,0xF7D5,0xFB59,0x0040, + 0x0555,0x09F4,0x0D74,0x0F8F,0x10E1,0x119B,0x11A9,0x0FE7, + 0x0CE9,0x096B,0x0655,0x04D3,0x04FF,0x06B9,0x076B,0x0616, + 0x02DB,0xFE3F,0xF91C,0xF38D,0xEF03,0xECB8,0xEBCA,0xED09, + 0xEF67,0xF168,0xF212,0xF173,0xF054,0xEF7F,0xEF77,0xF0A0, + 0xF2C7,0xF579,0xF8A4,0xFBD6,0xFE92,0x0177,0x044E,0x064E, + 0x06F3,0x07C0,0x0898,0x08A4,0x07EB,0x080A,0x086B,0x08AA, + 0x08ED,0x0ACF,0x0819,0x0668,0x04A8,0x015E,0xFE54,0xFB30, + 0xF88C,0xF70D,0xF6A2,0xF6A0,0xF6D3,0xF631,0xF543,0xF302, + 0xF129,0xF03C,0xF08A,0xF16F,0xF305,0xF4D3,0xF70A,0xF930, + 0xFA7E,0xFBFD,0xFCF0,0xFE2A,0xFFB2,0x0126,0x028B,0x0376, + 0x03A1,0x0446,0x0554,0x06E8,0x08DF,0x09C5,0x091B,0x07F2, + 0x05EC,0x038E,0x0120,0xFF3A,0xFF5D,0xFFC0,0xFF62,0xFE31, + 0xFD43,0xFC0E,0xFA48,0xF763,0xF544,0xF460,0xF4A8,0xF5A5, + 0xF605,0xF6C2,0xF82E,0xF8BB,0xF780,0xF5AA,0xF3C3,0xF0E1, + 0xEB72,0xE43D,0xDF54,0xDEF4,0xE3F4,0xEDE2,0xFA38,0x05C0, + 0x0CF6,0x0C36,0x0458,0xFAB3,0xF4B9,0xF4D5,0xFB6E,0x054D, + 0x10BD,0x1948,0x1D5D,0x1BDB,0x160C,0x105F,0x0B7D,0x0710, + 0x04BA,0x057E,0x0776,0x08D1,0x08BD,0x0771,0x053A,0x042F, + 0x02B9,0x000D,0xFC7E,0xF777,0xF1FD,0xEE02,0xED00,0xEFF7, + 0xF5C6,0xFB73,0x0057,0x022E,0x01BA,0xFE7E,0xF8B8,0xF518, + 0xF4C3,0xF825,0xFEAF,0x06AE,0x0DAA,0x111D,0x10E6,0x0E89, + 0x0B02,0x0856,0x07F4,0x0A2B,0x0BC0,0x0C80,0x0C88,0x0C31, + 0x0BD9,0x0AC9,0x0A36,0x0912,0x0654,0x027B,0xFE1C,0xFACC, + 0xF8F2,0xF85F,0xF946,0xFA46,0xFB92,0xFCEA,0xFDA9,0xFCF1, + 0xFAC6,0xF7EF,0xF5EA,0xF580,0xF63D,0xF788,0xF935,0xFA5C, + 0xFA50,0xF9C6,0xF92D,0xF90B,0xF87F,0xF79F,0xF76D,0xF827, + 0xF9CA,0xFBC5,0xFD2B,0xFE14,0xFDEF,0xFCB2,0xFB4C,0xFA34, + 0xF919,0xF7FF,0xF6CE,0xF591,0xF50D,0xF4FA,0xF4ED,0xF477, + 0xF3BA,0xF2CF,0xF18F,0xF0CB,0xF049,0xEF7E,0xEED4,0xEEBB, + 0xEEA4,0xEC6D,0xED95,0xEE21,0xEC83,0xEBF3,0xEBD7,0xEB0B, + 0xEAC1,0xEAB4,0xEA6B,0xEA53,0xEAAE,0xEAB3,0xEA75,0xE9E6, + 0xE9B1,0xE92A,0xE8AC,0xE842,0xE7FA,0xE7F6,0xE7D6,0xE80E, + 0xE80D,0xE805,0xE7C9,0xE7DC,0xE7C6,0xE764,0xE773,0xE73F, + 0xE6B3,0xE6A1,0xE71F,0xE72A,0xE75C,0xE77C,0xE80A,0xE8D7, + 0xE8DC,0xE8D8,0xE955,0xE9A1,0xE9FE,0xEA5D,0xEA93,0xEB2A, + 0xEBD1,0xEC93,0xED25,0xED8B,0xED97,0xEDAF,0xEDE9,0xEE85, + 0xEEDC,0xEFE9,0xF05B,0xF095,0xF0D7,0xF163,0xF310,0xF53A, + 0xF521,0xF4E8,0xF4B3,0xF54A,0xF540,0xF537,0xF600,0xF6A6, + 0xF6EB,0xF73E,0xF785,0xF7A0,0xF823,0xF89E,0xF94B,0xF921, + 0xF90E,0xF9FF,0xF9E6,0xFB4E,0xFC17,0xFB83,0xFB57,0xFC3D, + 0xFCE5,0xFD50,0xFD7E,0xFDFF,0xFE29,0xFE63,0xFE69,0xFED2, + 0xFF4E,0xFF99,0x000A,0xFFE5,0x0002,0x0024,0x00B3,0x0104, + 0x018A,0x0200,0x0216,0x01D4,0x0112,0x01D4,0x033F,0x03CE, + 0x043C,0x0460,0x04B2,0x0517,0x04DD,0x04F1,0x04D5,0x04A3, + 0x04C3,0x0505,0x04DC,0x04F5,0x057B,0x059E,0x05E8,0x05DB, + 0x0666,0x0756,0x0797,0x0781,0x0793,0x07D7,0x07FB,0x0813, + 0x088A,0x0888,0x0903,0x093C,0x0919,0x094F,0x097A,0x0960, + 0x098A,0x09DB,0x0A31,0x09F9,0x0A34,0x0A19,0x0A20,0x09F4, + 0x09F2,0x0A4F,0x0A88,0x0AAF,0x0ABF,0x0A82,0x0A60,0x0A88, + 0x0AC4,0x0B39,0x0BBF,0x0BFC,0x0BE4,0x0BEE,0x0BDB,0x0BB7, + 0x0BC3,0x0B76,0x0B92,0x0B70,0x0C2A,0x0C30,0x0C4A,0x0C3C, + 0x0C0F,0x0C4C,0x0D14,0x0CDD,0x0CD6,0x0D0E,0x0CE8,0x0BE8, + 0x0D58,0x0D1F,0x0BA8,0x0D1E,0x0D18,0x0D08,0x0CC1,0x0C75, + 0x0C61,0x0CB3,0x0C9B,0x0CF5,0x0D30,0x0D49,0x0D07,0x0D86, + 0x0D4C,0x0CFA,0x0D15,0x0CFC,0x0D2A,0x0D2B,0x0D32,0x0D03, + 0x0CD2,0x0CCA,0x0C67,0x0C68,0x0CB2,0x0D2E,0x0D44,0x0D46, + 0x0CF0,0x0CD2,0x0CF4,0x0D06,0x0D21,0x0CE3,0x0C8D,0x0CA8, + 0x0C51,0x0BDB,0x0BAC,0x0BA0,0x0BB0,0x0BBB,0x0B77,0x0B5E, + 0x0B43,0x0B17,0x0B23,0x0B0F,0x0B33,0x0B1F,0x0B2F,0x0B1D, + 0x0AC5,0x0AB5,0x0ACD,0x0A93,0x0AB2,0x0A54,0x0A94,0x0A54, + 0x0866,0x0796,0x0880,0x088F,0x083C,0x0850,0x0859,0x0857, + 0x085B,0x085E,0x0840,0x07E4,0x082A,0x086E,0x088B,0x0887, + 0x0844,0x0869,0x0888,0x07D1,0x0786,0x0870,0x08C9,0x0874, + 0x083A,0x087C,0x088B,0x085F,0x085D,0x0839,0x0875,0x0887, + 0x0866,0x0837,0x083B,0x0824,0x0826,0x081C,0x07A8,0x0847, + 0x080F,0x07EF,0x0792,0x0797,0x08A4,0x07F5,0x0715,0x06C2, + 0x06BA,0x06D8,0x0652,0x0634,0x068A,0x0690,0x06F7,0x077E, + 0x075D,0x0760,0x07D2,0x07A4,0x0760,0x0767,0x071D,0x075A, + 0x073E,0x06E5,0x06C4,0x06C9,0x06EC,0x0709,0x06ED,0x06E4, + 0x06F6,0x0652,0x0601,0x05FB,0x05F8,0x060E,0x0629,0x05FF, + 0x05F8,0x058B,0x0533,0x04F6,0x04F1,0x0532,0x04FC,0x04C7, + 0x04FD,0x04FE,0x04EF,0x0462,0x043C,0x045B,0x0478,0x0478, + 0x042D,0x0417,0x0402,0x0448,0x042D,0x0437,0x0414,0x0466, + 0x0480,0x0430,0x043B,0x0429,0x0407,0x040E,0x040F,0x0416, + 0x03E2,0x03D4,0x035A,0x03A1,0x03A4,0x0365,0x0389,0x041E, + 0x032D,0x01E4,0x0402,0x0311,0x02A6,0x0321,0x032D,0x031D, + 0x02F3,0x02CA,0x02EA,0x02BE,0x01F6,0x01BD,0x016B,0x0179, + 0x01CD,0x025D,0x028A,0x021C,0x0216,0x01D9,0x020A,0x01D1, + 0x01FE,0x01BB,0x0143,0x00D4,0x013E,0x0122,0x0107,0x0116, + 0x00BB,0x009E,0x00DB,0x007E,0x0073,0x00A8,0x0083,0xFF39, + 0xFF31,0xFEE3,0xFEC0,0xFEAE,0xFED5,0xFEC3,0xFED2,0xFE93, + 0xFE9F,0xFE65,0xFE7B,0xFE78,0xFE79,0xFE84,0xFE4C,0xFEBE, + 0xFE8D,0xFDE8,0xFDDE,0xFDF4,0xFD5B,0xFCF1,0xFDEB,0xFE7E, + 0xFE7C,0xFE1B,0xFDCB,0xFDF9,0xFE1E,0xFDE3,0xFDE5,0xFD77, + 0xFD4C,0xFCF3,0xFC6B,0xFB7D,0xFBF8,0xFC4C,0xFC12,0xFC10, + 0xFC12,0xFC44,0xFC44,0xFC51,0xFC2A,0xFC29,0xFC34,0xFCDA, + 0xFD45,0xFD6D,0xFD4D,0xFD25,0xFD53,0xFDAD,0xFE11,0xFF01, + 0x00B3,0x0170,0x015D,0x0142,0x01A4,0x02B9,0x0451,0x05A5, + 0x0617,0x06C6,0x06BB,0x06F5,0x06FD,0x0772,0x078E,0x077C, + 0x070C,0x06F6,0x0783,0x0805,0x084F,0x07CE,0x0797,0x0718, + 0x0728,0x07B9,0x0888,0x0990,0x0A8D,0x0A69,0x0A19,0x0A7B, + 0x0B05,0x0BBC,0x0D19,0x0D5A,0x0DA9,0x0E70,0x0FB3,0x107E, + 0x122C,0x1464,0x122A,0x11AF,0x1111,0x1154,0x12B5,0x1483, + 0x1545,0x15B5,0x1560,0x14E9,0x144A,0x1461,0x1577,0x1654, + 0x1757,0x172F,0x16EB,0x1647,0x150A,0x1366,0x11B7,0x1035, + 0x0ED4,0x0CE6,0x0A4C,0x0853,0x07C8,0x08FA,0x0B88,0x0E90, + 0x10B2,0x111F,0x0F46,0x0BFB,0x08CC,0x072A,0x076E,0x09A0, + 0x0CDC,0x108C,0x145B,0x1698,0x1604,0x143E,0x1306,0x11B2, + 0x1109,0x122E,0x146A,0x168F,0x181E,0x18DA,0x1957,0x1972, + 0x1904,0x1918,0x197E,0x1A27,0x1994,0x1856,0x162E,0x13E3, + 0x1148,0x0FC8,0x11A7,0x1365,0x1423,0x1394,0x1142,0x0DF3, + 0x0A5C,0x07F5,0x06AF,0x05E3,0x05D7,0x05DD,0x05A4,0x04C7, + 0x039E,0x018F,0xFFF7,0xFD78,0xFAEF,0xFABA,0xFB0E,0xFA9E, + 0xFA30,0xF9AE,0xF8EF,0xF834,0xF7C7,0xF73A,0xF7B2,0xF7E0, + 0xF74D,0xF73D,0xF754,0xF745,0xF6D7,0xF71F,0xF7DF,0xF949, + 0xFA84,0xFB34,0xFB98,0xFBC4,0xFCB5,0xFC29,0xFAAF,0xFAEA, + 0xFB9F,0xFC20,0xFCC0,0xFDCE,0xFED6,0xFF2F,0xFEBD,0xFE7C, + 0xFEBF,0xFEB4,0xFEAB,0xFEB0,0xFE39,0xFE31,0xFD2F,0xFC44, + 0xFBD1,0xFB93,0xFB12,0xFA4D,0xF9BC,0xF96A,0xF8CC,0xF6F8, + 0xF5EC,0xF4B3,0xF39E,0xF2E0,0xF2B4,0xF2ED,0xF29E,0xF286, + 0xF239,0xF1A5,0xF08F,0xEE80,0xEC8D,0xEBAD,0xEC33,0xEDF8, + 0xEFF1,0xF07A,0xEF81,0xED8E,0xEC58,0xEC14,0xEC52,0xED8E, + 0xEF10,0xEF83,0xEF95,0xEF2C,0xEEEF,0xEF6A,0xF003,0xF056, + 0xF0C0,0xF1BA,0xF245,0xF2C0,0xF29B,0xF210,0xF1BE,0xF143, + 0xF122,0xF2B2,0xF3F5,0xF533,0xF57C,0xF4E6,0xF41E,0xF3A2, + 0xF2C5,0xF11F,0xF3B3,0xF3C9,0xF283,0xF2FD,0xF3A7,0xF3AE, + 0xF37E,0xF26C,0xF1B9,0xF09D,0xEFB3,0xEFC7,0xF0E5,0xF1C1, + 0xF136,0xEF75,0xEEA6,0xEE70,0xEF27,0xEFEB,0xF04D,0xF03D, + 0xEF45,0xEEAB,0xEDEE,0xEE18,0xEF0A,0xEFF2,0xEFC2,0xEEC4, + 0xEE5F,0xEE73,0xEF23,0xEFE0,0xF01B,0xF0C0,0xF0F0,0xF0D2, + 0xF18A,0xF201,0xF296,0xF2A6,0xF1E0,0xF13B,0xF1EC,0xF317, + 0xF453,0xF4CA,0xF4CC,0xF472,0xF3F1,0xF341,0xF30E,0xF3FA, + 0xF596,0xF6C0,0xF687,0xF637,0xF59B,0xF533,0xF637,0xF79D, + 0xF7C9,0xF7EA,0xF76A,0xF791,0xF7B9,0xF74A,0xF6D6,0xF5B7, + 0xF538,0xF595,0xF61D,0xF622,0xF5BA,0xF514,0xF4D4,0xF42F, + 0xF2BE,0xEFA3,0xEB72,0xE6FD,0xE0E0,0xD961,0xD2CA,0xD0C0, + 0xD249,0xD868,0xE135,0xE9AA,0xEEB1,0xED86,0xE6C9,0xDDFA, + 0xD6F4,0xD460,0xD856,0xE094,0xEAF5,0xF4A0,0xFBD3,0xFF58, + 0x00A7,0x0076,0x0016,0xFF84,0xFE9E,0x00A9,0x0502,0x098D, + 0x0E44,0x132E,0x17B3,0x1ADE,0x1C73,0x1D8F,0x1E13,0x1CF8, + 0x1956,0x153B,0x116E,0x0FC2,0x1013,0x126E,0x1591,0x1866, + 0x196D,0x170C,0x1217,0x0BF2,0x0568,0xFF42,0xFA59,0xF824, + 0xF815,0xF9F8,0xFC63,0xFCDD,0xFAFC,0xF6FB,0xF149,0xEBA5, + 0xE74B,0xE503,0xE460,0xE478,0xE450,0xE417,0xE4EC,0xE656, + 0xE7F2,0xE8FB,0xE984,0xE90D,0xE796,0xE61C,0xE58B,0xE62D, + 0xE822,0xEB23,0xEF84,0xF4AB,0xF904,0xFC00,0xFCD5,0xFC00, + 0xFAEF,0xFA24,0xF9BD,0xFB43,0xFFAC,0x03CC,0x078E,0x09BB, + 0x0BAC,0x0CCD,0x0CBE,0x0AFF,0x0AB4,0x0A3E,0x08CE,0x0712, + 0x08B7,0x0844,0x07FC,0x0941,0x08FC,0x08CF,0x07D8,0x05DD, + 0x031C,0x004F,0xFD6F,0xFAE1,0xF96D,0xF923,0xF951,0xF9BA, + 0xF908,0xF7C6,0xF678,0xF501,0xF2F9,0xF11A,0xEF49,0xEE0F, + 0xEDD1,0xEE17,0xEE96,0xF03E,0xF244,0xF31B,0xF2B7,0xF1F2, + 0xF228,0xF22E,0xF261,0xF29C,0xF379,0xF52C,0xF729,0xF963, + 0xFB71,0xFD65,0xFED7,0xFF59,0xFF36,0xFF0E,0x004F,0x016C, + 0x0237,0x02DB,0x0315,0x0404,0x05BF,0x0774,0x091A,0x0A2E, + 0x0972,0x0870,0x0751,0x069C,0x0653,0x0678,0x0722,0x06F7, + 0x04A2,0x0405,0x041C,0x038C,0x0321,0x01EC,0x00D1,0xFF8C, + 0xFDBD,0xFC75,0xFC2A,0xFC63,0xFC09,0xFAED,0xFA3A,0xFA4D, + 0xFAA9,0xFB2E,0xFB01,0xF8B0,0xF699,0xF648,0xF635,0xF676, + 0xF7D0,0xF923,0xF9A0,0xF96E,0xF9EC,0xFA1F,0xFAD4,0xFB99, + 0xFC27,0xFC76,0xFC98,0xFCEE,0xFD6A,0xFF1C,0x00BC,0x023D, + 0x032B,0x039D,0x0315,0x03CD,0x0582,0x04F1,0x0426,0x0473, + 0x04BE,0x05AC,0x06B1,0x0761,0x0831,0x0816,0x082D,0x0814, + 0x089F,0x0911,0x0973,0x08A1,0x077E,0x06DB,0x05FA,0x0527, + 0x05A8,0x06D4,0x06C5,0x056D,0x03B7,0x0276,0x01A3,0x0104, + 0x0147,0x0142,0x0007,0xFD15,0xF7E5,0xF143,0xE998,0xE154, + 0xD938,0xD2AC,0xD03E,0xD476,0xDE04,0xE964,0xF363,0xF6EE, + 0xF26C,0xE80F,0xDD3B,0xD690,0xD6F8,0xDE33,0xE993,0xF649, + 0x009B,0x080E,0x0C97,0x0E01,0x0DF3,0x0C95,0x0B65,0x0CBA, + 0x100F,0x1541,0x1B88,0x214E,0x25C8,0x2950,0x2CC7,0x3042, + 0x3333,0x3443,0x3254,0x2E20,0x27B1,0x2226,0x2059,0x2315, + 0x260E,0x2AA0,0x2F29,0x2D43,0x28D2,0x220C,0x19B7,0x118E, + 0x0A27,0x0495,0x01B7,0x0255,0x0456,0x058C,0x04BC,0x017E, + 0xFC24,0xF5BA,0xEF66,0xEA92,0xE7EE,0xE6D3,0xE5D1,0xE57A, + 0xE5BA,0xE6E6,0xE8C9,0xEAE2,0xECEA,0xED98,0xECCA,0xEB00, + 0xE959,0xE863,0xE91B,0xEB8E,0xF00A,0xF576,0xFA71,0xFF32, + 0x02F2,0x0506,0x04AA,0x027C,0x00FC,0x0145,0x0396,0x079A, + 0x0C7F,0x11A8,0x1519,0x15DE,0x15D2,0x15B2,0x155E,0x1458, + 0x1289,0x1126,0x108E,0x0FFB,0x0F6C,0x0FDA,0x1300,0x1471, + 0x1372,0x1111,0x0D71,0x09B1,0x0632,0x0316,0x007F,0xFE19, + 0xFBDC,0xFABD,0xFB26,0xFBC6,0xFB80,0xFABC,0xF7C0,0xF3A1, + 0xEFC4,0xEBBE,0xEAD4,0xEC43,0xECD6,0xED52,0xEED0,0xEFA5, + 0xEFE7,0xF04F,0xF06B,0xF00D,0xEFC3,0xEF89,0xEFF2,0xF16F, + 0xF300,0xF4F8,0xF694,0xF837,0xF9EE,0xFC44,0xFEC6,0x00F5, + 0x0259,0x022C,0x0177,0x001C,0x008F,0x03F1,0x0755,0x09FC, + 0x0C08,0x0C0F,0x0B88,0x0AB1,0x0993,0x0931,0x0885,0x0777, + 0x063E,0x054F,0x0446,0x0521,0x05D2,0x056F,0x040E,0x01B3, + 0xFFBE,0xFDEB,0xFD21,0xFD38,0xFBD0,0xF967,0xF71B,0xF6E9, + 0xF7F8,0xF8A9,0xF8C3,0xF7F5,0xF646,0xF42C,0xF244,0xF14B, + 0xF1E3,0xF2A2,0xF320,0xF30C,0xF373,0xF478,0xF552,0xF5C8, + 0xF582,0xF4CB,0xF435,0xF458,0xF5FD,0xF82B,0xF9B2,0xFA99, + 0xFB6C,0xFC42,0xFD64,0xFF32,0x00F7,0x02A0,0x02A4,0x019B, + 0x011B,0x020D,0x02E6,0x0447,0x0598,0x0647,0x064D,0x0578, + 0x0587,0x0678,0x067F,0x05D0,0x04B1,0x03E1,0x037D,0x04B5, + 0x0608,0x03D2,0x043C,0x0348,0x014B,0x0011,0xFFC5,0x0022, + 0xFFE4,0xFF24,0xFE58,0xFE02,0xFCBF,0xFBAB,0xF9ED,0xF7BB, + 0xF372,0xED07,0xE4E3,0xDD13,0xD5B7,0xCFFE,0xCF11,0xD46C, + 0xDECA,0xEA1F,0xF264,0xF3EE,0xEE6B,0xE466,0xDA4C,0xD4AD, + 0xD6BD,0xDF9B,0xEC01,0xF882,0x02D3,0x09CF,0x0CC7,0x0DAF, + 0x0C82,0x0B04,0x0AF4,0x0CEE,0x10D3,0x16C5,0x1D8D,0x236D, + 0x27ED,0x2AE0,0x2DC5,0x3018,0x320C,0x31EE,0x2F99,0x2B80, + 0x2599,0x2103,0x1FEA,0x2304,0x27D2,0x2B7A,0x2C8F,0x297F, + 0x22D5,0x1B66,0x129D,0x0A70,0x0506,0x01DC,0x00A7,0x0192, + 0x0396,0x0409,0x01D5,0xFD26,0xF6C1,0xF0A4,0xEC09,0xE929, + 0xE781,0xE6E6,0xE50F,0xE39B,0xE49E,0xE6CE,0xE875,0xEABB, + 0xEBE3,0xEBB8,0xEA81,0xE990,0xE913,0xE947,0xEA26,0xEC8E, + 0xF129,0xF71E,0xFD5F,0x02A9,0x0542,0x0570,0x0449,0x024E, + 0x01E7,0x0388,0x073D,0x0DB3,0x1305,0x1551,0x1770,0x1824, + 0x17A2,0x16EC,0x15FD,0x1534,0x1549,0x150D,0x14AC,0x148B, + 0x1434,0x1407,0x13E5,0x1322,0x12A6,0x1199,0x0F2A,0x0C0A, + 0x0894,0x0553,0x01A9,0xFF21,0xFDFD,0xFE33,0xFF0C,0xFECC, + 0xFDD5,0xFB7E,0xF7FB,0xF47C,0xF131,0xEF12,0xEE9A,0xEF92, + 0xF106,0xF1B2,0xF17C,0xF176,0xF129,0xF1A4,0xF246,0xF2E1, + 0xF391,0xF3E0,0xF3E1,0xF461,0xF5AB,0xF820,0xFA54,0xFCA3, + 0xFEF0,0x00BD,0x025C,0x035D,0x0392,0x0417,0x0486,0x053A, + 0x06BF,0x082D,0x0A4A,0x0C84,0x0DD2,0x0E20,0x0E30,0x0CEF, + 0x0C58,0x0B3E,0x0AB6,0x0AA1,0x09F1,0x09F1,0x0A7C,0x09E2, + 0x0813,0x094F,0x0796,0x0549,0x03E1,0x029A,0x0142,0x005B, + 0xFF73,0xFE46,0xFD4A,0xFCAB,0xFBB5,0xFA99,0xF997,0xF8E1, + 0xF82A,0xF6D6,0xF5A7,0xF565,0xF575,0xF5C4,0xF599,0xF561, + 0xF5DB,0xF654,0xF6D4,0xF6EF,0xF757,0xF84F,0xF88E,0xF87F, + 0xF90E,0xFAFF,0xFC4D,0xFD1F,0xFDF6,0xFED0,0xFF81,0x0056, + 0x017C,0x0202,0x02D4,0x0357,0x03A2,0x045C,0x0572,0x05F7, + 0x0699,0x06FC,0x06C3,0x0625,0x0669,0x0670,0x068B,0x06E1, + 0x065B,0x0598,0x0491,0x0464,0x0415,0x0580,0x0607,0x04C4, + 0x03C0,0x031D,0x0250,0x01A6,0x0098,0xFF5F,0xFDE2,0xFCCC, + 0xFC8F,0xFC44,0xFA8D,0xF77D,0xF22F,0xEA6C,0xE1AF,0xD8AF, + 0xD153,0xCD3E,0xCF98,0xD6F2,0xE09D,0xEAB9,0xF15B,0xF080, + 0xE9AF,0xDF4E,0xD660,0xD35C,0xD7A9,0xE188,0xEE67,0xFA26, + 0x0294,0x079D,0x09E4,0x0AB3,0x0A68,0x0A28,0x0A8F,0x0C68, + 0x105A,0x15DB,0x1AB6,0x1EFF,0x24B0,0x2977,0x2C77,0x2F17, + 0x30AE,0x303D,0x2D14,0x279E,0x221A,0x1EBA,0x1DFE,0x1FA8, + 0x23F6,0x2780,0x28B1,0x26F4,0x2160,0x18FC,0x0FFD,0x087D, + 0x02B9,0xFF73,0xFF32,0x0048,0x01B2,0x01DB,0x0029,0xFBA6, + 0xF5A8,0xEF8D,0xEB0D,0xE7B7,0xE5B5,0xE486,0xE426,0xE416, + 0xE455,0xE56C,0xE7A9,0xE9F1,0xEB59,0xEAF3,0xE958,0xE80C, + 0xE741,0xE78C,0xE986,0xECD4,0xF189,0xF745,0xFCDD,0x0065, + 0x020E,0x0275,0x0263,0x01B2,0x01BD,0x0342,0x0676,0x0ABE, + 0x0E96,0x118D,0x1377,0x1545,0x14E4,0x1431,0x1336,0x12CE, + 0x120A,0x11A3,0x1055,0x0F61,0x0EFE,0x0E6F,0x0E41,0x1084, + 0x0EA6,0x0CAD,0x0A72,0x0610,0x0291,0xFF01,0xFC0C,0xFA3E, + 0xF95A,0xF8F0,0xF978,0xF8E7,0xF77A,0xF584,0xF37F,0xF0C8, + 0xEE5C,0xECD8,0xEC0F,0xEC7B,0xECA3,0xECB3,0xECEA,0xEDE9, + 0xEE97,0xEF47,0xEFC3,0xF034,0xF0D1,0xF0E1,0xF18F,0xF30F, + 0xF4E4,0xF6E6,0xF86A,0xF9C8,0xFBA0,0xFE61,0x00FB,0x029E, + 0x03A5,0x03E9,0x0445,0x04CA,0x0575,0x068F,0x0895,0x0A76, + 0x0B61,0x0C08,0x0BFB,0x0B6D,0x0AE9,0x0A71,0x09E6,0x09F7, + 0x0992,0x091D,0x0948,0x091B,0x0840,0x0695,0x049F,0x01CE, + 0x0103,0x007E,0xFF3D,0xFE5A,0xFD83,0xFC20,0xFA45,0xF93D, + 0xF8C7,0xF886,0xF844,0xF78F,0xF702,0xF62F,0xF53E,0xF49D, + 0xF4AA,0xF545,0xF4E5,0xF518,0xF5CB,0xF6B6,0xF69C,0xF69E, + 0xF6BF,0xF7A7,0xF8F6,0xFA43,0xFA66,0xFA97,0xFBCC,0xFD29, + 0xFE22,0xFF06,0x0019,0x01BE,0x0290,0x02AD,0x037D,0x0490, + 0x0558,0x04CC,0x04EC,0x0736,0x076B,0x077C,0x07A4,0x07D6, + 0x0850,0x0899,0x0839,0x07DD,0x0792,0x07E0,0x0797,0x0665, + 0x05D7,0x0677,0x06B4,0x061E,0x058B,0x0532,0x0456,0x02CC, + 0x0182,0x00A1,0xFF7D,0xFDC3,0xFBA1,0xF8FC,0xF5F0,0xF249, + 0xEBF9,0xE38E,0xDA09,0xD256,0xCE23,0xCF7C,0xD7B9,0xE37C, + 0xEE0A,0xF2A2,0xEFF9,0xE828,0xDEE4,0xD7E8,0xD5C7,0xDA08, + 0xE3CD,0xEFBD,0xFB1B,0x03EE,0x0975,0x0B77,0x0B4D,0x0986, + 0x0838,0x0999,0x0D5D,0x129F,0x18A0,0x1DED,0x2275,0x2636, + 0x297B,0x2C8A,0x2F84,0x313E,0x3058,0x2D55,0x285E,0x23A3, + 0x206F,0x1FF0,0x230A,0x2799,0x2B69,0x2BFF,0x295F,0x2155, + 0x1983,0x11D2,0x08F2,0x045B,0x0339,0x0403,0x0595,0x056F, + 0x0343,0xFF34,0xF9DF,0xF49F,0xF02D,0xECFD,0xEA6C,0xE819, + 0xE62C,0xE52B,0xE4B3,0xE5AC,0xE76A,0xE8F7,0xEA6A,0xEB7B, + 0xEB7B,0xEA59,0xE8E2,0xE84C,0xE81D,0xE9FA,0xEE29,0xF3E7, + 0xF96D,0xFD92,0xFFFF,0x01A7,0x01F4,0x0137,0x0179,0x02DE, + 0x05D3,0x0934,0x0CA2,0x0FEE,0x1263,0x1393,0x13FF,0x143C, + 0x13B8,0x12ED,0x1237,0x118D,0x10B0,0x0FCB,0x0EEE,0x0F27, + 0x0F96,0x0F8C,0x0E73,0x0D1D,0x0B63,0x0A4A,0x0695,0x02CD, + 0x009A,0xFED8,0xFCCE,0xFB8A,0xFAB4,0xFAAE,0xFA39,0xF820, + 0xF58E,0xF2FB,0xF06F,0xEE45,0xECB0,0xEC97,0xECAF,0xED19, + 0xED51,0xEF1B,0xF0BE,0xF0B1,0xF094,0xF10E,0xF02D,0xEF1E, + 0xEF69,0xF11C,0xF39E,0xF5DB,0xF7D9,0xF9C8,0xFBF9,0xFD4C, + 0xFE84,0xFF99,0xFFB3,0xFFE2,0xFFE0,0x00BD,0x023A,0x04EF, + 0x0814,0x0994,0x0900,0x08B4,0x0A2B,0x0A86,0x09EA,0x0899, + 0x07C0,0x0759,0x06F5,0x06C9,0x0723,0x076B,0x0718,0x05AC, + 0x0374,0x009F,0xFF3C,0xFE4B,0xFD5F,0xFC4B,0xFAF0,0xF9CE, + 0xF8B2,0xF873,0xF8A5,0xF820,0xF715,0xF592,0xF3EB,0xF1F9, + 0xF066,0xF08E,0xF1DA,0xF2C0,0xF2AB,0xF27C,0xF22F,0xF275, + 0xF2E2,0xF2AA,0xF340,0xF44A,0xF4E4,0xF48F,0xF502,0xF64C, + 0xF823,0xF903,0xF9E6,0xFB6C,0xFCD0,0xFDC4,0xFE51,0xFF14, + 0xFF76,0xFFEE,0x0069,0x00BC,0x01AD,0x0323,0x045E,0x0566, + 0x0616,0x0587,0x0501,0x043A,0x03BA,0x03B6,0x03DA,0x042F, + 0x0489,0x042C,0x0433,0x044E,0x03D2,0x0200,0x0238,0x022D, + 0xFF61,0xFEB0,0xFD76,0xFD7F,0xFDB8,0xFDE9,0xFCE3,0xFC4E, + 0xFAE3,0xF860,0xF44C,0xEDD4,0xE642,0xDDCD,0xD46F,0xCD2A, + 0xCC10,0xD156,0xDC05,0xE815,0xF17F,0xF3BA,0xEE93,0xE435, + 0xD984,0xD2CF,0xD3FC,0xDB3A,0xE6C5,0xF3F8,0x0018,0x088F, + 0x0BBA,0x0B75,0x09B9,0x0898,0x0896,0x09E0,0x0E11,0x1433, + 0x1A42,0x1EEC,0x22C4,0x2750,0x2C65,0x2FCB,0x321C,0x3225, + 0x2F9B,0x2AF8,0x2451,0x1F5F,0x1E17,0x1FDD,0x250A,0x29BB, + 0x2C7C,0x2BE4,0x26BA,0x1E3C,0x13D0,0x0AAD,0x02DD,0xFE11, + 0xFE69,0x0020,0x01A4,0x014C,0xFEED,0xFB26,0xF639,0xF071, + 0xEB8F,0xE83F,0xE5ED,0xE477,0xE376,0xE1FE,0xE2A4,0xE3E0, + 0xE648,0xE7DD,0xE8FB,0xEAC2,0xEB62,0xE979,0xE71E,0xE5CF, + 0xE6AF,0xE969,0xEEC3,0xF4AB,0xFB0E,0x00BE,0x039F,0x0436, + 0x0360,0x0238,0x0152,0x01A6,0x03FE,0x08F0,0x0E12,0x12B6, + 0x1613,0x172B,0x182D,0x15ED,0x140E,0x1392,0x1340,0x1327, + 0x1322,0x11D7,0x10F2,0x10A0,0x10D4,0x11BA,0x124C,0x11CF, + 0x0FE3,0x0CC4,0x07F3,0x0354,0xFF2E,0xFC47,0xFA91,0xFA3C, + 0xFB42,0xFCD0,0xFD29,0xFBA3,0xF891,0xF419,0xEF31,0xEB65, + 0xEA27,0xEB5B,0xED5C,0xEF4D,0xF0A5,0xF11B,0xF115,0xF113, + 0xF0DE,0xF0CE,0xF10A,0xF1A6,0xF22D,0xF231,0xF36B,0xF5AC, + 0xF81F,0xFA9E,0xFD1F,0xFFC2,0x025E,0x036C,0x0344,0x0217, + 0x015A,0x01D6,0x0309,0x0569,0x092B,0x0C52,0x0DFB,0x0E4A, + 0x0DA3,0x0D0A,0x0BFC,0x0ACC,0x09EB,0x09B7,0x09B8,0x09E0, + 0x08CB,0x0943,0x09F4,0x0977,0x079D,0x06AC,0x0494,0x022C, + 0x02C0,0x0024,0xFDD0,0xFCD2,0xFB81,0xFB35,0xFBC1,0xFBE7, + 0xFBC9,0xFA91,0xF8E5,0xF747,0xF630,0xF52F,0xF4B1,0xF43C, + 0xF41E,0xF495,0xF587,0xF713,0xF851,0xF8B3,0xF847,0xF795, + 0xF774,0xF81B,0xF90D,0xFA2A,0xFB20,0xFC49,0xFD05,0xFE00, + 0xFF29,0x00F2,0x02CD,0x03E1,0x041A,0x03E5,0x037F,0x02F6, + 0x032C,0x03C6,0x0477,0x05E8,0x07AD,0x08C2,0x0889,0x075D, + 0x0622,0x0502,0x0408,0x03ED,0x042C,0x0475,0x0450,0x040B, + 0x0382,0x02F7,0x025B,0x01BE,0x028B,0x025A,0x0082,0xFFF4, + 0xFF66,0xFE14,0xFCC0,0xFBFD,0xFACB,0xF8B1,0xF593,0xF0EF, + 0xEAAA,0xE299,0xDA50,0xD520,0xD46E,0xD9B1,0xE3B1,0xED9B, + 0xF3BA,0xF55D,0xF0DB,0xE7B4,0xDF47,0xDB31,0xDC1E,0xE2F3, + 0xECF7,0xF7B3,0x00E2,0x076D,0x0996,0x08E0,0x06B0,0x05E3, + 0x06E4,0x09A3,0x0E1B,0x12AE,0x16B4,0x19DF,0x1D00,0x2015, + 0x231B,0x24D3,0x2808,0x285F,0x264D,0x22A1,0x1E7A,0x1B67, + 0x19F5,0x1ACD,0x1D6E,0x2058,0x21EB,0x20B3,0x1D3D,0x16AC, + 0x0E61,0x064B,0x00E7,0xFF20,0xFF6B,0xFFB8,0xFFB7,0xFEE1, + 0xFCBD,0xF8F1,0xF476,0xF0E9,0xEEF7,0xECBB,0xE9C4,0xE7AE, + 0xE623,0xE575,0xE5B9,0xE6DA,0xE8D2,0xEB88,0xECE8,0xECF5, + 0xEC37,0xEB52,0xEA23,0xE927,0xEA06,0xECEA,0xF131,0xF647, + 0xFAE8,0xFE3D,0x006A,0x00BA,0xFFDB,0xFFA9,0x0041,0x0205, + 0x04D4,0x07CC,0x0A41,0x0D27,0x0EE7,0x0F63,0x0FBB,0x0F79, + 0x0F6D,0x0EEF,0x0E38,0x0D74,0x0D2B,0x0C99,0x0BB4,0x0B9C, + 0x0BB4,0x0BC9,0x0B8A,0x0A0B,0x075C,0x04B3,0x0352,0xFEAF, + 0xFC5E,0xFBE3,0xFB03,0xFA8C,0xFA45,0xF90D,0xF7A5,0xF5E3, + 0xF360,0xF1DF,0xF0C2,0xEFA6,0xEEC2,0xEF19,0xEF50,0xEFB2, + 0xEFE4,0xF04B,0xF0C3,0xF0C2,0xF0EC,0xF0DD,0xF194,0xF365, + 0xF4E5,0xF548,0xF521,0xF59E,0xF771,0xFA34,0xFC72,0xFDC7, + 0xFF0C,0xFFEC,0xFFD5,0x0059,0x0166,0x0328,0x04DB,0x05E2, + 0x06C4,0x07B9,0x0916,0x09E2,0x09A4,0x0916,0x08F9,0x0844, + 0x081F,0x083F,0x08CE,0x08F2,0x0814,0x065F,0x0489,0x0380, + 0x02D8,0x02A2,0x0276,0x01B7,0xFF91,0xFC6E,0xF912,0xF8EF, + 0xF9A4,0xF95F,0xF8F3,0xF838,0xF75C,0xF680,0xF5F4,0xF4DD, + 0xF48C,0xF3E6,0xF319,0xF2EF,0xF39F,0xF553,0xF64B,0xF6DD, + 0xF658,0xF479,0xF4A5,0xF664,0xF806,0xF913,0xF9E7,0xFA61, + 0xFAB8,0xFB1C,0xFD1E,0xFED7,0x001B,0x0047,0x0041,0x001D, + 0x00F4,0x0226,0x0397,0x041E,0x0458,0x04C2,0x052F,0x062F, + 0x068F,0x08A4,0x082B,0x0602,0x04A6,0x04A6,0x0581,0x0658, + 0x06CE,0x06B0,0x0601,0x0479,0x03F1,0x0470,0x051C,0x049B, + 0x030C,0x00B1,0xFF96,0x0062,0x012A,0x0170,0x016E,0x0028, + 0xFD19,0xF974,0xF732,0xF58A,0xF396,0xF115,0xEF4C,0xEF90, + 0xF243,0xF63F,0xF996,0xFBB4,0xFB05,0xF790,0xF3AA,0xF0F7, + 0xF109,0xF354,0xF6E5,0xFA42,0xFD8E,0x0060,0x02ED,0x048E, + 0x05AA,0x0579,0x0477,0x036F,0x0386,0x0533,0x08CB,0x0BB1, + 0x0DF4,0x0F84,0x1083,0x1150,0x125C,0x12FF,0x12A9,0x1187, + 0x104D,0x0E62,0x0CF8,0x0CF3,0x0E3B,0x0F35,0x0FD4,0x1031, + 0x0F86,0x0E6A,0x0B96,0x079F,0x0459,0x024B,0xFEA3,0xFF72, + 0x029F,0x02F6,0x031D,0x0186,0xFE83,0xFB6A,0xF907,0xF7DA, + 0xF7A1,0xF7EA,0xF750,0xF5C4,0xF4F8,0xF53E,0xF603,0xF764, + 0xF820,0xF86F,0xF82B,0xF75E,0xF699,0xF63A,0xF6C2,0xF815, + 0xF952,0xFAA9,0xFC50,0xFE56,0x00B7,0x0200,0x024C,0x01CE, + 0x00E8,0xFFD2,0x006F,0x0222,0x0411,0x0610,0x06ED,0x078C, + 0x0743,0x0762,0x076F,0x0750,0x0748,0x06D1,0x0592,0x0481, + 0x0447,0x04AE,0x05A4,0x0610,0x0612,0x056E,0x04B7,0x0329, + 0x01AA,0x00C8,0x0084,0x0002,0x0081,0xFF84,0xFE98,0xFE59, + 0xFE2A,0xFD89,0xFC97,0xFB48,0xF9B7,0xF8D3,0xF7AC,0xF69C, + 0xF5D3,0xF4CB,0xF3B2,0xF311,0xF34B,0xF3B8,0xF377,0xF2A2, + 0xF311,0xF369,0xF2F4,0xF215,0xF2E3,0xF37B,0xF31A,0xF2EB, + 0xF28D,0xF2A5,0xF325,0xF392,0xF353,0xF2BA,0xF206,0xF1AA, + 0xF12A,0xF101,0xF096,0xF073,0xF04A,0xEFD7,0xEF44,0xEF34, + 0xEEA8,0xED5D,0xECDD,0xED56,0xECF6,0xEC57,0xEBE8,0xEB9D, + 0xEB2A,0xEABE,0xEA5A,0xE9F7,0xE8F0,0xE844,0xE81C,0xE70A, + 0xE5DF,0xE5FC,0xE57A,0xE514,0xE4F0,0xE53B,0xE5A0,0xE5CE, + 0xE559,0xE4CB,0xE471,0xE4DD,0xE549,0xE565,0xE5A1,0xE5B5, + 0xE60B,0xE626,0xE64D,0xE66D,0xE6FF,0xE6E2,0xE73E,0xE79D, + 0xE821,0xE83B,0xE89D,0xE8D3,0xE920,0xE9A6,0xEA05,0xEA57, + 0xEAE7,0xEBB5,0xEBB2,0xEBD7,0xEC1D,0xEC62,0xECF5,0xED37, + 0xED6A,0xEDF8,0xEEBE,0xEEE1,0xEF47,0xEFB7,0xF020,0xF043, + 0xF017,0xF099,0xF0E0,0xF1C8,0xF234,0xF234,0xF2FE,0xF402, + 0xF448,0xF4A5,0xF50F,0xF544,0xF4FA,0xF6B1,0xF788,0xF61D, + 0xF76A,0xF812,0xF8B0,0xF946,0xF9D9,0xFA1A,0xFAEB,0xFB60, + 0xFBDD,0xFC60,0xFCD0,0xFD3E,0xFDD7,0xFE51,0xFE99,0xFF8D, + 0x000F,0x006D,0x00D3,0x00EC,0x0169,0x0171,0x01B4,0x0203, + 0x0280,0x02DD,0x02D8,0x032A,0x0392,0x03B1,0x0423,0x0498, + 0x04FE,0x051A,0x0532,0x05B7,0x05BD,0x061A,0x0640,0x06DB, + 0x0746,0x0798,0x07F3,0x0835,0x083C,0x082B,0x0846,0x086C, + 0x0883,0x08BB,0x08F3,0x0910,0x0979,0x0997,0x09BB,0x09FD, + 0x0A35,0x0A35,0x0AD1,0x0AEA,0x0AAC,0x09A2,0x0828,0x090E, + 0x0951,0x0980,0x09EC,0x0A42,0x0A3A,0x0A48,0x0A98,0x0AE3, + 0x0B18,0x0B9D,0x0BB6,0x0BE0,0x0C11,0x0C31,0x0C9B,0x0D1A, + 0x0C77,0x0C70,0x0DB0,0x0DFA,0x0DAC,0x0D47,0x0D5C,0x0D11, + 0x0D19,0x0DE0,0x0E44,0x0EA0,0x0E90,0x0E63,0x0E6C,0x0E5A, + 0x0E54,0x0E77,0x0E7A,0x0EAA,0x0F13,0x0EEE,0x0F0A,0x0EFB, + 0x0EF7,0x107B,0x1029,0x0EF3,0x0EE3,0x0E8F,0x0E73,0x0E90, + 0x0E9C,0x0E5F,0x0F06,0x0F17,0x0FF6,0x106E,0x1029,0x1066, + 0x1092,0x1067,0x1054,0x1014,0x1015,0x1033,0x1041,0x101A, + 0x1041,0x1036,0x1011,0x100C,0x1007,0x0FC5,0x0F4D,0x0EF4, + 0x0F4F,0x0EF2,0x0E86,0x0ECC,0x0EE2,0x0E80,0x0E3A,0x0DEA, + 0x0DA4,0x0D88,0x0D77,0x0D55,0x0D5C,0x0D61,0x0D29,0x0D0E, + 0x0CDE,0x0CE7,0x0C6B,0x0C90,0x0C7C,0x0C80,0x0C43,0x0C18, + 0x0BED,0x0C2D,0x0C4D,0x0C51,0x0C5E,0x0C24,0x0C8B,0x0C1A, + 0x0C0B,0x0C02,0x0C45,0x0BE9,0x0C2B,0x0BC7,0x0BB1,0x0AD7, + 0x0AED,0x0B85,0x0B52,0x0AED,0x0B87,0x0A74,0x0952,0x0BC7, + 0x0A7F,0x09AC,0x0A46,0x0A0E,0x09C4,0x09A5,0x09CB,0x098C, + 0x0907,0x091D,0x090F,0x08FB,0x08F0,0x0911,0x08DF,0x0873, + 0x085F,0x0840,0x0826,0x086E,0x08AB,0x08AC,0x087C,0x0852, + 0x082F,0x07EF,0x0799,0x079D,0x0749,0x0767,0x07AC,0x07A0, + 0x0736,0x0705,0x06A9,0x0670,0x062E,0x0652,0x0668,0x0689, + 0x0603,0x0583,0x05BD,0x05D9,0x0615,0x058D,0x059F,0x05D4, + 0x058A,0x0549,0x04F3,0x04EF,0x04FC,0x0476,0x04B4,0x0507, + 0x04E7,0x04CB,0x04D0,0x0694,0x06EE,0x0609,0x0622,0x0605, + 0x05DC,0x05B0,0x0565,0x0574,0x0573,0x051A,0x052F,0x0588, + 0x050F,0x0478,0x0447,0x0461,0x0445,0x03CA,0x0321,0x0338, + 0x0409,0x03E2,0x02DB,0x02AA,0x0319,0x0294,0x0239,0x0241, + 0x01DE,0x0218,0x01DE,0x01C2,0x01B2,0x013E,0x0181,0x0193, + 0x0195,0x016C,0x015B,0x015F,0x00E8,0x00BE,0x00F6,0x010F, + 0x00D1,0xFFDC,0x0052,0x00A3,0x006E,0x00EC,0x0166,0x0161, + 0x0171,0x0188,0x013E,0x00D0,0x002D,0x01E8,0x0315,0x03DE, + 0x049D,0x0502,0x05F1,0x0699,0x07A2,0x07F2,0x0843,0x0815, + 0x082B,0x08A3,0x0947,0x09B0,0x09B8,0x0A07,0x0A14,0x0962, + 0x0A14,0x0B6A,0x0C8E,0x0D29,0x0CE0,0x0C71,0x0B96,0x0C53, + 0x0DCE,0x0ED9,0x1049,0x1117,0x1127,0x10B8,0x10C2,0x117F, + 0x12DF,0x13C5,0x13F6,0x1392,0x13F7,0x14A7,0x1524,0x1657, + 0x16C5,0x15F1,0x15AE,0x1590,0x15E9,0x16F0,0x17A4,0x17AF, + 0x1713,0x170E,0x1772,0x181F,0x1888,0x18B0,0x1962,0x197D, + 0x18D9,0x17D3,0x178D,0x17CD,0x17D0,0x179F,0x1714,0x1689, + 0x165B,0x15A7,0x151C,0x14AB,0x1428,0x14A7,0x1503,0x1510, + 0x1511,0x1412,0x134A,0x1215,0x110E,0x111B,0x1194,0x1221, + 0x1204,0x11C9,0x116D,0x1107,0x1009,0x0EC7,0x0E95,0x0F21, + 0x0F5B,0x0EDE,0x0DC1,0x0CDB,0x0C66,0x0C1F,0x0BDE,0x0BBF, + 0x0BB5,0x0B6C,0x0B24,0x0A9F,0x09C8,0x08E2,0x07AC,0x0720, + 0x06D4,0x0749,0x07DF,0x0787,0x06BE,0x0531,0x04E4,0x057D, + 0x04F7,0x0472,0x0486,0x043D,0x0175,0x01E0,0x01D5,0x01EA, + 0x02BA,0x0292,0x011C,0xFFD6,0xFFBC,0xFFAC,0xFFC1,0x003D, + 0x0005,0xFF1F,0xFD83,0xFC68,0xFBDC,0xFC0E,0xFC64,0xFCA7, + 0xFC66,0xFC02,0xFBB8,0xFB41,0xFA6D,0xF944,0xF858,0xF75E, + 0xF5F8,0xF423,0xF1FA,0xEE88,0xEA84,0xE5E2,0xE202,0xE11C, + 0xE311,0xE6B2,0xEAF0,0xEE2A,0xEED1,0xECF7,0xE87F,0xE3AB, + 0xE158,0xE17D,0xE3A7,0xE689,0xE9E7,0xED8A,0xEFDF,0xF1A3, + 0xF293,0xF33A,0xF409,0xF4E0,0xF69E,0xF808,0xF9A9,0xFA42, + 0xFAC3,0xFC59,0xFF95,0x022E,0x0650,0x0983,0x0B9F,0x0BE8, + 0x0ABF,0x07FE,0x059D,0x0526,0x0693,0x082B,0x092D,0x0A30, + 0x0AEF,0x0B54,0x0ABE,0x0967,0x0797,0x05B3,0x0442,0x024B, + 0x0058,0xFF0D,0xFE3F,0xFCC0,0xFB8B,0xFB0C,0xFA80,0xF9A6, + 0xF835,0xF690,0xF41B,0xF09F,0xED7B,0xEB29,0xEA26,0xE998, + 0xE901,0xE96B,0xE931,0xE849,0xE79D,0xE6DF,0xE5A2,0xE381, + 0xE26B,0xE1F1,0xE1E3,0xE24A,0xE314,0xE342,0xE40E,0xE49D, + 0xE511,0xE4E8,0xE4F2,0xE5F2,0xE684,0xE58E,0xE4AA,0xE4F8, + 0xE5DE,0xE721,0xE8FB,0xEB63,0xEDFB,0xEF45,0xEFB7,0xF009, + 0xF0A9,0xF130,0xF207,0xF2C2,0xF3E0,0xF47F,0xF569,0xF64E, + 0xF761,0xF874,0xF979,0xF97A,0xF929,0xF8F4,0xF967,0xF95B, + 0xF8FF,0xF832,0xF843,0xF8A3,0xF886,0xF7FF,0xF7CD,0xF805, + 0xF83A,0xF78F,0xF615,0xF4A4,0xF426,0xF377,0xF2B3,0xF1A5, + 0xF1AB,0xF148,0xF0A1,0xEF60,0xEF38,0xEFDF,0xEEF2,0xED7C, + 0xEC62,0xEBC2,0xEB3F,0xEA46,0xEACA,0xEBED,0xECA7,0xECAA, + 0xECB7,0xECA6,0xEBCE,0xEDBB,0xECAD,0xEBAA,0xECF8,0xECAA, + 0xEC9D,0xED5B,0xEE54,0xEF18,0xEFE1,0xF04E,0xF0FE,0xF20E, + 0xF34B,0xF371,0xF3BE,0xF479,0xF511,0xF574,0xF5C4,0xF6F2, + 0xF85F,0xFA4A,0xFAAA,0xFA3F,0xFA36,0xFA4E,0xFAA4,0xFB1A, + 0xFBCC,0xFCDA,0xFD9C,0xFD74,0xFD1E,0xFCF7,0xFD79,0xFDA8, + 0xFDF8,0xFEAA,0xFEE0,0xFE54,0xFD65,0xFCD3,0xFCD9,0xFD92, + 0xFE17,0xFE49,0xFD1F,0xFC18,0xFAC9,0xFA65,0xFAF9,0xFB49, + 0xFB09,0xF9AB,0xF8C8,0xF8A4,0xF969,0xF9BA,0xF94B,0xF8AD, + 0xF790,0xF6F2,0xF66A,0xF4F1,0xF4CE,0xF5CE,0xF548,0xF4B0, + 0xF46E,0xF4E5,0xF5AF,0xF69B,0xF64E,0xF5AC,0xF575,0xF5A6, + 0xF6FC,0xF809,0xF7AB,0xF757,0xF6A6,0xF6CA,0xF6D8,0xF82A, + 0xFA48,0xFAE0,0xF8FA,0xF564,0xF04C,0xE9BD,0xE281,0xDA85, + 0xD2AD,0xCDE6,0xCDE2,0xD3FC,0xDE61,0xE91C,0xEFA3,0xF049, + 0xEA7D,0xE09B,0xD7EB,0xD35C,0xD49B,0xD9BB,0xE15E,0xE9DD, + 0xF08B,0xF741,0xFCFD,0x0132,0x0345,0x0410,0x0360,0x03F7, + 0x066B,0x0A31,0x0DD8,0x10F3,0x14F9,0x1A38,0x20FE,0x287A, + 0x2FFF,0x34EF,0x3539,0x316D,0x2BF9,0x27A4,0x2602,0x2778, + 0x2ADE,0x2FBD,0x3424,0x3711,0x37D9,0x363E,0x3368,0x2EDC, + 0x2902,0x23B2,0x1FC1,0x1DB8,0x1C5B,0x1A2A,0x1809,0x16C0, + 0x1458,0x12C9,0x1175,0x0F6B,0x0C23,0x065B,0xFF96,0xF92C, + 0xF3FF,0xF02B,0xEE9A,0xEEDF,0xEFEB,0xF143,0xF0D5,0xEF06, + 0xECB0,0xE975,0xE56F,0xE18A,0xDF0B,0xDECF,0xE004,0xE1DD, + 0xE486,0xE6AE,0xE86A,0xE96D,0xEA84,0xEA9D,0xEC7A,0xEDA7, + 0xEDAA,0xED0F,0xEE4A,0xEF06,0xF14F,0xF743,0xFA48,0xFE2C, + 0x01B7,0x03FD,0x055B,0x0653,0x0658,0x0694,0x06D4,0x07B8, + 0x097C,0x0C28,0x0F36,0x1172,0x136E,0x14DF,0x15C7,0x1522, + 0x1454,0x12BD,0x11B5,0x1122,0x10D7,0x1087,0x10B3,0x10C7, + 0x107D,0x0FB1,0x0EA4,0x0DCE,0x0C74,0x0AA0,0x090F,0x06DC, + 0x04F4,0x0275,0xFFCD,0xFE42,0xFD75,0xFD32,0xFCEC,0xFC28, + 0xFAD1,0xF850,0xF57D,0xF284,0xF0F9,0xEFAA,0xEF7D,0xEF41, + 0xEF9C,0xEFB9,0xEF66,0xEF7B,0xEF63,0xEF47,0xEFD6,0xF056, + 0xF037,0xF1E7,0xF224,0xF1CA,0xF23E,0xF2F8,0xF436,0xF5D1, + 0xF80E,0xF9DE,0xFB3F,0xFBF3,0xFC13,0xFC1D,0xFC5F,0xFD10, + 0xFE78,0x007C,0x0209,0x03A8,0x0456,0x054C,0x0714,0x074D, + 0x06EF,0x078A,0x0815,0x07E3,0x0861,0x0834,0x08F5,0x09D3, + 0x09C9,0x095D,0x0956,0x093C,0x0969,0x089B,0x07D4,0x06DA, + 0x062B,0x04FF,0x03DF,0x03D1,0x03DD,0x03A1,0x0206,0x005C, + 0x0032,0xFF40,0xFDCD,0xFCDB,0xFCA8,0xFBD6,0xFAD6,0xFA42, + 0xF9D5,0xF932,0xF7E7,0xF696,0xF5BE,0xF521,0xF537,0xF4E4, + 0xF435,0xF437,0xF3EF,0xF390,0xF39F,0xF429,0xF521,0xF606, + 0xF647,0xF631,0xF691,0xF684,0xF682,0xF675,0xF719,0xF8C7, + 0xFA5A,0xFAA9,0xFB78,0xFC98,0xFCE4,0xFC3B,0xF9D8,0xF60C, + 0xF0FF,0xEA09,0xE1C6,0xD817,0xCFCB,0xCB36,0xCCB0,0xD560, + 0xE1FA,0xEE1F,0xF4BE,0xF30C,0xEA44,0xDF11,0xD5FE,0xD1FE, + 0xD425,0xDB24,0xE4B2,0xEE66,0xF68A,0xFC6B,0x00E1,0x0412, + 0x061C,0x0797,0x084F,0x0A56,0x0D3C,0x0EF3,0x1062,0x12BB, + 0x16DD,0x1CC3,0x2582,0x30B0,0x3645,0x3A3E,0x3954,0x333B, + 0x2C3C,0x2751,0x2671,0x295C,0x2E35,0x33EE,0x3857,0x39E6, + 0x38EC,0x3623,0x331F,0x2EFD,0x2A11,0x246D,0x206B,0x1D8C, + 0x1BBE,0x1964,0x1684,0x14C5,0x13E8,0x131D,0x116A,0x0E8B, + 0x09E4,0x0369,0xFC60,0xF5B8,0xF063,0xEDA6,0xED0B,0xEDA1, + 0xEEBA,0xEFB9,0xEFE7,0xEEA8,0xEB89,0xE765,0xE32C,0xDFDC, + 0xDD86,0xDD1A,0xDEAE,0xE17C,0xE452,0xE5FC,0xE74D,0xE8FE, + 0xEAE6,0xECC3,0xEE5D,0xEF05,0xEEA8,0xEDBD,0xEDCC,0xEF8A, + 0xF311,0xF741,0xFB3C,0xFE4C,0x029A,0x0530,0x05E7,0x0572, + 0x04C1,0x04B7,0x05C5,0x07DB,0x0AB3,0x0E17,0x112C,0x1320, + 0x14BD,0x15D1,0x15FB,0x15B3,0x1596,0x14B1,0x137D,0x1303, + 0x11EA,0x1082,0x0F69,0x0F93,0x1074,0x10E0,0x1199,0x1081, + 0x0DB2,0x0A76,0x06C2,0x03FD,0x0137,0xFFC1,0xFF1D,0xFF0C, + 0xFE96,0xFDD6,0xFC75,0xFAB1,0xF8CD,0xF656,0xF52C,0xF3E6, + 0xF141,0xEFF0,0xEF46,0xEE4C,0xED8D,0xEE0C,0xEE5A,0xEF1D, + 0xEF84,0xF05B,0xF127,0xF070,0xEF59,0xEEDB,0xEF01,0xF01F, + 0xF190,0xF372,0xF50F,0xF6CD,0xF860,0xF99B,0xFAD4,0xFB76, + 0xFBF0,0xFC4E,0xFD10,0xFDBB,0xFF4F,0x00F2,0x0379,0x0589, + 0x073B,0x0846,0x0888,0x0924,0x09BB,0x09CA,0x0954,0x0A1A, + 0x0A7F,0x0B36,0x0BD3,0x0C24,0x0CA6,0x0C44,0x0BCF,0x0B8A, + 0x0B01,0x0A6A,0x09E0,0x090A,0x07A6,0x0705,0x0695,0x0678, + 0x069B,0x06A0,0x05D1,0x0484,0x02A3,0x0150,0x0038,0xFF5B, + 0xFE62,0xFDBD,0xFCD9,0xFBF5,0xFA82,0xFA14,0xF9FD,0xFA70, + 0xFA69,0xF9E9,0xF881,0xF575,0xF68F,0xF636,0xF569,0xF5CC, + 0xF68B,0xF6B8,0xF665,0xF6C3,0xF803,0xF8DB,0xF8B1,0xF85B, + 0xF87B,0xF8DC,0xF95C,0xFA3A,0xFB9D,0xFC9F,0xFCA4,0xFC40, + 0xFC78,0xFCC9,0xFBC3,0xF7AE,0xF15E,0xE93E,0xDF68,0xD595, + 0xCE98,0xCCB4,0xD138,0xDB3B,0xE76F,0xF141,0xF54B,0xF1EB, + 0xE896,0xDE38,0xD6B6,0xD3F5,0xD6CC,0xDE13,0xE781,0xF0CA, + 0xF857,0xFE14,0x01D2,0x048A,0x06B8,0x0824,0x0993,0x0B1A, + 0x0C46,0x0CC3,0x0E50,0x11EF,0x17D8,0x1F8A,0x287F,0x3172, + 0x392D,0x3C25,0x38D1,0x3390,0x2DA1,0x29CA,0x28A9,0x2AB7, + 0x2F1B,0x33CF,0x383A,0x3ADC,0x3B7E,0x389C,0x3365,0x2DBC, + 0x27F3,0x2346,0x1FA7,0x1CAB,0x19FB,0x18A8,0x1723,0x1513, + 0x138C,0x131C,0x1180,0x0E49,0x0909,0x0212,0xFB11,0xF49A, + 0xF021,0xED9D,0xED78,0xEE77,0xEFC8,0xF016,0xEFF1,0xEE14, + 0xEAC1,0xE5EE,0xE0E2,0xDDB5,0xDCD2,0xDDCC,0xDE2F,0xE095, + 0xE3B7,0xE577,0xE689,0xE817,0xE9EE,0xEBA3,0xEC40,0xEC29, + 0xEBE1,0xEC40,0xECF6,0xEEE3,0xF1AF,0xF5D1,0xFA66,0xFE86, + 0x01CF,0x0406,0x0599,0x0533,0x047C,0x0455,0x0586,0x07F2, + 0x0AAB,0x0D3B,0x1001,0x11E9,0x12D3,0x130E,0x13B4,0x14C8, + 0x14E9,0x1364,0x113C,0x0F46,0x0E46,0x0DE7,0x0DAB,0x0E23, + 0x0EFA,0x0F0C,0x0E2B,0x0C73,0x0A48,0x07BE,0x051D,0x023E, + 0xFFCA,0xFE6F,0xFDB4,0xFCE0,0xFB45,0xFA4A,0xF937,0xF7FE, + 0xF67F,0xF532,0xF3DB,0xF16D,0xEE81,0xEBFA,0xEB40,0xEB62, + 0xEC88,0xED3E,0xEDC7,0xEE06,0xEE17,0xECF0,0xEC83,0xED0C, + 0xED3D,0xECA8,0xEE42,0xEDD3,0xEDDA,0xF03B,0xF1D3,0xF3F9, + 0xF63A,0xF79F,0xF801,0xF8B3,0xF99D,0xFAD6,0xFB67,0xFC6F, + 0xFDCB,0xFF31,0x00B4,0x025A,0x03F2,0x05A8,0x0775,0x0722, + 0x064A,0x0620,0x076A,0x08D3,0x09DF,0x0A35,0x0A34,0x09E4, + 0x09CD,0x0A32,0x0AEF,0x0BEB,0x0B69,0x0A0E,0x0868,0x083B, + 0x08A1,0x0832,0x0713,0x061D,0x048D,0x02BA,0x021D,0x031A, + 0x039D,0x0337,0x019C,0xFF05,0xFCF6,0xFB92,0xFB1E,0xFBB7, + 0xFC68,0xFC45,0xFADF,0xF91B,0xF812,0xF789,0xF74C,0xF715, + 0xF6F9,0xF5FF,0xF37B,0xF36C,0xF497,0xF563,0xF566,0xF593, + 0xF5D0,0xF69E,0xF75A,0xF876,0xF982,0xF9CD,0xF9B6,0xF929, + 0xF918,0xFA02,0xFBFB,0xFDA0,0xFD38,0xF935,0xF387,0xED92, + 0xE5E5,0xDC95,0xD3FC,0xCDC7,0xCCCB,0xD23A,0xDE1C,0xEB5A, + 0xF465,0xF63E,0xF092,0xE602,0xDB91,0xD5D3,0xD5FD,0xDBA7, + 0xE446,0xED14,0xF523,0xFC72,0x0216,0x06C0,0x0AB1,0x0BAD, + 0x0BD4,0x0C5F,0x0DC9,0x0F1F,0x10FE,0x1368,0x1747,0x1CE3, + 0x2523,0x2EAB,0x36F2,0x3C9E,0x3E44,0x3B02,0x3450,0x2D8E, + 0x29F5,0x2AFF,0x2F0E,0x342F,0x396A,0x3CFA,0x3DF7,0x3C1B, + 0x37FA,0x32E4,0x2EBA,0x29CC,0x250C,0x20D7,0x1E3C,0x1C4F, + 0x19BF,0x1711,0x150C,0x137F,0x1273,0x110C,0x0DF7,0x0924, + 0x021A,0xFA33,0xF34F,0xEE20,0xEBFE,0xECCD,0xEF3B,0xF085, + 0xEFDD,0xEE68,0xEB90,0xE80A,0xE484,0xE1D5,0xDFB3,0xDE54, + 0xDDE8,0xDE39,0xE056,0xE32C,0xE543,0xE775,0xE915,0xEA6B, + 0xEB75,0xEBF8,0xEBE0,0xEC20,0xEC4E,0xEDE4,0xF037,0xF3BC, + 0xF85C,0xFE2B,0x0177,0x03D7,0x0700,0x065F,0x0618,0x0730, + 0x07F2,0x0926,0x0AA3,0x0C16,0x0E4B,0x10D1,0x13C2,0x15DC, + 0x16EE,0x16F7,0x15C7,0x13C7,0x1280,0x11A4,0x110D,0x0FC5, + 0x0E8D,0x0E65,0x0ED4,0x0F39,0x0F48,0x0DF2,0x0C51,0x0A60, + 0x075D,0x039A,0x003F,0xFE72,0xFCA5,0xFAF4,0xF9D1,0xF974, + 0xF966,0xF8E8,0xF718,0xF4AE,0xF26A,0xF080,0xEEA7,0xED09, + 0xEC7F,0xEC94,0xEB99,0xEADD,0xE9FF,0xEA8F,0xEBDF,0xEC91, + 0xED1F,0xED8C,0xED1D,0xEBFB,0xEB4A,0xEB47,0xEC6D,0xEE3F, + 0xF244,0xF433,0xF5DD,0xF7B5,0xF904,0xF9FA,0xFA3F,0xFA9B, + 0xFB10,0xFC5D,0xFD5D,0xFEE6,0x00B1,0x01F6,0x02B8,0x030E, + 0x04BA,0x06AF,0x0870,0x087B,0x08A7,0x0970,0x08EB,0x07E5, + 0x07D6,0x08D0,0x09CA,0x0A6D,0x09DF,0x0A3A,0x0A88,0x0A4A, + 0x08FD,0x07AA,0x0646,0x0546,0x0478,0x0401,0x0454,0x0431, + 0x02FB,0x00D5,0xFF2A,0xFEC9,0xFE8E,0xFD5E,0xFC61,0xFC41, + 0xFAAE,0xF858,0xF6C0,0xF64E,0xF6F5,0xF708,0xF699,0xF652, + 0xF52C,0xF47B,0xF480,0xF434,0xF2AF,0xF294,0xF1EA,0xF18D, + 0xF266,0xF36C,0xF446,0xF4C1,0xF52C,0xF523,0xF531,0xF63B, + 0xF7D0,0xF804,0xF7C8,0xF791,0xF7E0,0xF87F,0xF9B6,0xFA2A, + 0xF96C,0xF6F5,0xF26C,0xEB94,0xE2DB,0xD927,0xCFFE,0xC9DE, + 0xCA0E,0xD189,0xDDB0,0xE9DB,0xF23B,0xF331,0xECC3,0xE172, + 0xD6BF,0xD14D,0xD2DA,0xD936,0xE1F5,0xEABB,0xF322,0xF9F1, + 0xFE1E,0x0086,0x025A,0x0449,0x0613,0x07F1,0x09E8,0x0BDF, + 0x0DC0,0x0EE5,0x1166,0x174B,0x2027,0x2A4C,0x3316,0x389A, + 0x3843,0x3444,0x2DE9,0x2540,0x2389,0x25C5,0x2A6F,0x2FDE, + 0x34B1,0x3790,0x37D6,0x35B5,0x3257,0x2E48,0x299F,0x24B9, + 0x1FD6,0x1C8D,0x19DE,0x1765,0x1504,0x12ED,0x11EF,0x10F9, + 0x0FD9,0x0EA2,0x0C06,0x06A3,0xFE91,0xF5CC,0xEEF7,0xEBA2, + 0xEAD2,0xEBA8,0xEDC4,0xEFA8,0xEF68,0xECBD,0xE92E,0xE605, + 0xE382,0xE0AF,0xDDB7,0xDCDC,0xDD36,0xDE12,0xDFDC,0xE27D, + 0xE565,0xE7D4,0xE9E9,0xEB17,0xEC55,0xECFC,0xECFB,0xECB4, + 0xECDE,0xEEAE,0xF1CD,0xF55B,0xF987,0xFE3F,0x020F,0x050A, + 0x06BD,0x05F4,0x0421,0x045F,0x049E,0x059B,0x0770,0x0A19, + 0x0D29,0x0FE4,0x1253,0x13E8,0x1509,0x1513,0x1417,0x131A, + 0x1224,0x10EC,0x0F40,0x0E98,0x0D8A,0x0D28,0x0EBA,0x107D, + 0x107B,0x0F58,0x0D90,0x09F5,0x05E5,0x0376,0x01C7,0x007A, + 0xFEC6,0xFD36,0xFC08,0xFB0E,0xFAAB,0xFA75,0xF9E2,0xF830, + 0xF672,0xF3DF,0xF1F0,0xF084,0xEF23,0xEF4B,0xEE63,0xEE21, + 0xEEDB,0xEFA1,0xF05D,0xF09B,0xF06F,0xF044,0xEF6B,0xEEDF, + 0xEF05,0xF008,0xF18D,0xF339,0xF495,0xF5B4,0xF716,0xF812, + 0xF970,0xFB36,0xFD23,0xFE1E,0xFDFB,0xFD84,0xFE10,0xFF80, + 0x018F,0x0378,0x0589,0x0760,0x087D,0x0928,0x0956,0x0991, + 0x0935,0x08C2,0x0891,0x0925,0x09F6,0x0AE8,0x0B71,0x0C1D, + 0x0BB2,0x0B12,0x0A19,0x0938,0x08E4,0x08A1,0x085F,0x0774, + 0x0568,0x0393,0x02ED,0x033A,0x03AD,0x03D5,0x0363,0x01F4, + 0x003A,0xFED4,0xFDEE,0xFD81,0xFC87,0xFB1A,0xFA51,0xF9F0, + 0xFA07,0xF99A,0xF9A8,0xF8E6,0xF80D,0xF784,0xF6F4,0xF6D6, + 0xF7A3,0xF6F8,0xF4A6,0xF67D,0xF6C4,0xF75B,0xF90C,0xF99D, + 0xF987,0xF8AA,0xF80C,0xF8D8,0xF9A0,0xFA97,0xFBE1,0xFCA3, + 0xFCB8,0xFCBF,0xFCF8,0xFD37,0xFC06,0xF8B0,0xF32D,0xEB52, + 0xE22C,0xD8DE,0xD0F3,0xCCC4,0xCED7,0xD767,0xE3A5,0xEEEA, + 0xF4A3,0xF31A,0xEBB7,0xE0D0,0xD6EB,0xD2E7,0xD5C6,0xDD37, + 0xE634,0xEF12,0xF6FD,0xFD2C,0x01F7,0x0549,0x06CE,0x0856, + 0x09D4,0x0ACB,0x0B9A,0x0E3A,0x10E3,0x138C,0x1751,0x1CDC, + 0x248D,0x2DB6,0x3555,0x39A2,0x3918,0x34B6,0x2E90,0x2A94, + 0x293B,0x2A28,0x2ED3,0x33FF,0x388C,0x3AAF,0x3B78,0x3947, + 0x347F,0x2E68,0x2828,0x23C0,0x1FFE,0x1CCB,0x1AD1,0x196C, + 0x17D6,0x15E1,0x1331,0x10E5,0x1013,0x0DF5,0x08FF,0x0309, + 0xFD19,0xF5E7,0xEF79,0xEBDF,0xEA91,0xEB96,0xED5B,0xEE5B, + 0xEECA,0xED0A,0xE9A3,0xE482,0xDFC3,0xDCD3,0xDB4E,0xDB88, + 0xDD0F,0xDF42,0xE1B8,0xE34B,0xE388,0xE3C2,0xE676,0xE99A, + 0xEAAD,0xEB46,0xEB6E,0xEB24,0xEC4B,0xEDD6,0xF028,0xF42D, + 0xF860,0xFCB6,0x00F2,0x0354,0x0448,0x0467,0x0320,0x01D4, + 0x0238,0x0528,0x08AF,0x0B9F,0x0DF8,0x0F6B,0x104B,0x10C0, + 0x10E9,0x1107,0x1124,0x108F,0x0F9A,0x0E60,0x0D53,0x0CE8, + 0x0C38,0x0B1D,0x0AD9,0x0B61,0x0B45,0x0A9D,0x08DC,0x06B4, + 0x03E4,0x002A,0xFC44,0xFA00,0xF95D,0xF9CD,0xF9BF,0xF93F, + 0xF868,0xF6E9,0xF3E1,0xF05F,0xEE36,0xECE9,0xEC19,0xEB1A, + 0xEA72,0xEA81,0xEA83,0xE9EE,0xE95E,0xE9B6,0xE9F5,0xEB02, + 0xEB0B,0xEB89,0xEBDB,0xEBAB,0xEAC2,0xEABE,0xEC84,0xEEA8, + 0xF087,0xF46C,0xF413,0xF4D1,0xF661,0xF61B,0xF713,0xF8E1, + 0xFAAA,0xFBD0,0xFCE5,0xFDEC,0xFF1C,0x0088,0x0219,0x03EE, + 0x0542,0x0620,0x074D,0x08D0,0x0975,0x0920,0x0839,0x07C0, + 0x073C,0x07D7,0x0957,0x0A98,0x0BDF,0x0BC4,0x0ADB,0x08F7, + 0x079B,0x0709,0x0751,0x06C2,0x05B1,0x048C,0x03DC,0x02DE, + 0x01DF,0x01CC,0x0130,0x00C7,0xFF8C,0xFE6E,0xFD54,0xFC7C, + 0xFBA8,0xFA4D,0xF8EE,0xF816,0xF83F,0xF8A9,0xF949,0xF8EF, + 0xF846,0xF762,0xF6F6,0xF64A,0xF5CD,0xF655,0xF6BB,0xF66A, + 0xF56F,0xF370,0xF375,0xF481,0xF59E,0xF6F8,0xF831,0xF92A, + 0xF8C8,0xF858,0xF87C,0xF91C,0xFA34,0xFA9C,0xFB1B,0xFA2E, + 0xF791,0xF30A,0xECDD,0xE59C,0xDD5A,0xD739,0xD5BA,0xDA4B, + 0xE355,0xEDD8,0xF5CE,0xF82E,0xF499,0xED22,0xE503,0xE023, + 0xDFBB,0xE367,0xE9DB,0xF0AF,0xF6D9,0xFCC0,0x0151,0x0463, + 0x0710,0x090A,0x0AC6,0x0B9B,0x0CC4,0x0E61,0x0E4F,0x0F27, + 0x113C,0x14DE,0x1ABD,0x2282,0x29BE,0x2EAE,0x2F95,0x2D89, + 0x28E9,0x2361,0x2034,0x2142,0x249D,0x2845,0x2B9A,0x2DC5, + 0x2EC2,0x2DB9,0x2B70,0x2851,0x2466,0x208E,0x1C89,0x1961, + 0x16D8,0x14F9,0x1247,0x0F5B,0x0DB6,0x0DAB,0x0E1B,0x0E1A, + 0x0C8A,0x084D,0x019E,0xFA38,0xF3D0,0xF028,0xEFAE,0xF092, + 0xF19B,0xF27C,0xF262,0xF145,0xEF6F,0xED12,0xEA5F,0xE84A, + 0xE67B,0xE519,0xE522,0xE5E8,0xE73B,0xE912,0xEA3E,0xEBAC, + 0xEDFA,0xF054,0xF22A,0xF2B6,0xF2A5,0xF1E8,0xF0FB,0xF0F0, + 0xF2E8,0xF69B,0xFAD9,0xFDE3,0x015E,0x0412,0x0599,0x0650, + 0x0728,0x059C,0x0628,0x083C,0x07AB,0x08FA,0x0B34,0x0D40, + 0x0E98,0x0FDE,0x113D,0x120B,0x11F9,0x10FB,0x0FDC,0x0EA1, + 0x0D32,0x0BAC,0x0B00,0x0B87,0x0BFF,0x0BE9,0x0BCE,0x0B46, + 0x0A35,0x083F,0x05B4,0x038A,0x024C,0x00AC,0xFE52,0xFC31, + 0xFB2B,0xFB8A,0xFB44,0xFB19,0xFAAC,0xF9EC,0xF847,0xF5D7, + 0xF371,0xF206,0xF187,0xF0DE,0xF009,0xF075,0xF14A,0xF13C, + 0xF190,0xF19C,0xF1A0,0xF1C0,0xF1BA,0xF218,0xF220,0xF245, + 0xF289,0xF2E4,0xF37D,0xF4BE,0xF686,0xF8EA,0xFB3A,0xFE85, + 0xFE89,0xFE05,0xFD47,0xFD0E,0xFDB8,0xFFAC,0x020B,0x0311, + 0x03CF,0x049E,0x061D,0x0748,0x07C7,0x0822,0x0838,0x080C, + 0x07F0,0x07A7,0x07E9,0x0962,0x09EB,0x0955,0x0801,0x084F, + 0x08D8,0x089C,0x08C6,0x0864,0x06DD,0x0492,0x0343,0x02EC, + 0x0345,0x02C4,0x0275,0x01A9,0x00AE,0xFF79,0xFE7A,0xFD78, + 0xFCF1,0xFBEB,0xFAC2,0xF979,0xF839,0xF888,0xFA06,0xFA9B, + 0xF995,0xF880,0xF760,0xF6BB,0xF6AD,0xF6FB,0xF710,0xF5FC, + 0xF58D,0xF4B5,0xF43B,0xF4A1,0xF5C4,0xF66A,0xF667,0xF5E8, + 0xF556,0xF590,0xF684,0xF7A4,0xF822,0xF8BB,0xF918,0xF976, + 0xFAA3,0xFBAB,0xFCB1,0xFBF4,0xFA55,0xF971,0xF854,0xF74E, + 0xF6B3,0xF664,0xF64D,0xF6FC,0xF83A,0xFAF1,0xFDC5,0xFF98, + 0xFEFD,0xFC49,0xF932,0xF6E1,0xF661,0xF74E,0xF9A7,0xFBDB, + 0xFE0F,0xFF60,0xFFFB,0x0080,0x00FE,0x0086,0x0024,0xFFC4, + 0xFFAC,0xFFE3,0x009A,0x00F1,0x012D,0x014E,0x01ED,0x0407, + 0x05EE,0x07A2,0x088B,0x072F,0x0483,0x024D,0x017D,0x00DE, + 0x0389,0x0669,0x0593,0x06C0,0x06FD,0x0626,0x04F8,0x039E, + 0x02B9,0x01F0,0x01AA,0x0143,0x0164,0x01F9,0x0257,0x01EB, + 0x013A,0x007D,0x00AF,0x011A,0x010B,0xFFCE,0xFF08,0xFE35, + 0xFCEF,0xFBA5,0xFB1F,0xFC0C,0xFD69,0xFE44,0xFE3C,0xFE31, + 0xFE16,0xFD11,0xFB94,0xFB20,0xFABA,0xFA59,0xFA62,0xFA28, + 0xFAB3,0xFB0D,0xFB29,0xFA98,0xFA23,0xF9E3,0xF97D,0xF90C, + 0xF85A,0xF7CE,0xF6C7,0xF5F4,0xF5BD,0xF63E,0xF771,0xF883, + 0xF937,0xF97B,0xF9A5,0xF98D,0xF8AB,0xF823,0xF79E,0xF78E, + 0xF67B,0xF4E5,0xF5C8,0xF58D,0xF59E,0xF581,0xF556,0xF484, + 0xF3D5,0xF32A,0xF2AF,0xF20B,0xF182,0xF119,0xF0BE,0xF00E, + 0xEF74,0xEF42,0xEF9A,0xEE7F,0xED8B,0xED9D,0xED85,0xEC41, + 0xEBA1,0xEBDE,0xEB81,0xEB59,0xEBAC,0xEB50,0xEAD5,0xEA82, + 0xEA25,0xE9D6,0xE999,0xE98E,0xE8F2,0xE928,0xE92C,0xE8F3, + 0xE8E7,0xE8CD,0xE89B,0xE899,0xE9E2,0xE9F9,0xE8E6,0xE8B1, + 0xE89F,0xE899,0xE8D0,0xE8C2,0xE8F0,0xE9A8,0xEAD0,0xEB63, + 0xEB38,0xEBB1,0xEC2E,0xECD7,0xED52,0xED8B,0xED7F,0xED60, + 0xEDC1,0xEDE6,0xEE3E,0xEF11,0xEFDD,0xF001,0xF07A,0xF0F1, + 0xF168,0xF190,0xF1C4,0xF1F3,0xF229,0xF26F,0xF2C4,0xF363, + 0xF3E7,0xF3FA,0xF43A,0xF4BA,0xF525,0xF558,0xF59E,0xF5F1, + 0xF668,0xF6D1,0xF6F4,0xF706,0xF7C1,0xF863,0xF897,0xF8DB, + 0xF95A,0xF959,0xF98B,0xFA0C,0xFA34,0xFA88,0xFB36,0xFB66, + 0xFBEF,0xFC6F,0xFCE9,0xFDB5,0xFE0F,0xFE5B,0xFE84,0xFF20, + 0xFF82,0x007D,0x0043,0x010D,0x0194,0x0174,0x01BC,0x02BA, + 0x031E,0x01BC,0x03A9,0x0443,0x044C,0x049F,0x04F5,0x052F, + 0x055C,0x056C,0x05BA,0x0643,0x06B5,0x0715,0x07B4,0x077C, + 0x072F,0x0762,0x07C4,0x0847,0x080D,0x0877,0x08CD,0x090A, + 0x08C9,0x088D,0x090C,0x08F1,0x0924,0x098A,0x0A20,0x0A43, + 0x0A82,0x0A40,0x0A3F,0x0A28,0x0A7E,0x0AC1,0x0AA6,0x0B2C, + 0x0B43,0x0AF2,0x0B15,0x0AE8,0x0B14,0x0B89,0x0BF3,0x0C55, + 0x0C75,0x0CD8,0x0C94,0x0C63,0x0C5A,0x0C45,0x0C75,0x0D08, + 0x0D21,0x0CFB,0x0CF5,0x0D22,0x0D36,0x0D52,0x0EFB,0x1093, + 0x101D,0x0FF1,0x0F87,0x0FBE,0x0F8F,0x0F90,0x0F41,0x0F06, + 0x0F1D,0x0F39,0x0F1B,0x0F13,0x0F5F,0x0F2A,0x0EA3,0x0EA6, + 0x0E9B,0x0E6D,0x0E28,0x0F2A,0x0F2F,0x0E53,0x0DC1,0x0DEA, + 0x0DD3,0x0DA5,0x0DD7,0x0D97,0x0D0A,0x0CF0,0x0C8B,0x0C7F, + 0x0C66,0x0C74,0x0CFD,0x0D14,0x0CC8,0x0CB0,0x0C91,0x0C90, + 0x0C97,0x0CA9,0x0D2F,0x0C8B,0x0BB9,0x0C6C,0x0D28,0x0CF5, + 0x0C6D,0x0C57,0x0C6D,0x0C80,0x0C34,0x0C26,0x0BB9,0x0AD7, + 0x0A73,0x0A50,0x09DC,0x09C6,0x09E1,0x09CC,0x09C0,0x09AD, + 0x099D,0x09B9,0x09B1,0x09E4,0x0991,0x0951,0x093D,0x096B, + 0x095D,0x08D8,0x090A,0x093C,0x0990,0x090A,0x08B3,0x0881, + 0x0879,0x0847,0x081D,0x080A,0x0806,0x07E0,0x07AF,0x0715, + 0x06FD,0x0729,0x0727,0x0752,0x076A,0x072B,0x06FF,0x06B7, + 0x06B3,0x06A2,0x06A2,0x0695,0x067E,0x0673,0x064B,0x0643, + 0x05CE,0x05C6,0x061B,0x05BA,0x05F6,0x05CB,0x05E6,0x054E, + 0x0506,0x0583,0x0647,0x05FA,0x05FE,0x05DC,0x04FD,0x0462, + 0x0697,0x04F6,0x04B5,0x05AF,0x057E,0x057F,0x0598,0x0596, + 0x0524,0x0507,0x04D8,0x0537,0x04FC,0x0524,0x0548,0x053B, + 0x04CF,0x04C3,0x04B6,0x0487,0x04A7,0x04A6,0x0499,0x044C, + 0x03F9,0x040C,0x0481,0x0429,0x0442,0x04A3,0x04F5,0x04C6, + 0x04A6,0x0413,0x03F5,0x03C7,0x03EB,0x042D,0x0464,0x044D, + 0x0416,0x0428,0x03B7,0x033D,0x031B,0x034B,0x034F,0x037B, + 0x0339,0x02EF,0x02E5,0x02BC,0x0303,0x0302,0x0385,0x037E, + 0x0327,0x033A,0x036F,0x0333,0x02C5,0x02B8,0x02F7,0x027D, + 0x007C,0xFFED,0xFFDF,0xFF6D,0xFF5C,0xFF3C,0xFF57,0xFF25, + 0xFF5C,0xFFA7,0xFFC7,0xFF81,0xFF19,0xFF27,0xFED8,0xFEF3, + 0xFFFA,0x00FB,0x01C4,0x01B8,0x012F,0x0177,0x02B6,0x0367, + 0x0415,0x04B4,0x0523,0x05CE,0x0622,0x068C,0x06A1,0x06AB, + 0x0668,0x0699,0x06B4,0x067C,0x0684,0x0790,0x059A,0x0609, + 0x0840,0x07D3,0x087D,0x0965,0x099E,0x0946,0x08C2,0x091F, + 0x09B9,0x0A66,0x0B38,0x0BD4,0x0D63,0x0E24,0x0E69,0x0E93, + 0x0F6A,0x1099,0x1108,0x11A5,0x11B4,0x11BC,0x11DB,0x127E, + 0x135A,0x14D9,0x15F7,0x1660,0x1664,0x16D8,0x16D3,0x1618, + 0x1600,0x1639,0x16A1,0x1755,0x1878,0x1956,0x1934,0x1823, + 0x1710,0x1769,0x185D,0x18F0,0x1984,0x19A0,0x18CC,0x178F, + 0x168B,0x164D,0x1635,0x1633,0x15FF,0x1600,0x165A,0x160F, + 0x15F4,0x15B2,0x1592,0x1578,0x1693,0x1597,0x1555,0x15A5, + 0x1557,0x14FF,0x14F4,0x143E,0x1317,0x1277,0x12B9,0x12B9, + 0x11AE,0x10DD,0x1106,0x106F,0x0F14,0x0DF9,0x0D7E,0x0DE3, + 0x0E97,0x0EFD,0x0DC9,0x0CBB,0x0BF8,0x0AB2,0x092C,0x092B, + 0x09B6,0x09A1,0x0973,0x091C,0x08DA,0x0883,0x0728,0x0560, + 0x033C,0x0121,0xFF1C,0xFD8A,0xFC3D,0xFAFB,0xF9BA,0xF98A, + 0xFA0C,0xFA56,0xFB5D,0xFC89,0xFB40,0xF816,0xF474,0xF208, + 0xF1DE,0xF3BF,0xF717,0xF9D9,0xFA38,0xF8EA,0xF71B,0xF549, + 0xF406,0xF3CB,0xF3CF,0xF437,0xF5A0,0xF720,0xF869,0xF96D, + 0xF972,0xF94E,0xF890,0xF887,0xF8AE,0xF957,0xF9FA,0xF9F9, + 0xF976,0xF9A1,0xFB2B,0xFD5B,0xFEE8,0xFF82,0xFE80,0xFD38, + 0xFBE4,0xFB48,0xFB89,0xFC77,0xFD73,0xFE48,0xFEE6,0xFEE3, + 0xFF03,0xFE1C,0xFC88,0xFAE9,0xFA59,0xFAE9,0xFBD7,0xFC70, + 0xFC13,0xFB8E,0xFA75,0xF94D,0xF912,0xF98C,0xF98A,0xF86E, + 0xF648,0xF441,0xF2DA,0xF28D,0xF39B,0xF416,0xF490,0xF3B9, + 0xF1F0,0xF046,0xEEA5,0xECDF,0xEADA,0xEBAC,0xED0E,0xEC1E, + 0xED6F,0xEC93,0xEB7A,0xE94D,0xE7B6,0xE737,0xE79B,0xE7E6, + 0xE779,0xE73A,0xE740,0xE6B0,0xE610,0xE645,0xE6F8,0xE7A5, + 0xE74A,0xE693,0xE612,0xE613,0xE57D,0xE572,0xE62A,0xE773, + 0xE91C,0xE9A8,0xE976,0xE869,0xE79C,0xE743,0xE885,0xEA30, + 0xEBDC,0xED07,0xECE9,0xEC7B,0xEC1E,0xEC99,0xECFE,0xEDB7, + 0xEEC0,0xEF96,0xEFB7,0xEFFF,0xF08A,0xF105,0xF1AF,0xF1C7, + 0xF1CE,0xF1F0,0xF25B,0xF3D0,0xF4C0,0xF48E,0xF44F,0xF3EB, + 0xF437,0xF4A3,0xF5BB,0xF6EB,0xF781,0xF58F,0xF30E,0xF3BF, + 0xF4C0,0xF578,0xF5D2,0xF623,0xF58D,0xF562,0xF594,0xF5E8, + 0xF5BA,0xF599,0xF4E4,0xF48F,0xF49D,0xF51B,0xF639,0xF745, + 0xF5E6,0xF40B,0xF414,0xF4C8,0xF534,0xF57C,0xF671,0xF6CF, + 0xF60B,0xF59A,0xF450,0xF2D4,0xF304,0xF34D,0xF470,0xF514, + 0xF4FC,0xF51B,0xF555,0xF4AD,0xF43E,0xF39E,0xF360,0xF3ED, + 0xF4B5,0xF6B3,0xF74C,0xF642,0xF561,0xF4B3,0xF46B,0xF543, + 0xF672,0xF758,0xF802,0xF809,0xF74C,0xF65D,0xF6B3,0xF80F, + 0xF9B3,0xFA4E,0xFB28,0xFB74,0xFB15,0xFA1C,0xF992,0xF9E8, + 0xFA77,0xFB00,0xFB63,0xFC11,0xFD52,0xFDB2,0xFCF4,0xFB72, + 0xFAA8,0xFADC,0xFBD1,0xFD84,0xFE9D,0xFE27,0xFCAE,0xFBCA, + 0xFBC0,0xFD26,0xFF0F,0x0003,0xFF75,0xFDFC,0xFC31,0xFBA5, + 0xFC7C,0xFD97,0xFD99,0xFC1C,0xF964,0xF534,0xEFB1,0xE9AC, + 0xE36D,0xDF2C,0xDECF,0xE338,0xEAF9,0xF176,0xF3C1,0xF05A, + 0xE8BD,0xDF64,0xD84F,0xD6F3,0xDAF5,0xE184,0xE748,0xEAC4, + 0xED71,0xEE4C,0xEE16,0xED07,0xEC16,0xEAEC,0xE982,0xED4A, + 0xF09D,0xF456,0xF953,0xFC6A,0xFF07,0x0207,0x04F5,0x079B, + 0x0843,0x07BF,0x062C,0x04FF,0x06DE,0x0C62,0x1363,0x196C, + 0x1D3E,0x1DA7,0x1C3F,0x19B6,0x18A6,0x191F,0x19F0,0x1B3B, + 0x1D89,0x2054,0x2368,0x25AF,0x2621,0x246D,0x2186,0x1E56, + 0x1CF6,0x1D28,0x1E5C,0x1F03,0x1DA9,0x1BD9,0x1AC1,0x1ABE, + 0x1B86,0x1A74,0x1866,0x14C4,0x0FEF,0x0B8A,0x0998,0x09BC, + 0x0A5B,0x0A43,0x09DA,0x0893,0x064D,0x02E2,0xFF48,0xFB1B, + 0xF750,0xF505,0xF423,0xF6E9,0xF8F8,0xF85A,0xF6D2,0xF497, + 0xF14E,0xEE5D,0xEC2B,0xEB0C,0xEA76,0xE994,0xE8A7,0xE8A4, + 0xE964,0xE9D5,0xEA3A,0xEA7B,0xE9C8,0xE7C7,0xE581,0xE417, + 0xE4E6,0xE583,0xE615,0xE83E,0xEB25,0xECE4,0xEE21,0xEE1F, + 0xED85,0xECA7,0xEBDC,0xEBEE,0xED71,0xF07E,0xF35B,0xF5C2, + 0xF72E,0xF80E,0xF865,0xF90B,0xF927,0xF962,0xFA94,0xFCC9, + 0xFE7C,0xFEFE,0x001C,0x01AC,0x034C,0x0503,0x0651,0x071F, + 0x0783,0x077B,0x0687,0x056F,0x05A1,0x0759,0x0950,0x09DE, + 0x0A60,0x0B3D,0x0B97,0x0A60,0x08AC,0x075E,0x0723,0x0742, + 0x0727,0x07EC,0x0976,0x0A58,0x092B,0x0710,0x05DC,0x04F0, + 0x043E,0x0378,0x0334,0x02E2,0x028B,0x0235,0x0185,0x00FD, + 0x008D,0xFFC9,0xFF10,0xFD4A,0xFB4D,0xF9B2,0xF955,0xF9C3, + 0xF998,0xF9DD,0xF93A,0xF8A8,0xF7A2,0xF668,0xF52E,0xF463, + 0xF3E1,0xF343,0xF265,0xF2BA,0xF3EA,0xF51E,0xF509,0xF3FC, + 0xF2B7,0xF29C,0xF25E,0xF33E,0xF3D6,0xF414,0xF49F,0xF522, + 0xF49A,0xF4FC,0xF67E,0xF7D1,0xF7B4,0xF98F,0xF741,0xF723, + 0xF90A,0xF97F,0xFA79,0xFB98,0xFC3F,0xFCB6,0xFD1A,0xFDFE, + 0xFF57,0xFFED,0x0046,0xFFAA,0xFFB8,0x00DF,0x0272,0x039A, + 0x0460,0x05A8,0x0620,0x060F,0x0548,0x04EA,0x04D0,0x0574, + 0x05F5,0x0628,0x0634,0x0682,0x06C5,0x05BF,0x03DA,0xFFF2, + 0xF9BE,0xF30F,0xECCF,0xE7B5,0xE5C1,0xE6C3,0xEB62,0xF271, + 0xF87A,0xFA40,0xF5BF,0xEC62,0xE216,0xDA2F,0xD86B,0xDC57, + 0xE446,0xED05,0xF3B8,0xF5EB,0xF442,0xF0E7,0xEE01,0xEBE5, + 0xEB94,0xECEC,0xF077,0xF48A,0xF866,0xFA65,0xFD08,0x013C, + 0x0570,0x0801,0x0933,0x094F,0x0827,0x076D,0x07CB,0x0A5D, + 0x0FBE,0x1633,0x1C97,0x21AB,0x23C7,0x2330,0x2107,0x1EB0, + 0x1BEB,0x1C05,0x1F54,0x23DD,0x2836,0x2BD1,0x2D8E,0x2D41, + 0x2BA6,0x2947,0x26CB,0x24F1,0x2339,0x2284,0x2353,0x24D5, + 0x262A,0x2660,0x2579,0x2406,0x21E8,0x1EA6,0x1B99,0x182B, + 0x1604,0x138F,0x107E,0x0F91,0x1002,0x10C8,0x1092,0x0ED8, + 0x0B36,0x066E,0x013D,0xFDB4,0xFB6A,0xFB03,0xFC0C,0xFDC5, + 0xFD98,0xFC4E,0xFA70,0xF7C3,0xF459,0xF0AE,0xEE28,0xED0B, + 0xEC62,0xEBDA,0xEBCE,0xECE8,0xEE1F,0xEE0E,0xED23,0xEC4A, + 0xEB3A,0xEA53,0xE882,0xE735,0xE769,0xE8D4,0xEA2B,0xEC94, + 0xEF35,0xF199,0xF234,0xF0AF,0xEEE4,0xEE53,0xEEB5,0xF014, + 0xF2A8,0xF59D,0xF7F2,0xF978,0xFA6E,0xFB9D,0xFD03,0xFDDA, + 0xFE4B,0xFE3D,0xFDC5,0xFE6B,0x0008,0x023E,0x0529,0x078B, + 0x094C,0x0A30,0x0ABB,0x0B58,0x0AAB,0x0A70,0x0988,0x09D2, + 0x0B70,0x0D35,0x0ED6,0x1034,0x11A1,0x0F61,0x0DAB,0x0DE3, + 0x0CBA,0x0CC7,0x0D39,0x0D0E,0x0C37,0x0B60,0x0A39,0x09CB, + 0x0ACA,0x0B95,0x0AE2,0x0997,0x0770,0x05B6,0x047E,0x0370, + 0x02B6,0x027E,0x027B,0x026B,0x01F4,0x011D,0xFF6F,0xFD60, + 0xFBB7,0xFA94,0xFAA4,0xFA8F,0xFA68,0xF967,0xF8CA,0xF80C, + 0xF6BE,0xF61C,0xF5E0,0xF625,0xF59C,0xF478,0xF38A,0xF34F, + 0xF38A,0xF452,0xF4E0,0xF494,0xF48A,0xF4AD,0xF3FE,0xF3B3, + 0xF3C4,0xF459,0xF500,0xF602,0xF6D6,0xF6F4,0xF74B,0xF777, + 0xF7C0,0xF831,0xF8CC,0xFBB7,0xFCC4,0xFCF8,0xFD4C,0xFD1D, + 0xFD1B,0xFDB7,0xFE93,0x001C,0x01A5,0x022A,0x017C,0x00EC, + 0x0074,0x01CC,0x0317,0x0499,0x0510,0x0489,0x03A6,0x04ED, + 0x067A,0x0694,0x05E3,0x05E4,0x05D8,0x05F5,0x0659,0x06D1, + 0x0733,0x05A5,0x0191,0xFC84,0xF833,0xF364,0xED49,0xE6E9, + 0xE3E6,0xE567,0xEBB6,0xF41D,0xF973,0xF97A,0xF336,0xE7F5, + 0xDBA5,0xD674,0xD954,0xDF99,0xE669,0xEC6B,0xF0EC,0xF2E0, + 0xF211,0xEEE0,0xEBBD,0xE91C,0xE805,0xE9D7,0xEDC9,0xF311, + 0xF88E,0xFB41,0xFC8C,0xFEAC,0x01D4,0x04C7,0x073C,0x07AE, + 0x0668,0x04F8,0x0581,0x088E,0x0EAA,0x15A7,0x1BB7,0x1F70, + 0x2001,0x1E67,0x1C0A,0x1A3C,0x194B,0x192A,0x1B92,0x2057, + 0x25E7,0x2979,0x2B2A,0x2A5E,0x2772,0x2352,0x1FDF,0x1F0A, + 0x2005,0x215D,0x224C,0x2236,0x21B0,0x211D,0x203C,0x1F30, + 0x1E17,0x1C1C,0x1889,0x1496,0x10FB,0x0EF7,0x0E24,0x0DA7, + 0x0E6C,0x0EE5,0x0E45,0x0C41,0x082D,0x0373,0xFEE8,0xFA87, + 0xF7CE,0xF823,0xF989,0xF9E6,0xFB2A,0xFAC5,0xF5E5,0xF291, + 0xEE98,0xEC2B,0xEAF0,0xEAF1,0xEAB1,0xEA7B,0xEA40,0xEA40, + 0xEA8E,0xEA41,0xE9A9,0xE8B5,0xE7F1,0xE702,0xE608,0xE5D0, + 0xE66B,0xE734,0xE810,0xE9A3,0xEC4F,0xEEBA,0xEF93,0xEE89, + 0xECCE,0xEC15,0xEC58,0xED59,0xF00E,0xF3EC,0xF6F1,0xF85D, + 0xF8B1,0xF972,0xFA95,0xFB52,0xFBA2,0xFBFE,0xFCE7,0xFE97, + 0x006F,0x02E9,0x04F7,0x05C7,0x0620,0x0673,0x0744,0x0894, + 0x095D,0x09C0,0x0A01,0x0981,0x092E,0x09EF,0x0BB4,0x0D8D, + 0x0F5C,0x0F30,0x0E25,0x0C42,0x093C,0x06DD,0x07FF,0x0992, + 0x0AA8,0x0A47,0x0958,0x08F1,0x08D2,0x0851,0x0740,0x0606, + 0x04E7,0x03FF,0x03BC,0x03E4,0x0453,0x0346,0x015C,0xFF23, + 0xFE82,0xFF8A,0xFFF2,0xFF3F,0xFE35,0xFCB0,0xFAD1,0xF8D9, + 0xF8B9,0xF957,0xFA3E,0xF9E3,0xF93E,0xF8D1,0xF877,0xF73F, + 0xF5C8,0xF55A,0xF4B1,0xF543,0xF618,0xF6F2,0xF741,0xF6C8, + 0xF6C3,0xF561,0xF3A7,0xF3C6,0xF526,0xF606,0xF5FF,0xF59D, + 0xF5A1,0xF60C,0xF6C2,0xF838,0xF9A4,0xFA7E,0xFB06,0xFB59, + 0xFAFE,0xFAF3,0xFB80,0xFC9B,0xFE16,0xFF31,0xFF50,0xFF36, + 0xFF8E,0x0012,0x00E7,0x0136,0x00ED,0x014B,0x020E,0x026D, + 0x031C,0x04CD,0x06BF,0x06F2,0x05E8,0x04E8,0x0514,0x056C, + 0x059A,0x05AC,0x0673,0x0721,0x06D0,0x04EA,0x01BC,0xFD1A, + 0xF75F,0xF05E,0xE9A2,0xE4CC,0xE3F5,0xE8C5,0xF05D,0xF7B3, + 0xFA91,0xF6F2,0xEE53,0xE3FF,0xDB52,0xD813,0xDB68,0xE32E, + 0xEB2D,0xF088,0xF31F,0xF36D,0xF16E,0xEE63,0xEAEC,0xEA58, + 0xEC43,0xEF58,0xF32B,0xF7F2,0xFB61,0xFD18,0x0213,0x0461, + 0x0709,0x0A46,0x0B7A,0x0B28,0x09FD,0x09CE,0x0B73,0x0F7B, + 0x1584,0x1C1C,0x218D,0x2447,0x2382,0x2074,0x1E01,0x1C78, + 0x1C93,0x1E81,0x221B,0x26B1,0x2B72,0x2E56,0x2E5C,0x2CAE, + 0x2A54,0x279F,0x2556,0x249D,0x2539,0x25E7,0x25B2,0x2534, + 0x252F,0x251E,0x248D,0x2325,0x206D,0x1D4D,0x1A02,0x1641, + 0x136A,0x11CB,0x112A,0x10FD,0x10D4,0x10D0,0x0FA9,0x0C2F, + 0x077A,0x0277,0xFE6C,0xFBBA,0xFA22,0xF9F2,0xFA8C,0xFB01, + 0xFA56,0xF7EC,0xF6C7,0xF495,0xF11E,0xEE8B,0xED2A,0xEC84, + 0xEBB7,0xEB3D,0xEA8C,0xEA50,0xEAAE,0xEB04,0xEA79,0xE94B, + 0xE84F,0xE72F,0xE5FC,0xE506,0xE565,0xE638,0xE7C4,0xEA66, + 0xEC88,0xED65,0xEDB2,0xED01,0xEBE1,0xEBE1,0xEC6A,0xEE1A, + 0xF090,0xF391,0xF60D,0xF78D,0xF793,0xF79F,0xF878,0xF9D3, + 0xFA98,0xFAE5,0xFC44,0xFE12,0xFFBE,0x00F0,0x027B,0x0332, + 0x031E,0x049F,0x061E,0x0708,0x0821,0x08E2,0x080E,0x0764, + 0x0807,0x099E,0x0A6B,0x0B42,0x0BA5,0x0AEC,0x0968,0x0869, + 0x0727,0x068F,0x06B0,0x06D7,0x077F,0x07B9,0x07C4,0x079C, + 0x062D,0x03CB,0x020D,0x0115,0x01C0,0x018E,0x00AC,0xFF82, + 0xFEF9,0xFDDC,0xFCAB,0xFC6B,0xFC9D,0xFC5F,0xFABA,0xF909, + 0xF807,0xF70E,0xF62C,0xF53A,0xF50F,0xF5CB,0xF5AF,0xF4CB, + 0xF3E1,0xF364,0xF2AD,0xF198,0xF09B,0xF060,0xF0B8,0xF1B2, + 0xF200,0xF1AB,0xF129,0xF0C4,0xF085,0xF01D,0xF056,0xF0E1, + 0xF1D3,0xF201,0xF17E,0xF108,0xF26A,0xF4E2,0xF605,0xF5E2, + 0xF620,0xF68E,0xF641,0xF65E,0xF99B,0xF984,0xFA17,0xFA09, + 0xF9FA,0xFB5E,0xFD72,0xFE21,0xFE21,0xFE5F,0xFE4F,0xFEF6, + 0x0089,0x02A8,0x0380,0x0351,0x02E7,0x0232,0x0273,0x0394, + 0x0530,0x0634,0x0602,0x0513,0x0479,0x04A5,0x0566,0x0537, + 0x0350,0xFF61,0xFA2A,0xF3DA,0xED8C,0xE8BD,0xE57F,0xE567, + 0xE883,0xEEAC,0xF55F,0xF8EF,0xF64C,0xEDE5,0xE275,0xD95B, + 0xD695,0xDA0F,0xE27F,0xEB9D,0xF25E,0xF4A4,0xF332,0xEFA7, + 0xED32,0xEBAB,0xEA52,0xEB71,0xEEA0,0xF2F7,0xF7FB,0xFCC7, + 0xFFF8,0x0229,0x03AE,0x04CD,0x0562,0x0745,0x0896,0x08C6, + 0x08C7,0x09A9,0x0CEC,0x1316,0x1A49,0x1F85,0x2213,0x21B6, + 0x1F3D,0x1C6E,0x1B28,0x1AB9,0x1C56,0x2028,0x2462,0x27EC, + 0x2B91,0x2D51,0x2B7C,0x274C,0x2383,0x21D0,0x214C,0x2258, + 0x22D0,0x231C,0x2331,0x2263,0x2135,0x2064,0x1FAA,0x1DAE, + 0x1AE9,0x173E,0x1373,0x0FEF,0x0DCA,0x0D10,0x0D5B,0x0EC2, + 0x0FAF,0x0E2A,0x0B6A,0x0730,0x01E5,0xFCB9,0xF97D,0xF820, + 0xF8A3,0xF9A7,0xFA58,0xFA31,0xF858,0xF5B2,0xF382,0xF100, + 0xEE23,0xEBF3,0xEA44,0xE9FD,0xEA48,0xEAC1,0xEB5C,0xEB4B, + 0xEAB8,0xEA14,0xEA1A,0xE9EC,0xE935,0xE7E2,0xE6BD,0xE64F, + 0xE70D,0xE976,0xECAB,0xEF40,0xF0EE,0xF099,0xEF16,0xEE06, + 0xEE11,0xEEBE,0xF020,0xF22A,0xF4D9,0xF86A,0xFA04,0xFACA, + 0xFAE8,0xFB40,0xFC4F,0xFD63,0xFD9C,0xFE66,0xFFF0,0x0194, + 0x02B3,0x0368,0x04D3,0x06DA,0x0927,0x0A29,0x0AC1,0x0A65, + 0x0945,0x0796,0x076C,0x09AB,0x0D2F,0x0F4A,0x0F99,0x0F1E, + 0x0E20,0x0CD3,0x0B3C,0x0BA3,0x0A4E,0x0B20,0x0C27,0x0AC2, + 0x0B13,0x0BA1,0x0B98,0x0ADD,0x09FC,0x08B6,0x0719,0x0537, + 0x0340,0x0285,0x02EC,0x02EC,0x02C9,0x02AA,0x0260,0x014C, + 0xFF88,0xFE1B,0xFCA6,0xFB90,0xFAE6,0xFA16,0xF9DF,0xF9D7, + 0xF9CE,0xF97B,0xF93D,0xF8ED,0xF85B,0xF79F,0xF680,0xF516, + 0xF3BC,0xF30C,0xF39F,0xF496,0xF67D,0xF7EC,0xF7C1,0xF69B, + 0xF51E,0xF3CA,0xF346,0xF408,0xF528,0xF623,0xF6EC,0xF7A9, + 0xF885,0xF8FA,0xF964,0xF94F,0xF87D,0xF85B,0xF902,0xF9DB, + 0xFB81,0xFD04,0x000E,0xFF64,0xFFC4,0x00C7,0x0214,0x030D, + 0x01F6,0x00B8,0x0006,0x00C4,0x0244,0x039C,0x04EE,0x05CB, + 0x0646,0x0697,0x0683,0x0627,0x0560,0x0439,0x047A,0x05B1, + 0x0692,0x073B,0x07B7,0x06D9,0x03CD,0xFFDA,0xFA24,0xF36F, + 0xECDB,0xE705,0xE440,0xE5E3,0xEB17,0xF297,0xF82C,0xF90A, + 0xF3DF,0xE96F,0xDF30,0xD879,0xD7A5,0xDC73,0xE37B,0xE9CB, + 0xEF0D,0xF2A9,0xF257,0xEFDF,0xED17,0xEA8B,0xE913,0xE9EA, + 0xED16,0xF24C,0xF739,0xFB24,0xFDB6,0xFF67,0x0193,0x0442, + 0x062B,0x069E,0x0551,0x0403,0x042E,0x06F1,0x0CDD,0x137E, + 0x1967,0x1CF5,0x1E3A,0x1D37,0x1B0F,0x18DA,0x17FB,0x1848, + 0x1A52,0x1E48,0x2303,0x26D1,0x28E8,0x28C0,0x2639,0x22ED, + 0x1FC7,0x1DE2,0x1E3F,0x1EFC,0x1FF7,0x2003,0x1F13,0x1E3D, + 0x1DF1,0x1E2E,0x1D8C,0x1ADD,0x1677,0x117E,0x0DCD,0x0C02, + 0x0BAC,0x0B9A,0x0BF8,0x0B69,0x0961,0x0717,0x0457,0x016F, + 0xFD60,0xF92E,0xF5FC,0xF4BF,0xF5AD,0xF76B,0xF7AD,0xF698, + 0xF381,0xEFF3,0xEC4D,0xEB7E,0xEB23,0xE82F,0xE86B,0xE762, + 0xE6C8,0xE717,0xE7CE,0xE817,0xE86B,0xE72E,0xE5FC,0xE509, + 0xE402,0xE444,0xE4D2,0xE5EE,0xE67F,0xE761,0xE89C,0xEA7D, + 0xEBBE,0xEBC5,0xEBF4,0xEBDA,0xEBBE,0xEC4A,0xEE38,0xF10B, + 0xF370,0xF4DB,0xF5F4,0xF66E,0xF820,0xF9A2,0xFAED,0xFBB6, + 0xFC39,0xFD3B,0xFE53,0xFFF2,0x023C,0x044F,0x05A1,0x06F4, + 0x072F,0x0730,0x0720,0x0806,0x086A,0x0990,0x0AFA,0x0BCF, + 0x0BF8,0x0C74,0x0D06,0x0CE7,0x0CA7,0x0C10,0x0B82,0x0B59, + 0x0BB5,0x0C75,0x0BEF,0x099A,0x07C9,0x079A,0x07D2,0x07F7, + 0x0752,0x0628,0x04D3,0x041F,0x02BB,0x0187,0x014B,0x0106, + 0x0054,0xFFC9,0xFE91,0xFE1F,0xFDF7,0xFD27,0xFB34,0xF9B5, + 0xF996,0xF8F4,0xF7C9,0xF71B,0xF768,0xF772,0xF6DC,0xF67D, + 0xF5BE,0xF4BA,0xF402,0xF351,0xF2FF,0xF2A7,0xF2F4,0xF3BF, + 0xF3C0,0xF380,0xF3DD,0xF470,0xF577,0xF59D,0xF61B,0xF68D, + 0xF4E7,0xF4A1,0xF507,0xF64F,0xF78E,0xF8B5,0xF8A6,0xF86A, + 0xF8AB,0xF900,0xFA5D,0xFB4E,0xFC31,0xFD90,0xFE4A,0xFEDC, + 0xFFCD,0xFFF5,0xFF98,0xFFE0,0x0137,0x023D,0x02B7,0x0377, + 0x0441,0x044E,0x0408,0x0390,0x0481,0x060C,0x0736,0x073B, + 0x06B3,0x064C,0x0632,0x063F,0x06B4,0x06E7,0x071B,0x0715, + 0x04BB,0x00A5,0xFC1A,0xF6CF,0xF21A,0xEE3E,0xEC8C,0xEE58, + 0xF30B,0xF930,0xFC7E,0xFBC2,0xF592,0xED2E,0xE569,0xE12E, + 0xE24D,0xE7B0,0xEE26,0xF303,0xF5E1,0xF6B0,0xF619,0xF411, + 0xF1AA,0xEF70,0xEF24,0xF0E2,0xF423,0xF791,0xFBFF,0xFEBB, + 0x0067,0x01F3,0x04BC,0x0685,0x06CC,0x0940,0x080F,0x0573, + 0x0533,0x0818,0x0D2C,0x13C3,0x1934,0x1C19,0x1C37,0x1A9E, + 0x17DB,0x15BC,0x1514,0x1698,0x197E,0x1C98,0x1FBE,0x22AC, + 0x2475,0x2458,0x21F4,0x1F0D,0x1CDE,0x1BD1,0x1BDC,0x1C5D, + 0x1D4D,0x1D8D,0x1CD0,0x1BFF,0x1B9F,0x1B89,0x1A84,0x1888, + 0x1544,0x11F0,0x0EE0,0x0CA8,0x0B9C,0x0C21,0x0D54,0x0D54, + 0x0BEC,0x0A07,0x0765,0x041E,0x008C,0xFD9D,0xFB52,0xFA16, + 0xF9B9,0xFAD0,0xFBD0,0xFB26,0xF938,0xF5BF,0xF2E5,0xF064, + 0xEF31,0xF132,0xF1BC,0xF094,0xF02C,0xEF52,0xEF2A,0xEF32, + 0xEF29,0xEF02,0xEE88,0xED9E,0xECBD,0xEB91,0xEB08,0xEBE2, + 0xED57,0xEEFB,0xF0AC,0xF1B1,0xF1BF,0xF229,0xF30B,0xF2D8, + 0xF119,0xF084,0xF24D,0xF479,0xF79B,0xFA24,0xFB46,0xFB1E, + 0xFA3F,0xF9D3,0xFA3B,0xFB36,0xFCD2,0xFE82,0xFFAA,0x00EB, + 0x0165,0x01BC,0x01F4,0x0224,0x0331,0x0392,0x054C,0x0681, + 0x0669,0x05D7,0x05A2,0x0643,0x07AC,0x08D5,0x097B,0x096E, + 0x0889,0x0762,0x0676,0x05A3,0x04FD,0x04C9,0x0548,0x066D, + 0x068C,0x05C1,0x03ED,0x01F3,0x00C8,0x009D,0x00FD,0x0132, + 0x022F,0x01FD,0x0057,0xFE74,0xFD79,0xFD3B,0xFD5E,0xFCFD, + 0xFC7F,0xFC01,0xFACF,0xF989,0xF8AD,0xF84D,0xF8C0,0xF85B, + 0xF7E5,0xF73A,0xF6C1,0xF6A8,0xF5F1,0xF4C0,0xF424,0xF421, + 0xF44F,0xF478,0xF4B4,0xF496,0xF464,0xF3D4,0xF302,0xF2AA, + 0xF3AA,0xF550,0xF58D,0xF4EF,0xF4E2,0xF555,0xF58C,0xF653, + 0xF6D1,0xF781,0xF710,0xF73C,0xF825,0xF9BE,0xFA6B,0xFA30, + 0xF979,0xF957,0xF9C4,0xFCF6,0xFCFD,0xFDEC,0xFF16,0xFE1F, + 0xFE11,0xFE39,0xFEC0,0xFFA0,0x000C,0x00B1,0x0140,0x0197, + 0x0197,0x0124,0x0140,0x0144,0x016F,0x01D1,0x02B9,0x036C, + 0x0390,0x0300,0x01CF,0x004D,0xFE81,0xFD17,0xFBED,0xFB54, + 0xFB31,0xFB2F,0xFB45,0xFBEC,0xFD03,0xFD99,0xFCE9,0xFAE9, + 0xF93E,0xF808,0xF663,0xF5EC,0xF784,0xF99D,0xFAB7,0xFB60, + 0xFB53,0xFB8F,0xFB0E,0xFA0F,0xF909,0xF919,0xF9DC,0xFAE2, + 0xFC2B,0xFD71,0xFE8E,0xFF59,0xFF6F,0xFF90,0xFFDE,0x0013, + 0x0043,0x005D,0xFFB2,0xFE51,0xFFCA,0x01D3,0x02E3,0x03C8, + 0x043B,0x0447,0x047D,0x04D7,0x0507,0x054C,0x0573,0x052E, + 0x056B,0x06A4,0x0897,0x09AF,0x098B,0x082C,0x061B,0x060B, + 0x0690,0x06C6,0x070C,0x0844,0x0925,0x08F0,0x0862,0x0795, + 0x06D5,0x0625,0x054F,0x0567,0x069F,0x07A3,0x07AB,0x0715, + 0x05BB,0x04C7,0x043B,0x0415,0x03B3,0x0422,0x0436,0x019E, + 0xFFE3,0xFEE0,0xFF22,0xFFDC,0xFFD4,0xFF08,0xFDDB,0xFDA5, + 0xFCFA,0xFD42,0xFD58,0xFD26,0xFC96,0xFC52,0xFC5C,0xFD65, + 0xFE35,0xFDFB,0xFCDA,0xFBBD,0xFA73,0xFA12,0xFA79,0xFBC3, + 0xFCC9,0xFCD8,0xFB7A,0xFACD,0xFB6F,0xFC47,0xFCA9,0xFC2B, + 0xFBC8,0xFBC4,0xFAF0,0xFA0D,0xFA17,0xFA1F,0xFA16,0xF974, + 0xF885,0xF7A5,0xF6DB,0xF63E,0xF566,0xF4B9,0xF478,0xF486, + 0xF51B,0xF5EC,0xF7AD,0xF8B7,0xF87F,0xF7F3,0xF707,0xF6CE, + 0xF76F,0xF770,0xF744,0xF71B,0xF70B,0xF70D,0xF6D8,0xF67E, + 0xF603,0xF529,0xF50E,0xF4AD,0xF3B8,0xF2F1,0xF342,0xF2E3, + 0xF25D,0xF230,0xF299,0xF064,0xF079,0xF0F1,0xEF4A,0xEEE8, + 0xEE70,0xEE21,0xEDBA,0xED64,0xED1E,0xECAA,0xEC7B,0xEC02, + 0xEB9B,0xEB55,0xEADE,0xEA67,0xE9DA,0xE9E1,0xE996,0xE9E9, + 0xEA28,0xE9FE,0xE976,0xE8FB,0xE8A2,0xE7FE,0xE813,0xE83E, + 0xE88D,0xE8CA,0xE8B6,0xE831,0xE8F0,0xE8CE,0xE8A8,0xE8EF, + 0xE920,0xE90A,0xE90E,0xE910,0xE984,0xEA25,0xEA50,0xEAA6, + 0xEAEF,0xEB31,0xEB44,0xEB8F,0xEC6F,0xEC90,0xEC6A,0xECF6, + 0xED9F,0xEE80,0xEF79,0xF060,0xEFED,0xEFAE,0xF03C,0xF102, + 0xF2C7,0xF564,0xF54A,0xF58D,0xF5B6,0xF5FE,0xF656,0xF6C2, + 0xF758,0xF77C,0xF780,0xF7E5,0xF881,0xF88F,0xF913,0xF9AF, + 0xF9F9,0xFA78,0xFAA8,0xFA80,0xFA19,0xFAF5,0xFB57,0xFB0F, + 0xFADB,0xFBCB,0xFBBA,0xFC2A,0xFCBD,0xFCD0,0xFCC3,0xFCF5, + 0xFD66,0xFDC6,0xFDD3,0xFD82,0xFE49,0xFE6B,0xFED2,0xFF6B, + 0x0052,0x00C0,0x010B,0x0139,0x0200,0x01EF,0x0112,0x01FA, + 0x0392,0x04CB,0x0561,0x05B0,0x05E8,0x05E7,0x059D,0x05E8, + 0x05F4,0x0626,0x0661,0x0690,0x061E,0x058C,0x0611,0x0674, + 0x06FF,0x0743,0x0765,0x076E,0x0734,0x0776,0x07DC,0x07D6, + 0x07FD,0x07EA,0x082A,0x08D2,0x08A0,0x08B2,0x0884,0x086F, + 0x084B,0x0860,0x08C6,0x0946,0x093A,0x0905,0x08FE,0x08D4, + 0x08E6,0x0973,0x0992,0x0997,0x09D1,0x09AA,0x0987,0x0A06, + 0x0A45,0x0ADA,0x0B1E,0x0BF1,0x0BEB,0x0BC5,0x0C46,0x0CAA, + 0x0C53,0x0C53,0x0C9F,0x0C6C,0x0C99,0x0C54,0x0C4F,0x0C9F, + 0x0CFD,0x0CB1,0x0CA0,0x0D0A,0x0DC0,0x0DA9,0x0D8E,0x0DCA, + 0x0D39,0x0C20,0x0D8A,0x0DBA,0x0C66,0x0D6C,0x0CB9,0x0CA7, + 0x0CC6,0x0CB0,0x0C43,0x0C8E,0x0C75,0x0C86,0x0C9D,0x0C7E, + 0x0C5C,0x0C52,0x0C41,0x0C21,0x0C58,0x0C25,0x0C95,0x0C28, + 0x0C72,0x0C64,0x0C5D,0x0C9E,0x0C9E,0x0C7A,0x0C77,0x0C6C, + 0x0C4F,0x0C64,0x0C5D,0x0CED,0x0CBC,0x0C97,0x0CE6,0x0C89, + 0x0C9B,0x0C85,0x0C87,0x0C48,0x0BCB,0x0C12,0x0C80,0x0C7E, + 0x0C07,0x0BF0,0x0AF4,0x0AEB,0x0B19,0x0B43,0x0BAA,0x0B73, + 0x0B0B,0x0A4F,0x0A3F,0x0A40,0x0A4E,0x0A30,0x0A58,0x0A2F, + 0x0A0F,0x09B1,0x07F4,0x0697,0x07B9,0x0795,0x0790,0x0835, + 0x0894,0x0868,0x07E2,0x07CB,0x081A,0x0826,0x0778,0x07E2, + 0x07BA,0x0781,0x078E,0x079F,0x07B0,0x0705,0x06D6,0x07E1, + 0x07FC,0x07AD,0x0774,0x0799,0x0793,0x079F,0x081F,0x083B, + 0x08AB,0x0869,0x07FD,0x07A2,0x0788,0x0796,0x07D4,0x0804, + 0x0803,0x07F9,0x0748,0x0765,0x0754,0x07CC,0x08CB,0x07CE, + 0x06FD,0x06D3,0x0703,0x0718,0x06F8,0x06EB,0x06F1,0x06E9, + 0x0804,0x08AA,0x08AA,0x0893,0x0901,0x08C9,0x089B,0x08A2, + 0x08C5,0x08D9,0x0889,0x082F,0x07F4,0x07DB,0x07CB,0x07B8, + 0x07C4,0x07DD,0x079D,0x07C2,0x0719,0x068E,0x06CC,0x066D, + 0x0660,0x06A4,0x067C,0x0612,0x05A9,0x0589,0x0559,0x0558, + 0x0555,0x053A,0x0592,0x058B,0x058F,0x0570,0x0572,0x0551, + 0x053D,0x0571,0x05B2,0x05BC,0x04F4,0x04F4,0x04AE,0x047B, + 0x0496,0x0502,0x0568,0x0502,0x049F,0x04BE,0x04B8,0x043D, + 0x0497,0x0499,0x0463,0x0440,0x036C,0x039B,0x03BA,0x037A, + 0x0381,0x0414,0x0364,0x0246,0x0435,0x0332,0x027B,0x02F9, + 0x034E,0x036C,0x033F,0x0364,0x0343,0x032E,0x02AF,0x0294, + 0x0276,0x02B7,0x0304,0x02C5,0x028D,0x024E,0x01CB,0x015B, + 0x017A,0x015A,0x01AF,0x01C9,0x016E,0x00E7,0x00FC,0x0109, + 0x00DA,0x00DD,0x010C,0x0099,0xFF7C,0xFF8C,0xFF8E,0xFF83, + 0xFF76,0xFF5B,0xFEB8,0xFE51,0xFE17,0xFDC0,0xFDB3,0xFDF2, + 0xFE51,0xFE2F,0xFDF9,0xFE08,0xFE0A,0xFE6A,0xFE5B,0xFDE7, + 0xFE07,0xFE0C,0xFE24,0xFE8B,0xFF35,0xFFAD,0xFFC9,0xFFB9, + 0x0023,0x00AA,0x01FB,0x0321,0x03C8,0x03F5,0x045C,0x04D4, + 0x058A,0x05DE,0x05F8,0x061C,0x061D,0x0630,0x066F,0x06C0, + 0x0706,0x075E,0x078B,0x0799,0x076D,0x0774,0x0815,0x090A, + 0x0934,0x090C,0x0901,0x09BB,0x0B24,0x0C27,0x0C68,0x0CCD, + 0x0CDD,0x0D79,0x0D87,0x0E87,0x1076,0x10FC,0x10B6,0x108A, + 0x11C7,0x120E,0x1254,0x144D,0x12D8,0x1354,0x1404,0x13A6, + 0x1405,0x151C,0x156B,0x1452,0x13A9,0x1417,0x1543,0x15CC, + 0x15C1,0x15D8,0x15FB,0x15A5,0x1552,0x15BA,0x1576,0x155F, + 0x14F2,0x1488,0x1513,0x1593,0x1561,0x1480,0x13F5,0x138D, + 0x13AC,0x1422,0x13FA,0x1387,0x132F,0x12DB,0x1240,0x119D, + 0x113B,0x10DA,0x10AF,0x1089,0x10BD,0x1129,0x10AE,0x0F6B, + 0x0E6F,0x0E47,0x0E9B,0x0EEC,0x0E71,0x0D8B,0x0C6E,0x0BC5, + 0x0B53,0x0AE1,0x0B04,0x0B85,0x0B16,0x0A17,0x0872,0x07E3, + 0x0788,0x0747,0x061E,0x03E6,0x038F,0x0379,0x033F,0x039C, + 0x03BA,0x0309,0x018F,0x00F3,0x00EA,0x0173,0x01E0,0x0181, + 0x0188,0x0170,0x00ED,0x0075,0x0137,0x0105,0xFF36,0xFE6A, + 0xFE16,0xFE0F,0xFE12,0xFDE4,0xFD8E,0xFDA3,0xFD37,0xFBF2, + 0xFAB8,0xFB28,0xFC56,0xFCD0,0xFCA3,0xFBD6,0xFAF2,0xFA7D, + 0xF948,0xF828,0xF844,0xF805,0xF664,0xF2D3,0xEEB2,0xE952, + 0xE0B7,0xD7EB,0xD143,0xCF7E,0xD3A7,0xDD02,0xE99B,0xF5C7, + 0xFCD0,0xFCE9,0xF88E,0xF36A,0xF0E6,0xF266,0xF690,0xFCF0, + 0x0348,0x07E9,0x0BF3,0x1024,0x1434,0x17FE,0x1A68,0x1AC8, + 0x18A9,0x1457,0x0E67,0x083A,0x0276,0xFF8C,0xFFB1,0x01F9, + 0x0557,0x07D3,0x06CC,0x0133,0xF85B,0xEF7E,0xE8D1,0xE461, + 0xE28C,0xE217,0xE2E9,0xE429,0xE489,0xE4FC,0xE6DB,0xE917, + 0xEB0F,0xEC66,0xECA4,0xEC33,0xEB4B,0xEAD6,0xEBD4,0xEE75, + 0xF2D6,0xF926,0xFFE1,0x04F8,0x07F6,0x07D5,0x05F1,0x02F3, + 0xFFEC,0xFEAA,0xFEC7,0xFF99,0xFFA8,0xFF6D,0xFF72,0xFE07, + 0xFC0A,0xFABA,0xF9BA,0xF5C3,0xF2F6,0xEFE2,0xEAEF,0xE7A6, + 0xE4E0,0xE340,0xE332,0xE4A9,0xE698,0xE7EA,0xE857,0xE7C0, + 0xE734,0xE645,0xE543,0xE565,0xE6E1,0xE978,0xEBDF,0xEE34, + 0xF1C4,0xF564,0xF76F,0xF908,0xFA21,0xFB92,0xFC22,0xFB6B, + 0xFB38,0xFBBE,0xFB6B,0xFAA3,0xFA11,0xFB0F,0xFC6D,0xFCDE, + 0xFBC9,0xFA8D,0xF84F,0xF53E,0xF1D1,0xEF30,0xEDF6,0xED32, + 0xEC1A,0xEB7A,0xEB4D,0xEB7E,0xEAEE,0xE97C,0xE887,0xE95E, + 0xE96E,0xE99E,0xE9A3,0xEA3C,0xEA2A,0xEA09,0xEB4F,0xEE91, + 0xF38B,0xF89F,0xF98B,0xF991,0xF9C8,0xF9E2,0xF996,0xF9EB, + 0xFB05,0xFC27,0xFD5C,0xFDEF,0xFE67,0xFEFC,0xFEF7,0xFE35, + 0xFC51,0xFB2A,0xFABB,0xFA35,0xF8EB,0xF832,0xF69F,0xF3BF, + 0xF175,0xF17D,0xF26E,0xF3A1,0xF43E,0xF33D,0xF105,0xEF11, + 0xEE05,0xEDA6,0xEE47,0xEF6B,0xF0B2,0xF11C,0xF26B,0xF40F, + 0xF582,0xF715,0xF7D2,0xF869,0xF8CE,0xF8FE,0xF8FD,0xFADB, + 0xFC36,0xFC0D,0xFBB2,0xFC69,0xFD5F,0xFEC8,0x004B,0x0033, + 0xFE68,0xFB2D,0xF882,0xF836,0xF881,0xF849,0xF7DD,0xF716, + 0xF5F2,0xF578,0xF555,0xF591,0xF569,0xF47B,0xF285,0xF0EC, + 0xF11D,0xF1A3,0xF206,0xF203,0xF20E,0xF325,0xF4CA,0xF63A, + 0xF6B4,0xF694,0xF641,0xF650,0xF60C,0xF6FD,0xF8D7,0xFA66, + 0xFA7E,0xFA5C,0xFA4F,0xFB3F,0xFCDB,0xFE87,0xFEA5,0xFD7B, + 0xFC46,0xFB75,0xFB18,0xFB46,0xFB6E,0xFA4D,0xF729,0xF120, + 0xE7EE,0xDBA3,0xCAFC,0xBEF8,0xBEB2,0xBE64,0xBED4,0xBEC6, + 0xC37F,0xDE53,0xF77B,0x0236,0xFFF6,0xF4A4,0xE9A8,0xE529, + 0xE9C5,0xF4EC,0x060E,0x165E,0x239A,0x33C2,0x3DB3,0x3EAE, + 0x3EE1,0x3F2A,0x3EF3,0x3EBD,0x3ED9,0x3613,0x2921,0x1E86, + 0x17CB,0x17E2,0x1E2B,0x26CF,0x2B95,0x268F,0x178C,0x0257, + 0xED7E,0xDD25,0xD309,0xCE44,0xCD81,0xCFC6,0xD3FC,0xD8BD, + 0xDE26,0xE38A,0xE6BB,0xE758,0xE710,0xE789,0xE8E6,0xE995, + 0xEAAB,0xED7F,0xF479,0x0024,0x0EDE,0x1E78,0x2BF0,0x3309, + 0x32D7,0x2D61,0x25ED,0x2076,0x1D5A,0x1BD9,0x1C5E,0x1E47, + 0x205A,0x2150,0x201E,0x1CF1,0x178F,0x0FF3,0x0708,0xFDAF, + 0xF520,0xEC87,0xE31E,0xDBC9,0xD8FD,0xDA07,0xDE6D,0xE42C, + 0xE7B9,0xE7FC,0xE565,0xE1C6,0xDE45,0xDCA0,0xDD32,0xE130, + 0xE850,0xF004,0xF79C,0xFF8B,0x0731,0x0C55,0x1028,0x1365, + 0x14BE,0x150E,0x14B2,0x144C,0x1418,0x14C7,0x159C,0x16B7, + 0x1935,0x1B63,0x1B70,0x1911,0x144F,0x0DBB,0x05A6,0xFE55, + 0xF834,0xF48D,0xF28D,0xF123,0xF074,0xEFF7,0xF030,0xEE43, + 0xEC35,0xEB3C,0xEA19,0xE84C,0xE6BC,0xE65C,0xE7AE,0xEAC0, + 0xEEC4,0xF3CA,0xF9D6,0xFFEC,0x0558,0x0894,0x0A41,0x0B33, + 0x0B44,0x0B14,0x0B90,0x0DC4,0x1100,0x1383,0x14F6,0x15D7, + 0x164A,0x167D,0x1581,0x1358,0x104C,0x0BDA,0x0710,0x01F7, + 0xFE85,0xFC9B,0xFB7E,0xFAAD,0xFA00,0xF91B,0xF79E,0xF5DE, + 0xF347,0xF046,0xEE3F,0xEC6C,0xEC07,0xECCC,0xEE3B,0xF078, + 0xF294,0xF4EE,0xF801,0xFB16,0xFE5B,0x0127,0x01B5,0x01A3, + 0x0136,0x01ED,0x0484,0x081A,0x0B5C,0x0DB8,0x0EEC,0x0E98, + 0x0E63,0x0E54,0x0DE8,0x0CFA,0x0AE6,0x08BD,0x0675,0x03F8, + 0x0240,0x025E,0x00C0,0xFE4E,0xFEE3,0xFCB6,0xFA9C,0xF9C7, + 0xF8F9,0xF6F4,0xF47C,0xF29A,0xF229,0xF30F,0xF44A,0xF5E8, + 0xF834,0xF9BE,0xFA65,0xFAA0,0xFBB3,0xFDE6,0x0037,0x0134, + 0x0211,0x031B,0x04AE,0x0668,0x07E4,0x09C0,0x0B4F,0x0C36, + 0x0C94,0x0C5A,0x0BF7,0x0B0B,0x09BF,0x07C9,0x0651,0x05D5, + 0x0551,0x0344,0xFE70,0xF63F,0xEB1C,0xDD0D,0xCAA1,0xBF7B, + 0xBF5A,0xBF1F,0xBFF2,0xBF4F,0xC885,0xE6B7,0xFDE6,0x055A, + 0xFF41,0xF2D4,0xE829,0xE55F,0xECC2,0xFBDA,0x0D90,0x1E8A, + 0x2F52,0x3D55,0x4076,0x3FD9,0x4001,0x400A,0x3FD6,0x3F92, + 0x3FD8,0x3B9F,0x2DE1,0x22CF,0x1D35,0x1EBE,0x26F5,0x2FE3, + 0x3186,0x2899,0x16B8,0xFF62,0xE9D0,0xDAE2,0xD28B,0xCF15, + 0xCFFA,0xD23A,0xD4D9,0xD91D,0xDD7D,0xE0A3,0xE2DC,0xE48B, + 0xE60C,0xE7D7,0xE8B6,0xE97F,0xEACE,0xEE78,0xF65A,0x0361, + 0x1419,0x24F8,0x30E7,0x3564,0x331E,0x2CBA,0x2534,0x21D5, + 0x2132,0x2149,0x22AC,0x237B,0x242B,0x23D5,0x2282,0x1ECB, + 0x183A,0x0F18,0x0588,0xFC2A,0xF31E,0xEB62,0xE3BB,0xDD41, + 0xD97A,0xD9A9,0xDD6B,0xE28C,0xE665,0xE709,0xE3C3,0xDF1E, + 0xDB92,0xDAFF,0xDD8E,0xE2BC,0xE9AD,0xF16C,0xF874,0xFFF5, + 0x0781,0x0DF1,0x1254,0x145E,0x149F,0x14E4,0x150A,0x1524, + 0x159C,0x15F9,0x166E,0x16F6,0x1861,0x1A88,0x1B25,0x18CD, + 0x12B9,0x0A4D,0x0256,0xFB9E,0xF67A,0xF2CA,0xEFE2,0xEDFA, + 0xEC9C,0xEBB9,0xEBC1,0xEB7E,0xEA29,0xE740,0xE4AE,0xE2D6, + 0xE313,0xE495,0xE702,0xEA4B,0xED91,0xF13B,0xF62A,0xFBCD, + 0x0039,0x0461,0x090F,0x0895,0x08EF,0x097F,0x0A8F,0x0CEF, + 0x0EFA,0x10EC,0x132D,0x157A,0x162F,0x1577,0x1363,0x10F7, + 0x0D61,0x0988,0x0559,0x0221,0xFF98,0xFCA5,0xFA53,0xF89C, + 0xF736,0xF5FE,0xF4AE,0xF2FB,0xF16A,0xEF58,0xED34,0xEB7F, + 0xEA87,0xEAEA,0xEC3E,0xEE04,0xF0FB,0xF488,0xF81B,0xFB15, + 0xFCD7,0xFDE4,0xFF99,0x012D,0x036A,0x0552,0x06A8,0x0877, + 0x0AC9,0x0CC2,0x0EED,0x106E,0x1129,0x1061,0x0E43,0x0C0B, + 0x0A4D,0x09A3,0x0905,0x068F,0x03F2,0x01BB,0x0073,0xFF8E, + 0xFE5B,0xFC6D,0xF8C6,0xF60B,0xF3AD,0xF24B,0xF1A1,0xF165, + 0xF1C2,0xF21A,0xF28E,0xF391,0xF605,0xF875,0xF9D5,0xF9DE, + 0xFA86,0xFBC2,0xFD99,0x0050,0x02BD,0x03EB,0x0559,0x0679, + 0x06A3,0x079D,0x0A88,0x0CF6,0x0D29,0x0C6D,0x0B73,0x09FD, + 0x08CB,0x077D,0x06D4,0x067F,0x05B3,0x030C,0xFDF2,0xF53A, + 0xE8F0,0xDA05,0xC743,0xBF94,0xC04B,0xC055,0xC181,0xC029, + 0xD09D,0xEE4A,0xFFED,0x0363,0xFBEE,0xF018,0xE812,0xE90F, + 0xF285,0x0118,0x1190,0x21EA,0x3243,0x3EF8,0x40B4,0x4082, + 0x40BD,0x40BF,0x406B,0x4029,0x40AE,0x38ED,0x2B7B,0x2318, + 0x2090,0x244C,0x2B86,0x3149,0x30AA,0x26D2,0x141A,0xFCFD, + 0xE85D,0xD9ED,0xD274,0xD05B,0xD1F2,0xD538,0xD83E,0xDBC4, + 0xDF9A,0xE364,0xE633,0xE7AA,0xE88F,0xE859,0xE7F7,0xE870, + 0xEAD8,0xF0DA,0xFB3C,0x093A,0x1958,0x2866,0x328C,0x35C4, + 0x32DB,0x2CA4,0x258C,0x20B7,0x1F36,0x2156,0x23E6,0x24E4, + 0x24D4,0x242E,0x2196,0x1C95,0x1630,0x0F58,0x06AB,0xFC21, + 0xF1E3,0xE924,0xE0D9,0xDDB4,0xDD77,0xDDB0,0xE19D,0xE5EA, + 0xE86C,0xE7AB,0xE46A,0xE068,0xDD32,0xDC09,0xDDB9,0xE2AB, + 0xEADB,0xF396,0xFBA8,0x02D3,0x095A,0x0E57,0x1174,0x13F4, + 0x159E,0x16E3,0x165D,0x14DD,0x138F,0x14BF,0x16F2,0x191F, + 0x1AE5,0x1C2E,0x1B68,0x1790,0x10E8,0x08FC,0x01BA,0xFA2A, + 0xF3CD,0xEFBC,0xEEFD,0xEFC8,0xEFAF,0xEE14,0xEBBF,0xE8DD, + 0xE604,0xE443,0xE3F7,0xE412,0xE393,0xE2FD,0xE3D0,0xE65A, + 0xEAE5,0xF0B8,0xF75D,0xFE18,0x02B0,0x0510,0x061C,0x07ED, + 0x0A09,0x09C3,0x0A49,0x0CC9,0x101D,0x1375,0x1623,0x170B, + 0x1685,0x1453,0x1099,0x0DB3,0x0C1D,0x0A55,0x06F9,0x0215, + 0xFDD3,0xF9D8,0xF734,0xF66B,0xF7E7,0xF8D5,0xF668,0xF2EF, + 0xF056,0xEDD9,0xEB3D,0xE99B,0xE95C,0xEB33,0xED3E,0xEFB8, + 0xF2E9,0xF654,0xF933,0xFA7A,0xFB6F,0xFD5F,0xFFDE,0x0227, + 0x03F2,0x055A,0x066B,0x0707,0x0853,0x0999,0x0D48,0x10D9, + 0x111A,0x0FB5,0x0E55,0x0C75,0x0A3B,0x07ED,0x05C7,0x0372, + 0x0171,0x00D4,0x0098,0xFFB3,0xFD0C,0xFA3A,0xF70A,0xF509, + 0xF423,0xF35C,0xF26D,0xF0A7,0xEF3A,0xEEF8,0xEFFD,0xF245, + 0xF51B,0xF745,0xF7DD,0xF868,0xF9BE,0xFB45,0xFCB1,0xFD83, + 0xFE6B,0xFFC6,0x01CD,0x042D,0x0745,0x090F,0x09BC,0x09E0, + 0x0931,0x0830,0x0760,0x0750,0x074B,0x06E9,0x04E7,0x0280, + 0xFF54,0xFA20,0xF10E,0xE492,0xD466,0xC316,0xBE73,0xBEEE, + 0xBEB8,0xBF25,0xC054,0xD624,0xF20B,0x0103,0x01C0,0xF7CD, + 0xEAB5,0xE376,0xE69C,0xF31F,0x02B4,0x13FF,0x243A,0x3347, + 0x3DE7,0x3F20,0x3F35,0x3E79,0x3F25,0x3ED6,0x3ED3,0x3D66, + 0x3292,0x25FC,0x1E5B,0x1CDA,0x22B1,0x2B99,0x309C,0x2CAE, + 0x1FCA,0x0CB8,0xF6E6,0xE438,0xD72B,0xD105,0xCFDD,0xD159, + 0xD424,0xD8AE,0xDD63,0xE19B,0xE3C9,0xE476,0xE598,0xE6E6, + 0xE7ED,0xE890,0xE9EF,0xED29,0xF333,0xFCDA,0x0AD8,0x1B35, + 0x2A20,0x3342,0x34D1,0x30B7,0x298C,0x2316,0x1F0E,0x1E0E, + 0x1F4E,0x21E6,0x2462,0x2556,0x2422,0x20ED,0x1B6F,0x1443, + 0x0BEC,0x02EC,0xF986,0xF136,0xE93C,0xE21B,0xDD38,0xDBA6, + 0xDD40,0xDFD0,0xE334,0xE653,0xE55E,0xE122,0xDC05,0xD867, + 0xD90A,0xDDAF,0xE4D2,0xED1D,0xF4CF,0xFC15,0x034A,0x0945, + 0x0DA6,0x10F4,0x12A5,0x1403,0x13D0,0x13BC,0x14ED,0x158C, + 0x1595,0x1607,0x1847,0x1B1A,0x1CA2,0x1B29,0x1603,0x0E82, + 0x060C,0xFE5C,0xF87F,0xF474,0xF1FE,0xF0C3,0xF03C,0xEFBD, + 0xEEC8,0xED16,0xEAE2,0xE7D4,0xE5D1,0xE5B5,0xE483,0xE403, + 0xE4A5,0xE678,0xE97B,0xED81,0xF2A0,0xF8D1,0xFF87,0x0432, + 0x068F,0x070D,0x073B,0x083C,0x09B3,0x0BBF,0x0E55,0x119B, + 0x1427,0x155F,0x15B7,0x1564,0x14EF,0x12C0,0x0F25,0x0B5C, + 0x0710,0x02C1,0xFFEF,0xFE38,0xFCE3,0xFB67,0xF9F1,0xF845, + 0xF646,0xF419,0xF1D0,0xEF8C,0xEDA9,0xEC3D,0xEAE6,0xEA6F, + 0xEBDA,0xEE6D,0xF144,0xF436,0xF755,0xF9A5,0xFBBF,0xFCF0, + 0xFE20,0xFF52,0x0112,0x031C,0x04AC,0x0750,0x0A6C,0x0CCC, + 0x0E86,0x0F9A,0x1087,0x0FDD,0x0EB0,0x0CEA,0x0BB8,0x0ACC, + 0x0938,0x0686,0x0470,0x02F4,0x02C3,0x01C1,0xFFAD,0xFD11, + 0xFBA6,0xF8D8,0xF612,0xF68A,0xF4FF,0xF2F2,0xF218,0xF25F, + 0xF343,0xF567,0xF6F8,0xF7A3,0xF837,0xF8A9,0xF951,0xFA9D, + 0xFC39,0xFDE1,0xFF78,0x00C9,0x0139,0x02CE,0x05A4,0x0833, + 0x0A15,0x0AC7,0x0A8E,0x09F1,0x0959,0x08E7,0x0837,0x07B7, + 0x0754,0x064F,0x050E,0x0325,0xFF73,0xF8B6,0xEDFF,0xDF88, + 0xCDB0,0xC083,0xBF63,0xBF5B,0xBFBA,0xBF48,0xC3DD,0xDF37, + 0xF872,0x0356,0x00E2,0xF507,0xE87D,0xE306,0xE786,0xF554, + 0x0754,0x19AC,0x2A29,0x37D6,0x3EEE,0x3F06,0x3F54,0x407F, + 0x4091,0x3FEC,0x4013,0x3C02,0x2E66,0x23A9,0x1E32,0x1FA3, + 0x264B,0x2DC6,0x30C7,0x2B4A,0x1BBC,0x05CA,0xEF58,0xDCD6, + 0xD1AF,0xCD80,0xCDA7,0xD128,0xD672,0xDA31,0xDC4F,0xDE86, + 0xE1C0,0xE3CD,0xE5F3,0xE6FF,0xE74B,0xE76F,0xE855,0xEBBE, + 0xF424,0x00CE,0x10A1,0x207E,0x2C6F,0x3254,0x3256,0x2D9D, + 0x269A,0x203F,0x1D25,0x1DBF,0x1F03,0x2128,0x243D,0x24C4, + 0x22A3,0x1E32,0x17F9,0x109B,0x08A7,0xFF84,0xF589,0xEBB5, + 0xE380,0xDD7F,0xDA19,0xD9D6,0xDCB9,0xE0FA,0xE4CB,0xE5C4, + 0xE39D,0xDF3E,0xDA38,0xD798,0xD82E,0xDD20,0xE4F9,0xED99, + 0xF579,0xFCE8,0x0338,0x08A2,0x0CF0,0x1025,0x12B5,0x13D7, + 0x1388,0x12B6,0x1259,0x1324,0x1463,0x1584,0x172A,0x18E9, + 0x197E,0x16EC,0x119A,0x0A19,0x0231,0xFA42,0xF3FF,0xF044, + 0xEEDE,0xEF7F,0xEEE3,0xECFC,0xEA71,0xE7B8,0xE58B,0xE43D, + 0xE2E5,0xE27B,0xE23B,0xE181,0xE110,0xE33A,0xE73F,0xECC3, + 0xF247,0xF813,0xFE12,0x0210,0x03F1,0x051D,0x059C,0x05C4, + 0x0704,0x0AAA,0x0BDA,0x0FB4,0x12FD,0x13A0,0x1311,0x1206, + 0x1030,0x0E62,0x0C80,0x09D0,0x0650,0x0291,0xFF2F,0xFBE4, + 0xF9CD,0xF7C2,0xF6E9,0xF625,0xF546,0xF354,0xF0CB,0xEEA0, + 0xEC0E,0xEA0F,0xE8F5,0xE942,0xEB61,0xEEC8,0xF181,0xF455, + 0xF69D,0xF8A4,0xF9F4,0xFB7C,0xFE2C,0x00CA,0x0310,0x04BA, + 0x0636,0x0799,0x0909,0x0ABA,0x0D1A,0x0F63,0x10BE,0x1042, + 0x0E63,0x0CB1,0x0A76,0x0823,0x0615,0x0438,0x0314,0x0207, + 0x0140,0x006E,0xFE7E,0xFC08,0xF91D,0xF6A8,0xF52E,0xF51B, + 0xF3D8,0xF191,0xF0C5,0xF021,0xF062,0xF1EF,0xF37C,0xF569, + 0xF75A,0xF935,0xFA6F,0xFB0E,0xFBC1,0xFD40,0xFF05,0x0072, + 0x0284,0x0541,0x080D,0x092B,0x0911,0x093F,0x09B4,0x09CB, + 0x0990,0x097E,0x0916,0x07BF,0x065A,0x0487,0x02C0,0x0139, + 0xFE05,0xF77C,0xEC5C,0xDD76,0xCA58,0xBFE2,0xC026,0xBFD9, + 0xC0C4,0xBFD6,0xC9A9,0xE7DE,0xFE02,0x05D9,0xFEA3,0xF0D6, + 0xE62A,0xE44C,0xECEA,0xFBD8,0x0CD6,0x1D3F,0x2C88,0x3A5A, + 0x407F,0x406D,0x40AA,0x4113,0x40E3,0x4057,0x4090,0x3940, + 0x2B38,0x20B2,0x1C6C,0x1F69,0x2714,0x2EE1,0x306E,0x284B, + 0x16DA,0x0043,0xEA50,0xD992,0xD0E8,0xCE28,0xCF4C,0xD26A, + 0xD5D2,0xD971,0xDDCC,0xE17E,0xE42F,0xE5F4,0xE79B,0xE8A8, + 0xE867,0xE85C,0xEA5F,0xEFB1,0xF8DD,0x0586,0x1555,0x2559, + 0x3126,0x3656,0x34A3,0x2EE9,0x2749,0x21CE,0x1F5E,0x1F74, + 0x2234,0x2557,0x26E1,0x25E6,0x2356,0x1F2A,0x18EE,0x1068, + 0x0725,0xFD88,0xF33E,0xEA33,0xE393,0xDF38,0xDD1C,0xDE19, + 0xE0DA,0xE338,0xE7BE,0xE94C,0xE68E,0xE257,0xDD8C,0xDA67, + 0xDB7D,0xE025,0xE853,0xF177,0xFB10,0x02A1,0x081D,0x0C75, + 0x1005,0x130D,0x1558,0x160F,0x1524,0x1502,0x154B,0x15BF, + 0x16C0,0x18B4,0x1AB5,0x1BD7,0x1AE9,0x17E8,0x12D1,0x0BD7, + 0x0349,0xFAB1,0xF467,0xF091,0xEF81,0xEFD5,0xF022,0xEF2E, + 0xED40,0xEA6C,0xE79C,0xE603,0xE582,0xE4B8,0xE3FF,0xE33D, + 0xE3CB,0xE6CE,0xEB90,0xF112,0xF6F3,0xFC4D,0x0088,0x0412, + 0x0689,0x079C,0x07AF,0x07B1,0x083D,0x0A7F,0x0EF3,0x1490, + 0x1727,0x187F,0x17D6,0x15DC,0x1298,0x1006,0x0DD0,0x0AC5, + 0x0712,0x0289,0xFE6A,0xFAEF,0xF92F,0xF877,0xF83A,0xF7B4, + 0xF603,0xF313,0xEFDE,0xEDC6,0xECAE,0xEAAA,0xE9D8,0xEAD2, + 0xEC04,0xEE7F,0xF1D8,0xF578,0xF877,0xFA8B,0xFB67,0xFC60, + 0xFE53,0x0022,0x0264,0x03E5,0x0502,0x0651,0x08C6,0x0B4C, + 0x0DA0,0x0F7A,0x10D7,0x0F9F,0x0C53,0x0A5C,0x092C,0x0725, + 0x04E6,0x0310,0x01F7,0x00FD,0x0042,0xFEF0,0xFCB5,0xFA59, + 0xF825,0xF5C3,0xF380,0xF164,0xEFF6,0xEE7A,0xED37,0xEDC7, + 0xEF77,0xF13D,0xF318,0xF45F,0xF55A,0xF627,0xF6E1,0xF7DB, + 0xF9B3,0xFAB5,0xFBF4,0xFDA7,0xFFE2,0x0274,0x0472,0x051F, + 0x05DE,0x0761,0x07BA,0x06F5,0x05D3,0x0522,0x0484,0x0321, + 0x0215,0x012A,0xFFF4,0xFCB8,0xF651,0xEC75,0xE061,0xD236, + 0xC39A,0xBE86,0xBF42,0xBEAE,0xC490,0xD8FC,0xECDD,0xF93B, + 0xFB77,0xF5B2,0xECCB,0xE678,0xE7F0,0xEFA4,0xFB0E,0x06EC, + 0x12D1,0x1E34,0x2865,0x3051,0x3768,0x3BE4,0x3C87,0x38D5, + 0x3496,0x2CC3,0x231C,0x1C33,0x16E3,0x15DF,0x188E,0x1DD1, + 0x21AE,0x20CA,0x199F,0x0C42,0xFC01,0xED88,0xE2DC,0xDCC8, + 0xDB6D,0xDC7D,0xDEB7,0xE165,0xE3A8,0xE5C5,0xE7BD,0xE994, + 0xEA9B,0xEB44,0xEBC7,0xEC22,0xEC66,0xEE48,0xF315,0xFB0A, + 0x04E9,0x1007,0x19B3,0x2102,0x24B5,0x238E,0x1F3E,0x1ADA, + 0x1852,0x16F4,0x16EE,0x189A,0x1B25,0x1C68,0x1BC1,0x18E6, + 0x14DC,0x0F92,0x09FA,0x0463,0xFE2E,0xF811,0xF196,0xEB5A, + 0xE775,0xE693,0xE895,0xEBCA,0xEDF1,0xEE86,0xEDD7,0xEB86, + 0xE6DD,0xE3FB,0xE427,0xE5A8,0xE92F,0xEE23,0xF53A,0xFC3A, + 0x01FC,0x05DC,0x08DB,0x0AD2,0x0CD3,0x0EEF,0x0FCC,0x1069, + 0x104A,0x1077,0x10AB,0x1002,0x1180,0x1435,0x1582,0x1434, + 0x10DA,0x0C0D,0x0767,0x0279,0xFE23,0xFA15,0xF7A6,0xF692, + 0xF5D1,0xF54F,0xF3E9,0xF2DC,0xF0DB,0xEEC1,0xED70,0xECF8, + 0xED56,0xED95,0xED56,0xEDD5,0xF0DD,0xF2CC,0xF547,0xF911, + 0xFD34,0x0128,0x038B,0x0439,0x0487,0x04C2,0x0670,0x08D4, + 0x0B51,0x0DF2,0x0FE6,0x10CE,0x108B,0x0FF9,0x0FE3,0x0F7F, + 0x0E43,0x0BFD,0x09A3,0x06B9,0x03AB,0x00AF,0xFEF9,0xFE3B, + 0xFD9C,0xFC97,0xFABF,0xF915,0xF823,0xF693,0xF42A,0xF282, + 0xF227,0xF26E,0xF351,0xF403,0xF5D8,0xF774,0xF8F8,0xFA44, + 0xFBF8,0xFDFF,0x000F,0x017B,0x0229,0x0309,0x040C,0x054B, + 0x06A1,0x0884,0x0A6C,0x0BC7,0x0C6F,0x0C7D,0x0C1E,0x0B60, + 0x0A25,0x0874,0x0652,0x053F,0x0434,0x02E5,0x022E,0x0178, + 0x0064,0xFE52,0xFB4F,0xFA7B,0xF9F0,0xF914,0xF8A4,0xF810, + 0xF594,0xF44C,0xF5E1,0xF4E3,0xF5CF,0xF7FD,0xFA01,0xFAD6, + 0xFAB7,0xFAF8,0xFC54,0xFD97,0xFF11,0x000C,0x00DA,0x01F9, + 0x0394,0x058A,0x0719,0x07B0,0x076C,0x066A,0x0583,0x056A, + 0x0617,0x0667,0x05DB,0x0460,0x02C6,0x0183,0x003A,0xFF9E, + 0xFE43,0xFBC8,0xF85E,0xF4CE,0xF13C,0xEE72,0xECFD,0xED8E, + 0xEFF8,0xF3C5,0xF75F,0xFA43,0xFAED,0xF9E3,0xF7D2,0xF660, + 0xF750,0xF93F,0xFC1D,0xFFB3,0x02B3,0x0510,0x075F,0x08FA, + 0x0A2B,0x0AB8,0x0B73,0x0BFB,0x0BE6,0x0B26,0x0B56,0x0A12, + 0x0854,0x0779,0x0713,0x06C4,0x0600,0x050D,0x03B1,0x0234, + 0x00B6,0xFF3A,0xFD3B,0xFC8C,0xFCFA,0xFD34,0xFD91,0xFDC5, + 0xFD79,0xFCE7,0xFCBF,0xFD2D,0xFCD4,0xFBD6,0xFBA8,0xFB6C, + 0xFA67,0xF9D7,0xF9E9,0xF959,0xF8EB,0xF827,0xF73D,0xF6C4, + 0xF63E,0xF57B,0xF454,0xF398,0xF2AC,0xF1BD,0xF115,0xF00C, + 0xEF3F,0xEEAF,0xEDFA,0xECC7,0xEB61,0xEB5D,0xEB41,0xEA5F, + 0xE998,0xE8B9,0xE7DF,0xE6E9,0xE615,0xE58F,0xE4D4,0xE407, + 0xE31C,0xE2AB,0xE21F,0xE22B,0xE1BB,0xE15B,0xE0FB,0xE143, + 0xE12D,0xE14C,0xE1AE,0xE1D3,0xE1E8,0xE26B,0xE2A2,0xE30A, + 0xE364,0xE353,0xE35A,0xE3A1,0xE3CB,0xE3C1,0xE42A,0xE4B1, + 0xE50E,0xE531,0xE5C8,0xE624,0xE63C,0xE664,0xE6BA,0xE6C4, + 0xE6EF,0xE6CF,0xE717,0xE7A3,0xE80C,0xE852,0xE8A3,0xE8D7, + 0xE8E1,0xE92F,0xEA0A,0xEA7B,0xEAD0,0xEB11,0xEBDD,0xEC72, + 0xEC99,0xED6E,0xED84,0xEE2E,0xEF04,0xEF2E,0xF008,0xF095, + 0xF122,0xF1C5,0xF268,0xF2E9,0xF3B0,0xF4CA,0xF480,0xF543, + 0xF767,0xF646,0xF755,0xF7E6,0xF800,0xF856,0xF8F5,0xF95C, + 0xF9C0,0xF9EE,0xFA5B,0xFAF5,0xFB62,0xFBA6,0xFBF3,0xFC48, + 0xFC90,0xFD33,0xFD42,0xFD96,0xFDCC,0xFE23,0xFEBD,0xFF39, + 0xFFE2,0x0047,0x00D7,0x0141,0x017A,0x01A1,0x023F,0x02C4, + 0x033B,0x03ED,0x0454,0x044F,0x04A1,0x0543,0x05E4,0x05F5, + 0x061D,0x0671,0x06A2,0x06DA,0x0754,0x07D3,0x0807,0x0856, + 0x0892,0x08B4,0x0970,0x09BD,0x0990,0x09D5,0x09F9,0x09CB, + 0x0A26,0x0AAA,0x0AFF,0x0B24,0x0B13,0x0B6B,0x0B89,0x0AAC, + 0x0901,0x09B2,0x0A1A,0x0A68,0x0A86,0x0AD5,0x0B98,0x0B8B, + 0x0BC9,0x0C13,0x0C8B,0x0CCB,0x0D03,0x0D09,0x0D2D,0x0D4D, + 0x0D82,0x0DFC,0x0DBB,0x0D29,0x0E9F,0x0EF0,0x0EFC,0x0E93, + 0x0E91,0x0EB6,0x0E6A,0x0E94,0x0E7F,0x0EDB,0x0F3C,0x0EDA, + 0x0F04,0x0EFC,0x0EB0,0x0F2A,0x0FA2,0x0F56,0x0F78,0x0F59, + 0x0F5E,0x0F77,0x0F23,0x1059,0x10F1,0x0FDD,0x0F93,0x0F7B, + 0x0FC3,0x0F8D,0x0F68,0x0F79,0x0FCD,0x109B,0x1135,0x1130, + 0x1132,0x11D0,0x1213,0x1186,0x1138,0x1157,0x1146,0x10E2, + 0x10F5,0x10AC,0x1064,0x106C,0x106B,0x1033,0x1067,0x1087, + 0x1003,0x0FE1,0x0F97,0x0F64,0x0F8A,0x0F28,0x0F4E,0x0EF1, + 0x0ED3,0x0E83,0x0E9C,0x0E63,0x0E1D,0x0E41,0x0DFF,0x0DF3, + 0x0DC3,0x0D71,0x0D87,0x0DB3,0x0D86,0x0DB0,0x0DDF,0x0D96, + 0x0D8D,0x0D7A,0x0D6E,0x0CEF,0x0CA8,0x0C5E,0x0C52,0x0C2E, + 0x0C4E,0x0C69,0x0C0F,0x0C4C,0x0C18,0x0BE2,0x0BD1,0x0B45, + 0x0AF5,0x0A60,0x0A05,0x0A3C,0x0A6B,0x0A1D,0x0A90,0x0A54, + 0x0878,0x0A71,0x0A7F,0x0915,0x09D0,0x09C7,0x09AB,0x095E, + 0x094B,0x0940,0x0926,0x08FC,0x0919,0x08C2,0x08C3,0x08C7, + 0x08B7,0x087D,0x084C,0x0801,0x082A,0x07DC,0x07F5,0x0829, + 0x0816,0x0816,0x077E,0x0754,0x073B,0x07A0,0x0740,0x0713, + 0x0743,0x0702,0x06EE,0x0692,0x0663,0x0686,0x068C,0x06C3, + 0x06D6,0x062E,0x063C,0x05F1,0x0606,0x059C,0x05B8,0x059C, + 0x058D,0x05B4,0x0561,0x0516,0x0509,0x0535,0x0542,0x04C6, + 0x0463,0x0415,0x043E,0x044E,0x0466,0x0580,0x06A3,0x05F6, + 0x05B7,0x05EF,0x05BB,0x0586,0x051A,0x0467,0x048D,0x04BA, + 0x04EC,0x04D2,0x04F6,0x0476,0x041B,0x03FC,0x039A,0x0335, + 0x029B,0x022A,0x02BD,0x02FF,0x0275,0x0220,0x0291,0x0211, + 0x01E2,0x01F4,0x01D9,0x01E1,0x01EB,0x019F,0x016A,0x016C, + 0x010D,0x014B,0x0111,0x0108,0x00BE,0x0104,0x00DC,0x0097, + 0xFFDD,0x00A7,0x01B9,0x0327,0x03EF,0x0407,0x03A9,0x0417, + 0x0563,0x0577,0x065D,0x0720,0x0737,0x0728,0x079D,0x07D2, + 0x07AF,0x0772,0x074A,0x07CF,0x087C,0x089D,0x089F,0x085F, + 0x0832,0x0895,0x0A5B,0x0C33,0x0BB7,0x0B05,0x0A7C,0x0BED, + 0x0DFF,0x0F63,0x0FC4,0x104E,0x108A,0x1131,0x11F6,0x1226, + 0x1245,0x131F,0x1447,0x14D0,0x1572,0x1599,0x14E7,0x1453, + 0x1503,0x1768,0x1913,0x1807,0x1655,0x16CE,0x1741,0x182B, + 0x18D6,0x18D5,0x183B,0x1834,0x1849,0x185C,0x18BE,0x1934, + 0x1969,0x19C3,0x1AF5,0x1B5F,0x19E8,0x1848,0x1737,0x1826, + 0x1959,0x1983,0x180F,0x1662,0x14F6,0x1512,0x161E,0x1663, + 0x159B,0x1414,0x1350,0x13B0,0x13D4,0x13BE,0x12D1,0x11CB, + 0x11EA,0x11CC,0x11DC,0x116A,0x10C1,0x0FC8,0x0F92,0x0F68, + 0x0F94,0x0F4A,0x0E44,0x0CC4,0x0B90,0x0BEE,0x0D02,0x0CED, + 0x0B6A,0x097C,0x0922,0x09DE,0x0A45,0x0975,0x0838,0x072A, + 0x06C6,0x070A,0x0721,0x0711,0x0670,0x0586,0x0469,0x03B5, + 0x028B,0x0014,0xFDDC,0xFCE3,0xFCCA,0xF957,0xF30D,0xEDC3, + 0xEB82,0xE8B5,0xE7CD,0xE7D3,0xE501,0xE358,0xE203,0xE19E, + 0xE3A5,0xE73C,0xEA9C,0xED12,0xEE72,0xF0DF,0xF44B,0xF63A, + 0xF801,0xFB06,0xFE9A,0x009F,0x0123,0x00A5,0x0120,0x024B, + 0x0358,0x044D,0x04F2,0x0640,0x0779,0x07E1,0x0897,0x0A87, + 0x0D64,0x1046,0x11E9,0x127F,0x135B,0x14FA,0x1601,0x15EF, + 0x155B,0x149A,0x146E,0x1344,0x1150,0x0EBE,0x0C72,0x097A, + 0x06FB,0x04ED,0x03AC,0x019D,0xFEB5,0xFC1E,0xF9DA,0xF89C, + 0xF800,0xF6A0,0xF60D,0xF542,0xF353,0xF0D3,0xEF46,0xF054, + 0xEFE5,0xEDF8,0xEB76,0xE90B,0xE6B1,0xE4C4,0xE323,0xE1E9, + 0xE0FD,0xE055,0xDF0D,0xDE38,0xDE0C,0xDE1D,0xDE60,0xDF54, + 0xE040,0xE1DB,0xE206,0xE373,0xE54D,0xE611,0xE722,0xE8D7, + 0xEA50,0xEB16,0xEB8A,0xEB7F,0xEC73,0xEE50,0xEF85,0xEFC0, + 0xEFBA,0xEFBB,0xF129,0xF2F2,0xF493,0xF545,0xF649,0xF774, + 0xF87F,0xF9C2,0xFAD1,0xFBB1,0xFB77,0xFB4E,0xFCF2,0xFDD7, + 0xFDC8,0xFC8C,0xFBD1,0xFB6C,0xFB15,0xFA07,0xF8AA,0xF7AE, + 0xF6C5,0xF535,0xF378,0xF22F,0xF209,0xF226,0xF17E,0xEFFF, + 0xEEFA,0xEF0A,0xEE18,0xECC4,0xEC68,0xEC5D,0xEC58,0xEB0A, + 0xE94C,0xE893,0xE851,0xE806,0xE74D,0xE671,0xE61A,0xE587, + 0xE507,0xE4FE,0xE5A2,0xE5D3,0xE546,0xE53F,0xE6A6,0xE884, + 0xE8E7,0xE7DE,0xE782,0xE96A,0xEC50,0xEE3D,0xED5F,0xEC0D, + 0xEC0B,0xED8A,0xEFE1,0xF235,0xF2C8,0xF133,0xEFDA,0xF0AC, + 0xF3DA,0xF623,0xF60B,0xF4A7,0xF46E,0xF5FF,0xF856,0xF9F2, + 0xF99C,0xF916,0xF970,0xFB28,0xFCAD,0xFD53,0xFCE6,0xFAD0, + 0xFA98,0xFC82,0xFBF7,0xFD89,0xFC81,0xF983,0xF89A,0xFA19, + 0xFB75,0xFB04,0xF94B,0xF7E9,0xF74F,0xF757,0xF831,0xF7E1, + 0xF708,0xF60B,0xF58E,0xF59F,0xF662,0xF6AA,0xF555,0xF35A, + 0xF2A0,0xF37F,0xF49D,0xF4B2,0xF331,0xF20B,0xF253,0xF30B, + 0xF2F7,0xF309,0xF310,0xF25C,0xF2BB,0xF34D,0xF409,0xF46B, + 0xF43D,0xF441,0xF515,0xF633,0xF6A9,0xF649,0xF64F,0xF6F8, + 0xF7A6,0xF891,0xF80C,0xF527,0xF097,0xEDCD,0xEE88,0xEEB1, + 0xE9A2,0xDEC6,0xD10D,0xC692,0xC22A,0xC196,0xC13E,0xBF90, + 0xBEC4,0xBE02,0xBEB6,0xBED2,0xBEE7,0xC60B,0xCCE3,0xD2CF, + 0xD9D9,0xE19D,0xEA6D,0xF267,0xFA22,0x0185,0x0894,0x0D81, + 0x1002,0x112B,0x1327,0x154E,0x18B6,0x1DF2,0x216C,0x22C7, + 0x23CA,0x26B0,0x2CF7,0x33E3,0x3A5E,0x3EB0,0x3FC7,0x3FDF, + 0x3FF1,0x3FE6,0x3FD8,0x3FD8,0x400D,0x3FFF,0x400C,0x3FFB, + 0x3FD6,0x3FE7,0x3C8E,0x36BA,0x328C,0x2BFF,0x2443,0x1E43, + 0x18F5,0x13F2,0x0FB5,0x0C68,0x09FF,0x083D,0x0592,0x0251, + 0xFE22,0xFA23,0xF7C7,0xF682,0xF3EB,0xEF58,0xE901,0xE2AE, + 0xDDBE,0xDA36,0xD7AB,0xD57C,0xD324,0xD021,0xCD10,0xCB9A, + 0xCC1B,0xCD96,0xD020,0xD2D3,0xD52A,0xD7BE,0xDA7E,0xDD84, + 0xE088,0xE4B3,0xE963,0xEE10,0xF0E0,0xF112,0xF18B,0xF408, + 0xF873,0xFC70,0xFDDA,0xFE7D,0x009C,0x0332,0x05C8,0x0896, + 0x0C49,0x1031,0x12DA,0x1513,0x1855,0x1BB2,0x1E6A,0x1F90, + 0x1FDE,0x21AC,0x23B2,0x24B7,0x227A,0x1FC0,0x1DEF,0x1D2B, + 0x1BCD,0x19E5,0x16AE,0x13CA,0x10C4,0x0E64,0x0D05,0x0C2E, + 0x0A63,0x05F3,0x0594,0x03F1,0x01E3,0x00D7,0xFE67,0xFBE9, + 0xF9EF,0xF863,0xF6A7,0xF42E,0xF14B,0xEE63,0xEC93,0xEB32, + 0xE928,0xE6D1,0xE4AF,0xE336,0xE234,0xE284,0xE316,0xE3A7, + 0xE410,0xE462,0xE4CB,0xE63A,0xE862,0xEA90,0xEC95,0xEDF9, + 0xEF1C,0xF08A,0xF260,0xF47D,0xF62C,0xF710,0xF85A,0xF996, + 0xFAFB,0xFC96,0xFE2A,0xFFC0,0x01E1,0x032F,0x0486,0x0685, + 0x0884,0x0A00,0x0B70,0x0D1A,0x0F5D,0x109E,0x1096,0x10E0, + 0x11A8,0x1244,0x1288,0x129F,0x1211,0x118E,0x119E,0x1155, + 0x1093,0x109F,0x0F57,0x0C25,0x09D6,0x08F5,0x0941,0x0914, + 0x077C,0x0558,0x036D,0x01DC,0x00E2,0x0083,0xFF86,0xFDBD, + 0xFBCB,0xF9E7,0xF90D,0xF91F,0xF75D,0xF4DB,0xF33F,0xF32C, + 0xF357,0xF30C,0xF1D8,0xEFE9,0xEF4E,0xEFD8,0xF0FA,0xF1A8, + 0xF1AF,0xF177,0xF1CA,0xF227,0xF2E9,0xF41A,0xF58D,0xF6B4, + 0xF6AB,0xF713,0xF86C,0xF95C,0xF8A7,0xF825,0xF5EE,0xF363, + 0xF283,0xF226,0xEFE0,0xE866,0xDBA6,0xCD6F,0xC3F5,0xC159, + 0xC1B4,0xBFC9,0xBE0B,0xBDE9,0xBE06,0xBE1F,0xBE19,0xC0E2, + 0xC92C,0xCFBC,0xD709,0xE029,0xE984,0xF32D,0xFB69,0x02A4, + 0x0A46,0x1284,0x190B,0x1B0D,0x18D5,0x187D,0x1CCF,0x2400, + 0x29BD,0x2B3A,0x2A97,0x2A86,0x2E05,0x34B3,0x3CA7,0x3E94, + 0x3E42,0x3E80,0x3E69,0x3E7B,0x3E78,0x3E63,0x3E96,0x3E8D, + 0x3EA4,0x3EA4,0x3E91,0x3E72,0x3E67,0x3DAB,0x395C,0x34A3, + 0x2DF2,0x24FC,0x1BB5,0x14CD,0x119F,0x1038,0x0EC7,0x0A22, + 0x044D,0xFF32,0xFC6D,0xFB37,0xF9E3,0xF64F,0xF0D6,0xEAB7, + 0xE83A,0xE333,0xDEAC,0xDA42,0xD431,0xCFEA,0xCDCD,0xCC6A, + 0xCAC1,0xC83C,0xC5C5,0xC596,0xC849,0xCDD7,0xD1E4,0xD389, + 0xD45A,0xD78A,0xDD7C,0xE441,0xE913,0xEB85,0xED06,0xEF58, + 0xF32C,0xF751,0xFAE3,0xFC9B,0xFD88,0xFF57,0x02A9,0x05DB, + 0x089C,0x0A80,0x0C81,0x1053,0x14C3,0x18BB,0x1B58,0x1D5A, + 0x1EF2,0x214B,0x2445,0x26DA,0x278F,0x26DA,0x2603,0x24D2, + 0x235C,0x21F3,0x1FA5,0x1D2F,0x1AC2,0x17D3,0x142D,0x1116, + 0x0EA1,0x0C8D,0x0AC9,0x0868,0x05B4,0x03CE,0x01A5,0xFED8, + 0xFB21,0xF934,0xF847,0xF688,0xF416,0xF182,0xEE99,0xEC0F, + 0xEA22,0xE875,0xE693,0xE4EC,0xE281,0xE0CD,0xDF73,0xDF6F, + 0xE040,0xE0FA,0xE160,0xE03A,0xE128,0xE381,0xE686,0xE8E1, + 0xE9DC,0xEAB2,0xEC59,0xEF2D,0xF1B5,0xF363,0xF542,0xF68D, + 0xF746,0xF8B4,0xFAED,0xFD91,0xFF9D,0x00CB,0x01FC,0x03C5, + 0x0687,0x08A9,0x099C,0x0BE8,0x0E6F,0x0F13,0x10F6,0x1332, + 0x14FB,0x14FD,0x139C,0x137D,0x157D,0x1741,0x16DF,0x14E1, + 0x12B5,0x11DA,0x12A7,0x1265,0x10EC,0x0F2A,0x0C75,0x0AD4, + 0x09D9,0x09C2,0x08B9,0x070A,0x04E7,0x0405,0x0404,0x038E, + 0x016C,0xFECC,0xFCDA,0xFC4B,0xFC5E,0xFBE9,0xF9BB,0xF6EE, + 0xF4F6,0xF429,0xF47D,0xF497,0xF3AD,0xF202,0xF0B3,0xF0D5, + 0xF1D3,0xF28A,0xF23D,0xF1A5,0xF230,0xF3B1,0xF50E,0xF5A6, + 0xF5B0,0xF60E,0xF746,0xF869,0xF993,0xFA80,0xFB0C,0xFBB2, + 0xFBA7,0xFAC9,0xF8F1,0xF60B,0xF395,0xF2AF,0xF060,0xE91B, + 0xDC0E,0xCD9D,0xC429,0xC25A,0xC36F,0xC1DC,0xBF90,0xC013, + 0xBF69,0xBFC9,0xC040,0xC6B4,0xD03F,0xD64F,0xDCCC,0xE56A, + 0xEFB0,0xF86C,0xFF6F,0x06C8,0x0F2D,0x16F9,0x1B10,0x1AA9, + 0x1945,0x1A93,0x2032,0x26C5,0x2A25,0x2B54,0x2B51,0x2C95, + 0x308F,0x37AC,0x3E4F,0x3F83,0x3F4D,0x3F79,0x3F5B,0x3F7D, + 0x3F98,0x3F7D,0x3F5B,0x3F4F,0x3F4C,0x3F7B,0x3F5C,0x3F2D, + 0x3F80,0x3DDE,0x39A8,0x3463,0x2CE9,0x23EC,0x1B42,0x15A5, + 0x1342,0x1216,0x0FC1,0x0B57,0x0653,0x0164,0xFE9B,0xFC79, + 0xF9BA,0xF687,0xF28E,0xEE96,0xE994,0xE4C9,0xE107,0xDB73, + 0xD718,0xD4FB,0xD339,0xCFD3,0xCBFD,0xC8BF,0xC7E9,0xCA53, + 0xCE55,0xD1FD,0xD3CD,0xD4D5,0xD738,0xDB16,0xE03A,0xE53D, + 0xE8A4,0xEAE7,0xEE77,0xF2AC,0xF4B0,0xF5DD,0xF80C,0xFA45, + 0xFCD5,0x0004,0x02A9,0x049F,0x0627,0x07AF,0x0B0A,0x100F, + 0x145E,0x1796,0x1974,0x1B12,0x1DE9,0x20B2,0x22E1,0x239E, + 0x23EB,0x2453,0x2348,0x2106,0x1FC8,0x1ECE,0x1CF1,0x1A38, + 0x17A5,0x14EF,0x123D,0x0F01,0x0B8C,0x08F0,0x06E1,0x0537, + 0x032D,0x007E,0xFD91,0xFBFB,0xFADB,0xF873,0xF5A4,0xF333, + 0xF1B0,0xEFE5,0xECF7,0xE965,0xE6FE,0xE56E,0xE37D,0xE245, + 0xE08B,0xDE6A,0xDCEC,0xDC4A,0xDD01,0xDE4E,0xDEB2,0xDEED, + 0xDF81,0xE0A9,0xE385,0xE640,0xE7CD,0xE8F5,0xEAC8,0xECE0, + 0xEEF3,0xF0B1,0xF22D,0xF3DF,0xF540,0xF694,0xF8F2,0xFB87, + 0xFD87,0xFE47,0xFF3A,0x0072,0x02CE,0x05A5,0x0838,0x09A3, + 0x0A8A,0x0B7A,0x0C63,0x0E80,0x108F,0x1217,0x1179,0x107E, + 0x10E7,0x11E5,0x1168,0x101C,0x0F00,0x0E41,0x0D26,0x0D13, + 0x0C91,0x0900,0x0883,0x073A,0x05E3,0x05B0,0x05C2,0x03CA, + 0x0174,0xFF2F,0xFECF,0xFF08,0xFE0E,0xFB5D,0xF918,0xF8BC, + 0xF841,0xF6BD,0xF442,0xF244,0xF174,0xF1C3,0xF162,0xF044, + 0xEE85,0xED32,0xED72,0xEECE,0xF03F,0xF075,0xEF8C,0xEF25, + 0xF024,0xF1A7,0xF371,0xF45B,0xF4C7,0xF52A,0xF5EC,0xF69E, + 0xF780,0xF8C9,0xFA05,0xFB35,0xFACC,0xF885,0xF521,0xF306, + 0xF2A3,0xF29F,0xEF08,0xE580,0xD798,0xCB12,0xC3D1,0xC263, + 0xC2B0,0xC087,0xBF6E,0xBFBD,0xBFC1,0xBFC4,0xC016,0xC789, + 0xCEC5,0xD664,0xDE74,0xE7A1,0xF030,0xF843,0x00ED,0x09F1, + 0x1208,0x177C,0x1ADC,0x1B9C,0x1B39,0x1C8A,0x2104,0x2758, + 0x2B86,0x2D55,0x2C7F,0x2DD6,0x3330,0x3ACC,0x3F29,0x3F89, + 0x3FA2,0x3F9D,0x3FC9,0x4005,0x3FD3,0x3FCE,0x3FFA,0x3FE5, + 0x3FCE,0x3FF0,0x3FC9,0x3FCE,0x3FF3,0x3E5D,0x39C4,0x32E4, + 0x2A16,0x2293,0x1C56,0x1872,0x1482,0x10C9,0x0D81,0x09CD, + 0x04DF,0x00B1,0xFE53,0xFC8A,0xF9CA,0xF619,0xF28E,0xEE51, + 0xE8ED,0xE35B,0xDE98,0xDA94,0xD794,0xD45E,0xD03C,0xCC62, + 0xC9FB,0xC8C7,0xC936,0xCAA1,0xCCF7,0xD02F,0xD30E,0xD58A, + 0xD815,0xDBF4,0xE07A,0xE541,0xE9AC,0xED14,0xEFE7,0xF1FD, + 0xF3BA,0xF5D9,0xF98F,0xFD48,0xFFC8,0x00BB,0x01CD,0x0415, + 0x06E8,0x0A63,0x0E36,0x11C5,0x14FE,0x174B,0x19A2,0x1BFD, + 0x1EE4,0x2208,0x2452,0x2510,0x2513,0x24CF,0x23F4,0x2298, + 0x2115,0x1FA6,0x1E84,0x1B92,0x1749,0x1441,0x11FF,0x0F4B, + 0x0C70,0x08F2,0x073A,0x06F0,0x04F2,0x0141,0xFED0,0xFCD2, + 0xFAF9,0xFC12,0xF96C,0xF5A8,0xF2CB,0xEFE1,0xEE0D,0xED28, + 0xEB9E,0xE829,0xE44A,0xE28B,0xE223,0xE137,0xDF50,0xDE1A, + 0xDE68,0xDFA5,0xE07D,0xE0D6,0xE17E,0xE2B9,0xE3CF,0xE5DA, + 0xE8C3,0xEB53,0xECB5,0xEC83,0xED8B,0xF0AA,0xF498,0xF68C, + 0xF759,0xF78C,0xF879,0xFA4B,0xFD0E,0xFFA4,0x01CB,0x02EC, + 0x0380,0x0549,0x0860,0x0AEA,0x0C3E,0x0CC6,0x0D82,0x0F45, + 0x1142,0x1235,0x11ED,0x110F,0x1133,0x125A,0x1272,0x114E, + 0x1031,0x0F5F,0x0EF4,0x0D20,0x0C17,0x0CD4,0x0D00,0x0AD8, + 0x08C8,0x0796,0x0628,0x04B2,0x02D3,0x01CC,0x01DD,0x00CD, + 0xFE71,0xFBE7,0xFA4F,0xF9E1,0xF9AC,0xF7DC,0xF57A,0xF3F2, + 0xF263,0xF1C7,0xF1BB,0xF0F5,0xEF9D,0xEF1C,0xEFDE,0xEF62, + 0xEF19,0xEE97,0xEE87,0xEFBC,0xF1B4,0xF274,0xF228,0xF1B1, + 0xF24A,0xF4AE,0xF6CB,0xF754,0xF6EE,0xF7A6,0xF8A9,0xF87A, + 0xF681,0xF3BA,0xF16A,0xEFEB,0xEF7F,0xEB9B,0xE0D6,0xD253, + 0xC5C3,0xBFC3,0xC03B,0xC203,0xBFE5,0xBE77,0xBE74,0xBE8C, + 0xBE2F,0xC01E,0xCA1F,0xD166,0xD7A8,0xDF0C,0xE85C,0xF27F, + 0xFBAE,0x0381,0x0A78,0x11D2,0x183F,0x1BD3,0x1B4D,0x199E, + 0x1B2A,0x212F,0x2895,0x2C67,0x2C1C,0x2B0C,0x2C98,0x322C, + 0x3B0C,0x3E83,0x3E46,0x3E62,0x3E70,0x3E6A,0x3E5D,0x3E80, + 0x3E8E,0x3E8C,0x3E74,0x3E82,0x3E88,0x3E67,0x3EA7,0x3CDB, + 0x3712,0x32A3,0x2D5F,0x260C,0x1DA8,0x1656,0x10E3,0x0D67, + 0x0AE7,0x083E,0x0476,0x004E,0xFC86,0xF9BB,0xF656,0xF36B, + 0xF060,0xED02,0xE8F5,0xE3AA,0xDE5B,0xD8F4,0xD464,0xD29E, + 0xCDEE,0xCB70,0xC9AB,0xC7A1,0xC6D3,0xC6A0,0xC783,0xCA97, + 0xCE78,0xD210,0xD4F3,0xD7C5,0xDB7C,0xDFAA,0xE44F,0xE8E0, + 0xECBE,0xF035,0xF2C0,0xF4C0,0xF6B0,0xF90D,0xFBBC,0xFE81, + 0x0157,0x03FD,0x063D,0x0811,0x09B6,0x0C6F,0x1078,0x1505, + 0x18A1,0x1B2B,0x1C13,0x1D22,0x1F45,0x21F0,0x2425,0x2499, + 0x2392,0x222A,0x200F,0x1E1F,0x1CBD,0x1AF6,0x181C,0x154C, + 0x1285,0x0F89,0x0C76,0x098C,0x0792,0x0565,0x03DA,0x01E4, + 0xFFDA,0xFDE4,0xFB44,0xF834,0xF63D,0xF569,0xF379,0xEF6F, + 0xEC1D,0xE9A2,0xE6F5,0xE48C,0xE314,0xE1EE,0xE13E,0xDFC7, + 0xDE25,0xDCBF,0xDC72,0xDCFB,0xDE01,0xDF61,0xE0E1,0xE22C, + 0xE42E,0xE530,0xE5CC,0xE86D,0xEBFB,0xEEE5,0xF02A,0xF184, + 0xF277,0xF367,0xF588,0xF8C1,0xFB65,0xFD3E,0xFD4E,0xFD0F, + 0xFE6E,0x0253,0x05CA,0x072C,0x081E,0x094A,0x0B26,0x0CED, + 0x0EBC,0x1049,0x122D,0x1322,0x1234,0x12CB,0x13C2,0x133B, + 0x11A9,0x10D5,0x115C,0x127C,0x11BB,0x0F4D,0x0CAF,0x0B52, + 0x0BAD,0x0C6F,0x0B8C,0x098E,0x0709,0x04A9,0x0316,0x02E3, + 0x031F,0x025C,0x0025,0xFDD7,0xFBD6,0xFB1B,0xFA67,0xF8C9, + 0xF7D1,0xF690,0xF5BA,0xF4FF,0xF35F,0xF1D6,0xF169,0xF16D, + 0xF1FB,0xF296,0xF2E9,0xF1FE,0xF0A7,0xF0CE,0xF2DA,0xF53F, + 0xF67C,0xF5FC,0xF51B,0xF5A7,0xF72F,0xF8FB,0xFA57,0xFB50, + 0xFBE9,0xFBC3,0xFBAC,0xFB42,0xF9F4,0xF741,0xF4AC,0xF3A2, + 0xF1FF,0xEBC0,0xDFDF,0xD1C8,0xC72A,0xC3CA,0xC44F,0xC321, + 0xC026,0xBF7A,0xBFA6,0xC002,0xBF95,0xC56E,0xCF50,0xD2E1, + 0xD980,0xE2F9,0xECD7,0xF743,0xFEF2,0x05C2,0x0C8B,0x134D, + 0x1881,0x1ABD,0x1AC5,0x1B49,0x1E5C,0x23A9,0x28C5,0x2A8E, + 0x2A38,0x2A3B,0x2E09,0x3583,0x3D3F,0x3F3C,0x3F38,0x3F83, + 0x3F78,0x3F89,0x3F95,0x3F7D,0x3F95,0x3F6F,0x3F64,0x3F6B, + 0x3F5B,0x3F38,0x3F74,0x3D8C,0x37C6,0x33C9,0x2E74,0x26C4, + 0x1DDA,0x15D1,0x1197,0x10B4,0x0F66,0x0AEB,0x0525,0x0077, + 0xFDC3,0xFBC3,0xFA03,0xF6ED,0xF270,0xED52,0xE814,0xE422, + 0xE0BC,0xDBDE,0xD612,0xD1F0,0xD00C,0xD08B,0xCD94,0xCB00, + 0xC9FD,0xCA00,0xCB4C,0xCE03,0xD175,0xD53A,0xD7EC,0xD9F5, + 0xDD53,0xE1F5,0xE75D,0xEBC1,0xEE75,0xF05F,0xF298,0xF56E, + 0xF84A,0xFB11,0xFD7E,0xFEC9,0x0093,0x0379,0x06A5,0x092B, + 0x0BBE,0x0E1E,0x1162,0x157F,0x198E,0x1C8A,0x1DB3,0x1EA5, + 0x2127,0x237F,0x2505,0x248F,0x23C5,0x231F,0x214E,0x1F55, + 0x1D7F,0x1AC5,0x170A,0x13C7,0x1217,0x1077,0x0E50,0x0AF3, + 0x072C,0x04A2,0x034D,0x01F1,0xFFD0,0xFCAC,0xF9B2,0xF785, + 0xF5AB,0xF3CF,0xF229,0xEF89,0xECC4,0xEA14,0xE7F0,0xE607, + 0xE3FA,0xE15B,0xDF6E,0xDE57,0xDE06,0xDD9B,0xDD31,0xDC94, + 0xDC8C,0xDDCF,0xDFB5,0xE13A,0xE298,0xE3DA,0xE538,0xE6DE, + 0xE96F,0xEC2C,0xEDFD,0xEEE0,0xEFB8,0xF1B4,0xF412,0xF649, + 0xF6F9,0xF783,0xF91C,0xFB63,0xFE06,0xFFB0,0x013E,0x0328, + 0x04C5,0x0661,0x0811,0x09C1,0x0AFC,0x0C4B,0x0DE0,0x0F0C, + 0x0F66,0x0EDF,0x0ECD,0x0F26,0x0F54,0x0EBC,0x0DD9,0x0D65, + 0x0CF8,0x0B3D,0x092F,0x0841,0x082A,0x068C,0x06D8,0x051B, + 0x01A4,0x01CB,0x00CB,0xFFA7,0xFEF6,0xFDB0,0xFBDE,0xFA40, + 0xF933,0xF8B3,0xF79C,0xF5FA,0xF46F,0xF35D,0xF317,0xF1E1, + 0xF016,0xEF76,0xEF0F,0xEF53,0xEFED,0xEF8C,0xEE77,0xEDEB, + 0xEE2F,0xEF87,0xF131,0xF2A5,0xF218,0xF19C,0xF29D,0xF4A3, + 0xF645,0xF688,0xF64F,0xF789,0xF96A,0xFAE5,0xFB3D,0xF947, + 0xF714,0xF566,0xF4D7,0xF4D3,0xF300,0xECCD,0xE235,0xD73E, + 0xD06A,0xCE87,0xCF6E,0xCEAE,0xC9AE,0xC3C5,0xC13F,0xC3F1, + 0xCA9F,0xD2C3,0xD9A4,0xDF8B,0xE54C,0xEBB3,0xF150,0xF709, + 0xFE5A,0x0542,0x0C1F,0x11AC,0x1521,0x1579,0x147C,0x14D8, + 0x17D3,0x1D8A,0x22A6,0x2413,0x22DF,0x2227,0x25C8,0x2D02, + 0x343A,0x38C2,0x3B44,0x3DD0,0x3F84,0x3F6B,0x3F7C,0x3FB1, + 0x3FC9,0x3F95,0x3FC6,0x3FB7,0x3FD9,0x3BD5,0x3425,0x2F80, + 0x2BDC,0x27F2,0x22F9,0x1CAF,0x1631,0x1117,0x0E0B,0x0D29, + 0x0C51,0x08C8,0x0574,0x01D4,0xFF98,0xFEC6,0xFC7F,0xF8C6, + 0xF42C,0xF09E,0xEE63,0xEC20,0xE807,0xE34E,0xDF04,0xDCA4, + 0xDBEC,0xDADB,0xD896,0xD629,0xD4D8,0xD56C,0xD7D2,0xDB09, + 0xDDD6,0xDF7D,0xE18D,0xE4D9,0xE87A,0xEC63,0xEF92,0xF22A, + 0xF4E1,0xF70A,0xF906,0xFB83,0xFD6A,0xFEA2,0xFF95,0x015B, + 0x044E,0x06BC,0x0844,0x092D,0x0ADF,0x0DF9,0x1136,0x134C, + 0x15DC,0x180F,0x195B,0x1AAD,0x1C50,0x1DEB,0x1E67,0x1D9F, + 0x1C84,0x1BF0,0x1B3D,0x1992,0x1744,0x150A,0x12FA,0x106F, + 0x0DC5,0x0B4F,0x095B,0x0759,0x0507,0x02D4,0x0199,0x0134, + 0xFF05,0xFC65,0xFA63,0xF941,0xF95F,0xF8F6,0xF548,0xF12F, + 0xF11F,0xEEEC,0xED6E,0xECC3,0xEB0E,0xE8E6,0xE721,0xE5B9, + 0xE587,0xE575,0xE4DA,0xE4C9,0xE5A2,0xE72E,0xE820,0xE82D, + 0xE84F,0xE9C2,0xED17,0xF0B7,0xF1F6,0xF1E8,0xF1AC,0xF27F, + 0xF4D1,0xF81C,0xFB55,0xFBE5,0xFAA7,0xFA7F,0xFCC4,0xFFFE, + 0x0287,0x0275,0x028A,0x0365,0x058C,0x07D9,0x08A0,0x08EC, + 0x0A56,0x0BE9,0x0CC8,0x0D8A,0x0E92,0x0EDC,0x0E6E,0x0D48, + 0x0D39,0x0DE5,0x0DF7,0x0CC4,0x0A64,0x0963,0x08C4,0x0844, + 0x0746,0x0625,0x05BE,0x051C,0x057B,0x0469,0x0292,0x020B, + 0x0161,0x0030,0xFE55,0xFD67,0xFD12,0xFC1B,0xFA7D,0xF8D1, + 0xF7C1,0xF7CA,0xF755,0xF605,0xF4C5,0xF3A4,0xF30C,0xF30C, + 0xF325,0xF3FF,0xF347,0xF181,0xF1BC,0xF406,0xF554,0xF538, + 0xF446,0xF4CC,0xF697,0xF7D1,0xF7E8,0xF81E,0xF92D,0xFA64, + 0xFB42,0xFB5E,0xFAFC,0xFAC5,0xF9B5,0xF95D,0xFA0A,0xFB31, + 0xF7EF,0xF2DD,0xEFB4,0xEEA5,0xEFCC,0xF093,0xEF6E,0xED99, + 0xEC35,0xEC61,0xEE6C,0xF1B1,0xF4A9,0xF64D,0xF809,0xFA19, + 0xFC5F,0xFF02,0x00FD,0x028D,0x04A5,0x0709,0x08E5,0x0944, + 0x0873,0x07EE,0x0828,0x09E0,0x0B61,0x0BBA,0x0BE2,0x0B95, + 0x0B90,0x0CBA,0x0F04,0x11E9,0x135C,0x1394,0x1322,0x14AA, + 0x1633,0x16DF,0x1635,0x14F3,0x1447,0x1444,0x139B,0x1176, + 0x0E42,0x0BAE,0x0A5E,0x0990,0x08B8,0x0699,0x03BA,0x00AD, + 0xFF4B,0xFF6A,0xFF88,0xFF35,0xFE3E,0xFC6F,0xFB1F,0xFA0E, + 0xFA0A,0xFA3F,0xF9F0,0xF96E,0xF7F2,0xF5D7,0xF4EB,0xF494, + 0xF3F4,0xF242,0xF1AF,0xF209,0xF159,0xF064,0xF16E,0xEF0F, + 0xF03D,0xF23C,0xF346,0xF461,0xF571,0xF60F,0xF6CA,0xF865, + 0xFA1C,0xFBDC,0xFC6B,0xFD04,0xFD71,0xFECF,0xFFE4,0xFF81, + 0xFF24,0xFFFD,0x0124,0x01C2,0x021E,0x01D0,0x01DB,0x02A7, + 0x047A,0x05CD,0x0697,0x059B,0x050B,0x067C,0x07FE,0x085F, + 0x07CB,0x06E7,0x0653,0x0604,0x0521,0x045A,0x0354,0x028A, + 0x017D,0x0079,0xFF79,0xFE65,0xFD5E,0xFC3C,0xFA58,0xF78B, + 0xF608,0xF5E7,0xF71F,0xF80C,0xF6EB,0xF53C,0xF37A,0xF1F6, + 0xF23B,0xF300,0xF2FA,0xF26C,0xF11E,0xEF4C,0xECFF,0xED0D, + 0xECE9,0xECA8,0xEC42,0xEBBB,0xEB8F,0xEB22,0xEA78,0xEA0E, + 0xE94E,0xE957,0xE934,0xE8F1,0xE86B,0xE7E0,0xE796,0xE7E9, + 0xE7E0,0xE696,0xE70A,0xE721,0xE6BF,0xE677,0xE693,0xE6DD, + 0xE6A3,0xE6CC,0xE6CA,0xE699,0xE64F,0xE62F,0xE695,0xE689, + 0xE644,0xE6E1,0xE76A,0xE786,0xE78C,0xE76A,0xE6ED,0xE709, + 0xE820,0xE778,0xE6A3,0xE673,0xE6AA,0xE6E9,0xE6C7,0xE740, + 0xE7EE,0xE84A,0xE895,0xE913,0xE9FC,0xEAA3,0xEAE8,0xEB70, + 0xEC44,0xECD1,0xECE6,0xED59,0xED99,0xED9A,0xEDF6,0xEE96, + 0xEF1A,0xEFFA,0xF0CB,0xF13D,0xF155,0xF1FB,0xF285,0xF36C, + 0xF3AA,0xF3BA,0xF45B,0xF49D,0xF4E7,0xF5A5,0xF5BC,0xF638, + 0xF6A6,0xF73D,0xF7D1,0xF839,0xF88C,0xF8A9,0xF916,0xF9DC, + 0xFA20,0xFA56,0xFAB6,0xFB39,0xFB63,0xFB0E,0xFB3E,0xFB7F, + 0xFBE6,0xFC5C,0xFD16,0xFD0F,0xFD87,0xFDF9,0xFE76,0xFEDB, + 0xFF4A,0x0027,0x00C2,0x00AF,0x00D4,0x0106,0x014C,0x0156, + 0x018F,0x029B,0x0312,0x033D,0x0373,0x04CA,0x0390,0x04E6, + 0x067A,0x05AD,0x05CB,0x0653,0x064A,0x0680,0x06F4,0x0721, + 0x0785,0x07BD,0x0849,0x08EE,0x0921,0x08C9,0x091C,0x096D, + 0x09BE,0x0A22,0x0A36,0x0A78,0x0ABC,0x0AA6,0x0A7A,0x0AB7, + 0x0B24,0x0B8C,0x0BA4,0x0BBE,0x0BB3,0x0BD3,0x0BAB,0x0BE4, + 0x0C1A,0x0C67,0x0C4E,0x0C80,0x0C6F,0x0C5C,0x0CBB,0x0CEC, + 0x0D15,0x0CD4,0x0CE9,0x0D05,0x0D37,0x0D12,0x0CFD,0x0D43, + 0x0D5B,0x0D50,0x0D23,0x0D83,0x0D9B,0x0DA0,0x0D5B,0x0D30, + 0x0D21,0x0D68,0x0DE7,0x0EF0,0x10C7,0x1036,0x0F8A,0x0FBA, + 0x0FA7,0x0FA4,0x0F76,0x0F3C,0x0F3A,0x0F40,0x0F56,0x0F1E, + 0x0F65,0x0FB1,0x0F62,0x0EE8,0x0ED7,0x0EC1,0x0E4C,0x0DD3, + 0x0EEF,0x0F60,0x0E02,0x0D91,0x0DC7,0x0DBE,0x0D62,0x0D6D, + 0x0DB0,0x0DD8,0x0DA3,0x0D0D,0x0D05,0x0D1D,0x0D5F,0x0DA7, + 0x0D42,0x0D18,0x0CEE,0x0CE1,0x0CC1,0x0C78,0x0CAA,0x0CE1, + 0x0C98,0x0B6B,0x0BD6,0x0C80,0x0C8C,0x0C48,0x0C95,0x0C6D, + 0x0C34,0x0BE5,0x0B39,0x0AA7,0x0A98,0x0A42,0x0A2B,0x09C0, + 0x091B,0x090E,0x0909,0x08B7,0x085F,0x0887,0x0867,0x0860, + 0x08AA,0x0873,0x082D,0x0815,0x0803,0x0837,0x0861,0x0861, + 0x0808,0x07DC,0x07BE,0x07B9,0x074E,0x06C8,0x0743,0x075A, + 0x0791,0x0789,0x071A,0x06EA,0x0700,0x06F3,0x06A6,0x06C4, + 0x06F2,0x0706,0x06F1,0x0697,0x0677,0x069F,0x06AC,0x06DA, + 0x070A,0x06D2,0x067D,0x0656,0x0669,0x064D,0x05EB,0x05ED, + 0x058D,0x05CD,0x0607,0x05DA,0x055D,0x055B,0x057D,0x0590, + 0x057C,0x05AF,0x059A,0x0588,0x0453,0x0645,0x064A,0x0503, + 0x0651,0x05A0,0x05AB,0x054E,0x057E,0x05C9,0x05AA,0x05E8, + 0x0620,0x05B7,0x0550,0x04F1,0x04AC,0x04FB,0x04FD,0x0578, + 0x0551,0x0520,0x04DB,0x04EA,0x04F4,0x04B5,0x047D,0x0531, + 0x0578,0x0501,0x04DE,0x0496,0x0430,0x0416,0x0412,0x03CD, + 0x0429,0x0432,0x046B,0x0428,0x03EE,0x037B,0x0392,0x03EA, + 0x0400,0x03CE,0x03B7,0x0388,0x0388,0x037E,0x034A,0x0356, + 0x0359,0x0354,0x02F7,0x02C6,0x02F2,0x0302,0x02EE,0x02FF, + 0x02FF,0x02D5,0x02BF,0x02E0,0x0230,0x0072, +}; diff --git a/AppleWin/source/SaveState.cpp b/AppleWin/source/SaveState.cpp new file mode 100644 index 00000000..dca7c035 --- /dev/null +++ b/AppleWin/source/SaveState.cpp @@ -0,0 +1,290 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Save-state (snapshot) module + * + * Author: Copyright (c) 2004-2006 Tom Charlesworth + */ + +#include "StdAfx.h" +#pragma hdrstop + +#define DEFAULT_SNAPSHOT_NAME "SaveState.aws" + +bool g_bSaveStateOnExit = false; + +static char g_szSaveStateFilename[MAX_PATH] = {0}; + +//----------------------------------------------------------------------------- + +char* Snapshot_GetFilename() +{ + return g_szSaveStateFilename; +} + +void Snapshot_SetFilename(char* pszFilename) +{ + if(*pszFilename) + strcpy(g_szSaveStateFilename, (const char *) pszFilename); + else + strcpy(g_szSaveStateFilename, DEFAULT_SNAPSHOT_NAME); +} + +//----------------------------------------------------------------------------- + +void Snapshot_LoadState() +{ + char szMessage[32 + MAX_PATH]; + + APPLEWIN_SNAPSHOT* pSS = (APPLEWIN_SNAPSHOT*) new char[sizeof(APPLEWIN_SNAPSHOT)]; + + try + { + if(pSS == NULL) + throw(0); + + memset(pSS, 0, sizeof(APPLEWIN_SNAPSHOT)); + + // + + HANDLE hFile = CreateFile( g_szSaveStateFilename, + GENERIC_READ, + 0, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if(hFile == INVALID_HANDLE_VALUE) + { + strcpy(szMessage, "File not found: "); + strcpy(szMessage + strlen(szMessage), g_szSaveStateFilename); + throw(0); + } + + DWORD dwBytesRead; + BOOL bRes = ReadFile( hFile, + pSS, + sizeof(APPLEWIN_SNAPSHOT), + &dwBytesRead, + NULL); + + CloseHandle(hFile); + + if(!bRes || (dwBytesRead != sizeof(APPLEWIN_SNAPSHOT))) + { + // File size wrong: probably because of version mismatch or corrupt file + strcpy(szMessage, "File size mismatch"); + throw(0); + } + + if(pSS->Hdr.dwTag != AW_SS_TAG) + { + strcpy(szMessage, "File corrupt"); + throw(0); + } + + if(pSS->Hdr.dwVersion != MAKE_VERSION(1,0,0,1)) + { + strcpy(szMessage, "Version mismatch"); + throw(0); + } + + // TO DO: Verify checksum + + // + // Reset all sub-systems + MemReset(); + + if (apple2e) + MemResetPaging(); + + DiskReset(); + KeybReset(); + VideoResetState(); + MB_Reset(); + + // + // Apple2 uint + // + + CpuSetSnapshot(&pSS->Apple2Unit.CPU6502); + CommSetSnapshot(&pSS->Apple2Unit.Comms); + JoySetSnapshot(&pSS->Apple2Unit.Joystick); + KeybSetSnapshot(&pSS->Apple2Unit.Keyboard); + SpkrSetSnapshot(&pSS->Apple2Unit.Speaker); + VideoSetSnapshot(&pSS->Apple2Unit.Video); + MemSetSnapshot(&pSS->Apple2Unit.Memory); + + // + + // + // Slot4: Mockingboard + MB_SetSnapshot(&pSS->Mockingboard1, 4); + + // + // Slot5: Mockingboard + MB_SetSnapshot(&pSS->Mockingboard2, 5); + + // + // Slot6: Disk][ + DiskSetSnapshot(&pSS->Disk2, 6); + } + catch(int) + { + MessageBox( framewindow, + szMessage, + TEXT("Load State"), + MB_ICONEXCLAMATION | MB_SETFOREGROUND); + } + + delete [] pSS; +} + +//----------------------------------------------------------------------------- + +void Snapshot_SaveState() +{ + APPLEWIN_SNAPSHOT* pSS = (APPLEWIN_SNAPSHOT*) new char[sizeof(APPLEWIN_SNAPSHOT)]; + if(pSS == NULL) + { + // To do + return; + } + + memset(pSS, 0, sizeof(APPLEWIN_SNAPSHOT)); + + pSS->Hdr.dwTag = AW_SS_TAG; + pSS->Hdr.dwVersion = MAKE_VERSION(1,0,0,1); + pSS->Hdr.dwChecksum = 0; // TO DO + + // + // Apple2 uint + // + + pSS->Apple2Unit.UnitHdr.dwLength = sizeof(SS_APPLE2_Unit); + pSS->Apple2Unit.UnitHdr.dwVersion = MAKE_VERSION(1,0,0,0); + + CpuGetSnapshot(&pSS->Apple2Unit.CPU6502); + CommGetSnapshot(&pSS->Apple2Unit.Comms); + JoyGetSnapshot(&pSS->Apple2Unit.Joystick); + KeybGetSnapshot(&pSS->Apple2Unit.Keyboard); + SpkrGetSnapshot(&pSS->Apple2Unit.Speaker); + VideoGetSnapshot(&pSS->Apple2Unit.Video); + MemGetSnapshot(&pSS->Apple2Unit.Memory); + + // + // Slot1: Empty + pSS->Empty1.Hdr.UnitHdr.dwLength = sizeof(SS_CARD_EMPTY); + pSS->Empty1.Hdr.UnitHdr.dwVersion = MAKE_VERSION(1,0,0,0); + pSS->Empty1.Hdr.dwSlot = 1; + pSS->Empty1.Hdr.dwType = CT_Empty; + + // + // Slot2: Empty + pSS->Empty2.Hdr.UnitHdr.dwLength = sizeof(SS_CARD_EMPTY); + pSS->Empty2.Hdr.UnitHdr.dwVersion = MAKE_VERSION(1,0,0,0); + pSS->Empty2.Hdr.dwSlot = 2; + pSS->Empty2.Hdr.dwType = CT_Empty; + + // + // Slot3: Empty + pSS->Empty3.Hdr.UnitHdr.dwLength = sizeof(SS_CARD_EMPTY); + pSS->Empty3.Hdr.UnitHdr.dwVersion = MAKE_VERSION(1,0,0,0); + pSS->Empty3.Hdr.dwSlot = 3; + pSS->Empty3.Hdr.dwType = CT_Empty; + + // + // Slot4: Mockingboard + MB_GetSnapshot(&pSS->Mockingboard1, 4); + + // + // Slot5: Mockingboard + MB_GetSnapshot(&pSS->Mockingboard2, 5); + + // + // Slot6: Disk][ + DiskGetSnapshot(&pSS->Disk2, 6); + + // + + HANDLE hFile = CreateFile( g_szSaveStateFilename, + GENERIC_WRITE, + 0, + NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + + DWORD dwError = GetLastError(); + _ASSERT((dwError == 0) || (dwError == ERROR_ALREADY_EXISTS)); + + if(hFile != INVALID_HANDLE_VALUE) + { + DWORD dwBytesWritten; + BOOL bRes = WriteFile( hFile, + pSS, + sizeof(APPLEWIN_SNAPSHOT), + &dwBytesWritten, + NULL); + + if(!bRes || (dwBytesWritten != sizeof(APPLEWIN_SNAPSHOT))) + dwError = GetLastError(); + + CloseHandle(hFile); + } + else + { + dwError = GetLastError(); + } + + _ASSERT((dwError == 0) || (dwError == ERROR_ALREADY_EXISTS)); + + delete [] pSS; +} + +//----------------------------------------------------------------------------- + +void Snapshot_Startup() +{ + static bool bDone = false; + + if(!g_bSaveStateOnExit || bDone) + return; + + Snapshot_LoadState(); + + bDone = true; +} + +void Snapshot_Shutdown() +{ + static bool bDone = false; + + if(!g_bSaveStateOnExit || bDone) + return; + + Snapshot_SaveState(); + + bDone = true; +} diff --git a/AppleWin/source/SaveState.h b/AppleWin/source/SaveState.h new file mode 100644 index 00000000..d8a29da3 --- /dev/null +++ b/AppleWin/source/SaveState.h @@ -0,0 +1,10 @@ +#pragma once + +extern bool g_bSaveStateOnExit; + +char* Snapshot_GetFilename(); +void Snapshot_SetFilename(char* pszFilename); +void Snapshot_LoadState(); +void Snapshot_SaveState(); +void Snapshot_Startup(); +void Snapshot_Shutdown(); diff --git a/AppleWin/source/SerialComms.cpp b/AppleWin/source/SerialComms.cpp new file mode 100644 index 00000000..b608695c --- /dev/null +++ b/AppleWin/source/SerialComms.cpp @@ -0,0 +1,301 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Enhanced //e & //c serial port emulation + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop + +static DWORD baudrate = CBR_19200; +static BYTE bytesize = 8; +static BYTE commandbyte = 0x00; +static HANDLE commhandle = INVALID_HANDLE_VALUE; +static DWORD comminactivity = 0; +static BYTE controlbyte = 0x1F; +static BYTE parity = NOPARITY; +static BYTE recvbuffer[9]; +static DWORD recvbytes = 0; +DWORD serialport = 0; +static BYTE stopbits = ONESTOPBIT; + +static void UpdateCommState (); + +//=========================================================================== +static BOOL CheckComm () { + comminactivity = 0; + if ((commhandle == INVALID_HANDLE_VALUE) && serialport) { + TCHAR portname[8]; + wsprintf(portname, + TEXT("COM%u"), + serialport); + commhandle = CreateFile(portname, + GENERIC_READ | GENERIC_WRITE, + 0, + (LPSECURITY_ATTRIBUTES)NULL, + OPEN_EXISTING, + 0, + NULL); + if (commhandle != INVALID_HANDLE_VALUE) { + UpdateCommState(); + COMMTIMEOUTS ct; + ZeroMemory(&ct,sizeof(COMMTIMEOUTS)); + ct.ReadIntervalTimeout = MAXDWORD; + SetCommTimeouts(commhandle,&ct); + } + } + return (commhandle != INVALID_HANDLE_VALUE); +} + +//=========================================================================== +static void CheckReceive () { + if (recvbytes || (commhandle == INVALID_HANDLE_VALUE)) + return; + ReadFile(commhandle,recvbuffer,8,&recvbytes,NULL); +} + +//=========================================================================== +static void CloseComm () { + if (commhandle != INVALID_HANDLE_VALUE) + CloseHandle(commhandle); + commhandle = INVALID_HANDLE_VALUE; + comminactivity = 0; +} + +//=========================================================================== +static void UpdateCommState () { + if (commhandle == INVALID_HANDLE_VALUE) + return; + DCB dcb; + ZeroMemory(&dcb,sizeof(DCB)); + dcb.DCBlength = sizeof(DCB); + GetCommState(commhandle,&dcb); + dcb.BaudRate = baudrate; + dcb.ByteSize = bytesize; + dcb.Parity = parity; + dcb.StopBits = stopbits; + SetCommState(commhandle,&dcb); +} + +//=========================================================================== +BYTE __stdcall CommCommand (WORD, BYTE, BYTE write, BYTE value, ULONG) { + if (!CheckComm()) + return 0; + if (write && (value != commandbyte)) { + commandbyte = value; + + // UPDATE THE PARITY + if (commandbyte & 0x20) + switch (commandbyte & 0xC0) { + case 0x00 : parity = ODDPARITY; break; + case 0x40 : parity = EVENPARITY; break; + case 0x80 : parity = MARKPARITY; break; + case 0xC0 : parity = SPACEPARITY; break; + } + else + parity = NOPARITY; + + UpdateCommState(); + } + return commandbyte; +} + +//=========================================================================== +BYTE __stdcall CommControl (WORD, BYTE, BYTE write, BYTE value, ULONG) { + if (!CheckComm()) + return 0; + if (write && (value != controlbyte)) { + controlbyte = value; + + // UPDATE THE BAUD RATE + switch (controlbyte & 0x0F) { + case 0x00: // fall through + case 0x01: // fall through + case 0x02: // fall through + case 0x03: // fall through + case 0x04: // fall through + case 0x05: baudrate = CBR_110; break; + case 0x06: baudrate = CBR_300; break; + case 0x07: baudrate = CBR_600; break; + case 0x08: baudrate = CBR_1200; break; + case 0x09: // fall through + case 0x0A: baudrate = CBR_2400; break; + case 0x0B: // fall through + case 0x0C: baudrate = CBR_4800; break; + case 0x0D: // fall through + case 0x0E: baudrate = CBR_9600; break; + case 0x0F: baudrate = CBR_19200; break; + } + + // UPDATE THE BYTE SIZE + switch (controlbyte & 0x60) { + case 0x00: bytesize = 8; break; + case 0x20: bytesize = 7; break; + case 0x40: bytesize = 6; break; + case 0x60: bytesize = 5; break; + } + + // UPDATE THE NUMBER OF STOP BITS + if (controlbyte & 0x80) { + if ((bytesize == 8) && (parity == NOPARITY)) + stopbits = ONESTOPBIT; + else if ((bytesize == 5) && (parity == NOPARITY)) + stopbits = ONE5STOPBITS; + else + stopbits = TWOSTOPBITS; + } + else + stopbits = ONESTOPBIT; + + UpdateCommState(); + } + return controlbyte; +} + +//=========================================================================== +void CommDestroy () { + if ((baudrate != CBR_19200) || + (bytesize != 8) || + (parity != NOPARITY) || + (stopbits != ONESTOPBIT)) { + CommReset(); + CheckComm(); + } + CloseComm(); +} + +//=========================================================================== +BYTE __stdcall CommDipSw (WORD, BYTE, BYTE, BYTE, ULONG) { + // note: determine what values a real SSC returns + return 0; +} + +//=========================================================================== +void CommSetSerialPort (HWND window, DWORD newserialport) { + if (commhandle == INVALID_HANDLE_VALUE) + serialport = newserialport; + else + MessageBox(window, + TEXT("You cannot change the serial port while it is ") + TEXT("in use."), + TEXT("Configuration"), + MB_ICONEXCLAMATION | MB_SETFOREGROUND); +} + +//=========================================================================== +void CommUpdate (DWORD totalcycles) { + if (commhandle == INVALID_HANDLE_VALUE) + return; + if ((comminactivity += totalcycles) > 1000000) { + static DWORD lastcheck = 0; + if ((comminactivity > 2000000) || (comminactivity-lastcheck > 99950)) { + DWORD modemstatus = 0; + GetCommModemStatus(commhandle,&modemstatus); + if ((modemstatus & MS_RLSD_ON) || DiskIsSpinning()) + comminactivity = 0; + } + if (comminactivity > 2000000) + CloseComm(); + } +} + +//=========================================================================== +BYTE __stdcall CommReceive (WORD, BYTE, BYTE, BYTE, ULONG) { + if (!CheckComm()) + return 0; + if (!recvbytes) + CheckReceive(); + BYTE result = 0; + if (recvbytes) { + result = recvbuffer[0]; + if (--recvbytes) + MoveMemory(recvbuffer,recvbuffer+1,recvbytes); + } + return result; +} + +//=========================================================================== +void CommReset () { + CloseComm(); + baudrate = CBR_19200; + bytesize = 8; + commandbyte = 0x00; + controlbyte = 0x1F; + parity = NOPARITY; + recvbytes = 0; + stopbits = ONESTOPBIT; +} + +//=========================================================================== +BYTE __stdcall CommStatus (WORD, BYTE, BYTE, BYTE, ULONG) { + if (!CheckComm()) + return 0x70; + if (!recvbytes) + CheckReceive(); + DWORD modemstatus = 0; + GetCommModemStatus(commhandle,&modemstatus); + return 0x10 | (recvbytes ? 0x08 : 0x00) + | ((modemstatus & MS_RLSD_ON) ? 0x00 : 0x20) + | ((modemstatus & MS_DSR_ON) ? 0x00 : 0x40); +} + +//=========================================================================== +BYTE __stdcall CommTransmit (WORD, BYTE, BYTE, BYTE value, ULONG) { + if (!CheckComm()) + return 0; + DWORD byteswritten; + WriteFile(commhandle,&value,1,&byteswritten,NULL); + return 0; +} + +//=========================================================================== + +DWORD CommGetSnapshot(SS_IO_Comms* pSS) +{ + pSS->baudrate = baudrate; + pSS->bytesize = bytesize; + pSS->commandbyte = commandbyte; + pSS->comminactivity = comminactivity; + pSS->controlbyte = controlbyte; + pSS->parity = parity; + memcpy(pSS->recvbuffer, recvbuffer, 9); + pSS->recvbytes = recvbytes; + pSS->stopbits = stopbits; + return 0; +} + +DWORD CommSetSnapshot(SS_IO_Comms* pSS) +{ + baudrate = pSS->baudrate; + bytesize = pSS->bytesize; + commandbyte = pSS->commandbyte; + comminactivity = pSS->comminactivity; + controlbyte = pSS->controlbyte; + parity = pSS->parity; + memcpy(recvbuffer, pSS->recvbuffer, 9); + recvbytes = pSS->recvbytes; + stopbits = pSS->stopbits; + return 0; +} diff --git a/AppleWin/source/SerialComms.h b/AppleWin/source/SerialComms.h new file mode 100644 index 00000000..fbb3e190 --- /dev/null +++ b/AppleWin/source/SerialComms.h @@ -0,0 +1,17 @@ +#pragma once + +extern DWORD serialport; + +void CommDestroy (); +void CommReset (); +void CommSetSerialPort (HWND,DWORD); +void CommUpdate (DWORD); +DWORD CommGetSnapshot(SS_IO_Comms* pSS); +DWORD CommSetSnapshot(SS_IO_Comms* pSS); + +BYTE __stdcall CommCommand (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall CommControl (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall CommDipSw (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall CommReceive (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall CommStatus (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall CommTransmit (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/SoundCore.cpp b/AppleWin/source/SoundCore.cpp new file mode 100644 index 00000000..8b64aeba --- /dev/null +++ b/AppleWin/source/SoundCore.cpp @@ -0,0 +1,645 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Core sound related functionality + * + * Author: Tom Charlesworth + */ + +#include "StdAfx.h" +#pragma hdrstop + +//----------------------------------------------------------------------------- + +#define MAX_SOUND_DEVICES 10 + +static char *sound_devices[MAX_SOUND_DEVICES]; +static GUID sound_device_guid[MAX_SOUND_DEVICES]; +static int num_sound_devices = 0; + +static LPDIRECTSOUND g_lpDS = NULL; + +//------------------------------------- + +// Used for muting & fading: + +static const UINT uMAX_VOICES = 66; // 64 phonemes + spkr + mockingboard +static UINT g_uNumVoices = 0; +static VOICE* g_pVoices[uMAX_VOICES] = {NULL}; + +static VOICE* g_pSpeakerVoice = NULL; + +//------------------------------------- + +bool g_bDSAvailable = false; + +//----------------------------------------------------------------------------- + +static BOOL CALLBACK DSEnumProc(LPGUID lpGUID, LPCTSTR lpszDesc, LPCTSTR lpszDrvName, LPVOID lpContext) +{ + int i = num_sound_devices; + if(i == MAX_SOUND_DEVICES) + return TRUE; + if(lpGUID != NULL) + memcpy(&sound_device_guid[i], lpGUID, sizeof (GUID)); + sound_devices[i] = strdup(lpszDesc); + + if(g_fh) fprintf(g_fh, "%d: %s - %s\n",i,lpszDesc,lpszDrvName); + + num_sound_devices++; + return TRUE; +} + +//----------------------------------------------------------------------------- + +#ifdef _DEBUG +static char *DirectSound_ErrorText (HRESULT error) +{ + switch( error ) + { + case DSERR_ALLOCATED: + return "Allocated"; + case DSERR_CONTROLUNAVAIL: + return "Control Unavailable"; + case DSERR_INVALIDPARAM: + return "Invalid Parameter"; + case DSERR_INVALIDCALL: + return "Invalid Call"; + case DSERR_GENERIC: + return "Generic"; + case DSERR_PRIOLEVELNEEDED: + return "Priority Level Needed"; + case DSERR_OUTOFMEMORY: + return "Out of Memory"; + case DSERR_BADFORMAT: + return "Bad Format"; + case DSERR_UNSUPPORTED: + return "Unsupported"; + case DSERR_NODRIVER: + return "No Driver"; + case DSERR_ALREADYINITIALIZED: + return "Already Initialized"; + case DSERR_NOAGGREGATION: + return "No Aggregation"; + case DSERR_BUFFERLOST: + return "Buffer Lost"; + case DSERR_OTHERAPPHASPRIO: + return "Other Application Has Priority"; + case DSERR_UNINITIALIZED: + return "Uninitialized"; + case DSERR_NOINTERFACE: + return "No Interface"; + default: + return "Unknown"; + } +} +#endif + +//----------------------------------------------------------------------------- + +bool DSGetLock(LPDIRECTSOUNDBUFFER pVoice, DWORD dwOffset, DWORD dwBytes, + SHORT** ppDSLockedBuffer0, DWORD* pdwDSLockedBufferSize0, + SHORT** ppDSLockedBuffer1, DWORD* pdwDSLockedBufferSize1) +{ + DWORD nStatus; + HRESULT hr = pVoice->GetStatus(&nStatus); + if(hr != DS_OK) + return false; + + if(nStatus & DSBSTATUS_BUFFERLOST) + { + do + { + hr = pVoice->Restore(); + if(hr == DSERR_BUFFERLOST) + Sleep(10); + } + while(hr != DS_OK); + } + + // Get write only pointer(s) to sound buffer + if(dwBytes == 0) + { + if(FAILED(hr = pVoice->Lock(0, 0, + (void**)ppDSLockedBuffer0, pdwDSLockedBufferSize0, + (void**)ppDSLockedBuffer1, pdwDSLockedBufferSize1, + DSBLOCK_ENTIREBUFFER))) + return false; + } + else + { + if(FAILED(hr = pVoice->Lock(dwOffset, dwBytes, + (void**)ppDSLockedBuffer0, pdwDSLockedBufferSize0, + (void**)ppDSLockedBuffer1, pdwDSLockedBufferSize1, + 0))) + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +HRESULT DSGetSoundBuffer(VOICE* pVoice, DWORD dwFlags, DWORD dwBufferSize, DWORD nSampleRate, int nChannels) +{ + WAVEFORMATEX wavfmt; + DSBUFFERDESC dsbdesc; + + wavfmt.wFormatTag = WAVE_FORMAT_PCM; + wavfmt.nChannels = nChannels; + wavfmt.nSamplesPerSec = nSampleRate; + wavfmt.wBitsPerSample = 16; + wavfmt.nBlockAlign = wavfmt.nChannels==1 ? 2 : 4; + wavfmt.nAvgBytesPerSec = wavfmt.nBlockAlign * wavfmt.nSamplesPerSec; + + memset (&dsbdesc, 0, sizeof (dsbdesc)); + dsbdesc.dwSize = sizeof (dsbdesc); + dsbdesc.dwBufferBytes = dwBufferSize; + dsbdesc.lpwfxFormat = &wavfmt; + dsbdesc.dwFlags = dwFlags | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STICKYFOCUS; + + // Are buffers released when g_lpDS OR pVoice->lpDSBvoice is released? + // . From DirectX doc: + // "Buffer objects are owned by the device object that created them. When the + // device object is released, all buffers created by that object are also released..." + HRESULT hr = g_lpDS->CreateSoundBuffer(&dsbdesc, &pVoice->lpDSBvoice, NULL); + if(FAILED(hr)) + return hr; + + // + + _ASSERT(g_uNumVoices < uMAX_VOICES); + if(g_uNumVoices < uMAX_VOICES) + g_pVoices[g_uNumVoices++] = pVoice; + + if(pVoice->bIsSpeaker) + g_pSpeakerVoice = pVoice; + + return hr; +} + +void DSReleaseSoundBuffer(VOICE* pVoice) +{ + if(pVoice->bIsSpeaker) + g_pSpeakerVoice = NULL; + + for(UINT i=0; ilpDSBvoice); +} + +//----------------------------------------------------------------------------- + +bool DSZeroVoiceBuffer(PVOICE Voice, char* pszDevName, DWORD dwBufferSize) +{ + DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer + SHORT* pDSLockedBuffer; + + + HRESULT hr = Voice->lpDSBvoice->Stop(); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "%s: DSStop failed (%08X)\n",pszDevName,hr); + return false; + } + + hr = DSGetLock(Voice->lpDSBvoice, 0, 0, &pDSLockedBuffer, &dwDSLockedBufferSize, NULL, 0); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "%s: DSGetLock failed (%08X)\n",pszDevName,hr); + return false; + } + + _ASSERT(dwDSLockedBufferSize == dwBufferSize); + memset(pDSLockedBuffer, 0x00, dwDSLockedBufferSize); + + hr = Voice->lpDSBvoice->Unlock((void*)pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "%s: DSUnlock failed (%08X)\n",pszDevName,hr); + return false; + } + + hr = Voice->lpDSBvoice->Play(0,0,DSBPLAY_LOOPING); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "%s: DSPlay failed (%08X)\n",pszDevName,hr); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool DSZeroVoiceWritableBuffer(PVOICE Voice, char* pszDevName, DWORD dwBufferSize) +{ + DWORD dwDSLockedBufferSize0=0, dwDSLockedBufferSize1=0; + SHORT *pDSLockedBuffer0, *pDSLockedBuffer1; + + + HRESULT hr = DSGetLock(Voice->lpDSBvoice, + 0, dwBufferSize, + &pDSLockedBuffer0, &dwDSLockedBufferSize0, + &pDSLockedBuffer1, &dwDSLockedBufferSize1); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "%s: DSGetLock failed (%08X)\n",pszDevName,hr); + return false; + } + + memset(pDSLockedBuffer0, 0x00, dwDSLockedBufferSize0); + if(pDSLockedBuffer1) + memset(pDSLockedBuffer1, 0x00, dwDSLockedBufferSize1); + + hr = Voice->lpDSBvoice->Unlock((void*)pDSLockedBuffer0, dwDSLockedBufferSize0, + (void*)pDSLockedBuffer1, dwDSLockedBufferSize1); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "%s: DSUnlock failed (%08X)\n",pszDevName,hr); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +static bool g_bTimerActive = false; +static eFADE g_FadeType = FADE_NONE; +static UINT_PTR g_nTimerID = 0; + +//------------------------------------- + +static VOID CALLBACK SoundCore_TimerFunc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime); + +static bool SoundCore_StartTimer() +{ + if(g_bTimerActive) + return true; + + g_nTimerID = SetTimer(NULL, 0, 1, SoundCore_TimerFunc); // 1ms interval + if(g_nTimerID == 0) + { + fprintf(stderr, "Error creating timer\n"); + _ASSERT(0); + return false; + } + + g_bTimerActive = true; + return true; +} + +static void SoundCore_StopTimer() +{ + if(!g_bTimerActive) + return; + + if(KillTimer(NULL, g_nTimerID) == FALSE) + { + fprintf(stderr, "Error killing timer\n"); + _ASSERT(0); + return; + } + + g_bTimerActive = false; +} + +bool SoundCore_GetTimerState() +{ + return g_bTimerActive; +} + +//------------------------------------- + +// [OLD: Used to fade volume in/out] +// FADE_OUT : Just keep filling speaker soundbuffer with same value +// FADE_IN : Switch to FADE_NONE & StopTimer() + +static VOID CALLBACK SoundCore_TimerFunc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) +{ + if((g_pSpeakerVoice == NULL) || (g_pSpeakerVoice->bActive == false)) + g_FadeType = FADE_NONE; + + // Timer expired + if(g_FadeType == FADE_NONE) + { + SoundCore_StopTimer(); + return; + } + + // + +#if 1 + if(g_FadeType == FADE_IN) + g_FadeType = FADE_NONE; + else + SpkrUpdate_Timer(); +#else + const LONG nFadeUnit_Fast = (DSBVOLUME_MAX - DSBVOLUME_MIN) / 10; + const LONG nFadeUnit_Slow = (DSBVOLUME_MAX - DSBVOLUME_MIN) / 1000; // Less noisy for 'silence' + + LONG nFadeUnit = g_pSpeakerVoice->bRecentlyActive ? nFadeUnit_Fast : nFadeUnit_Slow; + LONG nFadeVolume = g_pSpeakerVoice->nFadeVolume; + + if(g_FadeType == FADE_IN) + { + if(nFadeVolume == g_pSpeakerVoice->nVolume) + { + g_FadeType = FADE_NONE; + SoundCore_StopTimer(); + return; + } + + nFadeVolume += nFadeUnit; + + if(nFadeVolume > g_pSpeakerVoice->nVolume) + nFadeVolume = g_pSpeakerVoice->nVolume; + } + else // FADE_OUT + { + if(nFadeVolume == DSBVOLUME_MIN) + { + g_FadeType = FADE_NONE; + SoundCore_StopTimer(); + return; + } + + nFadeVolume -= nFadeUnit; + + if(nFadeVolume < DSBVOLUME_MIN) + nFadeVolume = DSBVOLUME_MIN; + } + + g_pSpeakerVoice->nFadeVolume = nFadeVolume; + g_pSpeakerVoice->lpDSBvoice->SetVolume(nFadeVolume); +#endif +} + +//----------------------------------------------------------------------------- + +void SoundCore_SetFade(eFADE FadeType) +{ + static int nLastMode = -1; + + if(mode == MODE_DEBUG) + return; + + // Fade in/out just for speaker, the others are demuted/muted + if(FadeType != FADE_NONE) + { + for(UINT i=0; iSetVolume() doesn't work without this! + if((g_pVoices[i]->bIsSpeaker) && (mode != MODE_LOGO) && (nLastMode != MODE_LOGO)) + { + g_pVoices[i]->lpDSBvoice->GetVolume(&g_pVoices[i]->nFadeVolume); + g_FadeType = FadeType; + SoundCore_StartTimer(); + } + else if(FadeType == FADE_OUT) + { + g_pVoices[i]->lpDSBvoice->SetVolume(DSBVOLUME_MIN); + g_pVoices[i]->bMute = true; + } + else // FADE_IN + { + g_pVoices[i]->lpDSBvoice->SetVolume(g_pVoices[i]->nVolume); + g_pVoices[i]->bMute = false; + } + } + } + else // FadeType == FADE_NONE + { + if( (g_FadeType != FADE_NONE) && // Currently fading-in/out + (g_pSpeakerVoice && g_pSpeakerVoice->bActive) ) + { + g_FadeType = FADE_NONE; // TimerFunc will call StopTimer() + g_pSpeakerVoice->lpDSBvoice->SetVolume(g_pSpeakerVoice->nVolume); + } + } + + nLastMode = mode; +} + +//----------------------------------------------------------------------------- + +static UINT g_uDSInitRefCount = 0; + +bool DSInit() +{ + if(g_bDSAvailable) + { + g_uDSInitRefCount++; + return true; // Already initialised successfully + } + + HRESULT hr = DirectSoundEnumerate((LPDSENUMCALLBACK)DSEnumProc, NULL); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "DSEnumerate failed (%08X)\n",hr); + return false; + } + + if(g_fh) + { + fprintf(g_fh, "Number of sound devices = %d\n",num_sound_devices); + } + + bool bCreatedOK = false; + for(int x=0; xSetCooperativeLevel(framewindow, DSSCL_NORMAL); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "SetCooperativeLevel failed (%08X)\n",hr); + return false; + } + +#if 0 + DSCAPS DSCaps; + ZeroMemory(&DSCaps, sizeof(DSBCAPS)); + DSCaps.dwSize = sizeof(DSBCAPS); + hr = g_lpDS->GetCaps(&DSCaps); + if(FAILED(hr)) + { + DirectSound_ErrorText(hr); + return false; + } +#endif + + g_bDSAvailable = true; + + g_uDSInitRefCount = 1; + + return true; +} + +//----------------------------------------------------------------------------- + +void DSUninit() +{ + if(!g_bDSAvailable) + return; + + _ASSERT(g_uDSInitRefCount); + + if(g_uDSInitRefCount == 0) + return; + + g_uDSInitRefCount--; + + if(g_uDSInitRefCount) + return; + + // + + _ASSERT(g_uNumVoices == 0); + + SAFE_RELEASE(g_lpDS); + g_bDSAvailable = false; + + SoundCore_StopTimer(); +} + +//----------------------------------------------------------------------------- + +LONG NewVolume(DWORD dwVolume, DWORD dwVolumeMax) +{ + float fVol = (float) dwVolume / (float) dwVolumeMax; // 0.0=Max, 1.0=Min + + return (LONG) ((float) DSBVOLUME_MIN * fVol); +} + +//============================================================================= + +static DWORD g_dwAdviseToken; +static IReferenceClock *g_pRefClock = NULL; +static HANDLE g_hSemaphore = NULL; +static bool g_bRefClockTimerActive = false; +static DWORD g_dwLastUsecPeriod = 0; + + +void SysClk_InitTimer() +{ + g_hSemaphore = CreateSemaphore(NULL, 0, 1, NULL); // Max count = 1 + if (g_hSemaphore == NULL) + fprintf(stderr, "Error creating semaphore\n"); + + if (CoCreateInstance(CLSID_SystemClock, NULL, CLSCTX_INPROC, + IID_IReferenceClock, (LPVOID*)&g_pRefClock) != S_OK) + fprintf(stderr, "Error initialising COM\n"); +} + +void SysClk_UninitTimer() +{ + SysClk_StopTimer(); + + SAFE_RELEASE(g_pRefClock); + + if (CloseHandle(g_hSemaphore) == 0) + fprintf(stderr, "Error closing semaphore handle\n"); +} + +// + +void SysClk_WaitTimer() +{ + if(!g_bRefClockTimerActive) + return; + + WaitForSingleObject(g_hSemaphore, INFINITE); +} + +// + +void SysClk_StartTimerUsec(DWORD dwUsecPeriod) +{ + if(g_bRefClockTimerActive && (g_dwLastUsecPeriod == dwUsecPeriod)) + return; + + SysClk_StopTimer(); + + REFERENCE_TIME rtPeriod = (REFERENCE_TIME) (dwUsecPeriod * 10); // In units of 100ns + REFERENCE_TIME rtNow; + + HRESULT hr = g_pRefClock->GetTime(&rtNow); + // S_FALSE : Returned time is the same as the previous value + + if ((hr != S_OK) && (hr != S_FALSE)) + { + _ASSERT(0); + return; + } + + if (g_pRefClock->AdvisePeriodic(rtNow, rtPeriod, g_hSemaphore, &g_dwAdviseToken) != S_OK) + { + fprintf(stderr, "Error creating timer\n"); + _ASSERT(0); + return; + } + + g_dwLastUsecPeriod = dwUsecPeriod; + g_bRefClockTimerActive = true; +} + +void SysClk_StopTimer() +{ + if(!g_bRefClockTimerActive) + return; + + if (g_pRefClock->Unadvise(g_dwAdviseToken) != S_OK) + { + fprintf(stderr, "Error deleting timer\n"); + _ASSERT(0); + return; + } + + g_bRefClockTimerActive = false; +} \ No newline at end of file diff --git a/AppleWin/source/SoundCore.h b/AppleWin/source/SoundCore.h new file mode 100644 index 00000000..c9cd0f0f --- /dev/null +++ b/AppleWin/source/SoundCore.h @@ -0,0 +1,50 @@ +#pragma once + +#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } + +// Define max 1 of these: +//#define RIFF_SPKR +//#define RIFF_MB + +typedef struct +{ + LPDIRECTSOUNDBUFFER lpDSBvoice; + LPDIRECTSOUNDNOTIFY lpDSNotify; + bool bActive; // Playback is active + bool bMute; + LONG nVolume; // Current volume (as used by DirectSound) + LONG nFadeVolume; // Current fade volume (as used by DirectSound) + DWORD dwUserVolume; // Volume from slider on Property Sheet (0=Max) + bool bIsSpeaker; + bool bRecentlyActive; // (Speaker only) false after 0.2s of speaker inactivity +} VOICE, *PVOICE; + + +bool DSGetLock(LPDIRECTSOUNDBUFFER pVoice, DWORD dwOffset, DWORD dwBytes, + SHORT** ppDSLockedBuffer0, DWORD* pdwDSLockedBufferSize0, + SHORT** ppDSLockedBuffer1, DWORD* pdwDSLockedBufferSize1); + +HRESULT DSGetSoundBuffer(VOICE* pVoice, DWORD dwFlags, DWORD dwBufferSize, DWORD nSampleRate, int nChannels); +void DSReleaseSoundBuffer(VOICE* pVoice); + +bool DSZeroVoiceBuffer(PVOICE Voice, char* pszDevName, DWORD dwBufferSize); +bool DSZeroVoiceWritableBuffer(PVOICE Voice, char* pszDevName, DWORD dwBufferSize); + +enum eFADE {FADE_NONE, FADE_IN, FADE_OUT}; +void SoundCore_SetFade(eFADE FadeType); +bool SoundCore_GetTimerState(); + +bool DSInit(); +void DSUninit(); + +LONG NewVolume(DWORD dwVolume, DWORD dwVolumeMax); + +void SysClk_WaitTimer(); +void SysClk_InitTimer(); +void SysClk_UninitTimer(); +void SysClk_StartTimerUsec(DWORD dwUsecPeriod); +void SysClk_StopTimer(); + +// + +extern bool g_bDSAvailable; diff --git a/AppleWin/source/Speaker.cpp b/AppleWin/source/Speaker.cpp new file mode 100644 index 00000000..bd760432 --- /dev/null +++ b/AppleWin/source/Speaker.cpp @@ -0,0 +1,1076 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Speaker emulation + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop +#include + +// Notes: +// +// [OLD: 23.191 Apple CLKs == 44100Hz (CLK_6502/44100)] +// 23 Apple CLKS per PC sample (played back at 44.1KHz) +// +// +// The speaker's wave output drives how much 6502 emulation is done in real-time, eg: +// If the speaker's wave buffer is running out of sample-data, then more 6502 cycles +// need to be executed to top-up the wave buffer. +// This is in contrast to the AY8910 voices, which can simply generate more data if +// their buffers are running low. +// + +#define SOUND_NONE 0 +#define SOUND_DIRECT 1 +#define SOUND_SMART 2 +#define SOUND_WAVE 3 + +static const unsigned short g_nSPKR_NumChannels = 1; +static const DWORD g_dwDSSpkrBufferSize = 16 * 1024 * sizeof(short) * g_nSPKR_NumChannels; + +//------------------------------------- + +static short* g_pSpeakerBuffer = NULL; + +// Globals (SOUND_WAVE) +const short SPKR_DATA_INIT = (short)0x8000; + +static short g_nSpeakerData = SPKR_DATA_INIT; +static UINT g_nBufferIdx = 0; + +static short* g_pRemainderBuffer = NULL; +static UINT g_nRemainderBufferSize; // Setup in SpkrInitialize() +static UINT g_nRemainderBufferIdx; // Setup in SpkrInitialize() + + +// Application-wide globals: +DWORD soundtype = SOUND_WAVE; +double g_fClksPerSpkrSample; // Setup in SetClksPerSpkrSample() + +// Globals +static DWORD lastcyclenum = 0; +static DWORD toggles = 0; +static unsigned __int64 g_nSpkrQuietCycleCount = 0; +static unsigned __int64 g_nSpkrLastCycle = 0; +static bool g_bSpkrToggleFlag = false; +static VOICE SpeakerVoice = {0}; +static bool g_bSpkrAvailable = false; + + +// Globals (SOUND_DIRECT/SOUND_SMART) +static BOOL directio = 0; +static DWORD lastdelta[2] = {0,0}; +static DWORD quietcycles = 0; +static DWORD soundeffect = 0; +static DWORD totaldelta = 0; + +//----------------------------------------------------------------------------- + +// Forward refs: +ULONG Spkr_SubmitWaveBuffer_FullSpeed(short* pSpeakerBuffer, ULONG nNumSamples); +ULONG Spkr_SubmitWaveBuffer(short* pSpeakerBuffer, ULONG nNumSamples); +void Spkr_SetActive(bool bActive); + +//============================================================================= + +static void DisplayBenchmarkResults () +{ + DWORD totaltime = GetTickCount()-extbench; + VideoRedrawScreen(); + TCHAR buffer[64]; + wsprintf(buffer, + TEXT("This benchmark took %u.%02u seconds."), + (unsigned)(totaltime / 1000), + (unsigned)((totaltime / 10) % 100)); + MessageBox(framewindow, + buffer, + TEXT("Benchmark Results"), + MB_ICONINFORMATION | MB_SETFOREGROUND); +} + +//============================================================================= + +static void InternalBeep (DWORD frequency, DWORD duration) +{ +#ifdef _X86_ + if (directio) + if (duration) { + frequency = 1193180/frequency; + __asm { + push eax + mov al,0B6h + out 43h,al + mov eax,frequency + out 42h,al + mov al,ah + out 42h,al + in al,61h + or al,3 + out 61h,al + pop eax + } + } + else + __asm { + push eax + in al,61h + and al,0FCh + out 61h,al + pop eax + } + else +#endif + Beep(frequency,duration); +} + +//============================================================================= + +static void InternalClick () +{ +#ifdef _X86_ + if (directio) + __asm { + push eax + in al,0x61 + xor al,2 + out 0x61,al + pop eax + } + else { +#endif + Beep(37,(DWORD)-1); + Beep(0,0); +#ifdef _X86_ + } +#endif +} + +//============================================================================= + +static void SetClksPerSpkrSample() +{ +// // 23.191 clks for 44.1Khz (when 6502 CLK=1.0Mhz) +// g_fClksPerSpkrSample = g_fCurrentCLK6502 / (double)SPKR_SAMPLE_RATE; + + // Use integer value: Better for MJ Mahon's RT.SYNTH.DSK (integer multiples of 1.023MHz Clk) + // . 23 clks @ 1.023MHz + g_fClksPerSpkrSample = (double) (UINT) (g_fCurrentCLK6502 / (double)SPKR_SAMPLE_RATE); +} + +//============================================================================= + +static void InitRemainderBuffer() +{ + delete [] g_pRemainderBuffer; + + SetClksPerSpkrSample(); + + g_nRemainderBufferSize = (UINT) g_fClksPerSpkrSample; + if ((double)g_nRemainderBufferSize != g_fClksPerSpkrSample) + g_nRemainderBufferSize++; + + g_pRemainderBuffer = new short [g_nRemainderBufferSize]; + memset(g_pRemainderBuffer, 0, g_nRemainderBufferSize); + + g_nRemainderBufferIdx = 0; +} + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//============================================================================= + +void SpkrDestroy () +{ + Spkr_DSUninit(); + //DSUninit(); + + // + + if(soundtype == SOUND_WAVE) + { + delete [] g_pSpeakerBuffer; + delete [] g_pRemainderBuffer; + + g_pSpeakerBuffer = NULL; + g_pRemainderBuffer = NULL; + } + else + { + InternalBeep(0,0); + } +} + +//============================================================================= + +void SpkrInitialize () +{ + if(g_fh) + { + fprintf(g_fh, "Spkr Config: soundtype = %d ",soundtype); + switch(soundtype) + { + case SOUND_NONE: fprintf(g_fh, "(NONE)\n"); break; + case SOUND_DIRECT: fprintf(g_fh, "(DIRECT)\n"); break; + case SOUND_SMART: fprintf(g_fh, "(SMART)\n"); break; + case SOUND_WAVE: fprintf(g_fh, "(WAVE)\n"); break; + default: fprintf(g_fh, "(UNDEFINED!)\n"); break; + } + } + + if(g_bDisableDirectSound) + { + SpeakerVoice.bMute = true; + } + else + { + //DSInit(); + g_bSpkrAvailable = Spkr_DSInit(); + } + + // + + if (soundtype == SOUND_WAVE) + { + InitRemainderBuffer(); + + g_pSpeakerBuffer = new short [SPKR_SAMPLE_RATE]; // Buffer can hold a max of 1 seconds worth of samples + } + + // + + // IF NONE IS, THEN DETERMINE WHETHER WE HAVE DIRECT ACCESS TO THE PC SPEAKER PORT + if (soundtype != SOUND_WAVE) // *** TO DO: Need way of determining if DirectX init failed *** + { + if (soundtype == SOUND_WAVE) + soundtype = SOUND_SMART; +#ifdef _X86_ + _try + { + __asm { + in al,0x61 + xor al,2 + out 0x61,al + xor al,2 + out 0x61,al + } + directio = 1; + } + _except (EXCEPTION_EXECUTE_HANDLER) + { + directio = 0; + } +#else + directio = 0; +#endif + if ((!directio) && (soundtype == SOUND_DIRECT)) + soundtype = SOUND_SMART; + } + +} + +//============================================================================= + +// NB. Called when /g_fCurrentCLK6502/ changes +void SpkrReinitialize () +{ + if (soundtype == SOUND_WAVE) + { + InitRemainderBuffer(); + } +} + +//============================================================================= + +void SpkrReset() +{ + g_nBufferIdx = 0; + g_nSpkrQuietCycleCount = 0; + g_bSpkrToggleFlag = false; + + InitRemainderBuffer(); + Spkr_SubmitWaveBuffer(NULL, 0); + Spkr_SetActive(false); + Spkr_Demute(); +} + +//============================================================================= + +BOOL SpkrSetEmulationType (HWND window, DWORD newtype) +{ + if (soundtype != SOUND_NONE) + SpkrDestroy(); + soundtype = newtype; + if (soundtype != SOUND_NONE) + SpkrInitialize(); + if (soundtype != newtype) + switch (newtype) { + + case SOUND_DIRECT: + MessageBox(window, + TEXT("Direct emulation is not available because the ") + TEXT("operating system you are using does not allow ") + TEXT("direct control of the speaker."), + TEXT("Configuration"), + MB_ICONEXCLAMATION | MB_SETFOREGROUND); + return 0; + + case SOUND_WAVE: + MessageBox(window, + TEXT("The emulator is unable to initialize a waveform ") + TEXT("output device. Make sure you have a sound card ") + TEXT("and a driver installed and that windows is ") + TEXT("correctly configured to use the driver. Also ") + TEXT("ensure that no other program is currently using ") + TEXT("the device."), + TEXT("Configuration"), + MB_ICONEXCLAMATION | MB_SETFOREGROUND); + return 0; + + } + return 1; +} + +//============================================================================= + +static void InitRemainderBuffer(UINT nCyclesRemaining) +{ + if(nCyclesRemaining == 0) + return; + + for(g_nRemainderBufferIdx=0; g_nRemainderBufferIdx 2) || (soundtype == SOUND_DIRECT)) + { + if (directio) + { + __asm + { + push eax + in al,0x61 + xor al,2 + out 0x61,al + pop eax + } + } + else + { + Beep(37,(DWORD)-1); + Beep(0,0); + } + } + + // SAVE INFORMATION ABOUT THE FREQUENCY OF SPEAKER TOGGLING FOR POSSIBLE + // LATER USE BY SOUND AVERAGING + if (lastcyclenum) + { + toggles++; + DWORD delta = cyclenum-lastcyclenum; + + // DETERMINE WHETHER WE ARE PLAYING A SOUND EFFECT + if (directio && + ((delta < 250) || + (lastdelta[0] && lastdelta[1] && + (delta-lastdelta[0] > 250) && (lastdelta[0]-delta > 250) && + (delta-lastdelta[1] > 250) && (lastdelta[1]-delta > 250)))) + soundeffect = MIN(35,soundeffect+2); + + lastdelta[1] = lastdelta[0]; + lastdelta[0] = delta; + totaldelta += delta; + } + lastcyclenum = cyclenum; + + } + + return MemReturnRandomData(1); +} + +//============================================================================= + +// Called by ContinueExecution() +void SpkrUpdate (DWORD totalcycles) +{ + if(!g_bSpkrToggleFlag) + { + if(!g_nSpkrQuietCycleCount) + { + g_nSpkrQuietCycleCount = g_nCumulativeCycles; + } + else if(g_nCumulativeCycles - g_nSpkrQuietCycleCount > (unsigned __int64)g_fCurrentCLK6502/5) + { + // After 0.2 sec of Apple time, deactivate spkr voice + // . This allows emulator to auto-switch to full-speed mode for fast disk access + Spkr_SetActive(false); + } + } + else + { + g_nSpkrQuietCycleCount = 0; + g_bSpkrToggleFlag = false; + } + + // + + if (soundtype == SOUND_WAVE) + { + UpdateSpkr(); + ULONG nSamplesUsed; + + if(g_bFullSpeed) + nSamplesUsed = Spkr_SubmitWaveBuffer_FullSpeed(g_pSpeakerBuffer, g_nBufferIdx); + else + nSamplesUsed = Spkr_SubmitWaveBuffer(g_pSpeakerBuffer, g_nBufferIdx); + + _ASSERT(nSamplesUsed <= g_nBufferIdx); + memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], g_nBufferIdx-nSamplesUsed); + g_nBufferIdx -= nSamplesUsed; + } + else + { + + // IF WE ARE NOT PLAYING A SOUND EFFECT, PERFORM FREQUENCY AVERAGING + static DWORD currenthertz = 0; + static BOOL lastfull = 0; + static DWORD lasttoggles = 0; + static DWORD lastval = 0; + if ((soundeffect > 2) || (soundtype == SOUND_DIRECT)) { + lastval = 0; + if (currenthertz && (soundeffect > 4)) { + InternalBeep(0,0); + currenthertz = 0; + } + } + else if (toggles && totaldelta) { + DWORD newval = 1000000*toggles/totaldelta; + if (lastval && lastfull && + (newval-currenthertz > 50) && + (currenthertz-newval > 50)) { + InternalBeep(newval,(DWORD)-1); + currenthertz = newval; + lasttoggles = 0; + } + lastfull = (totaldelta+((totaldelta/toggles) << 1) >= totalcycles); + lasttoggles += toggles; + lastval = newval; + } + else if (currenthertz) { + InternalBeep(0,0); + currenthertz = 0; + lastfull = 0; + lasttoggles = 0; + lastval = 0; + } + else if (lastval) { + currenthertz = (lasttoggles > 4) ? lastval : 0; + if (currenthertz) + InternalBeep(lastval,(DWORD)-1); + else + InternalClick(); + lastfull = 0; + lasttoggles = 0; + lastval = 0; + } + + // RESET THE FREQUENCY GATHERING VARIABLES + lastcyclenum = 0; + lastdelta[0] = 0; + lastdelta[1] = 0; + quietcycles = toggles ? 0 : (quietcycles+totalcycles); + toggles = 0; + totaldelta = 0; + if (soundeffect) + soundeffect--; + + } +} + +// Called from SoundCore_TimerFunc() for FADE_OUT +void SpkrUpdate_Timer() +{ + if (soundtype == SOUND_WAVE) + { + UpdateSpkr(); + ULONG nSamplesUsed; + + nSamplesUsed = Spkr_SubmitWaveBuffer_FullSpeed(g_pSpeakerBuffer, g_nBufferIdx); + + _ASSERT(nSamplesUsed <= g_nBufferIdx); + memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], g_nBufferIdx-nSamplesUsed); + g_nBufferIdx -= nSamplesUsed; + } +} + +//============================================================================= + +static DWORD dwByteOffset = (DWORD)-1; +static int nNumSamplesError = 0; +static int nDbgSpkrCnt = 0; + +// FullSpeed mode, 2 cases: +// i) Short burst of full-speed, so PlayCursor doesn't complete sound from previous fixed-speed session. +// ii) Long burst of full-speed, so PlayCursor completes sound from previous fixed-speed session. + +// Try to: +// 1) Output remaining samples from SpeakerBuffer (from previous fixed-speed session) +// 2) Output pad samples to keep the VoiceBuffer topped-up + +// If nNumSamples>0 then these are from previous fixed-speed session. +// - Output these before outputting zero-pad samples. + +static ULONG Spkr_SubmitWaveBuffer_FullSpeed(short* pSpeakerBuffer, ULONG nNumSamples) +{ + char szDbg[200]; + nDbgSpkrCnt++; + + if(!SpeakerVoice.bActive) + return nNumSamples; + + // pSpeakerBuffer can't be NULL, as reset clears g_bFullSpeed, so 1st SpkrUpdate() never calls here + _ASSERT(pSpeakerBuffer != NULL); + + // + + DWORD dwDSLockedBufferSize0, dwDSLockedBufferSize1; + SHORT *pDSLockedBuffer0, *pDSLockedBuffer1; + bool bBufferError = false; + + DWORD dwCurrentPlayCursor, dwCurrentWriteCursor; + HRESULT hr = SpeakerVoice.lpDSBvoice->GetCurrentPosition(&dwCurrentPlayCursor, &dwCurrentWriteCursor); + if(FAILED(hr)) + return nNumSamples; + + if(dwByteOffset == (DWORD)-1) + { + // First time in this func (probably after re-init (Spkr_SubmitWaveBuffer())) + + dwByteOffset = dwCurrentPlayCursor + (g_dwDSSpkrBufferSize/8)*3; // Ideal: 0.375 is between 0.25 & 0.50 full + dwByteOffset %= g_dwDSSpkrBufferSize; + sprintf(szDbg, "[Submit_FS] PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X [REINIT]\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamples); OutputDebugString(szDbg); + } + else + { + // Check that our offset isn't between Play & Write positions + + if(dwCurrentWriteCursor > dwCurrentPlayCursor) + { + // |-----PxxxxxW-----| + if((dwByteOffset > dwCurrentPlayCursor) && (dwByteOffset < dwCurrentWriteCursor)) + { + sprintf(szDbg, "[Submit_FS] PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X xxx\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamples); OutputDebugString(szDbg); + dwByteOffset = dwCurrentWriteCursor; + } + } + else + { + // |xxW----------Pxxx| + if((dwByteOffset > dwCurrentPlayCursor) || (dwByteOffset < dwCurrentWriteCursor)) + { + sprintf(szDbg, "[Submit_FS] PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X XXX\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamples); OutputDebugString(szDbg); + dwByteOffset = dwCurrentWriteCursor; + } + } + } + + // Calc bytes remaining to be played + int nBytesRemaining = dwByteOffset - dwCurrentPlayCursor; + if(nBytesRemaining < 0) + nBytesRemaining += g_dwDSSpkrBufferSize; + if((nBytesRemaining == 0) && (dwCurrentPlayCursor != dwCurrentWriteCursor)) + nBytesRemaining = g_dwDSSpkrBufferSize; // Case when complete buffer is to be played + + // + + UINT nNumPadSamples = 0; + + if(nBytesRemaining < g_dwDSSpkrBufferSize / 4) + { + // < 1/4 of play-buffer remaining (need *more* data) + nNumPadSamples = ((g_dwDSSpkrBufferSize / 4) - nBytesRemaining) / sizeof(short); + + if(nNumPadSamples > nNumSamples) + nNumPadSamples -= nNumSamples; + else + nNumPadSamples = 0; + + // NB. If nNumPadSamples>0 then all nNumSamples are to be used + } + + // + + UINT nBytesFree = g_dwDSSpkrBufferSize - nBytesRemaining; // Calc free buffer space + ULONG nNumSamplesToUse = nNumSamples + nNumPadSamples; + + if(nNumSamplesToUse * sizeof(short) > nBytesFree) + nNumSamplesToUse = nBytesFree / sizeof(short); + + // + + if(nNumSamplesToUse >= 128) // Limit the buffer unlock/locking to a minimum + { + if(!DSGetLock(SpeakerVoice.lpDSBvoice, + dwByteOffset, (DWORD)nNumSamplesToUse*sizeof(short), + &pDSLockedBuffer0, &dwDSLockedBufferSize0, + &pDSLockedBuffer1, &dwDSLockedBufferSize1)) + return nNumSamples; + + // + + DWORD dwBufferSize0 = 0; + DWORD dwBufferSize1 = 0; + + if(nNumSamples) + { +// sprintf(szDbg, "[Submit_FS] C=%08X, PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X ***\n", nDbgSpkrCnt, dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamples); OutputDebugString(szDbg); + + if(nNumSamples*sizeof(short) <= dwDSLockedBufferSize0) + { + dwBufferSize0 = nNumSamples*sizeof(short); + dwBufferSize1 = 0; + } + else + { + dwBufferSize0 = dwDSLockedBufferSize0; + dwBufferSize1 = nNumSamples*sizeof(short) - dwDSLockedBufferSize0; + + if(dwBufferSize1 > dwDSLockedBufferSize1) + dwBufferSize1 = dwDSLockedBufferSize1; + } + + memcpy(pDSLockedBuffer0, &pSpeakerBuffer[0], dwBufferSize0); +#ifdef RIFF_SPKR + RiffPutSamples(pDSLockedBuffer0, dwBufferSize0/sizeof(short)); +#endif + nNumSamples = dwBufferSize0/sizeof(short); + + if(pDSLockedBuffer1 && dwBufferSize1) + { + memcpy(pDSLockedBuffer1, &pSpeakerBuffer[dwDSLockedBufferSize0/sizeof(short)], dwBufferSize1); +#ifdef RIFF_SPKR + RiffPutSamples(pDSLockedBuffer1, dwBufferSize1/sizeof(short)); +#endif + nNumSamples += dwBufferSize1/sizeof(short); + } + } + + if(nNumPadSamples) + { +// sprintf(szDbg, "[Submit_FS] C=%08X, PC=%08X, WC=%08X, Diff=%08X, Off=%08X, PS=%08X, Data=%04X\n", nDbgSpkrCnt, dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumPadSamples, g_nSpeakerData); OutputDebugString(szDbg); + + dwBufferSize0 = dwDSLockedBufferSize0 - dwBufferSize0; + dwBufferSize1 = dwDSLockedBufferSize1 - dwBufferSize1; + + if(dwBufferSize0) + { + wmemset((wchar_t*)pDSLockedBuffer0, (wchar_t)g_nSpeakerData, dwBufferSize0/sizeof(wchar_t)); +#ifdef RIFF_SPKR + RiffPutSamples(pDSLockedBuffer0, dwBufferSize0/sizeof(short)); +#endif + } + + if(pDSLockedBuffer1) + { + wmemset((wchar_t*)pDSLockedBuffer1, (wchar_t)g_nSpeakerData, dwBufferSize1/sizeof(wchar_t)); +#ifdef RIFF_SPKR + RiffPutSamples(pDSLockedBuffer1, dwBufferSize1/sizeof(short)); +#endif + } + } + + // Commit sound buffer + hr = SpeakerVoice.lpDSBvoice->Unlock((void*)pDSLockedBuffer0, dwDSLockedBufferSize0, + (void*)pDSLockedBuffer1, dwDSLockedBufferSize1); + if(FAILED(hr)) + return nNumSamples; + + dwByteOffset = (dwByteOffset + (DWORD)nNumSamplesToUse*sizeof(short)*g_nSPKR_NumChannels) % g_dwDSSpkrBufferSize; + } + + return nNumSamples; +} + +//----------------------------------------------------------------------------- + +static ULONG Spkr_SubmitWaveBuffer(short* pSpeakerBuffer, ULONG nNumSamples) +{ + char szDbg[200]; + nDbgSpkrCnt++; + + if(!SpeakerVoice.bActive) + return nNumSamples; + + if(pSpeakerBuffer == NULL) + { + // Re-init from SpkrReset() + dwByteOffset = (DWORD)-1; + nNumSamplesError = 0; + + // Don't call DSZeroVoiceBuffer() - get noise with "VIA AC'97 Enhanced Audio Controller" + // . I guess SpeakerVoice.Stop() isn't really working and the new zero buffer causes noise corruption when submitted. + DSZeroVoiceWritableBuffer(&SpeakerVoice, "Spkr", g_dwDSSpkrBufferSize); + + return 0; + } + + // + + DWORD dwDSLockedBufferSize0, dwDSLockedBufferSize1; + SHORT *pDSLockedBuffer0, *pDSLockedBuffer1; + bool bBufferError = false; + + DWORD dwCurrentPlayCursor, dwCurrentWriteCursor; + HRESULT hr = SpeakerVoice.lpDSBvoice->GetCurrentPosition(&dwCurrentPlayCursor, &dwCurrentWriteCursor); + if(FAILED(hr)) + return nNumSamples; + + if(dwByteOffset == (DWORD)-1) + { + // First time in this func (probably after re-init (above)) + + dwByteOffset = dwCurrentPlayCursor + (g_dwDSSpkrBufferSize/8)*3; // Ideal: 0.375 is between 0.25 & 0.50 full + dwByteOffset %= g_dwDSSpkrBufferSize; + sprintf(szDbg, "[Submit] PC=%08X, WC=%08X, Diff=%08X, Off=%08X [REINIT]\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset); OutputDebugString(szDbg); + } + else + { + // Check that our offset isn't between Play & Write positions + + if(dwCurrentWriteCursor > dwCurrentPlayCursor) + { + // |-----PxxxxxW-----| + if((dwByteOffset > dwCurrentPlayCursor) && (dwByteOffset < dwCurrentWriteCursor)) + { + sprintf(szDbg, "[Submit] PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X xxx\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamples); OutputDebugString(szDbg); + dwByteOffset = dwCurrentWriteCursor; + nNumSamplesError = 0; + bBufferError = true; + } + } + else + { + // |xxW----------Pxxx| + if((dwByteOffset > dwCurrentPlayCursor) || (dwByteOffset < dwCurrentWriteCursor)) + { + sprintf(szDbg, "[Submit] PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X XXX\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamples); OutputDebugString(szDbg); + dwByteOffset = dwCurrentWriteCursor; + nNumSamplesError = 0; + bBufferError = true; + } + } + } + + // Calc bytes remaining to be played + int nBytesRemaining = dwByteOffset - dwCurrentPlayCursor; + if(nBytesRemaining < 0) + nBytesRemaining += g_dwDSSpkrBufferSize; + if((nBytesRemaining == 0) && (dwCurrentPlayCursor != dwCurrentWriteCursor)) + nBytesRemaining = g_dwDSSpkrBufferSize; // Case when complete buffer is to be played + + // Calc correction factor so that play-buffer doesn't under/overflow + if(nBytesRemaining < g_dwDSSpkrBufferSize / 4) + nNumSamplesError++; // < 1/4 of play-buffer remaining (need *more* data) + else if(nBytesRemaining > g_dwDSSpkrBufferSize / 2) + nNumSamplesError--; // > 1/2 of play-buffer remaining (need *less* data) + else + nNumSamplesError = 0; // Acceptable amount of data in buffer + + const int nMaxError = 50; // Cap feedback to +/-nMaxError units + if(nNumSamplesError < -nMaxError) nNumSamplesError = -nMaxError; + if(nNumSamplesError > nMaxError) nNumSamplesError = nMaxError; + g_nCpuCyclesFeedback = (int) ((double)nNumSamplesError * g_fClksPerSpkrSample); + + // + + UINT nBytesFree = g_dwDSSpkrBufferSize - nBytesRemaining; // Calc free buffer space + ULONG nNumSamplesToUse = nNumSamples; + + if(nNumSamplesToUse * sizeof(short) > nBytesFree) + nNumSamplesToUse = nBytesFree / sizeof(short); + + if(bBufferError) + pSpeakerBuffer = &pSpeakerBuffer[nNumSamples - nNumSamplesToUse]; + + // + + if(nNumSamplesToUse) + { +// sprintf(szDbg, "[Submit] C=%08X, PC=%08X, WC=%08X, Diff=%08X, Off=%08X, NS=%08X +++\n", nDbgSpkrCnt, dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor, dwByteOffset, nNumSamplesToUse); OutputDebugString(szDbg); + + if(!DSGetLock(SpeakerVoice.lpDSBvoice, + dwByteOffset, (DWORD)nNumSamplesToUse*sizeof(short), + &pDSLockedBuffer0, &dwDSLockedBufferSize0, + &pDSLockedBuffer1, &dwDSLockedBufferSize1)) + return nNumSamples; + + memcpy(pDSLockedBuffer0, &pSpeakerBuffer[0], dwDSLockedBufferSize0); +#ifdef RIFF_SPKR + RiffPutSamples(pDSLockedBuffer0, dwDSLockedBufferSize0/sizeof(short)); +#endif + + if(pDSLockedBuffer1) + { + memcpy(pDSLockedBuffer1, &pSpeakerBuffer[dwDSLockedBufferSize0/sizeof(short)], dwDSLockedBufferSize1); +#ifdef RIFF_SPKR + RiffPutSamples(pDSLockedBuffer1, dwDSLockedBufferSize1/sizeof(short)); +#endif + } + + // Commit sound buffer + hr = SpeakerVoice.lpDSBvoice->Unlock((void*)pDSLockedBuffer0, dwDSLockedBufferSize0, + (void*)pDSLockedBuffer1, dwDSLockedBufferSize1); + if(FAILED(hr)) + return nNumSamples; + + dwByteOffset = (dwByteOffset + (DWORD)nNumSamplesToUse*sizeof(short)*g_nSPKR_NumChannels) % g_dwDSSpkrBufferSize; + } + + return bBufferError ? nNumSamples : nNumSamplesToUse; +} + +//----------------------------------------------------------------------------- + +void Spkr_Mute() +{ + if(SpeakerVoice.bActive && !SpeakerVoice.bMute) + { + SpeakerVoice.lpDSBvoice->SetVolume(DSBVOLUME_MIN); + SpeakerVoice.bMute = true; + } +} + +void Spkr_Demute() +{ + if(SpeakerVoice.bActive && SpeakerVoice.bMute) + { + SpeakerVoice.lpDSBvoice->SetVolume(SpeakerVoice.nVolume); + SpeakerVoice.bMute = false; + } +} + +//----------------------------------------------------------------------------- + +static bool g_bSpkrRecentlyActive = false; + +static void Spkr_SetActive(bool bActive) +{ + if(!SpeakerVoice.bActive) + return; + + if(bActive) + { + // Called by SpkrToggle() or SpkrReset() + g_bSpkrRecentlyActive = true; + SpeakerVoice.bRecentlyActive = true; + } + else + { + // Called by SpkrUpdate() after 0.2s of speaker inactivity + g_bSpkrRecentlyActive = false; + SpeakerVoice.bRecentlyActive = false; + } +} + +bool Spkr_IsActive() +{ + return g_bSpkrRecentlyActive; +} + +//----------------------------------------------------------------------------- + +DWORD SpkrGetVolume() +{ + return SpeakerVoice.dwUserVolume; +} + +void SpkrSetVolume(DWORD dwVolume, DWORD dwVolumeMax) +{ + SpeakerVoice.dwUserVolume = dwVolume; + + SpeakerVoice.nVolume = NewVolume(dwVolume, dwVolumeMax); + + if(SpeakerVoice.bActive) + SpeakerVoice.lpDSBvoice->SetVolume(SpeakerVoice.nVolume); +} + +//============================================================================= + +bool Spkr_DSInit() +{ + // + // Create single Apple speaker voice + // + + if(!g_bDSAvailable) + return false; + + SpeakerVoice.bIsSpeaker = true; + + HRESULT hr = DSGetSoundBuffer(&SpeakerVoice, DSBCAPS_CTRLVOLUME, g_dwDSSpkrBufferSize, SPKR_SAMPLE_RATE, 1); + if(FAILED(hr)) + { + if(g_fh) fprintf(g_fh, "Spkr: DSGetSoundBuffer failed (%08X)\n",hr); + return false; + } + + if(!DSZeroVoiceBuffer(&SpeakerVoice, "Spkr", g_dwDSSpkrBufferSize)) + return false; + + SpeakerVoice.bActive = true; + + // Volume might've been setup from value in Registry + if(!SpeakerVoice.nVolume) + SpeakerVoice.nVolume = DSBVOLUME_MAX; + + SpeakerVoice.lpDSBvoice->SetVolume(SpeakerVoice.nVolume); + + // + + DWORD dwCurrentPlayCursor, dwCurrentWriteCursor; + hr = SpeakerVoice.lpDSBvoice->GetCurrentPosition(&dwCurrentPlayCursor, &dwCurrentWriteCursor); + if(SUCCEEDED(hr) && (dwCurrentPlayCursor == dwCurrentWriteCursor)) + { + // KLUDGE: For my WinXP PC with "VIA AC'97 Enhanced Audio Controller" + // . Not required for my Win98SE/WinXP PC with PCI "Soundblaster Live!" + Sleep(200); + + hr = SpeakerVoice.lpDSBvoice->GetCurrentPosition(&dwCurrentPlayCursor, &dwCurrentWriteCursor); + char szDbg[100]; + sprintf(szDbg, "[DSInit] PC=%08X, WC=%08X, Diff=%08X\n", dwCurrentPlayCursor, dwCurrentWriteCursor, dwCurrentWriteCursor-dwCurrentPlayCursor); OutputDebugString(szDbg); + } + + return true; +} + +void Spkr_DSUninit() +{ + if(SpeakerVoice.lpDSBvoice && SpeakerVoice.bActive) + { + SpeakerVoice.lpDSBvoice->Stop(); + SpeakerVoice.bActive = false; + } + + DSReleaseSoundBuffer(&SpeakerVoice); +} + +//============================================================================= + +DWORD SpkrGetSnapshot(SS_IO_Speaker* pSS) +{ + pSS->g_nSpkrLastCycle = g_nSpkrLastCycle; + return 0; +} + +DWORD SpkrSetSnapshot(SS_IO_Speaker* pSS) +{ + g_nSpkrLastCycle = pSS->g_nSpkrLastCycle; + return 0; +} diff --git a/AppleWin/source/Speaker.h b/AppleWin/source/Speaker.h new file mode 100644 index 00000000..445620fe --- /dev/null +++ b/AppleWin/source/Speaker.h @@ -0,0 +1,23 @@ +#pragma once + +extern DWORD soundtype; +extern double g_fClksPerSpkrSample; + +void SpkrDestroy (); +void SpkrInitialize (); +void SpkrReinitialize (); +void SpkrReset(); +BOOL SpkrSetEmulationType (HWND,DWORD); +void SpkrUpdate (DWORD); +void SpkrUpdate_Timer(); +DWORD SpkrGetVolume(); +void SpkrSetVolume(DWORD dwVolume, DWORD dwVolumeMax); +void Spkr_Mute(); +void Spkr_Demute(); +bool Spkr_IsActive(); +bool Spkr_DSInit(); +void Spkr_DSUninit(); +DWORD SpkrGetSnapshot(SS_IO_Speaker* pSS); +DWORD SpkrSetSnapshot(SS_IO_Speaker* pSS); + +BYTE __stdcall SpkrToggle (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); diff --git a/AppleWin/source/StdAfx.h b/AppleWin/source/StdAfx.h new file mode 100644 index 00000000..6595a296 --- /dev/null +++ b/AppleWin/source/StdAfx.h @@ -0,0 +1,38 @@ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Common.h" +#include "Structs.h" + +#include "AppleWin.h" +#include "AY8910.h" +#include "CPU.h" +#include "Debug.h" +#include "Disk.h" +#include "DiskImage.h" +#include "Frame.h" +#include "Harddisk.h" +#include "Joystick.h" +#include "Keyboard.h" +#include "Memory.h" +#include "Mockingboard.h" +#include "PropertySheetPage.h" +#include "Registry.h" +#include "Riff.h" +#include "SaveState.h" +#include "SerialComms.h" +#include "SoundCore.h" +#include "Speaker.h" +#include "Video.h" diff --git a/AppleWin/source/Structs.h b/AppleWin/source/Structs.h new file mode 100644 index 00000000..ed042fa6 --- /dev/null +++ b/AppleWin/source/Structs.h @@ -0,0 +1,273 @@ +// + +#define MAKE_VERSION(a,b,c,d) ((a<<24) | (b<<16) | (c<<8) | (d)) + +#define AW_SS_TAG 'SSWA' // 'AWSS' = AppleWin SnapShot + +typedef struct +{ + DWORD dwTag; // "AWSS" + DWORD dwVersion; + DWORD dwChecksum; +} SS_FILE_HDR; + +typedef struct +{ + DWORD dwLength; // Byte length of this unit struct + DWORD dwVersion; +} SS_UNIT_HDR; + +///////////////////////////////////////////////////////////////////////////////// + +const UINT nMemMainSize = 64*1024; +const UINT nMemAuxSize = 64*1024; + +typedef struct +{ + BYTE A; + BYTE X; + BYTE Y; + BYTE P; + BYTE S; + USHORT PC; + unsigned __int64 g_nCumulativeCycles; + // IRQ = OR-sum of all interrupt sources +} SS_CPU6502; + +typedef struct +{ + DWORD baudrate; + BYTE bytesize; + BYTE commandbyte; + DWORD comminactivity; // If non-zero then COM port open + BYTE controlbyte; + BYTE parity; + BYTE recvbuffer[9]; + DWORD recvbytes; + BYTE stopbits; +} SS_IO_Comms; + +typedef struct +{ + unsigned __int64 g_nJoyCntrResetCycle; +} SS_IO_Joystick; + +typedef struct +{ + DWORD keyboardqueries; + BYTE nLastKey; +} SS_IO_Keyboard; + +//typedef struct +//{ +//} SS_IO_Memory; + +typedef struct +{ + unsigned __int64 g_nSpkrLastCycle; +} SS_IO_Speaker; + +typedef struct +{ + bool bAltCharSet; // charoffs + DWORD dwVidMode; +} SS_IO_Video; + +typedef struct +{ + DWORD dwMemMode; + BOOL bLastWriteRam; + BYTE nMemMain[nMemMainSize]; + BYTE nMemAux[nMemAuxSize]; +} SS_BaseMemory; + +typedef struct +{ + SS_UNIT_HDR UnitHdr; + SS_CPU6502 CPU6502; + SS_IO_Comms Comms; + SS_IO_Joystick Joystick; + SS_IO_Keyboard Keyboard; +// SS_IO_Memory Memory; + SS_IO_Speaker Speaker; + SS_IO_Video Video; + SS_BaseMemory Memory; +} SS_APPLE2_Unit; + +///////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + DWORD dwComputerEmulation; + bool bCustomSpeed; + DWORD dwEmulationSpeed; + bool bEnhancedDiskSpeed; + DWORD dwJoystickType[2]; + bool bMockingboardEnabled; + DWORD dwMonochromeColor; + DWORD dwSerialPort; + DWORD dwSoundType; // Sound Emulation + DWORD dwVideoType; // Video Emulation +} SS_AW_CFG; + +typedef struct +{ + char StartingDir[MAX_PATH]; + DWORD dwWindowXpos; + DWORD dwWindowYpos; +} SS_AW_PREFS; + +typedef struct +{ + SS_UNIT_HDR UnitHdr; + DWORD dwAppleWinVersion; + SS_AW_PREFS Prefs; + SS_AW_CFG Cfg; +} SS_APPLEWIN_CONFIG; + +///////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + SS_UNIT_HDR UnitHdr; + DWORD dwType; // SS_CARDTYPE + DWORD dwSlot; // [1..7] +} SS_CARD_HDR; + +enum SS_CARDTYPE +{ + CT_Empty = 0, + CT_Disk2, // Apple Disk][ + CT_SSC, // Apple Super Serial Card + CT_Mockingboard, + CT_GenericPrinter, + CT_GenericHDD, // Hard disk + CT_GenericClock, +}; + +///////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + SS_CARD_HDR Hdr; +} SS_CARD_EMPTY; + +///////////////////////////////////////////////////////////////////////////////// + +const UINT NIBBLES_PER_TRACK = 0x1A00; + +typedef struct +{ + char szFileName[MAX_PATH]; + int track; + int phase; + int byte; + BOOL writeprotected; + BOOL trackimagedata; + BOOL trackimagedirty; + DWORD spinning; + DWORD writelight; + int nibbles; + BYTE nTrack[NIBBLES_PER_TRACK]; +} DISK2_Unit; + +typedef struct +{ + SS_CARD_HDR Hdr; + DISK2_Unit Unit[2]; + int currdrive; + BOOL diskaccessed; + BOOL enhancedisk; + BYTE floppylatch; + BOOL floppymotoron; + BOOL floppywritemode; +} SS_CARD_DISK2; + +///////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + union + { + struct + { + BYTE l; + BYTE h; + }; + USHORT w; + }; +} IWORD; + +typedef struct +{ + BYTE ORB; // $00 - Port B + BYTE ORA; // $01 - Port A (with handshaking) + BYTE DDRB; // $02 - Data Direction Register B + BYTE DDRA; // $03 - Data Direction Register A + // + // $04 - Read counter (L) / Write latch (L) + // $05 - Read / Write & initiate count (H) + // $06 - Read / Write & latch (L) + // $07 - Read / Write & latch (H) + // $08 - Read counter (L) / Write latch (L) + // $09 - Read counter (H) / Write latch (H) + IWORD TIMER1_COUNTER; + IWORD TIMER1_LATCH; + IWORD TIMER2_COUNTER; + IWORD TIMER2_LATCH; + // + BYTE SERIAL_SHIFT; // $0A + BYTE ACR; // $0B - Auxiliary Control Register + BYTE PCR; // $0C - Peripheral Control Register + BYTE IFR; // $0D - Interrupt Flag Register + BYTE IER; // $0E - Interrupt Enable Register + BYTE ORA_NO_HS; // $0F - Port A (without handshaking) +} SY6522; + +typedef struct +{ + BYTE DurationPhonome; + BYTE Inflection; // I10..I3 + BYTE RateInflection; + BYTE CtrlArtAmp; + BYTE FilterFreq; + // + BYTE CurrentMode; +} SSI263A; + +typedef struct +{ + SY6522 RegsSY6522; + BYTE RegsAY8910[16]; + SSI263A RegsSSI263; + BYTE nAYCurrentRegister; + bool bTimer1IrqPending; + bool bTimer2IrqPending; + bool bSpeechIrqPending; +} MB_Unit; + +const UINT MB_UNITS_PER_CARD = 2; + +typedef struct +{ + SS_CARD_HDR Hdr; + MB_Unit Unit[MB_UNITS_PER_CARD]; +} SS_CARD_MOCKINGBOARD; + +///////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + SS_FILE_HDR Hdr; + SS_APPLE2_Unit Apple2Unit; +// SS_APPLEWIN_CONFIG AppleWinCfg; + SS_CARD_EMPTY Empty1; // Slot1 + SS_CARD_EMPTY Empty2; // Slot2 + SS_CARD_EMPTY Empty3; // Slot3 + SS_CARD_MOCKINGBOARD Mockingboard1; // Slot4 + SS_CARD_MOCKINGBOARD Mockingboard2; // Slot5 + SS_CARD_DISK2 Disk2; // Slot6 + SS_CARD_EMPTY Empty7; // Slot7 +} APPLEWIN_SNAPSHOT; + +///////////////////////////////////////////////////////////////////////////////// diff --git a/AppleWin/source/Video.cpp b/AppleWin/source/Video.cpp new file mode 100644 index 00000000..a0c3df5f --- /dev/null +++ b/AppleWin/source/Video.cpp @@ -0,0 +1,1685 @@ +/* +AppleWin : An Apple //e emulator for Windows + +Copyright (C) 1994-1996, Michael O'Brien +Copyright (C) 1999-2001, Oliver Schmidt +Copyright (C) 2002-2005, Tom Charlesworth +Copyright (C) 2006, Tom Charlesworth, Michael Pohoreski + +AppleWin 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. + +AppleWin 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 AppleWin; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Description: Emulation of video modes + * + * Author: Various + */ + +#include "StdAfx.h" +#pragma hdrstop +#include "..\resource\resource.h" + +/* reference: technote tn-iigs-063 "Master Color Values" + + Color Color Register LR HR DHR Master Color R,G,B + Name Value # # # Value + ---------------------------------------------------- + Black 0 0 0,4 0 $0000 (0,0,0) -> (00,00,00) Windows +(Magenta) Deep Red 1 1 1 $0D03 (D,0,3) -> (D0,00,30) Custom + Dark Blue 2 2 8 $0009 (0,0,9) -> (00,00,80) Windows + (Violet) Purple 3 3 2 9 $0D2D (D,2,D) -> (FF,00,FF) Windows + Dark Green 4 4 4 $0072 (0,7,2) -> (00,80,00) Windows + (Gray 1) Dark Gray 5 5 5 $0555 (5,5,5) -> (80,80,80) Windows + (Blue) Medium Blue 6 6 6 C $022F (2,2,F) -> (00,00,FF) Windows + (Cyan) Light Blue 7 7 D $06AF (6,A,F) -> (60,A0,FF) Custom + Brown 8 8 2 $0850 (8,5,0) -> (80,50,00) Custom + Orange 9 9 5 3 $0F60 (F,6,0) -> (FF,80,00) Custom (modified to match better with the other Hi-Res Colors) + (Gray 2) Light Gray A A A $0AAA (A,A,A) -> (C0,C0,C0) Windows + Pink B B B $0F98 (F,9,8) -> (FF,90,80) Custom + (Green) Light Green C C 1 6 $01D0 (1,D,0) -> (00,FF,00) Windows + Yellow D D 7 $0FF0 (F,F,0) -> (FF,FF,00) Windows + (Aqua) Aquamarine E E E $04F9 (4,F,9) -> (40,FF,90) Custom + White F F 3,7 F $0FFF (F,F,F) -> (FF,FF,FF) Windows + + LR: Lo-Res HR: Hi-Res DHR: Double Hi-Res */ + +// STANDARD WINDOWS COLORS +#define BLACK 0x00 +#define DARK_RED 0x01 +#define DARK_GREEN 0x02 +#define DARK_YELLOW 0x03 +#define DARK_BLUE 0x04 +#define DARK_MAGENTA 0x05 +#define DARK_CYAN 0x06 +#define LIGHT_GRAY 0x07 +#define MONEY_GREEN 0x08 +#define SKY_BLUE 0x09 +#define CREAM 0xF6 +#define MEDIUM_GRAY 0xF7 +#define DARK_GRAY 0xF8 +#define RED 0xF9 +#define GREEN 0xFA +#define YELLOW 0xFB +#define BLUE 0xFC +#define MAGENTA 0xFD +#define CYAN 0xFE +#define WHITE 0xFF + +// OUR CUSTOM COLORS +#define DEEP_RED 0x0A +#define LIGHT_BLUE 0x0B +#define BROWN 0x0C +#define ORANGE 0X0D +#define PINK 0x0E +#define AQUA 0x0F + +// CUSTOM HGR COLORS (don't change values) - For tv emulation mode +#define HGR_BLACK 0x10 +#define HGR_WHITE 0x11 +#define HGR_BLUE 0x12 +#define HGR_RED 0x13 +#define HGR_GREEN 0x14 +#define HGR_MAGENTA 0x15 +#define HGR_GREY1 0x16 +#define HGR_GREY2 0x17 +#define HGR_YELLOW 0x18 +#define HGR_AQUA 0x19 +#define HGR_PURPLE 0x1A +#define HGR_PINK 0x1B + +// USER CUSTOMIZABLE COLOR +#define MONOCHROME 0x20 + +#define SRCOFFS_40COL 0 +#define SRCOFFS_80COL (SRCOFFS_40COL + 256) +#define SRCOFFS_LORES (SRCOFFS_80COL + 128) +#define SRCOFFS_HIRES (SRCOFFS_LORES + 16) +#define SRCOFFS_DHIRES (SRCOFFS_HIRES + 512) +#define SRCOFFS_TOTAL (SRCOFFS_DHIRES + 2560) + +#define VF_80COL 0x00000001 +#define VF_DHIRES 0x00000002 +#define VF_HIRES 0x00000004 +#define VF_MASK2 0x00000008 +#define VF_MIXED 0x00000010 +#define VF_PAGE2 0x00000020 +#define VF_TEXT 0x00000040 + +#define SW_80COL (vidmode & VF_80COL) +#define SW_DHIRES (vidmode & VF_DHIRES) +#define SW_HIRES (vidmode & VF_HIRES) +#define SW_MASK2 (vidmode & VF_MASK2) +#define SW_MIXED (vidmode & VF_MIXED) +#define SW_PAGE2 (vidmode & VF_PAGE2) +#define SW_TEXT (vidmode & VF_TEXT) + +#define SETSOURCEPIXEL(x,y,c) sourceoffsettable[(y)][(x)] = (c) + +#define SETFRAMECOLOR(i,r,g,b) framebufferinfo->bmiColors[i].rgbRed = r; \ + framebufferinfo->bmiColors[i].rgbGreen = g; \ + framebufferinfo->bmiColors[i].rgbBlue = b; + +#define HGR_MATRIX_YOFFSET 2 // For tv emulation mode + +typedef BOOL (*updatetype)(int,int,int,int,int); + +static BYTE celldirty[40][32]; +static COLORREF customcolors[MONOCHROME]; // MONOCHROME is last custom color +static HBITMAP devicebitmap; +static HDC devicedc; +static LPBYTE framebufferbits; +static LPBITMAPINFO framebufferinfo; +static LPBYTE frameoffsettable[384]; +static LPBYTE hiresauxptr; +static LPBYTE hiresmainptr; +static HBITMAP logobitmap; +static HPALETTE palette; +static HBITMAP sourcebitmap; +static LPBYTE sourcebits; +static LPBITMAPINFO sourceinfo; +static LPBYTE sourceoffsettable[512]; +static LPBYTE textauxptr; +static LPBYTE textmainptr; + +// For tv emulation mode +static BYTE hgrpixelmatrix[280][192 + 2 * HGR_MATRIX_YOFFSET]; +static BYTE colormixbuffer[6]; +static WORD colormixmap[6][6][6]; +// + +static int charoffs = 0; +static BOOL displaypage2 = 0; +static LPBYTE framebufferaddr = (LPBYTE)0; +static LONG framebufferpitch = 0; +BOOL graphicsmode = 0; +static BOOL hasrefreshed = 0; +static DWORD lastpageflip = 0; +COLORREF monochrome = RGB(0xFF,0xFF,0xFF); +static BOOL rebuiltsource = 0; +static BOOL redrawfull = 1; +static DWORD dwVBlCounter = 0; +static LPBYTE vidlastmem = NULL; +static DWORD vidmode = VF_TEXT; +DWORD videotype = VT_COLOR_TVEMU; + +static bool g_bTextFlashState = false; +static bool g_bTextFlashFlag = false; + +//------------------------------------- + +// Video consts: +const UINT nVBlStop_NTSC = 21; +const UINT nVBlStop_PAL = 29; + +//------------------------------------- + +void DrawDHiResSource (); +void DrawHiResSource (); +void DrawLoResSource (); +void DrawMonoDHiResSource (); +void DrawMonoHiResSource (); +void DrawMonoLoResSource (); +void DrawMonoTextSource (HDC dc); +void DrawTextSource (HDC dc); + +//=========================================================================== +void __stdcall CopySource (int destx, int desty, + int xsize, int ysize, + int sourcex, int sourcey) +{ + LPBYTE currdestptr = frameoffsettable [desty] +destx; + LPBYTE currsourceptr = sourceoffsettable[sourcey]+sourcex; + int bytesleft; + while (ysize--) + { + bytesleft = xsize; + while (bytesleft & 3) + { + --bytesleft; + *(currdestptr+bytesleft) = *(currsourceptr+bytesleft); + } + while (bytesleft) + { + bytesleft -= 4; + *(LPDWORD)(currdestptr+bytesleft) = *(LPDWORD)(currsourceptr+bytesleft); + } + currdestptr -= framebufferpitch; + currsourceptr -= SRCOFFS_TOTAL; + } +} + +//=========================================================================== +void CreateFrameOffsetTable (LPBYTE addr, LONG pitch) { + if (framebufferaddr == addr && + framebufferpitch == pitch) + return; + framebufferaddr = addr; + framebufferpitch = pitch; + + // CREATE THE OFFSET TABLE FOR EACH SCAN LINE IN THE FRAME BUFFER + for (int loop = 0; loop < 384; loop++) + frameoffsettable[loop] = framebufferaddr+framebufferpitch*(383-loop); +} + +//=========================================================================== +void CreateIdentityPalette () { + if (palette) + DeleteObject(palette); + + // SET FRAME BUFFER TABLE ENTRIES TO CUSTOM COLORS + SETFRAMECOLOR(DEEP_RED, 0xD0,0x00,0x30); + SETFRAMECOLOR(LIGHT_BLUE,0x60,0xA0,0xFF); + SETFRAMECOLOR(BROWN, 0x80,0x50,0x00); + SETFRAMECOLOR(ORANGE, 0xFF,0x80,0x00); + SETFRAMECOLOR(PINK, 0xFF,0x90,0x80); + SETFRAMECOLOR(AQUA, 0x40,0xFF,0x90); + + SETFRAMECOLOR(HGR_BLACK, 0x00,0x00,0x00); // For tv emulation mode + SETFRAMECOLOR(HGR_WHITE, 0xFF,0xFF,0xFE); + SETFRAMECOLOR(HGR_BLUE, 0x00,0x80,0xFF); + SETFRAMECOLOR(HGR_RED, 0xF0,0x50,0x00); + SETFRAMECOLOR(HGR_GREEN, 0x20,0xC0,0x00); + SETFRAMECOLOR(HGR_MAGENTA,0xA0,0x00,0xFF); + SETFRAMECOLOR(HGR_GREY1, 0x80,0x80,0x80); + SETFRAMECOLOR(HGR_GREY2, 0x80,0x80,0x80); + SETFRAMECOLOR(HGR_YELLOW, 0xD0,0xB0,0x10); + SETFRAMECOLOR(HGR_AQUA, 0x20,0xB0,0xB0); + SETFRAMECOLOR(HGR_PURPLE, 0x60,0x50,0xE0); + SETFRAMECOLOR(HGR_PINK, 0xD0,0x40,0xA0); + + SETFRAMECOLOR(MONOCHROME,GetRValue(monochrome), + GetGValue(monochrome), + GetBValue(monochrome)); + + // IF WE ARE IN A PALETTIZED VIDEO MODE, CREATE AN IDENTITY PALETTE + HWND window = GetDesktopWindow(); + HDC dc = GetDC(window); + int colors = GetDeviceCaps(dc,SIZEPALETTE); + int system = GetDeviceCaps(dc,NUMCOLORS); + if ((GetDeviceCaps(dc,RASTERCAPS) & RC_PALETTE) && (colors <= 256)) { + + // GET THE PALETTE ENTRIES OF THE LOGO + RGBQUAD logotable[256]; + ZeroMemory(logotable,sizeof(logotable)); + if (logobitmap) { + HDC memdc = CreateCompatibleDC(dc); + SelectObject(memdc,logobitmap); + GetDIBColorTable(memdc,0,colors,logotable); + DeleteDC(memdc); + } + + // CREATE A PALETTE ENTRY ARRAY + LOGPALETTE *paldata = (LOGPALETTE *)VirtualAlloc(NULL, + sizeof(LOGPALETTE) + +256*sizeof(PALETTEENTRY), + MEM_COMMIT, + PAGE_READWRITE); + paldata->palVersion = 0x300; + paldata->palNumEntries = colors; + GetSystemPaletteEntries(dc,0,colors,paldata->palPalEntry); + + // FILL IN THE PALETTE ENTRIES + int paletteindex = 0; + int logoindex = 0; + int halftoneindex = 0; + + // COPY THE SYSTEM PALETTE ENTRIES AT THE BEGINNING OF THE PALETTE + for (; paletteindex < system/2; paletteindex++) + paldata->palPalEntry[paletteindex].peFlags = 0; + + // FILL IN THE MIDDLE PORTION OF THE PALETTE WITH OUR OWN COLORS + for (int ourindex = DEEP_RED; ourindex <= MONOCHROME; ourindex++) { + paldata->palPalEntry[paletteindex].peRed = framebufferinfo->bmiColors[ourindex].rgbRed; + paldata->palPalEntry[paletteindex].peGreen = framebufferinfo->bmiColors[ourindex].rgbGreen; + paldata->palPalEntry[paletteindex].peBlue = framebufferinfo->bmiColors[ourindex].rgbBlue; + paldata->palPalEntry[paletteindex].peFlags = PC_NOCOLLAPSE; + paletteindex++; + } + for (; paletteindex < colors-system/2; paletteindex++) { + + // IF THIS PALETTE ENTRY IS NEEDED FOR THE LOGO, COPY IN THE LOGO COLOR + if (logotable[logoindex].rgbRed && + logotable[logoindex].rgbGreen && + logotable[logoindex].rgbBlue) { + paldata->palPalEntry[paletteindex].peRed = logotable[logoindex].rgbRed; + paldata->palPalEntry[paletteindex].peGreen = logotable[logoindex].rgbGreen; + paldata->palPalEntry[paletteindex].peBlue = logotable[logoindex].rgbBlue; + } + + // OTHERWISE, ADD A HALFTONING COLOR, SO THAT OTHER APPLICATIONS + // RUNNING IN THE BACKGROUND WILL HAVE SOME REASONABLE COLORS TO USE + else { + static BYTE halftonetable[6] = {32,64,96,160,192,224}; + paldata->palPalEntry[paletteindex].peRed = halftonetable[halftoneindex % 6]; + paldata->palPalEntry[paletteindex].peGreen = halftonetable[halftoneindex/6 % 6]; + paldata->palPalEntry[paletteindex].peBlue = halftonetable[halftoneindex/36 % 6]; + ++halftoneindex; + } + ++logoindex; + paldata->palPalEntry[paletteindex].peFlags = PC_NOCOLLAPSE; + } + + // COPY THE SYSTEM PALETTE ENTRIES AT THE END OF THE PALETTE + for (; paletteindex < colors; paletteindex++) + paldata->palPalEntry[paletteindex].peFlags = 0; + + // FILL THE FRAME BUFFER TABLE WITH COLORS FROM OUR PALETTE + for (int loop = 0; loop < colors; loop++) { + framebufferinfo->bmiColors[loop].rgbRed = paldata->palPalEntry[loop].peRed; + framebufferinfo->bmiColors[loop].rgbGreen = paldata->palPalEntry[loop].peGreen; + framebufferinfo->bmiColors[loop].rgbBlue = paldata->palPalEntry[loop].peBlue; + } + + // CREATE THE PALETTE + palette = CreatePalette(paldata); + VirtualFree(paldata,0,MEM_RELEASE); + } + + // OTHERWISE, FILL THE FRAME BUFFER TABLE WITH THE STANDARD WINDOWS COLORS + else { + SETFRAMECOLOR(BLACK, 0x00,0x00,0x00); + SETFRAMECOLOR(DARK_RED, 0x80,0x00,0x00); + SETFRAMECOLOR(DARK_GREEN, 0x00,0x80,0x00); + SETFRAMECOLOR(DARK_YELLOW, 0x80,0x80,0x00); + SETFRAMECOLOR(DARK_BLUE, 0x00,0x00,0x80); + SETFRAMECOLOR(DARK_MAGENTA,0x80,0x00,0x80); + SETFRAMECOLOR(DARK_CYAN, 0x00,0x80,0x80); + SETFRAMECOLOR(LIGHT_GRAY, 0xC0,0xC0,0xC0); + SETFRAMECOLOR(MONEY_GREEN, 0xC0,0xDC,0xC0); + SETFRAMECOLOR(SKY_BLUE, 0xA6,0xCA,0xF0); + SETFRAMECOLOR(CREAM, 0xFF,0xFB,0xF0); + SETFRAMECOLOR(MEDIUM_GRAY, 0xA0,0xA0,0xA4); + SETFRAMECOLOR(DARK_GRAY, 0x80,0x80,0x80); + SETFRAMECOLOR(RED, 0xFF,0x00,0x00); + SETFRAMECOLOR(GREEN, 0x00,0xFF,0x00); + SETFRAMECOLOR(YELLOW, 0xFF,0xFF,0x00); + SETFRAMECOLOR(BLUE, 0x00,0x00,0xFF); + SETFRAMECOLOR(MAGENTA, 0xFF,0x00,0xFF); + SETFRAMECOLOR(CYAN, 0x00,0xFF,0xFF); + SETFRAMECOLOR(WHITE, 0xFF,0xFF,0xFF); + palette = (HPALETTE)0; + } + ReleaseDC(window,dc); +} + +//=========================================================================== +void CreateDIBSections () { + + CopyMemory(sourceinfo->bmiColors,framebufferinfo->bmiColors,256*sizeof(RGBQUAD)); + + // CREATE THE DEVICE CONTEXT + HWND window = GetDesktopWindow(); + HDC dc = GetDC(window); + if (devicedc) + DeleteDC(devicedc); + devicedc = CreateCompatibleDC(dc); + + // CREATE THE FRAME BUFFER DIB SECTION + if (devicebitmap) + DeleteObject(devicebitmap); + devicebitmap = CreateDIBSection(dc,framebufferinfo,DIB_RGB_COLORS, + (LPVOID *)&framebufferbits,0,0); + SelectObject(devicedc,devicebitmap); + + // CREATE THE SOURCE IMAGE DIB SECTION + HDC sourcedc = CreateCompatibleDC(dc); + ReleaseDC(window,dc); + if (sourcebitmap) + DeleteObject(sourcebitmap); + sourcebitmap = CreateDIBSection(sourcedc,sourceinfo,DIB_RGB_COLORS, + (LPVOID *)&sourcebits,0,0); + SelectObject(sourcedc,sourcebitmap); + + // CREATE THE OFFSET TABLE FOR EACH SCAN LINE IN THE SOURCE IMAGE + for (int loop = 0; loop < 512; loop++) + sourceoffsettable[loop] = sourcebits+SRCOFFS_TOTAL*(511-loop); + + // DRAW THE SOURCE IMAGE INTO THE SOURCE BIT BUFFER + ZeroMemory(sourcebits,SRCOFFS_TOTAL*512); + if (videotype != VT_MONO) { + DrawTextSource(sourcedc); + DrawLoResSource(); + DrawHiResSource(); + DrawDHiResSource(); + } + else { + DrawMonoTextSource(sourcedc); + DrawMonoLoResSource(); + DrawMonoHiResSource(); + DrawMonoDHiResSource(); + } + DeleteDC(sourcedc); +} + +//=========================================================================== +void DrawDHiResSource () { + BYTE colorval[16] = {BLACK, DARK_BLUE, DARK_GREEN,BLUE, + BROWN, LIGHT_GRAY,GREEN, AQUA, + DEEP_RED,MAGENTA, DARK_GRAY, LIGHT_BLUE, + ORANGE, PINK, YELLOW, WHITE}; +#define OFFSET 3 +#define SIZE 10 + for (int column = 0; column < 256; column++) { + int coloffs = SIZE * column; + for (unsigned byteval = 0; byteval < 256; byteval++) { + int color[SIZE]; + ZeroMemory(color,sizeof(color)); + unsigned pattern = MAKEWORD(byteval,column); + for (int pixel = 1; pixel < 15; pixel++) { + if (pattern & (1 << pixel)) { + int pixelcolor = 1 << ((pixel-OFFSET) & 3); + if ((pixel >= OFFSET+2) && (pixel < SIZE+OFFSET+2) && (pattern & (0x7 << (pixel-4)))) + color[pixel-(OFFSET+2)] |= pixelcolor; + if ((pixel >= OFFSET+1) && (pixel < SIZE+OFFSET+1) && (pattern & (0xF << (pixel-4)))) + color[pixel-(OFFSET+1)] |= pixelcolor; + if ((pixel >= OFFSET+0) && (pixel < SIZE+OFFSET+0)) + color[pixel-(OFFSET+0)] |= pixelcolor; + if ((pixel >= OFFSET-1) && (pixel < SIZE+OFFSET-1) && (pattern & (0xF << (pixel+1)))) + color[pixel-(OFFSET-1)] |= pixelcolor; + if ((pixel >= OFFSET-2) && (pixel < SIZE+OFFSET-2) && (pattern & (0x7 << (pixel+2)))) + color[pixel-(OFFSET-2)] |= pixelcolor; + } + } + + if (videotype == VT_COLOR_TEXT_OPTIMIZED) + { + /*** + activate for fringe reduction on white hgr text + drawback: loss of color mix patterns in hgr mode. + select videotype by index + ***/ + + for (pixel = 0; pixel < 13; pixel++) + { + if ((pattern & (0xF << pixel)) == (unsigned)(0xF << pixel)) + for (int pos = pixel; pos < pixel + 4; pos++) + if (pos >= OFFSET && pos < SIZE+OFFSET) + color[pos-OFFSET] = 15; + } + } + + int y = byteval << 1; + for (int x = 0; x < SIZE; x++) { + SETSOURCEPIXEL(SRCOFFS_DHIRES+coloffs+x,y ,colorval[color[x]]); + SETSOURCEPIXEL(SRCOFFS_DHIRES+coloffs+x,y+1,colorval[color[x]]); + } + } + } +#undef SIZE +#undef OFFSET +} + +//=========================================================================== +void DrawHiResSource () { +// BYTE colorval[6] = {MAGENTA,BLUE,GREEN,ORANGE,BLACK,WHITE}; + BYTE colorval[6] = {HGR_MAGENTA,HGR_BLUE,HGR_GREEN,HGR_RED,HGR_BLACK,HGR_WHITE}; + + for (int column = 0; column < 16; column++) { + int coloffs = column << 5; + for (unsigned byteval = 0; byteval < 256; byteval++) { + BOOL pixelon[11]; + pixelon[ 0] = column & 4; + pixelon[ 1] = column & 8; + pixelon[ 9] = column & 1; + pixelon[10] = column & 2; + int bitval = 1; + for (int pixel = 2; pixel < 9; pixel++) { + pixelon[pixel] = ((byteval & bitval) != 0); + bitval <<= 1; + } + int hibit = ((byteval & 0x80) != 0); + int x = 0; + int y = byteval << 1; + while (x < 28) { + int adj = (x >= 14) << 1; + int odd = (x >= 14); + for (pixel = 2; pixel < 9; pixel++) { + int color = 4; + if (pixelon[pixel]) + { + if (pixelon[pixel-1] || pixelon[pixel+1]) + color = 5; + else + color = ((odd ^ (pixel&1)) << 1) | hibit; + } + else if (pixelon[pixel-1] && pixelon[pixel+1]) + { + /*** + activate for fringe reduction on white hgr text - + drawback: loss of color mix patterns in hgr mode. + select videotype by index exclusion + ***/ + + if ((videotype == VT_COLOR_STANDARD) || (videotype == VT_COLOR_TVEMU) || !(pixelon[pixel-2] && pixelon[pixel+2])) + color = ((odd ^ !(pixel&1)) << 1) | hibit; // // No white HGR text optimization + } + + SETSOURCEPIXEL(SRCOFFS_HIRES+coloffs+x+adj ,y ,colorval[color]); + SETSOURCEPIXEL(SRCOFFS_HIRES+coloffs+x+adj+1,y ,colorval[color]); + SETSOURCEPIXEL(SRCOFFS_HIRES+coloffs+x+adj ,y+1,colorval[color]); + SETSOURCEPIXEL(SRCOFFS_HIRES+coloffs+x+adj+1,y+1,colorval[color]); + x += 2; + } + } + } + } +} + +//=========================================================================== +void DrawLoResSource () { + BYTE colorval[16] = {BLACK, DEEP_RED, DARK_BLUE, MAGENTA, + DARK_GREEN,DARK_GRAY,BLUE, LIGHT_BLUE, + BROWN, ORANGE, LIGHT_GRAY,PINK, + GREEN, YELLOW, AQUA, WHITE}; + for (int color = 0; color < 16; color++) + for (int x = 0; x < 16; x++) + for (int y = 0; y < 16; y++) + SETSOURCEPIXEL(SRCOFFS_LORES+x,(color << 4)+y,colorval[color]); +} + +//=========================================================================== +void DrawMonoDHiResSource () { + for (int column = 0; column < 256; column++) { + int coloffs = 10 * column; + for (unsigned byteval = 0; byteval < 256; byteval++) { + unsigned pattern = MAKEWORD(byteval,column); + int y = byteval << 1; + for (int x = 0; x < 10; x++) { + BYTE colorval = pattern & (1 << (x+3)) ? MONOCHROME : BLACK; + SETSOURCEPIXEL(SRCOFFS_DHIRES+coloffs+x,y ,colorval); + SETSOURCEPIXEL(SRCOFFS_DHIRES+coloffs+x,y+1,colorval); + } + } + } +} + +//=========================================================================== +void DrawMonoHiResSource () { + for (int column = 0; column < 512; column += 16) { + for (int y = 0; y < 512; y += 2) { + unsigned val = (y >> 1); + for (int x = 0; x < 16; x += 2) { + BYTE colorval = (val & 1) ? MONOCHROME : BLACK; + val >>= 1; + SETSOURCEPIXEL(SRCOFFS_HIRES+column+x ,y ,colorval); + SETSOURCEPIXEL(SRCOFFS_HIRES+column+x+1,y ,colorval); + SETSOURCEPIXEL(SRCOFFS_HIRES+column+x ,y+1,colorval); + SETSOURCEPIXEL(SRCOFFS_HIRES+column+x+1,y+1,colorval); + } + } + } +} + +//=========================================================================== +void DrawMonoLoResSource () { + for (int color = 0; color < 16; color++) + for (int x = 0; x < 16; x++) + for (int y = 0; y < 16; y++) { + BYTE colorval = (color >> (x & 3) & 1) ? MONOCHROME : BLACK; + SETSOURCEPIXEL(SRCOFFS_LORES+x,(color << 4)+y,colorval); + } +} + +//=========================================================================== +void DrawMonoTextSource (HDC dc) { + HDC memdc = CreateCompatibleDC(dc); + HBITMAP bitmap = LoadBitmap(instance,TEXT("CHARSET40")); + HBRUSH brush = CreateSolidBrush(monochrome); + SelectObject(memdc,bitmap); + SelectObject(dc,brush); + BitBlt(dc,SRCOFFS_40COL,0,256,512,memdc,0,0,MERGECOPY); + StretchBlt(dc,SRCOFFS_80COL,0,128,512,memdc,0,0,256,512,MERGECOPY); + SelectObject(dc,GetStockObject(NULL_BRUSH)); + DeleteObject(brush); + DeleteDC(memdc); + DeleteObject(bitmap); +} + +//=========================================================================== +void DrawTextSource (HDC dc) { + HDC memdc = CreateCompatibleDC(dc); + HBITMAP bitmap = LoadBitmap(instance,TEXT("CHARSET40")); + SelectObject(memdc,bitmap); + BitBlt(dc,SRCOFFS_40COL,0,256,512,memdc,0,0,SRCCOPY); + StretchBlt(dc,SRCOFFS_80COL,0,128,512,memdc,0,0,256,512,SRCCOPY); + DeleteDC(memdc); + DeleteObject(bitmap); +} + +//=========================================================================== +void SetLastDrawnImage () { + memcpy(vidlastmem+0x400,textmainptr,0x400); + if (SW_HIRES) + memcpy(vidlastmem+0x2000,hiresmainptr,0x2000); + if (SW_DHIRES && SW_HIRES) + memcpy(vidlastmem,hiresauxptr,0x2000); + if (SW_80COL && !SW_HIRES) + memcpy(vidlastmem,textauxptr,0x400); + int loop; + for (loop = 0; loop < 256; loop++) + *(memdirty+loop) &= ~2; +} + +//=========================================================================== + +BOOL Update40ColCell (int x, int y, int xpixel, int ypixel, int offset) +{ + BYTE ch = *(textmainptr+offset); + bool bCharChanged = (ch != *(vidlastmem+offset+0x400) || redrawfull); + + // FLASHing chars: + // - FLASHing if:Alt Char Set is OFF && 0x40<=char<=0x7F + // - The inverse of this char is located at: char+0x40 + bool bCharFlashing = (charoffs == 0) && (ch >= 0x40) && (ch <= 0x7F); + + if(bCharChanged || (bCharFlashing && g_bTextFlashFlag)) + { + bool bInvert = bCharFlashing ? g_bTextFlashState : false; + + CopySource(xpixel,ypixel, + 14,16, + SRCOFFS_40COL+((ch & 0x0F) << 4), + (ch & 0xF0)+charoffs + (bInvert?0x40:0x00)); + + return 1; + } + else + { + return 0; + } +} + +//=========================================================================== +BOOL Update80ColCell (int x, int y, int xpixel, int ypixel, int offset) { + BYTE auxval = *(textauxptr +offset); + BYTE mainval = *(textmainptr+offset); + if ((auxval != *(vidlastmem+offset)) || + (mainval != *(vidlastmem+offset+0x400)) || + redrawfull) { + CopySource(xpixel,ypixel, + 7,16, + SRCOFFS_80COL+((auxval & 15)<<3),((auxval>>4)<<4)+charoffs); + CopySource(xpixel+7,ypixel, + 7,16, + SRCOFFS_80COL+((mainval & 15)<<3),((mainval>>4)<<4)+charoffs); + return 1; + } + else + return 0; +} + +//=========================================================================== +BOOL UpdateDHiResCell (int x, int y, int xpixel, int ypixel, int offset) { + BOOL dirty = 0; + int yoffset = 0; + while (yoffset < 0x2000) { + BYTE byteval1 = (x > 0) ? *(hiresmainptr+offset+yoffset-1) : 0; + BYTE byteval2 = *(hiresauxptr +offset+yoffset); + BYTE byteval3 = *(hiresmainptr+offset+yoffset); + BYTE byteval4 = (x < 39) ? *(hiresauxptr +offset+yoffset+1) : 0; + if ((byteval2 != *(vidlastmem+offset+yoffset)) || + (byteval3 != *(vidlastmem+offset+yoffset+0x2000)) || + ((x > 0) && ((byteval1 & 0x70) != (*(vidlastmem+offset+yoffset+0x1FFF) & 0x70))) || + ((x < 39) && ((byteval4 & 0x07) != (*(vidlastmem+offset+yoffset+ 1) & 0x07))) || + redrawfull) { + DWORD dwordval = (byteval1 & 0x70) | ((byteval2 & 0x7F) << 7) | + ((byteval3 & 0x7F) << 14) | ((byteval4 & 0x07) << 21); +#define PIXEL 0 +#define COLOR ((xpixel + PIXEL) & 3) +#define VALUE (dwordval >> (4 + PIXEL - COLOR)) + CopySource(xpixel+PIXEL,ypixel+(yoffset >> 9),7,2, + SRCOFFS_DHIRES+10*HIBYTE(VALUE)+COLOR,LOBYTE(VALUE)<<1); +#undef PIXEL +#define PIXEL 7 + CopySource(xpixel+PIXEL,ypixel+(yoffset >> 9),7,2, + SRCOFFS_DHIRES+10*HIBYTE(VALUE)+COLOR,LOBYTE(VALUE)<<1); +#undef PIXEL +#undef COLOR +#undef VALUE + dirty = 1; + } + yoffset += 0x400; + } + return dirty; +} + + +//=========================================================================== +BYTE MixColors(BYTE c1, BYTE c2) { // For tv emulation mode +#define COMBINATION(c1,c2,ref1,ref2) (((c1)==(ref1)&&(c2)==(ref2)) || ((c1)==(ref2)&&(c2)==(ref1))) + + if (c1 == c2) + return c1; + if (COMBINATION(c1,c2,HGR_BLUE,HGR_RED)) + return HGR_GREY1; + else if (COMBINATION(c1,c2,HGR_GREEN,HGR_MAGENTA)) + return HGR_GREY2; + else if (COMBINATION(c1,c2,HGR_RED,HGR_GREEN)) + return HGR_YELLOW; + else if (COMBINATION(c1,c2,HGR_BLUE,HGR_GREEN)) + return HGR_AQUA; + else if (COMBINATION(c1,c2,HGR_BLUE,HGR_MAGENTA)) + return HGR_PURPLE; + else if (COMBINATION(c1,c2,HGR_RED,HGR_MAGENTA)) + return HGR_PINK; + else + return MONOCHROME; // visible failure indicator + +#undef COMBINATION +} + + +//=========================================================================== +void CreateColorMixMap() { // For tv emulation mode +#define FROM_NEIGHBOUR 0x00 + + int t,m,b; + BYTE cTop, cMid, cBot; + WORD mixTop, mixBot; + + for (t=0; t<6; t++) + for (m=0; m<6; m++) + for (b=0; b<6; b++) { + cTop = t | 0x10; + cMid = m | 0x10; + cBot = b | 0x10; + if (cMid < HGR_BLUE) { + mixTop = mixBot = cMid; + } else { + if (cTop < HGR_BLUE) { + mixTop = FROM_NEIGHBOUR; + } else { + mixTop = MixColors(cMid,cTop); + } + if (cBot < HGR_BLUE) { + mixBot = FROM_NEIGHBOUR; + } else { + mixBot = MixColors(cMid,cBot); + } + if (mixTop == FROM_NEIGHBOUR && mixBot != FROM_NEIGHBOUR) { + mixTop = mixBot; + } else if (mixBot == FROM_NEIGHBOUR && mixTop != FROM_NEIGHBOUR) { + mixBot = mixTop; + } else if (mixBot == FROM_NEIGHBOUR && mixTop == FROM_NEIGHBOUR) { + mixBot = mixTop = cMid; + } + } + colormixmap[t][m][b] = (mixTop << 8) | mixBot; + } +#undef FROM_NEIGHBOUR +} + +//=========================================================================== +void __stdcall MixColorsVertical(int matx, int maty) { // For tv emulation mode + + WORD twoHalfPixel; + int bot1idx, bot2idx; + + if (SW_MIXED && maty > 159) { + if (maty < 161) { + bot1idx = hgrpixelmatrix[matx][maty+1] & 0x0F; + bot2idx = 0; + } else { + bot1idx = bot2idx = 0; + } + } else { + bot1idx = hgrpixelmatrix[matx][maty+1] & 0x0F; + bot2idx = hgrpixelmatrix[matx][maty+2] & 0x0F; + } + + twoHalfPixel = colormixmap[hgrpixelmatrix[matx][maty-2] & 0x0F] + [hgrpixelmatrix[matx][maty-1] & 0x0F] + [hgrpixelmatrix[matx][maty ] & 0x0F]; + colormixbuffer[0] = (twoHalfPixel & 0xFF00) >> 8; + colormixbuffer[1] = twoHalfPixel & 0x00FF; + + twoHalfPixel = colormixmap[hgrpixelmatrix[matx][maty-1] & 0x0F] + [hgrpixelmatrix[matx][maty ] & 0x0F] + [bot1idx]; + colormixbuffer[2] = (twoHalfPixel & 0xFF00) >> 8; + colormixbuffer[3] = twoHalfPixel & 0x00FF; + + twoHalfPixel = colormixmap[hgrpixelmatrix[matx][maty ] & 0x0F] + [bot1idx] + [bot2idx]; + colormixbuffer[4] = (twoHalfPixel & 0xFF00) >> 8; + colormixbuffer[5] = twoHalfPixel & 0x00FF; + +} + + +//=========================================================================== +void __stdcall CopyMixedSource (int x, int y, int sourcex, int sourcey) { // For tv emulation mode + + LPBYTE currsourceptr = sourceoffsettable[sourcey]+sourcex; + LPBYTE currdestptr = frameoffsettable[y<<1] + (x<<1); + LPBYTE currptr; + + int matx = x; + int maty = HGR_MATRIX_YOFFSET + y; + int count; + int bufxoffset; + int hgrlinesabove = (y > 0)? 1 : 0; + int hgrlinesbelow = SW_MIXED ? ((y < 159)? 1:0) : ((y < 191)? 1:0); + int i; + int istart = 2 - (hgrlinesabove << 1); + int iend = 3 + (hgrlinesbelow << 1); + + // transfer 7 pixels (i.e. the visible part of an apple hgr-byte) from row to pixelmatrix + for (count = 0, bufxoffset = 0; + count < 7; + count++, bufxoffset += 2) { + hgrpixelmatrix[matx+count][maty] = *(currsourceptr+bufxoffset); + + // color mixing between adjacent scanlines at current x position + MixColorsVertical(matx+count, maty); + + // transfer up to 6 mixed (half-)pixels of current column to framebuffer + currptr = currdestptr+bufxoffset; + if (hgrlinesabove) + currptr += framebufferpitch << 1; + + for (i = istart; + i <= iend; + currptr -= framebufferpitch, i++) { + *currptr = *(currptr+1) = colormixbuffer[i]; + } + } +} + + +//=========================================================================== +BOOL UpdateHiResCell (int x, int y, int xpixel, int ypixel, int offset) { + BOOL dirty = 0; + int yoffset = 0; + while (yoffset < 0x2000) { + BYTE byteval1 = (x > 0) ? *(hiresmainptr+offset+yoffset-1) : 0; + BYTE byteval2 = *(hiresmainptr+offset+yoffset); + BYTE byteval3 = (x < 39) ? *(hiresmainptr+offset+yoffset+1) : 0; + if ((byteval2 != *(vidlastmem+offset+yoffset+0x2000)) || + ((x > 0) && ((byteval1 & 0x60) != (*(vidlastmem+offset+yoffset+0x1FFF) & 0x60))) || + ((x < 39) && ((byteval3 & 0x03) != (*(vidlastmem+offset+yoffset+0x2001) & 0x03))) || + redrawfull) { +#define COLOFFS (((byteval1 & 0x60) << 2) | \ + ((byteval3 & 0x03) << 5)) + if (videotype == VT_COLOR_TVEMU) + { + CopyMixedSource(xpixel >> 1, (ypixel+(yoffset >> 9)) >> 1, + SRCOFFS_HIRES+COLOFFS+((x & 1) << 4),(((int)byteval2) << 1)); + } + else + { + CopySource(xpixel,ypixel+(yoffset >> 9), + 14,2, + SRCOFFS_HIRES+COLOFFS+((x & 1) << 4),(((int)byteval2) << 1)); + } +#undef COLOFFS + dirty = 1; + } + yoffset += 0x400; + } + return dirty; +} + +//=========================================================================== +BOOL UpdateLoResCell (int x, int y, int xpixel, int ypixel, int offset) { + BYTE val = *(textmainptr+offset); + if ((val != *(vidlastmem+offset+0x400)) || redrawfull) { + CopySource(xpixel,ypixel, + 14,8, + SRCOFFS_LORES+((x & 1) << 1),((val & 0xF) << 4)); + CopySource(xpixel,ypixel+8, + 14,8, + SRCOFFS_LORES+((x & 1) << 1),(val & 0xF0)); + return 1; + } + else + return 0; +} + +//=========================================================================== + +BOOL UpdateDLoResCell (int x, int y, int xpixel, int ypixel, int offset) +{ + BYTE auxval = *(textauxptr +offset); + BYTE mainval = *(textmainptr+offset); + + if ( (auxval != *(vidlastmem+offset)) || + (mainval != *(vidlastmem+offset+0x400)) || + redrawfull + ) + { + CopySource( xpixel,ypixel, + 7,8, + SRCOFFS_LORES+((x & 1) << 1),((auxval & 0xF) << 4)); + + CopySource( xpixel,ypixel+8, + 7,8, + SRCOFFS_LORES+((x & 1) << 1),(auxval & 0xF0)); + + // + + CopySource( xpixel+7,ypixel, + 7,8, + SRCOFFS_LORES+((x & 1) << 1),((mainval & 0xF) << 4)); + + CopySource( xpixel+7,ypixel+8, + 7,8, + SRCOFFS_LORES+((x & 1) << 1),(mainval & 0xF0)); + + return 1; + } + else + { + return 0; + } +} + + +// +// ----- ALL GLOBALLY ACCESSIBLE FUNCTIONS ARE BELOW THIS LINE ----- +// + +//=========================================================================== +BOOL VideoApparentlyDirty () +{ + if (SW_MIXED || redrawfull) + return 1; + + DWORD address = (SW_HIRES && !SW_TEXT) ? (0x20 << displaypage2) : (0x4 << displaypage2); + DWORD length = (SW_HIRES && !SW_TEXT) ? 0x20 : 0x4; + while (length--) + if (*(memdirty+(address++)) & 2) + return 1; + + // + + bool bCharFlashing = false; + + // Scan visible text page for any flashing chars + if((SW_TEXT || SW_MIXED) && (charoffs == 0)) + { + BYTE* pnMemText = MemGetMainPtr(0x400 << displaypage2); + + // Scan 8 long-lines of 120 chars (at 128 char offsets): + // . Skip 8-char holes in TEXT + for(UINT y=0; y<8; y++) + { + for(UINT x=0; x<40*3; x++) + { + BYTE ch = pnMemText[y*128+x]; + if((ch >= 0x40) && (ch <= 0x7F)) + { + bCharFlashing = true; + break; + } + } + } + } + + if(bCharFlashing) + return 1; + + return 0; +} + +//=========================================================================== +void VideoBenchmark () { + Sleep(500); + + // PREPARE TWO DIFFERENT FRAME BUFFERS, EACH OF WHICH HAVE HALF OF THE + // BYTES SET TO 0x14 AND THE OTHER HALF SET TO 0xAA + int loop; + LPDWORD mem32 = (LPDWORD)mem; + for (loop = 4096; loop < 6144; loop++) + *(mem32+loop) = ((loop & 1) ^ ((loop & 0x40) >> 6)) ? 0x14141414 + : 0xAAAAAAAA; + for (loop = 6144; loop < 8192; loop++) + *(mem32+loop) = ((loop & 1) ^ ((loop & 0x40) >> 6)) ? 0xAAAAAAAA + : 0x14141414; + + // SEE HOW MANY TEXT FRAMES PER SECOND WE CAN PRODUCE WITH NOTHING ELSE + // GOING ON, CHANGING HALF OF THE BYTES IN THE VIDEO BUFFER EACH FRAME TO + // SIMULATE THE ACTIVITY OF AN AVERAGE GAME + DWORD totaltextfps = 0; + vidmode = VF_TEXT; + FillMemory(mem+0x400,0x400,0x14); + VideoRedrawScreen(); + DWORD milliseconds = GetTickCount(); + while (GetTickCount() == milliseconds) ; + milliseconds = GetTickCount(); + DWORD cycle = 0; + do { + if (cycle & 1) + FillMemory(mem+0x400,0x400,0x14); + else + CopyMemory(mem+0x400,mem+((cycle & 2) ? 0x4000 : 0x6000),0x400); + VideoRefreshScreen(); + if (cycle++ >= 3) + cycle = 0; + totaltextfps++; + } while (GetTickCount() - milliseconds < 1000); + + // SEE HOW MANY HIRES FRAMES PER SECOND WE CAN PRODUCE WITH NOTHING ELSE + // GOING ON, CHANGING HALF OF THE BYTES IN THE VIDEO BUFFER EACH FRAME TO + // SIMULATE THE ACTIVITY OF AN AVERAGE GAME + DWORD totalhiresfps = 0; + vidmode = VF_HIRES; + FillMemory(mem+0x2000,0x2000,0x14); + VideoRedrawScreen(); + milliseconds = GetTickCount(); + while (GetTickCount() == milliseconds) ; + milliseconds = GetTickCount(); + cycle = 0; + do { + if (cycle & 1) + FillMemory(mem+0x2000,0x2000,0x14); + else + CopyMemory(mem+0x2000,mem+((cycle & 2) ? 0x4000 : 0x6000),0x2000); + VideoRefreshScreen(); + if (cycle++ >= 3) + cycle = 0; + totalhiresfps++; + } while (GetTickCount() - milliseconds < 1000); + + // DETERMINE HOW MANY 65C02 CLOCK CYCLES WE CAN EMULATE PER SECOND WITH + // NOTHING ELSE GOING ON + CpuSetupBenchmark(); + DWORD totalmhz10 = 0; + milliseconds = GetTickCount(); + while (GetTickCount() == milliseconds) ; + milliseconds = GetTickCount(); + cycle = 0; + do { + CpuExecute(100000); + totalmhz10++; + } while (GetTickCount() - milliseconds < 1000); + + // IF THE PROGRAM COUNTER IS NOT IN THE EXPECTED RANGE AT THE END OF THE + // CPU BENCHMARK, REPORT AN ERROR AND OPTIONALLY TRACK IT DOWN + if ((regs.pc < 0x300) || (regs.pc > 0x400)) + if (MessageBox(framewindow, + TEXT("The emulator has detected a problem while running ") + TEXT("the CPU benchmark. Would you like to gather more ") + TEXT("information?"), + TEXT("Benchmarks"), + MB_ICONQUESTION | MB_YESNO | MB_SETFOREGROUND) == IDYES) { + BOOL error = 0; + WORD lastpc = 0x300; + int loop = 0; + while ((loop < 10000) && !error) { + CpuSetupBenchmark(); + CpuExecute(loop); + if ((regs.pc < 0x300) || (regs.pc > 0x400)) + error = 1; + else { + lastpc = regs.pc; + ++loop; + } + } + if (error) { + TCHAR outstr[256]; + wsprintf(outstr, + TEXT("The emulator experienced an error %u clock cycles ") + TEXT("into the CPU benchmark. Prior to the error, the ") + TEXT("program counter was at $%04X. After the error, it ") + TEXT("had jumped to $%04X."), + (unsigned)loop, + (unsigned)lastpc, + (unsigned)regs.pc); + MessageBox(framewindow, + outstr, + TEXT("Benchmarks"), + MB_ICONINFORMATION | MB_SETFOREGROUND); + } + else + MessageBox(framewindow, + TEXT("The emulator was unable to locate the exact ") + TEXT("point of the error. This probably means that ") + TEXT("the problem is external to the emulator, ") + TEXT("happening asynchronously, such as a problem in ") + TEXT("a timer interrupt handler."), + TEXT("Benchmarks"), + MB_ICONINFORMATION | MB_SETFOREGROUND); + } + + // DO A REALISTIC TEST OF HOW MANY FRAMES PER SECOND WE CAN PRODUCE + // WITH FULL EMULATION OF THE CPU, JOYSTICK, AND DISK HAPPENING AT + // THE SAME TIME + DWORD realisticfps = 0; + FillMemory(mem+0x2000,0x2000,0xAA); + VideoRedrawScreen(); + milliseconds = GetTickCount(); + while (GetTickCount() == milliseconds) ; + milliseconds = GetTickCount(); + cycle = 0; + do { + if (realisticfps < 10) { + int cycles = 100000; + while (cycles > 0) { + DWORD executedcycles = CpuExecute(103); + cycles -= executedcycles; + DiskUpdatePosition(executedcycles); + JoyUpdatePosition(); + VideoUpdateVbl(0); + } + } + if (cycle & 1) + FillMemory(mem+0x2000,0x2000,0xAA); + else + CopyMemory(mem+0x2000,mem+((cycle & 2) ? 0x4000 : 0x6000),0x2000); + VideoRefreshScreen(); + if (cycle++ >= 3) + cycle = 0; + realisticfps++; + } while (GetTickCount() - milliseconds < 1000); + + // DISPLAY THE RESULTS + VideoDisplayLogo(); + TCHAR outstr[256]; + wsprintf(outstr, + TEXT("Pure Video FPS:\t%u hires, %u text\n") + TEXT("Pure CPU MHz:\t%u.%u%s\n\n") + TEXT("EXPECTED AVERAGE VIDEO GAME\n") + TEXT("PERFORMANCE: %u FPS"), + (unsigned)totalhiresfps, + (unsigned)totaltextfps, + (unsigned)(totalmhz10/10), + (unsigned)(totalmhz10 % 10), + (LPCTSTR)(apple2e ? TEXT("") : TEXT(" (6502)")), + (unsigned)realisticfps); + MessageBox(framewindow, + outstr, + TEXT("Benchmarks"), + MB_ICONINFORMATION | MB_SETFOREGROUND); +} + +//=========================================================================== +BYTE __stdcall VideoCheckMode (WORD, BYTE address, BYTE, BYTE, ULONG) { + if (address == 0x7F) + return MemReturnRandomData(SW_DHIRES != 0); + else { + BOOL result = 0; + switch (address) { + case 0x1A: result = SW_TEXT; break; + case 0x1B: result = SW_MIXED; break; + case 0x1D: result = SW_HIRES; break; + case 0x1E: result = charoffs; break; + case 0x1F: result = SW_80COL; break; + case 0x7F: result = SW_DHIRES; break; + } + return KeybGetKeycode() | (result ? 0x80 : 0); + } +} + +//=========================================================================== +void VideoCheckPage (BOOL force) { + if ((displaypage2 != (SW_PAGE2 != 0)) && + (force || (emulmsec-lastpageflip > 500))) { + displaypage2 = (SW_PAGE2 != 0); + VideoRefreshScreen(); + hasrefreshed = 1; + lastpageflip = emulmsec; + } +} + +//=========================================================================== +BYTE __stdcall VideoCheckVbl (WORD, BYTE, BYTE, BYTE, ULONG) +{ + return MemReturnRandomData(dwVBlCounter <= nVBlStop_NTSC); +} + +//=========================================================================== +void VideoChooseColor () { + CHOOSECOLOR cc; + ZeroMemory(&cc,sizeof(CHOOSECOLOR)); + cc.lStructSize = sizeof(CHOOSECOLOR); + cc.hwndOwner = framewindow; + cc.rgbResult = monochrome; + cc.lpCustColors = customcolors; + cc.Flags = CC_RGBINIT | CC_SOLIDCOLOR; + if (ChooseColor(&cc)) { + monochrome = cc.rgbResult; + VideoReinitialize(); + if ((mode != MODE_LOGO) && (mode != MODE_DEBUG)) + VideoRedrawScreen(); + RegSaveValue(TEXT("Configuration"),TEXT("Monochrome Color"),1,monochrome); + } +} + +//=========================================================================== +void VideoDestroy () { + + // DESTROY BUFFERS + VirtualFree(framebufferinfo,0,MEM_RELEASE); + VirtualFree(sourceinfo ,0,MEM_RELEASE); + VirtualFree(vidlastmem ,0,MEM_RELEASE); + framebufferinfo = NULL; + sourceinfo = NULL; + vidlastmem = NULL; + + // DESTROY FRAME BUFFER + DeleteDC(devicedc); + DeleteObject(devicebitmap); + devicedc = (HDC)0; + devicebitmap = (HBITMAP)0; + + // DESTROY SOURCE IMAGE + DeleteObject(sourcebitmap); + sourcebitmap = (HBITMAP)0; + + // DESTROY LOGO + if (logobitmap) { + DeleteObject(logobitmap); + logobitmap = (HBITMAP)0; + } + + // DESTROY PALETTE + if (palette) { + DeleteObject(palette); + palette = (HPALETTE)0; + } +} + +//=========================================================================== +void VideoDisplayLogo () { + HDC framedc = FrameGetDC(); + + // DRAW THE LOGO + HBRUSH brush = CreateSolidBrush(PALETTERGB(0x70,0x30,0xE0)); + if (logobitmap) { + HDC memdc = CreateCompatibleDC(framedc); + SelectObject(memdc,logobitmap); + BitBlt(framedc,0,0,560,384,memdc,0,0,SRCCOPY); + DeleteDC(memdc); + } + else { + SelectObject(framedc,brush); + SelectObject(framedc,GetStockObject(NULL_PEN)); + Rectangle(framedc,0,0,560+1,384+1); + } + + // DRAW THE VERSION NUMBER + HFONT font = CreateFont(-20,0,0,0,FW_NORMAL,0,0,0,ANSI_CHARSET, + OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, + VARIABLE_PITCH | 4 | FF_SWISS, + TEXT("Arial")); + SelectObject(framedc,font); + SetTextAlign(framedc,TA_RIGHT | TA_TOP); + SetBkMode(framedc,TRANSPARENT); + +#define VERSION_TXT "Version " + char* szVersion = new char[strlen(VERSION_TXT) + strlen(VERSIONSTRING) + 1]; + strcpy(&szVersion[0], VERSION_TXT); + strcpy(&szVersion[strlen(VERSION_TXT)], VERSIONSTRING); + szVersion[strlen(szVersion)] = 0x00; + +#define DRAWVERSION(x,y,c) SetTextColor(framedc,c); \ + TextOut(framedc, \ + 540+x,358+y, \ + szVersion, \ + strlen(szVersion)); + + if (GetDeviceCaps(framedc,PLANES) * GetDeviceCaps(framedc,BITSPIXEL) <= 4) { + DRAWVERSION( 2, 2,RGB(0x00,0x00,0x00)); + DRAWVERSION( 1, 1,RGB(0x00,0x00,0x00)); + DRAWVERSION( 0, 0,RGB(0xFF,0x00,0xFF)); + } + else { + DRAWVERSION( 1, 1,PALETTERGB(0x30,0x30,0x70)); + DRAWVERSION(-1,-1,PALETTERGB(0xC0,0x70,0xE0)); + DRAWVERSION( 0, 0,PALETTERGB(0x70,0x30,0xE0)); + } + + delete [] szVersion; +#undef DRAWVERSION + + FrameReleaseDC(); + DeleteObject(brush); + DeleteObject(font); +} + +//=========================================================================== +BOOL VideoHasRefreshed () { + BOOL result = hasrefreshed; + hasrefreshed = 0; + return result; +} + +//=========================================================================== +void VideoInitialize () { + + // CREATE A BUFFER FOR AN IMAGE OF THE LAST DRAWN MEMORY + vidlastmem = (LPBYTE)VirtualAlloc(NULL,0x10000,MEM_COMMIT,PAGE_READWRITE); + ZeroMemory(vidlastmem,0x10000); + + // LOAD THE LOGO + logobitmap = (HBITMAP)LoadImage(instance, MAKEINTRESOURCE(IDB_APPLEWIN), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); + + // CREATE A BITMAPINFO STRUCTURE FOR THE FRAME BUFFER + framebufferinfo = (LPBITMAPINFO)VirtualAlloc(NULL, + sizeof(BITMAPINFOHEADER) + +256*sizeof(RGBQUAD), + MEM_COMMIT, + PAGE_READWRITE); + ZeroMemory(framebufferinfo,sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)); + framebufferinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + framebufferinfo->bmiHeader.biWidth = 560; + framebufferinfo->bmiHeader.biHeight = 384; + framebufferinfo->bmiHeader.biPlanes = 1; + framebufferinfo->bmiHeader.biBitCount = 8; + framebufferinfo->bmiHeader.biClrUsed = 256; + + // CREATE A BITMAPINFO STRUCTURE FOR THE SOURCE IMAGE + sourceinfo = (LPBITMAPINFO)VirtualAlloc(NULL, + sizeof(BITMAPINFOHEADER) + +256*sizeof(RGBQUAD), + MEM_COMMIT, + PAGE_READWRITE); + ZeroMemory(sourceinfo,sizeof(BITMAPINFOHEADER)); + sourceinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + sourceinfo->bmiHeader.biWidth = SRCOFFS_TOTAL; + sourceinfo->bmiHeader.biHeight = 512; + sourceinfo->bmiHeader.biPlanes = 1; + sourceinfo->bmiHeader.biBitCount = 8; + sourceinfo->bmiHeader.biClrUsed = 256; + + // CREATE AN IDENTITY PALETTE AND FILL IN THE CORRESPONDING COLORS IN + // THE BITMAPINFO STRUCTURE + CreateIdentityPalette(); + + // PREFILL THE 16 CUSTOM COLORS AND MAKE SURE TO INCLUDE THE CURRENT MONOCHROME COLOR + for (int index = DARK_RED; index <= MONOCHROME; index++) + customcolors[index-DARK_RED] = RGB(framebufferinfo->bmiColors[index].rgbRed, + framebufferinfo->bmiColors[index].rgbGreen, + framebufferinfo->bmiColors[index].rgbBlue); + + // CREATE THE FRAME BUFFER DIB SECTION AND DEVICE CONTEXT, + // CREATE THE SOURCE IMAGE DIB SECTION AND DRAW INTO THE SOURCE BIT BUFFER + CreateDIBSections(); + + // RESET THE VIDEO MODE SWITCHES AND THE CHARACTER SET OFFSET + VideoResetState(); +} + +//=========================================================================== +void VideoRealizePalette (HDC dc) { + if (palette) { + SelectPalette(dc,palette,0); + RealizePalette(dc); + } +} + +//=========================================================================== +void VideoRedrawScreen () { + redrawfull = 1; + VideoRefreshScreen(); +} + +//=========================================================================== +void VideoRefreshScreen () { + LPBYTE addr = framebufferbits; + LONG pitch = 560; + HDC framedc = FrameGetVideoDC(&addr,&pitch); + CreateFrameOffsetTable(addr,pitch); + + // CHECK EACH CELL FOR CHANGED BYTES. REDRAW PIXELS FOR THE CHANGED BYTES + // IN THE FRAME BUFFER. MARK CELLS IN WHICH REDRAWING HAS TAKEN PLACE AS + // DIRTY. + hiresauxptr = MemGetAuxPtr (0x2000 << displaypage2); + hiresmainptr = MemGetMainPtr(0x2000 << displaypage2); + textauxptr = MemGetAuxPtr (0x400 << displaypage2); + textmainptr = MemGetMainPtr(0x400 << displaypage2); + ZeroMemory(celldirty,40*32); + updatetype update = SW_TEXT ? SW_80COL ? Update80ColCell + : Update40ColCell + : SW_HIRES ? (SW_DHIRES && SW_80COL) ? UpdateDHiResCell + : UpdateHiResCell + : (SW_DHIRES && SW_80COL) ? UpdateDLoResCell + : UpdateLoResCell; + BOOL anydirty = 0; + int y = 0; + int ypixel = 0; + while (y < 20) { + int offset = ((y & 7) << 7) + ((y >> 3) * 40); + int x = 0; + int xpixel = 0; + while (x < 40) { + anydirty |= celldirty[x][y] = update(x,y,xpixel,ypixel,offset+x); + ++x; + xpixel += 14; + } + ++y; + ypixel += 16; + } + + if (SW_MIXED) + update = SW_80COL ? Update80ColCell + : Update40ColCell; + + while (y < 24) { + int offset = ((y & 7) << 7) + ((y >> 3) * 40); + int x = 0; + int xpixel = 0; + while (x < 40) { + anydirty |= celldirty[x][y] = update(x,y,xpixel,ypixel,offset+x); + ++x; + xpixel += 14; + } + ++y; + ypixel += 16; + } + + // Clear this flag after TEXT screen has been updated + g_bTextFlashFlag = false; + +#if 0 + // New simpified code: + // . Oliver Schmidt gets a flickering mouse cursor with this code + if (framedc && anydirty) + { + BitBlt(framedc,0,0,560,384,devicedc,0,0,SRCCOPY); + GdiFlush(); + } +#else + // Original code: + if (!framedc || !anydirty) + { + FrameReleaseVideoDC(); + SetLastDrawnImage(); + redrawfull = 0; + return; + } + + // COPY DIRTY CELLS FROM THE DEVICE DEPENDENT BITMAP ONTO THE SCREEN + // IN LONG HORIZONTAL RECTANGLES + BOOL remainingdirty = 0; + y = 0; + ypixel = 0; + while (y < 24) { + int start = -1; + int startx = 0; + int x = 0; + int xpixel = 0; + while (x < 40) { + if ((x == 39) && celldirty[x][y]) + if (start >= 0) { + xpixel += 14; + celldirty[x][y] = 0; + } + else + remainingdirty = 1; + if ((start >= 0) && !celldirty[x][y]) { + if ((x - startx > 1) || ((x == 39) && (xpixel == 560))) { + int height = 1; + while ((y+height < 24) + && celldirty[startx][y+height] + && celldirty[x-1][y+height] + && celldirty[(startx+x-1) >> 1][y+height]) + height++; + BitBlt(framedc,start,ypixel,xpixel-start,height << 4, + devicedc,start,ypixel,SRCCOPY); + while (height--) { + int loop = startx; + while (loop < x+(xpixel == 560)) + celldirty[loop++][y+height] = 0; + } + start = -1; + } + else + remainingdirty = 1; + start = -1; + } + else if ((start == -1) && celldirty[x][y] && (x < 39)) { + start = xpixel; + startx = x; + } + x++; + xpixel += 14; + } + y++; + ypixel += 16; + } + + // COPY ANY REMAINING DIRTY CELLS FROM THE DEVICE DEPENDENT BITMAP + // ONTO THE SCREEN IN VERTICAL RECTANGLES + if (remainingdirty) { + int x = 0; + int xpixel = 0; + while (x < 40) { + int start = -1; + int y = 0; + int ypixel = 0; + while (y < 24) { + if ((y == 23) && celldirty[x][y]) { + if (start == -1) + start = ypixel; + ypixel += 16; + celldirty[x][y] = 0; + } + if ((start >= 0) && !celldirty[x][y]) { + BitBlt(framedc,xpixel,start,14,ypixel-start, + devicedc,xpixel,start,SRCCOPY); + start = -1; + } + else if ((start == -1) && celldirty[x][y]) + start = ypixel; + y++; + ypixel += 16; + } + x++; + xpixel += 14; + } + } + + GdiFlush(); +#endif + + FrameReleaseVideoDC(); + SetLastDrawnImage(); + redrawfull = 0; +} + +//=========================================================================== +void VideoReinitialize () { + CreateIdentityPalette(); + CreateDIBSections(); +} + +//=========================================================================== +void VideoResetState () { + charoffs = 0; + displaypage2 = 0; + vidmode = VF_TEXT; + redrawfull = 1; +} + +//=========================================================================== +BYTE __stdcall VideoSetMode (WORD, BYTE address, BYTE write, BYTE, ULONG) { + DWORD oldpage2 = SW_PAGE2; + int oldvalue = charoffs+(int)(vidmode & ~(VF_MASK2 | VF_PAGE2)); + switch (address) { + case 0x00: vidmode &= ~VF_MASK2; break; + case 0x01: vidmode |= VF_MASK2; break; + case 0x0C: vidmode &= ~VF_80COL; break; + case 0x0D: vidmode |= VF_80COL; break; + case 0x0E: charoffs = 0; break; // Alternate char set off + case 0x0F: charoffs = 256; break; // Alternate char set on + case 0x50: vidmode &= ~VF_TEXT; break; + case 0x51: vidmode |= VF_TEXT; break; + case 0x52: vidmode &= ~VF_MIXED; break; + case 0x53: vidmode |= VF_MIXED; break; + case 0x54: vidmode &= ~VF_PAGE2; break; + case 0x55: vidmode |= VF_PAGE2; break; + case 0x56: vidmode &= ~VF_HIRES; break; + case 0x57: vidmode |= VF_HIRES; break; + case 0x5E: vidmode |= VF_DHIRES; break; + case 0x5F: vidmode &= ~VF_DHIRES; break; + } + if (SW_MASK2) + vidmode &= ~VF_PAGE2; + if (oldvalue != charoffs+(int)(vidmode & ~(VF_MASK2 | VF_PAGE2))) { + graphicsmode = !SW_TEXT; + redrawfull = 1; + } + if (g_bFullSpeed && oldpage2 && !SW_PAGE2) { + static DWORD lasttime = 0; + DWORD currtime = GetTickCount(); + if (currtime-lasttime >= 20) + lasttime = currtime; + else + oldpage2 = SW_PAGE2; + } + if (oldpage2 != SW_PAGE2) { + static DWORD lastrefresh = 0; + BOOL fastvideoslowcpu = 0; + if ((cpuemtype == CPU_FASTPAGING) && (emulmsec-lastrefresh >= 20)) + fastvideoslowcpu = 1; + if ((displaypage2 && !SW_PAGE2) || (!behind) || fastvideoslowcpu) { + displaypage2 = (SW_PAGE2 != 0); + if (!redrawfull) { + VideoRefreshScreen(); + hasrefreshed = 1; + lastrefresh = emulmsec; + } + } + else if ((!SW_PAGE2) && (!redrawfull) && (emulmsec-lastrefresh >= 20)) { + displaypage2 = 0; + VideoRefreshScreen(); + hasrefreshed = 1; + lastrefresh = emulmsec; + } + lastpageflip = emulmsec; + } + if (address == 0x50) + return VideoCheckVbl(0,0,0,0,0); + else + return MemReturnRandomData(1); +} + +//=========================================================================== + +void VideoUpdateVbl (DWORD dwCyclesThisFrame) +{ + dwVBlCounter = (DWORD) ((double)dwCyclesThisFrame / (double)uCyclesPerLine); +} + +//=========================================================================== + +// Called at 60Hz (every 16.666ms) +void VideoUpdateFlash() +{ + static UINT nTextFlashCnt = 0; + + nTextFlashCnt++; + + if(nTextFlashCnt == 60/4) // Flash rate = 4Hz (every 250ms) + { + nTextFlashCnt = 0; + g_bTextFlashState = !g_bTextFlashState; + + // Redraw any FLASHing chars if any text showing. NB. No FLASH mode for 80 cols + if((SW_TEXT || SW_MIXED) && !SW_80COL) + g_bTextFlashFlag = true; + } +} + +//=========================================================================== + +bool VideoGetSW80COL() +{ + return SW_80COL ? true : false; +} + +//=========================================================================== + +DWORD VideoGetSnapshot(SS_IO_Video* pSS) +{ + pSS->bAltCharSet = !(charoffs == 0); + pSS->dwVidMode = vidmode; + return 0; +} + +DWORD VideoSetSnapshot(SS_IO_Video* pSS) +{ + charoffs = !pSS->bAltCharSet ? 0 : 256; + vidmode = pSS->dwVidMode; + + // + + graphicsmode = !SW_TEXT; + displaypage2 = (SW_PAGE2 != 0); + + return 0; +} diff --git a/AppleWin/source/Video.h b/AppleWin/source/Video.h new file mode 100644 index 00000000..3037cac4 --- /dev/null +++ b/AppleWin/source/Video.h @@ -0,0 +1,32 @@ +#pragma once + +enum VIDEOTYPE {VT_MONO=0, VT_COLOR_STANDARD, VT_COLOR_TEXT_OPTIMIZED, VT_COLOR_TVEMU, VT_NUM_MODES}; + +extern BOOL graphicsmode; +extern COLORREF monochrome; +extern DWORD videotype; + +void CreateColorMixMap(); + +BOOL VideoApparentlyDirty (); +void VideoBenchmark (); +void VideoCheckPage (BOOL); +void VideoChooseColor (); +void VideoDestroy (); +void VideoDisplayLogo (); +BOOL VideoHasRefreshed (); +void VideoInitialize (); +void VideoRealizePalette (HDC); +void VideoRedrawScreen (); +void VideoRefreshScreen (); +void VideoReinitialize (); +void VideoResetState (); +void VideoUpdateVbl (DWORD dwCyclesThisFrame); +void VideoUpdateFlash(); +bool VideoGetSW80COL(); +DWORD VideoGetSnapshot(SS_IO_Video* pSS); +DWORD VideoSetSnapshot(SS_IO_Video* pSS); + +BYTE __stdcall VideoCheckMode (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall VideoCheckVbl (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft); +BYTE __stdcall VideoSetMode (WORD pc, BYTE addr, BYTE bWrite, BYTE d, ULONG nCyclesLeft);