]> git.saurik.com Git - apple/bootx.git/commitdiff
BootX-34.tar.gz mac-os-x-100 mac-os-x-1004 v34
authorApple <opensource@apple.com>
Tue, 10 Apr 2001 00:01:51 +0000 (00:01 +0000)
committerApple <opensource@apple.com>
Tue, 10 Apr 2001 00:01:51 +0000 (00:01 +0000)
88 files changed:
Makefile [new file with mode: 0644]
Makefile.postamble [new file with mode: 0644]
Makefile.preamble [new file with mode: 0644]
PB.project [new file with mode: 0644]
bootx.tproj/Makefile [new file with mode: 0644]
bootx.tproj/Makefile.postamble [new file with mode: 0644]
bootx.tproj/Makefile.preamble [new file with mode: 0644]
bootx.tproj/PB.project [new file with mode: 0644]
bootx.tproj/bootinfo.hdr [new file with mode: 0644]
bootx.tproj/ci.subproj/Control2.c [new file with mode: 0644]
bootx.tproj/ci.subproj/MAC-PARTS.c [new file with mode: 0644]
bootx.tproj/ci.subproj/Makefile [new file with mode: 0644]
bootx.tproj/ci.subproj/Makefile.postamble [new file with mode: 0644]
bootx.tproj/ci.subproj/Makefile.preamble [new file with mode: 0644]
bootx.tproj/ci.subproj/PB.project [new file with mode: 0644]
bootx.tproj/ci.subproj/ci.c [new file with mode: 0644]
bootx.tproj/ci.subproj/ci_io.c [new file with mode: 0644]
bootx.tproj/ci.subproj/sl_words.c [new file with mode: 0644]
bootx.tproj/fs.subproj/CaseTables.h [new file with mode: 0644]
bootx.tproj/fs.subproj/HFSCompare.c [new file with mode: 0644]
bootx.tproj/fs.subproj/Makefile [new file with mode: 0644]
bootx.tproj/fs.subproj/Makefile.postamble [new file with mode: 0644]
bootx.tproj/fs.subproj/Makefile.preamble [new file with mode: 0644]
bootx.tproj/fs.subproj/PB.project [new file with mode: 0644]
bootx.tproj/fs.subproj/cache.c [new file with mode: 0644]
bootx.tproj/fs.subproj/ext2fs.c [new file with mode: 0644]
bootx.tproj/fs.subproj/ext2fs.h [new file with mode: 0644]
bootx.tproj/fs.subproj/ext2fs_bswap.c [new file with mode: 0644]
bootx.tproj/fs.subproj/ext2fs_dinode.h [new file with mode: 0644]
bootx.tproj/fs.subproj/ext2fs_dir.h [new file with mode: 0644]
bootx.tproj/fs.subproj/fs.c [new file with mode: 0644]
bootx.tproj/fs.subproj/hfs.c [new file with mode: 0644]
bootx.tproj/fs.subproj/net.c [new file with mode: 0644]
bootx.tproj/fs.subproj/ufs.c [new file with mode: 0644]
bootx.tproj/fs.subproj/ufs_byteorder.c [new file with mode: 0644]
bootx.tproj/fs.subproj/ufs_byteorder.h [new file with mode: 0644]
bootx.tproj/include.subproj/Makefile [new file with mode: 0644]
bootx.tproj/include.subproj/Makefile.postamble [new file with mode: 0644]
bootx.tproj/include.subproj/Makefile.preamble [new file with mode: 0644]
bootx.tproj/include.subproj/PB.project [new file with mode: 0644]
bootx.tproj/include.subproj/boot_args.h [new file with mode: 0644]
bootx.tproj/include.subproj/ci.h [new file with mode: 0644]
bootx.tproj/include.subproj/device_tree.h [new file with mode: 0644]
bootx.tproj/include.subproj/fs.h [new file with mode: 0644]
bootx.tproj/include.subproj/libclite.h [new file with mode: 0644]
bootx.tproj/include.subproj/sl.h [new file with mode: 0644]
bootx.tproj/include.subproj/sl_words.h [new file with mode: 0644]
bootx.tproj/libclite.subproj/Makefile [new file with mode: 0644]
bootx.tproj/libclite.subproj/Makefile.postamble [new file with mode: 0644]
bootx.tproj/libclite.subproj/Makefile.preamble [new file with mode: 0644]
bootx.tproj/libclite.subproj/PB.project [new file with mode: 0644]
bootx.tproj/libclite.subproj/bsearch.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/bswap.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/mem.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/prf.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/printf.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/sprintf.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/string.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/strtol.c [new file with mode: 0644]
bootx.tproj/libclite.subproj/zalloc.c [new file with mode: 0644]
bootx.tproj/sl.subproj/GetSymbolFromPEF.h [new file with mode: 0644]
bootx.tproj/sl.subproj/Makefile [new file with mode: 0644]
bootx.tproj/sl.subproj/Makefile.postamble [new file with mode: 0644]
bootx.tproj/sl.subproj/Makefile.preamble [new file with mode: 0644]
bootx.tproj/sl.subproj/PB.project [new file with mode: 0644]
bootx.tproj/sl.subproj/PEFSupport.c [new file with mode: 0644]
bootx.tproj/sl.subproj/bad_system.h [new file with mode: 0644]
bootx.tproj/sl.subproj/clut.h [new file with mode: 0644]
bootx.tproj/sl.subproj/device_tree.c [new file with mode: 0644]
bootx.tproj/sl.subproj/display.c [new file with mode: 0644]
bootx.tproj/sl.subproj/drivers.c [new file with mode: 0644]
bootx.tproj/sl.subproj/elf.c [new file with mode: 0644]
bootx.tproj/sl.subproj/elf.h [new file with mode: 0644]
bootx.tproj/sl.subproj/happy_foot.h [new file with mode: 0644]
bootx.tproj/sl.subproj/happy_mac.h [new file with mode: 0644]
bootx.tproj/sl.subproj/images.h [new file with mode: 0644]
bootx.tproj/sl.subproj/macho.c [new file with mode: 0644]
bootx.tproj/sl.subproj/main.c [new file with mode: 0644]
fcode-to-c.tproj/Makefile [new file with mode: 0644]
fcode-to-c.tproj/Makefile.postamble [new file with mode: 0644]
fcode-to-c.tproj/Makefile.preamble [new file with mode: 0644]
fcode-to-c.tproj/PB.project [new file with mode: 0644]
fcode-to-c.tproj/fcode-to-c.c [new file with mode: 0644]
macho-to-xcoff.tproj/Makefile [new file with mode: 0644]
macho-to-xcoff.tproj/Makefile.postamble [new file with mode: 0644]
macho-to-xcoff.tproj/Makefile.preamble [new file with mode: 0644]
macho-to-xcoff.tproj/PB.project [new file with mode: 0644]
macho-to-xcoff.tproj/macho-to-xcoff.c [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..9be0273
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,45 @@
+#
+# Generated by the NeXT Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = BootX
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Aggregate
+
+TOOLS = macho-to-xcoff.tproj fcode-to-c.tproj bootx.tproj
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = aggregate.make
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/Makefile.postamble b/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/Makefile.preamble b/Makefile.preamble
new file mode 100644 (file)
index 0000000..11f5837
--- /dev/null
@@ -0,0 +1,142 @@
+INCLUDED_ARCHS = ppc
+OTHER_RECURSIVE_VARIABLES += INCLUDED_ARCHS
+
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/PB.project b/PB.project
new file mode 100644 (file)
index 0000000..8d52710
--- /dev/null
@@ -0,0 +1,30 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        BUNDLES = (); 
+        CLASSES = (); 
+        C_FILES = (); 
+        FRAMEWORKSEARCH = (); 
+        HEADERSEARCH = (); 
+        H_FILES = (); 
+        M_FILES = (); 
+        OTHER_LINKED = (); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+        SUBPROJECTS = ("macho-to-xcoff.tproj", "fcode-to-c.tproj", bootx.tproj); 
+        TOOLS = (); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = BootX; 
+    PROJECTTYPE = Aggregate; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/Makefile b/bootx.tproj/Makefile
new file mode 100644 (file)
index 0000000..597db30
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# Generated by the NeXT Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = bootx
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Tool
+
+SUBPROJECTS = include.subproj sl.subproj ci.subproj fs.subproj\
+              libclite.subproj
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble bootinfo.hdr
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = tool.make
+NEXTSTEP_INSTALLDIR = /bin
+WINDOWS_INSTALLDIR = /Library/Executables
+PDO_UNIX_INSTALLDIR = /bin
+LIBS = -lcc_kext
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+HEADER_PATHS = -I$(SRCROOT)/bootx.tproj/include.subproj
+NEXTSTEP_PB_CFLAGS = -static
+NEXTSTEP_PB_LDFLAGS = -nostdlib -e _StartTVector -seg1addr 01C00000
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/bootx.tproj/Makefile.postamble b/bootx.tproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..2c133fe
--- /dev/null
@@ -0,0 +1,122 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+WARNING_CFLAGS = -Wmost -Wno-format
+OPTIMIZE_BUILD_CFLAGS = -O0
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
+
+bootx_before:
+       $(RM) -f $(SYMROOT)/bootx
+       $(RM) -f $(SYMROOT)/bootx.bootinfo
+       $(RM) -f $(SYMROOT)/bootx.xcoff
+       $(RM) -f $(SYMROOT)/bootx.macho
+
+bootx_after:
+       $(CP) $(SYMROOT)/bootx $(SYMROOT)/bootx.macho
+       $(SYMROOT)/macho-to-xcoff $(SYMROOT)/bootx.macho $(SYMROOT)/bootx.xcoff
+       $(CP) $(SRCROOT)/bootx.tproj/bootinfo.hdr $(SYMROOT)/bootx.bootinfo
+       $(CAT) $(SYMROOT)/bootx.xcoff >> $(SYMROOT)/bootx.bootinfo
+
+bootx_after_install:
+       $(RM) -f $(DSTROOT)/bin/bootx
+       $(RM) -f $(DSTROOT)/bin/macho-to-xcoff
+       $(RM) -f $(DSTROOT)/bin/fcode-to-c
+       install -d -m 555 $(DSTROOT)/usr/standalone/ppc
+       install -c -m 444 $(SYMROOT)/bootx.bootinfo $(DSTROOT)/usr/standalone/ppc/bootx.bootinfo
+       install -c -m 444 $(SYMROOT)/bootx.xcoff $(DSTROOT)/usr/standalone/ppc/bootx.xcoff
diff --git a/bootx.tproj/Makefile.preamble b/bootx.tproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..ca750ab
--- /dev/null
@@ -0,0 +1,150 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+ifeq "teflon" "$(RC_OS)"
+       OTHER_CFLAGS=-DkMacOSXServer=1
+else
+       OTHER_CFLAGS=-DkMacOSXServer=0
+endif
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+BEFORE_BUILD = bootx_before
+AFTER_BUILD = bootx_after
+AFTER_INSTALL = bootx_after_install
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+OTHER_RECURSIVE_VARIABLES = WARNING_CFLAGS OPTIMIZE_BUILD_CFLAGS
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/bootx.tproj/PB.project b/bootx.tproj/PB.project
new file mode 100644 (file)
index 0000000..d1eeb5f
--- /dev/null
@@ -0,0 +1,37 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        BUNDLES = (); 
+        CLASSES = (); 
+        C_FILES = (); 
+        FRAMEWORKS = (); 
+        FRAMEWORKSEARCH = (); 
+        HEADERSEARCH = ("$(SRCROOT)/bootx.tproj/include.subproj"); 
+        H_FILES = (); 
+        M_FILES = (); 
+        OTHER_LIBS = (cc_kext); 
+        OTHER_LINKED = (); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, bootinfo.hdr); 
+        SUBPROJECTS = (include.subproj, sl.subproj, ci.subproj, fs.subproj, libclite.subproj); 
+        TOOLS = (); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_COMPILEROPTIONS = "-static"; 
+    NEXTSTEP_INSTALLDIR = /bin; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_LINKEROPTIONS = "-nostdlib -e _StartTVector -seg1addr 01C00000"; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_INSTALLDIR = /bin; 
+    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = bootx; 
+    PROJECTTYPE = Tool; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_INSTALLDIR = /Library/Executables; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/bootinfo.hdr b/bootx.tproj/bootinfo.hdr
new file mode 100644 (file)
index 0000000..ce94a7a
--- /dev/null
@@ -0,0 +1,81 @@
+<CHRP-BOOT>
+<COMPATIBLE>
+MacRISC
+</COMPATIBLE>
+<DESCRIPTION>
+Boot Loader for Mac OS X.
+</DESCRIPTION>
+<OS-BADGE-ICONS>
+1010
+00000000000000000000000000000000
+000000000000000000000000F8000000
+000000002B73732B0055735500F80000
+00000000F5799DF6004F792B0000F800
+0000000000F69D4E004F2B000000F800
+000000000000559D2A55F500000000F8
+000000000000F69D732B0000000000F8
+000000000000004F96F50000000000F8
+00000000000000799D4E0000000000F8
+0000000000002AF8559D0000000000F8
+00000000000079F6F59D4E00000000F8
+00000000004E4F00005573000000F800
+000000004F9D55F5004F9D4FF500F800
+0000F800557A56F50055567A2BF80000
+000000F8F8000000000000F8F8000000
+0000000000F8F8F8F8F8F80000000000
+
+0000000000F7F7F7F7F7F70000000000
+000000F7F7F7F7F7F7F7F7F781000000
+0000F7F7F99E9EF9F7809E80F7810000
+00F7F7F7F8A4C856F77AA4F9F7F78100
+00F7F7F7F756C879F77AF9F7F7F78100
+F7F7F7F7F7F780C85580F8F7F7F7F781
+F7F7F7F7F7F756C89EF9F7F7F7F7F781
+F7F7F7F7F7F7F77AC1F8F7F7F7F7F781
+F7F7F7F7F7F7F7A4C879F7F7F7F7F781
+F7F7F7F7F7F7558180C8F7F7F7F7F781
+F7F7F7F7F7F7A456F8C879F7F7F7F781
+00F7F7F7F7797AF7F7809EF7F7F78100
+00F7F7F77AC880F8F77AC87AF8F78100
+000081F780A5FBF8F780FBA5F9810000
+0000008181F7F7F7F7F7F78181000000
+00000000008181818181810000000000
+
+0000000000FFFFFFFFFFFF0000000000
+000000FFFFFFFFFFFFFFFFFFFF000000
+0000FFFFFFFFFFFFFFFFFFFFFFFF0000
+00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00
+0000FFFFFFFFFFFFFFFFFFFFFFFF0000
+000000FFFFFFFFFFFFFFFFFFFF000000
+0000000000FFFFFFFFFFFF0000000000
+</OS-BADGE-ICONS>
+<BOOT-SCRIPT>
+load-base
+begin
+ dup 6 " &lt;/CHRP" $= if
+  6 + dup 6 " -BOOT&gt;" $= if
+   8 + true
+  else
+   false
+  then
+ else
+  1+ false
+ then
+until
+( xcoff-base )
+load-size over load-base - -
+( xcoff-base xcoff-size )
+load-base swap move
+init-program go
+</BOOT-SCRIPT>
+</CHRP-BOOT>
+\ 4
\ No newline at end of file
diff --git a/bootx.tproj/ci.subproj/Control2.c b/bootx.tproj/ci.subproj/Control2.c
new file mode 100644 (file)
index 0000000..2a684e2
--- /dev/null
@@ -0,0 +1,527 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  Control2.c - OF replacement driver for Control.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+const char *gControl2Source[] = {
+       "\" /chaos/control\" find-device "
+       "-1 value bankB? "
+       "-1 value REGS "
+       "-1 value FB-ADDRESS "
+       "-1 value phys-regs "
+       "-1 value phys-fb-address "
+       "0 value mono-mode? "
+       "0 value width "
+       "0 value height "
+       "0 value sense-code "
+       "0 value ext-sense "
+       "h# F301B000 constant RADACAL "
+       "h# F301B000 constant RADACAL-base "
+       "variable RGB-temp "
+       "struct "
+       "( 000 )        d# 16   field   >C.CUR-LINE "
+       "( 010 )        d# 16   field   >C.VFPEQ "
+       "( 020 )        d# 16   field   >C.VFP "
+       "( 030 )        d# 16   field   >C.VAL "
+       "( 040 )        d# 16   field   >C.VBP "
+       "( 050 )        d# 16   field   >C.VBPEQ "
+       "( 060 )        d# 16   field   >C.VSYNC "
+       "( 070 )        d# 16   field   >C.VHLINE "
+       "( 080 )        d# 16   field   >C.PIPED "
+       "( 090 )        d# 16   field   >C.HPIX "
+       "( 0A0 )        d# 16   field   >C.HFP "
+       "( 0B0 )        d# 16   field   >C.HAL "
+       "( 0C0 )        d# 16   field   >C.HBWAY "
+       "( 0D0 )        d# 16   field   >C.HSP "
+       "( 0E0 )        d# 16   field   >C.HEQ "
+       "( 0F0 )        d# 16   field   >C.HLFLN "
+       "( 100 )        d# 16   field   >C.HSERR "
+       "( 110 )        d# 16   field   >C.CNTTST "
+       "( 120 )        d# 16   field   >C.TEST "
+       "( 130 )        d# 16   field   >C.GBASE "
+       "( 140 )        d# 16   field   >C.ROW-WORDS "
+       "( 150 )        d# 16   field   >C.MON-SENSE "
+       "( 160 )        d# 16   field   >C.ENABLE "
+       "( 170 )        d# 16   field   >C.GSC-DIVIDE "
+       "( 180 )        d# 16   field   >C.REFRESH-COUNT "
+       "( 190 )        d# 16   field   >C.INT-ENABLE "
+       "( 1A0 )        d# 16   field   >C.INT-STATUS "
+       "drop "
+       "struct "
+       "d# 16  field   >R.REG-ADDR "
+       "d# 16  field   >R.CRSR-PALETTE "
+       "d# 16  field   >R.REG-DATA "
+       "d# 16  field   >R.COLOR-PALETTE "
+       "drop "
+       "create k512x384@60 "
+       "h# 0E1B6210 L, "
+       "d# 811 w, d# 810 w, d# 42 w, d# 23 w, d# 4 w, d# 812 w, d# 814 w, d# 48 w, "
+       "d# 318 w, d# 305 w, d# 49 w, d# 15 w, d# 319 w, d# 8 w, d# 160 w, d# 304 w, "
+       "d# 2 w, d# 512 w, d# 384 w, "
+       "create k640x480@67 "
+       "h# 0E1B0210 L, "
+       "d# 1045 w, d# 1042 w, d# 82 w, d# 43 w, d# 4 w, d# 1048 w, d# 1050 w, d# 72 w, "
+       "d# 430 w, d# 393 w, d# 73 w, d# 31 w, d# 431 w, d# 16 w, d# 216 w, d# 400 w, "
+       "d# 2 w, d# 640 w, d# 480 w, "
+       "create k640x870@75 "
+       "h# 172A0310 L, "
+       "d# 1831 w, d# 1828 w, d# 88 w, d# 46 w, d# 4 w, d# 1834 w, d# 1836 w, d# 72 w, "
+       "d# 414 w, d# 393 w, d# 73 w, d# 39 w, d# 415 w, d# 20 w, d# 208 w, d# 376 w, "
+       "d# 2 w, d# 640 w, d# 870 w, "
+       "create k640x480@60VGA "
+       "h# 17250210 L, "
+       "d# 1037 w, d# 1026 w, d# 66 w, d# 34 w, d# 2 w, d# 1048 w, d# 1050 w, d# 64 w, "
+       "d# 398 w, d# 385 w, d# 65 w, d# 47 w, d# 399 w, d# 24 w, d# 200 w, d# 352 w, "
+       "d# 2 w, d# 640 w, d# 480 w, "
+       "create k832x624@75 "
+       "h# 172A0310 L, "
+       "d# 1331 w, d# 1330 w, d# 82 w, d# 43 w, d# 4 w, d# 1332 w, d# 1334 w, d# 136 w, "
+       "d# 574 w, d# 553 w, d# 137 w, d# 31 w, d# 575 w, d# 16 w, d# 288 w, d# 544 w, "
+       "d# 2 w, d# 832 w, d# 624 w, "
+       "create k1024x768@75 "
+       "h# 0B1C0310 L, "
+       "d# 1603 w, d# 1600 w, d# 64 w, d# 34 w, d# 4 w, d# 1606 w, d# 1608 w, d# 128 w, "
+       "d# 662 w, d# 641 w, d# 129 w, d# 47 w, d# 663 w, d# 24 w, d# 332 w, d# 616 w, "
+       "d# 2 w, d# 1024 w, d# 768 w, "
+       "create k1152x870@75 "
+       "h# 133D0310 L, "
+       "d# 1825 w, d# 1822 w, d# 82 w, d# 43 w, d# 4 w, d# 1828 w, d# 1830 w, d# 128 w, "
+       "d# 726 w, d# 705 w, d# 129 w, d# 63 w, d# 727 w, d# 32 w, d# 364 w, d# 664 w, "
+       "d# 2 w, d# 1152 w, d# 870 w, "
+       ": SENSE! 5 ms regs >C.MON-SENSE rl! 5 ms ; "
+       ": SENSE@ 5 ms regs >C.MON-SENSE rl@ 5 ms ; "
+       ": MON-SENSE    ( -- ) "
+       "o# 70 sense! "
+       "sense@ 6 >> 7 and dup to sense-code "
+       "dup 6 < if "
+       "b# 1000000 or "
+       "else drop "
+       "o# 30 sense! "
+       "sense@ 2 >> b# 110000 and "
+       "o# 50 sense! "
+       "sense@ dup 4 >> b# 000100 and swap 5 >> b# 001000 and or or "
+       "o# 60 sense! sense@ 7 >> b# 000011 and or "
+       "to ext-sense "
+       "then "
+       "o# 70 sense! "
+       "; "
+       ": get-mode ( -- mode-table mono-mode? ) "
+       "sense-code case "
+       "0 of "
+       "false "
+       "k1152x870@75 "
+       "endof "
+       "1 of "
+       "true "
+       "k640x870@75 "
+       "endof "
+       "2 of "
+       "false "
+       "k512x384@60 "
+       "endof "
+       "3 of "
+       "true "
+       "k1152x870@75 "
+       "endof "
+       "5 of "
+       "false "
+       "k640x870@75 "
+       "endof "
+       "6 of "
+       "ext-sense case "
+       "3 of "
+       "false "
+       "k832x624@75 "
+       "endof "
+       "h# 0b of "
+       "false "
+       "k1024x768@75 "
+       "endof "
+       "h# 23 of "
+       "false "
+       "k1152x870@75 "
+       "endof "
+       "drop "
+       "false "
+       "k640x480@67 "
+       "0 endcase "
+       "endof "
+       "7 of "
+       "ext-sense case "
+       "h# 2d of "
+       "false "
+       "k832x624@75 "
+       "endof "
+       "h# 3a of "
+       "false "
+       "k1024x768@75 "
+       "endof "
+       "h# 17 of "
+       "false "
+       "k640x480@60VGA "
+       "endof "
+       "h# 3f of "
+       "false "
+       "0 "
+       "endof "
+       "drop "
+       "false "
+       "k640x480@67 "
+       "0 endcase "
+       "endof "
+       "drop "
+       "false "
+       "k640x480@67 "
+       "0 endcase "
+       "; "
+       "HEADERLESS "
+       "create std-16 "
+       "\" \"(000000 0000AA 00AA00 00AAAA AA0000 AA00AA AA5500 AAAAAA)\" $c, "
+       "\" \"(555555 5555FF 55FF55 55FFFF FF5555 FF55FF FFFF55 FFFFFF)\" $c, "
+       "create std-gamma "
+       "\" \"(00 05 09 0B 0E 10 13 15 17 19 1B 1D 1E 20 22 24)\" $c, "
+       "\" \"(25 27 28 2A 2C 2D 2F 30 31 33 34 36 37 38 3A 3B)\" $c, "
+       "\" \"(3C 3E 3F 40 42 43 44 45 47 48 49 4A 4B 4D 4E 4F)\" $c, "
+       "\" \"(50 51 52 54 55 56 57 58 59 5A 5B 5C 5E 5F 60 61)\" $c, "
+       "\" \"(62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71)\" $c, "
+       "\" \"(72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81)\" $c, "
+       "\" \"(81 82 83 84 85 86 87 88 89 8A 8B 8C 8C 8D 8E 8F)\" $c, "
+       "\" \"(90 91 92 93 94 95 95 96 97 98 99 9A 9B 9B 9C 9D)\" $c, "
+       "\" \"(9E 9F A0 A1 A1 A2 A3 A4 A5 A6 A6 A7 A8 A9 AA AB)\" $c, "
+       "\" \"(AB AC AD AE AF B0 B0 B1 B2 B3 B4 B4 B5 B6 B7 B8)\" $c, "
+       "\" \"(B8 B9 BA BB BC BC BD BE BF C0 C0 C1 C2 C3 C3 C4)\" $c, "
+       "\" \"(C5 C6 C7 C7 C8 C9 CA CA CB CC CD CD CE CF D0 D0)\" $c, "
+       "\" \"(D1 D2 D3 D3 D4 D5 D6 D6 D7 D8 D9 D9 DA DB DC DC)\" $c, "
+       "\" \"(DD DE DF DF E0 E1 E1 E2 E3 E4 E4 E5 E6 E7 E7 E8)\" $c, "
+       "\" \"(E9 E9 EA EB EC EC ED EE EE EF F0 F1 F1 F2 F3 F3)\" $c, "
+       "\" \"(F4 F5 F5 F6 F7 F8 F8 F9 FA FA FB FC FC FD FE FF)\" $c, "
+       ": c+           ( adr -- adr+1 val ) "
+       "dup 1+ swap c@ "
+       "; "
+       ": c!+          ( adr val -- adr+1 ) "
+       "swap dup 1+ -rot c! "
+       "; "
+       ": do-gamma "
+       "std-gamma + c@ "
+       "; "
+       ": anti-gamma   ( val -- orig ) "
+       "h# 100 0 do "
+       "std-gamma i + c@ over >= if "
+       "drop i unloop exit "
+       "then "
+       "loop "
+       "drop h# ff "
+       "; "
+       ": W@++ ( addr -- addr word ) "
+       "dup 2+ swap w@ "
+       "; "
+       ": CLUT@ ( -- ) "
+       "3 0 do RADACAL-base >R.COLOR-PALETTE rb@ loop 2 ms "
+       "; "
+       ": CLUT!        ( -- ) "
+       "3 0 do RADACAL-base >R.COLOR-PALETTE rb! loop 2 ms "
+       "; "
+       ": RAD-REG-ADDR! "
+       "RADACAL-base >R.REG-ADDR rb! 2 ms "
+       "; "
+       ": RAD! ( c a -- ) "
+       "( a ) rad-reg-addr! "
+       "( c )  RADACAL-base >R.REG-DATA rb! 2 ms "
+       "; "
+       ": init-RADACAL ( val -- ) "
+       "( val ) h# 20 rad! "
+       "bankb? 1 and h# 21 rad! "
+       "0      h# 10 rad! "
+       "0      h# 11 rad! "
+       "; "
+       "h# F3016000 constant vPortB "
+       "h# F3016400 constant vDDRB "
+       "h# F3017400 constant vSHR "
+       "h# F3017600 constant vACR "
+       "h# F3017800 constant vPCR "
+       "h# F3017A00 constant vIFR "
+       "h# F3017C00 constant vIER "
+       "h# 0C constant kSRModeIn "
+       "h# 1C constant kSRModeOut "
+       "h# 04 constant kSRIReq "
+       "h# 10 constant kByteAckBit "
+       "h# DF constant kAssertTIP "
+       "h# 20 constant kNegateTIP "
+       "h# EF constant kAssertByteAck "
+       "h# 10 constant kNegateByteAck "
+       "h# 30 constant kTIPByteAckNeg "
+       "h# 08 constant kTREQBit "
+       ": setByteAck "
+       "vPortB rb@ swap if "
+       "kAssertByteAck and "
+       "else "
+       "kNegateByteAck or "
+       "then "
+       "vPortB rb! "
+       "; "
+       ": ToggleByteAck "
+       "vPortB rb@ kByteAckBit and setByteAck "
+       "; "
+       ": setTIP "
+       "vPortB rb@ swap if "
+       "kAssertTIP and "
+       "else "
+       "kTIPByteAckNeg or "
+       "then "
+       "vPortB rb! "
+       "; "
+       ": ?TREQ        vPortB rb@ kTREQbit and 0= ; "
+       ": WaitTREQ "
+       "begin "
+       "?TREQ until "
+       "; "
+       ": WaitVIAInt "
+       "begin "
+       "vIFR rb@ kSRIReq and until "
+       "; "
+       ": WaitATTN "
+       "WaitVIAInt "
+       "vSHR rb@ drop "
+       "; "
+       ": get-response ( -- ) "
+       "WaitATTN "
+       "true setTIP "
+       "begin "
+       "WaitATTN "
+       "?TREQ while "
+       "ToggleByteAck "
+       "repeat "
+       "false setTIP "
+       "false setByteAck "
+       "WaitATTN "
+       "; "
+       ": start-send   ( c -- ) "
+       "kSRModeOut vACR rb! "
+       "( c ) vSHR rb! "
+       "true setTIP "
+       "; "
+       ": cuda-write   { _adr _len ; _actual _data } "
+       "?TREQ if get-response then "
+       "_adr c@ start-send "
+       "begin "
+       "WaitVIAInt "
+       "?TREQ while "
+       "vSHR rb@ drop "
+       "false setTIP "
+       "get-response "
+       "_adr c@ start-send "
+       "repeat "
+       "1 -> _actual "
+       "_len 1 ?do "
+       "_adr i + c@ vSHR rb! "
+       "_actual 1+ -> _actual "
+       "ToggleByteAck "
+       "WaitVIAInt "
+       "loop "
+       "2 ms "
+       "kSRModeIn vACR rb! "
+       "vSHR rb@ drop "
+       "false setTIP "
+       "false setByteAck "
+       "_actual "
+       "; "
+       ": cuda-read    ( _adr _len -- _actual ) "
+       "get-response "
+       "nip "
+       "; "
+       "8 buffer: athens-data  \" \"(012250FFFF)\" athens-data swap move "
+       "8 buffer: athens-rsp "
+       ": write-IIC    ( -- ) "
+       "athens-data 5 cuda-write drop "
+       "athens-rsp 3 cuda-read drop "
+       "; "
+       ": init-ATHENS  ( P2Mux N2 D2 -- ) "
+       "4 1 do "
+       "i athens-data 3 + c! ( val ) athens-data 4 + c! "
+       "( athens-data 5 dump cr ) "
+       "write-IIC "
+       "loop "
+       "; "
+       ": ping-CONTROL ( enable-bit -- ) "
+       "5 ms "
+       "dup 8 or swap "
+       "dup regs >C.TEST rl! 5 ms "
+       "swap dup regs >C.TEST rl! 5 ms "
+       "swap dup regs >C.TEST rl! 5 ms "
+       "swap dup regs >C.TEST rl! 5 ms "
+       "2drop "
+       "; "
+       ": reset-CONTROL "
+       "h# 433 ping-CONTROL "
+       "1 regs >C.GSC-DIVIDE rl! "
+       "; "
+       ": enable-CONTROL "
+       "h# 033 ping-CONTROL "
+       "; "
+       ": init-CONTROL ( tbl-ptr -- ) "
+       "-1 to bankb? "
+       "phys-fb-address dup h# 1000 _I_G do-map "
+       "h# 31 regs >C.ENABLE rl! "
+       "h# 12345678 phys-fb-address rl! "
+       "regs >C.ENABLE rl@ drop "
+       "h# 12345678 phys-fb-address rl@ <> "
+       "phys-fb-address h# 1000 do-unmap "
+       "if "
+       "0 to bankb? "
+       "phys-fb-address h# 600000 or to phys-fb-address "
+       "then "
+       "dup @ ( dup .h ) lbsplit init-ATHENS init-RADACAL cell+ "
+       "d# 16 0 do "
+       "w@++ ( dup .d ) regs >C.VFPEQ i 4 << + ( dup .h cr ) rl! "
+       "loop "
+       "w@++   regs >C.GSC-DIVIDE rl! "
+       "w@++ dup to width      regs >C.ROW-WORDS rl! "
+       "w@ to height "
+       "h# 31 bankB? not 8 and or "
+       "little? 2 and or       regs >C.ENABLE rl! "
+       "0              regs >C.GBASE rl! "
+       "h# 01e4        regs >C.REFRESH-COUNT rl! "
+       "0              regs >C.INT-ENABLE rl! "
+       "; "
+       ": my-open "
+       "\" assigned-addresses\" get-my-property "
+       "abort\" no REG property\"      ( prop-adr prop-len ) "
+       "begin "
+       "dup 0> while "
+       "decode-int h# FF and >r decode-int drop decode-int >r "
+       "8 - swap 8 + swap                                                      ( prop-adr prop-len ) "
+       "r> r> case "
+       "h# 14 of "
+       "to phys-regs "
+       "endof "
+       "h# 18 of "
+       "h# 00800000 + to phys-fb-address "
+       "endof "
+       "swap drop "
+       "endcase "
+       "repeat "
+       "2drop "
+       "phys-regs 0 my-space h# 02000000 or h# 1000 \" map-in\" $call-parent to regs "
+       "reset-CONTROL "
+       "mon-sense "
+       "get-mode swap to mono-mode? "
+       "( mode-dependent-table-addr ) "
+       "dup 0= if "
+       "abort "
+       "then "
+       "( mode-dependent-table-addr ) "
+       "init-CONTROL "
+       "std-16 0 d# 16 set-colors "
+       "enable-CONTROL "
+       "phys-fb-address 0 my-space h# 02000000 or width height * \" map-in\" $call-parent to fb-address "
+       "fb-address width height * 7 fill "
+       "default-font set-font "
+       "width height over 20 - char-width / over 20 - char-height / fb8-install "
+       "width #columns char-width * - 2/ to window-left "
+       "height #lines char-height * - 2/ to window-top "
+       "fb-address to frame-buffer-adr "
+       "width encode-int \" width\" property "
+       "height encode-int \" height\" property "
+       "width encode-int \" linebytes\" property "
+       "8 encode-int \" depth\" property "
+       "; "
+       ": my-close "
+       "fb-address height width * \" map-out\" $call-parent "
+       "regs h# 1000 \" map-out\" $call-parent "
+       "; "
+       "EXTERNAL "
+       ": DIMENSIONS "
+       "width height "
+       "; "
+       ": SET-COLORS   ( adr index #indices ) "
+       "swap RAD-REG-ADDR! "
+       "( #indices ) 0 ?do                             ( adr ) "
+       "mono-mode? if "
+       "c+ h# 4d * >r                          ( red adr ) "
+       "c+ h# 97 * >r                          ( red green adr ) "
+       "c+ h# 1c *                                     ( red green blue adr ) "
+       "r> + r> + 8 >>                         ( luminance ) "
+       "do-gamma "
+       "dup "
+       "dup "
+       "CLUT! "
+       "( adr ) "
+       "else "
+       "c+ do-gamma swap                       ( R adr ) "
+       "c+ do-gamma swap                       ( R G adr ) "
+       "c+ do-gamma swap                       ( R G B adr ) "
+       ">r swap rot CLUT! r>           ( B G R ) "
+       "then "
+       "loop                                           ( adr ) "
+       "drop "
+       "; "
+       ": GET-COLORS   ( adr index #indices -- ) "
+       "swap ( index ) RAD-REG-ADDR! ( #indices )  0 ?do "
+       "CLUT@ anti-gamma >r anti-gamma >r anti-gamma           ( R ) "
+       "c!+ r> c!+ r> c!+ "
+       "loop "
+       "drop "
+       "; "
+       ": COLOR!               ( r g b index -- ) "
+       ">r RGB-temp 2+ c! RGB-temp 1+ c! RGB-temp c! "
+       "RGB-temp r> 1 set-colors "
+       "; "
+       ": COLOR@               ( index -- r g b ) "
+       "RGB-temp swap 1 get-colors "
+       "RGB-temp c+ swap c+ swap c@ "
+       "; "
+       ": rect-setup   ( adr|index x y w h -- w adr|index xy-adr h ) "
+       ">r >r width * + fb-address + r> -rot r> "
+       "; "
+       ": DRAW-RECTANGLE       ( adr x y w h -- ) "
+       "rect-setup "
+       "( h ) 0 ?do                                                            ( w adr xy-adr ) "
+       "2dup 4 pick move "
+       "2 pick width d+ "
+       "loop "
+       "3drop "
+       "; "
+       ": FILL-RECTANGLE       ( index x y w h -- ) "
+       "rect-setup                                                             ( w index xy-adr h ) "
+       "( h ) 0 ?do                                                            ( w index xy-adr ) "
+       "dup 3 pick 3 pick fill "
+       "width + "
+       "loop "
+       "3drop "
+       "; "
+       ": READ-RECTANGLE       ( adr x y w h -- ) "
+       "rect-setup  >r swap r>                                 ( w xy-adr adr h ) "
+       "( h ) 0 ?do "
+       "2dup 4 pick move "
+       "width 3 pick d+ "
+       "loop "
+       "3drop "
+       "; "
+       "['] my-open is-install "
+       "['] my-close is-remove "
+,
+ " device-end",0};
diff --git a/bootx.tproj/ci.subproj/MAC-PARTS.c b/bootx.tproj/ci.subproj/MAC-PARTS.c
new file mode 100644 (file)
index 0000000..4eca06a
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  MAC-PARTS.c - Tokenized version of New World mac-parts package.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+const char gMacParts[] = {
+0xf1,0x08,0x9f,0x6a,0x00,0x00,0x05,0x7d,0x10,0x00,0x00,0x02,0x00,0xb5,0x08,0x00,0xba,0x10,0x00,0x00,0x00,0x2c,0xb5,0x08,0x01,0xba,0xa5,0xb5,0x08,0x02,0xb8,0xb5,0x08,
+0x03,0xb7,0x12,0x0c,0x6d,0x61,0x78,0x2d,0x74,0x72,0x61,0x6e,0x73,0x66,0x65,0x72,0xc2,0xb5,0x08,0x04,0xb7,0x12,0x0a,0x62,0x6c,0x6f,0x63,0x6b,0x2d,0x73,0x69,0x7a,0x65,
+0xc2,0xb5,0x08,0x05,0xb7,0x12,0x09,0x64,0x6d,0x61,0x2d,0x61,0x6c,0x6c,0x6f,0x63,0xc2,0xb5,0x08,0x06,0xb7,0x12,0x08,0x64,0x6d,0x61,0x2d,0x66,0x72,0x65,0x65,0xc2,0xb5,
+0x08,0x07,0xb7,0x12,0x04,0x72,0x65,0x61,0x64,0xc2,0xb5,0x08,0x08,0xb7,0x12,0x05,0x77,0x72,0x69,0x74,0x65,0xc2,0xb5,0x08,0x09,0xb7,0x12,0x04,0x73,0x65,0x65,0x6b,0xc2,
+0xb5,0x08,0x0a,0xb7,0x6f,0xc2,0xb5,0x08,0x0b,0xb7,0x6e,0xc2,0xb5,0x08,0x0c,0xb7,0x12,0x20,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x65,0x72,0x72,0x6f,
+0x72,0x20,0x6f,0x6e,0x20,0x46,0x49,0x4e,0x44,0x2d,0x50,0x41,0x43,0x4b,0x41,0x47,0x45,0x90,0x02,0x16,0xc2,0x01,0x1f,0x12,0x09,0x6d,0x61,0x63,0x2d,0x70,0x61,0x72,0x74,
+0x73,0x02,0x01,0xb5,0x08,0x0d,0xb7,0x08,0x03,0x02,0x09,0xc2,0xb5,0x08,0x0e,0xb7,0x08,0x04,0x02,0x09,0xc2,0xb5,0x08,0x0f,0xb7,0x08,0x05,0x02,0x09,0xc2,0xb5,0x08,0x10,
+0xb7,0x08,0x06,0x02,0x09,0xc2,0xb5,0x08,0x11,0xb7,0x08,0x07,0x02,0x09,0xc2,0xb5,0x08,0x12,0xb7,0x08,0x08,0x02,0x09,0xc2,0xb5,0x08,0x13,0xb7,0x08,0x09,0x02,0x09,0xc2,
+0x08,0x00,0xb5,0x08,0x14,0xbd,0x10,0x00,0x00,0x50,0x4d,0xb5,0x08,0x15,0xba,0x10,0x00,0x41,0x00,0x00,0xb5,0x08,0x16,0xba,0xa5,0xb5,0x08,0x17,0xb8,0xa5,0xb5,0x08,0x18,
+0xb8,0xc0,0xa5,0xb5,0x08,0x19,0xb8,0xc0,0xa5,0xb5,0x08,0x1a,0xb8,0xa5,0x5b,0xb5,0x08,0x1b,0xbe,0x5b,0xb5,0x08,0x1c,0xbe,0x5c,0xb5,0x08,0x1d,0xbe,0x5c,0xb5,0x08,0x1e,
+0xbe,0x5c,0xb5,0x08,0x1f,0xbe,0x10,0x00,0x00,0x00,0x20,0xb5,0x08,0x20,0xbe,0x10,0x00,0x00,0x00,0x20,0xb5,0x08,0x21,0xbe,0x5c,0xb5,0x08,0x22,0xbe,0x5c,0xb5,0x08,0x23,
+0xbe,0x5c,0xb5,0x08,0x24,0xbe,0x5c,0xb5,0x08,0x25,0xbe,0x5c,0xb5,0x08,0x26,0xbe,0x5c,0xb5,0x08,0x27,0xbe,0x5c,0xb5,0x08,0x28,0xbe,0x5c,0xb5,0x08,0x29,0xbe,0x5c,0xb5,
+0x08,0x2a,0xbe,0x5c,0xb5,0x08,0x2b,0xbe,0x10,0x00,0x00,0x00,0x10,0xb5,0x08,0x2c,0xbe,0x46,0xb5,0x08,0x2d,0xbb,0xa5,0xd3,0xa5,0xd3,0xb5,0x08,0x2e,0xbb,0xa5,0xd3,0xa5,
+0xd3,0xb5,0x08,0x2f,0xb7,0x08,0x14,0x08,0x1b,0x08,0x0a,0x08,0x15,0x3c,0x08,0x14,0x08,0x21,0x12,0x09,0x41,0x70,0x70,0x6c,0x65,0x5f,0x48,0x46,0x53,0x7a,0x34,0x08,0x14,
+0x08,0x21,0x12,0x0a,0x41,0x70,0x70,0x6c,0x65,0x5f,0x42,0x6f,0x6f,0x74,0x7a,0x34,0x24,0x23,0xc2,0xb5,0x08,0x30,0xb7,0x10,0x00,0x00,0x00,0x14,0x1e,0xc2,0xb5,0x08,0x31,
+0xb7,0x10,0x00,0x00,0x00,0x1c,0x1e,0xc2,0xb5,0x08,0x32,0xb7,0x10,0x00,0x00,0x00,0x7c,0x1e,0xc2,0xb5,0x08,0x33,0xb7,0x10,0x00,0x00,0x00,0x7e,0x1e,0xc2,0xb5,0x08,0x34,
+0xb7,0xc2,0xb5,0x08,0x35,0xb7,0xa7,0x1e,0xc2,0xca,0x04,0x72,0x65,0x61,0x64,0x08,0x36,0xb7,0x08,0x11,0xc2,0xca,0x04,0x73,0x65,0x65,0x6b,0x08,0x37,0xb7,0x08,0x19,0x08,
+0x00,0xd4,0xd8,0x08,0x13,0xc2,0xca,0x0b,0x72,0x65,0x61,0x64,0x2d,0x62,0x6c,0x6f,0x63,0x6b,0x73,0x08,0x38,0xb7,0x49,0x08,0x19,0x1e,0x08,0x00,0xd4,0x08,0x13,0x46,0x08,
+0x00,0x20,0x08,0x11,0x08,0x00,0x21,0xc2,0xca,0x04,0x6f,0x70,0x65,0x6e,0x08,0x39,0xb7,0xa5,0xc3,0x08,0x02,0x02,0x02,0x50,0x14,0x00,0x2a,0x08,0x01,0x02,0x40,0xa7,0x4e,
+0x34,0x14,0x00,0x1c,0xa0,0x6d,0x30,0x10,0x00,0x00,0x00,0x0a,0xa0,0x72,0x53,0xa2,0x14,0x00,0x07,0x55,0x13,0x00,0x05,0xb2,0x46,0xb2,0x31,0xa0,0x72,0xb2,0x13,0x00,0x09,
+0xb2,0x46,0xa5,0xa5,0xa5,0xa5,0xb2,0x08,0x2d,0x77,0x08,0x2e,0x77,0x08,0x2d,0x6d,0x14,0x00,0x3e,0xa0,0x6d,0x10,0x00,0x00,0x00,0x0a,0xa0,0x72,0x08,0x2d,0x76,0xa2,0x14,
+0x00,0x27,0x12,0x1f,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x62,0x61,0x64,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x20,0x6e,0x75,0x6d,0x62,
+0x65,0x72,0x90,0x92,0xa4,0xb2,0x49,0xa0,0x72,0x13,0x00,0x05,0xb2,0xa4,0xb2,0xc3,0x08,0x17,0x08,0x17,0xa4,0x3c,0x14,0x00,0x3a,0x08,0x00,0xa5,0x08,0x13,0x46,0x08,0x14,
+0x08,0x00,0x08,0x11,0x46,0x08,0x14,0x08,0x1d,0x08,0x0b,0xa5,0x18,0x00,0x22,0x19,0xa6,0x1e,0x08,0x00,0xd4,0x08,0x13,0x46,0x08,0x14,0x08,0x00,0x08,0x11,0x46,0x08,0x2f,
+0x14,0x00,0x0a,0x19,0xa6,0x1e,0xc3,0x08,0x17,0x1b,0xb2,0x15,0xff,0xe2,0xb2,0x08,0x17,0xa4,0x3d,0x14,0x00,0x77,0x08,0x17,0x08,0x00,0xd4,0x08,0x13,0x46,0x08,0x14,0x08,
+0x00,0x08,0x11,0x46,0x08,0x14,0x08,0x1e,0x08,0x0b,0xc3,0x08,0x19,0x08,0x14,0x08,0x1f,0x08,0x0b,0xc3,0x08,0x1a,0x08,0x2e,0x6d,0x14,0x00,0x49,0x08,0x2f,0x14,0x00,0x0e,
+0x08,0x19,0x08,0x00,0xd4,0x08,0x13,0x46,0x13,0x00,0x35,0xb2,0x12,0x2b,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x65,
+0x64,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x20,0x69,0x73,0x20,0x6e,0x6f,0x74,0x20,0x76,0x61,0x6c,0x69,0x64,0x90,0x92,0xa5,0x33,0xb2,0x13,0x00,0x06,0xb2,
+0xa4,0x33,0xb2,0x13,0x00,0x33,0xb2,0x12,0x29,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x63,0x61,0x6e,0x27,0x74,0x20,0x66,0x69,0x6e,0x64,0x20,0x61,0x20,
+0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x90,0x92,0xa5,0x33,0xb2,0x08,0x17,0xa4,0x3d,0x14,0x00,0x08,0x08,0x17,0xc3,0x08,
+0x02,0xb2,0x08,0x2e,0x6d,0x14,0x00,0xed,0x08,0x14,0xa7,0xa6,0x08,0x38,0x46,0x08,0x14,0x08,0x0a,0xc4,0x10,0x00,0x00,0x48,0x2b,0x1c,0x00,0x15,0x12,0x0e,0x68,0x66,0x73,
+0x2d,0x70,0x6c,0x75,0x73,0x2d,0x66,0x69,0x6c,0x65,0x73,0xc6,0x00,0x69,0x10,0x00,0x00,0x42,0x44,0x1c,0x00,0x5e,0x08,0x14,0x08,0x32,0x08,0x0a,0x10,0x00,0x00,0x48,0x2b,
+0x3c,0x14,0x00,0x40,0x08,0x14,0x08,0x33,0x47,0x08,0x34,0x08,0x0a,0x49,0x08,0x35,0x08,0x0a,0x08,0x14,0x08,0x30,0x08,0x0b,0x08,0x00,0x21,0x4c,0x20,0xc3,0x08,0x1a,0x20,
+0x08,0x14,0x08,0x31,0x08,0x0a,0x1e,0x08,0x19,0x1e,0xc3,0x08,0x19,0x12,0x0e,0x68,0x66,0x73,0x2d,0x70,0x6c,0x75,0x73,0x2d,0x66,0x69,0x6c,0x65,0x73,0x13,0x00,0x0f,0xb2,
+0x12,0x09,0x6d,0x61,0x63,0x2d,0x66,0x69,0x6c,0x65,0x73,0xb2,0xc6,0x00,0x05,0xa5,0x49,0xc5,0x50,0x14,0x00,0x3b,0x02,0x04,0x14,0x00,0x0c,0x08,0x2e,0x76,0x4a,0x08,0x0c,
+0x13,0x00,0x29,0xb2,0x12,0x20,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x65,0x72,0x72,0x6f,0x72,0x20,0x6f,0x6e,0x20,0x46,0x49,0x4e,0x44,0x2d,0x50,0x41,
+0x43,0x4b,0x41,0x47,0x45,0x90,0x02,0x16,0xb2,0x13,0x00,0x22,0xb2,0x12,0x18,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x62,0x61,0x64,0x20,0x70,0x61,0x72,
+0x74,0x69,0x74,0x69,0x6f,0x6e,0x90,0x92,0xa5,0x33,0xb2,0xb2,0xa4,0xc2,0xca,0x05,0x63,0x6c,0x6f,0x73,0x65,0x08,0x3a,0xb7,0xc2,0xca,0x07,0x23,0x62,0x6c,0x6f,0x63,0x6b,
+0x73,0x08,0x3b,0xb7,0x08,0x1a,0xc2,0xca,0x04,0x73,0x69,0x7a,0x65,0x08,0x3c,0xb7,0x08,0x1a,0x08,0x00,0xd4,0xc2,0xca,0x0a,0x6f,0x66,0x66,0x73,0x65,0x74,0x2d,0x6c,0x6f,
+0x77,0x08,0x3d,0xb7,0x08,0x19,0x08,0x00,0xd4,0x46,0xc2,0xca,0x0b,0x6f,0x66,0x66,0x73,0x65,0x74,0x2d,0x68,0x69,0x67,0x68,0x08,0x3e,0xb7,0x08,0x19,0x08,0x00,0xd4,0x4d,
+0xc2,0xca,0x04,0x6c,0x6f,0x61,0x64,0x08,0x3f,0xb7,0x46,0x12,0x2d,0x4d,0x41,0x43,0x2d,0x50,0x41,0x52,0x54,0x53,0x3a,0x20,0x4c,0x4f,0x41,0x44,0x20,0x28,0x6e,0x6f,0x6e,
+0x69,0x6e,0x74,0x65,0x72,0x70,0x6f,0x73,0x65,0x64,0x29,0x20,0x6e,0x6f,0x74,0x20,0x73,0x75,0x70,0x70,0x6f,0x72,0x74,0x65,0x64,0x90,0x02,0x16,0xc2,0xca,0x05,0x65,0x6a,
+0x65,0x63,0x74,0x08,0x40,0xb7,0x12,0x05,0x65,0x6a,0x65,0x63,0x74,0x02,0x09,0xc2,0x01,0x27,0x00,
+};
diff --git a/bootx.tproj/ci.subproj/Makefile b/bootx.tproj/ci.subproj/Makefile
new file mode 100644 (file)
index 0000000..411d072
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# Generated by the NeXT Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = ci
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Component
+
+CFILES = ci.c ci_io.c Control2.c MAC-PARTS.c sl_words.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = subproj.make
+NEXTSTEP_INSTALLDIR = /bin
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/bootx.tproj/ci.subproj/Makefile.postamble b/bootx.tproj/ci.subproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/bootx.tproj/ci.subproj/Makefile.preamble b/bootx.tproj/ci.subproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..cfe786a
--- /dev/null
@@ -0,0 +1,139 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/bootx.tproj/ci.subproj/PB.project b/bootx.tproj/ci.subproj/PB.project
new file mode 100644 (file)
index 0000000..e4302ac
--- /dev/null
@@ -0,0 +1,31 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        BUNDLES = (); 
+        CLASSES = (); 
+        C_FILES = (); 
+        FRAMEWORKSEARCH = (); 
+        HEADERSEARCH = (); 
+        H_FILES = (); 
+        M_FILES = (); 
+        OTHER_LINKED = (ci.c, ci_io.c, Control2.c, "MAC-PARTS.c", sl_words.c); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+        SUBPROJECTS = (); 
+        TOOLS = (); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_INSTALLDIR = /bin; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = ci; 
+    PROJECTTYPE = Component; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/ci.subproj/ci.c b/bootx.tproj/ci.subproj/ci.c
new file mode 100644 (file)
index 0000000..564260d
--- /dev/null
@@ -0,0 +1,1104 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  ci.c - Functions for accessing Open Firmware's Client Interface
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+static ClientInterfacePtr gCIPtr;
+
+long InitCI(ClientInterfacePtr ciPtr)
+{
+  gCIPtr = ciPtr;
+  
+  return 0;
+}
+
+long CallCI(CIArgs *ciArgsPtr)
+{
+  long ret;
+  
+  ret = (*gCIPtr)(ciArgsPtr);
+  return ret;
+}
+
+
+// Device Tree
+
+// Peer take a phandle and returns the next peer.
+// It returns zero of there are no more peers.
+CICell Peer(CICell phandle)
+{
+  CIArgs ciArgs;
+  CICell peer_ph;
+  long ret;
+  
+  ciArgs.service = "peer";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.peer.phandle = phandle;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  peer_ph = ciArgs.args.peer.peerPhandle;
+  
+  return peer_ph;
+}
+
+// Child take a phandle and returns the first child.
+// It returns zero of there in no child.
+CICell Child(CICell phandle)
+{
+  CIArgs ciArgs;
+  CICell child_ph;
+  long ret;
+  
+  ciArgs.service = "child";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.child.phandle = phandle;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  child_ph = ciArgs.args.child.childPhandle;
+  
+  return child_ph;
+}
+
+// Parent take a phandle and returns the parent node.
+// It returns zero of if the phandle is the root node.
+CICell Parent(CICell phandle)
+{
+  CIArgs ciArgs;
+  CICell parent_ph;
+  long ret;
+  
+  ciArgs.service = "parent";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.parent.childPhandle = phandle;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  parent_ph = ciArgs.args.parent.parentPhandle;
+  
+  return parent_ph;
+}
+
+// FindDevice take a device spec and returns the phandle.
+// It returns zero of if the device was not found.
+CICell FindDevice(char *devSpec)
+{
+  CIArgs ciArgs;
+  CICell phandle;
+  long ret;
+  
+  ciArgs.service = "finddevice";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.finddevice.devSpec = devSpec;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  phandle = ciArgs.args.finddevice.phandle;
+  
+  return phandle;
+}
+
+// InstanceToPath take an ihandle, buf and buflen.  Set the device path
+// to the package in buf upto buflen characters and returns the length
+// Length will be -1 if the ihandle is invalid.
+CICell InstanceToPath(CICell ihandle, char *buf, long buflen)
+{
+  CIArgs ciArgs;
+  CICell length;
+  long ret;
+  
+  ciArgs.service = "instance-to-path";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.instanceToPath.ihandle = ihandle;
+  ciArgs.args.instanceToPath.buf = buf;
+  ciArgs.args.instanceToPath.buflen = buflen;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  length = ciArgs.args.instanceToPath.length;
+  
+  return length;
+}
+
+// InstanceToPackage take an ihandle and returns the phandle for it.
+// returns -1 if the phandle can't be found.
+CICell InstanceToPackage(CICell ihandle)
+{
+  CIArgs ciArgs;
+  CICell phandle;
+  long ret;
+  
+  ciArgs.service = "instance-to-package";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.instanceToPackage.ihandle = ihandle;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  phandle = ciArgs.args.instanceToPackage.phandle;
+  
+  return phandle;
+}
+
+// InstanceToPackages
+
+// PackageToPath take a phandle, buf and buflen.  Set the device path
+// to the package in buf upto buflen characters and returns the length
+// Length will be -1 if the phandle is invalid.
+CICell PackageToPath(CICell phandle, char *buf, long buflen)
+{
+  CIArgs ciArgs;
+  CICell length;
+  long ret;
+  
+  if (gOFVersion >= kOFVersion2x) {
+    ciArgs.service = "package-to-path";
+    ciArgs.nArgs = 3;
+    ciArgs.nReturns = 1;
+    ciArgs.args.packageToPath.phandle = phandle;
+    ciArgs.args.packageToPath.buf = buf;
+    ciArgs.args.packageToPath.buflen = buflen;
+    
+    ret = CallCI(&ciArgs);
+    if (ret != 0) return kCIError;
+    
+    length = ciArgs.args.packageToPath.length;
+  } else {
+    ret = CallMethod_3_1(SLWordsIH, "slw_pwd", phandle,
+                        (CICell)buf, buflen, &length);
+    if (ret != 0) return kCIError;
+    
+    buf[length] = '\0';
+  }
+  
+  return length;
+}
+
+// Canon
+
+// GetPropLen takes a phandle and prop name
+// and returns the size of the property
+// or -1 if the property is not valid.
+CICell GetPropLen(CICell phandle, char *name)
+{
+  CIArgs ciArgs;
+  CICell size;
+  long ret;
+  
+  ciArgs.service = "getproplen";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 1;
+  ciArgs.args.getproplen.phandle = phandle;
+  ciArgs.args.getproplen.name = name;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  size = ciArgs.args.getproplen.size;
+  
+  return size;
+}
+
+// GetProp takes a phandle, prop name, buffer and length
+// and copied the property value in to the buffer.
+// returns -1 if the property is not valid.
+CICell GetProp(CICell phandle, char *name, char *buf, long buflen)
+{
+  CIArgs ciArgs;
+  CICell size;
+  long ret;
+  
+  ciArgs.service = "getprop";
+  ciArgs.nArgs = 4;
+  ciArgs.nReturns = 1;
+  ciArgs.args.getprop.phandle = phandle;
+  ciArgs.args.getprop.name = name;
+  ciArgs.args.getprop.buf = buf;
+  ciArgs.args.getprop.buflen = buflen;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  size = ciArgs.args.getprop.size;
+  
+  return size;
+}
+
+// NextProp takes a phandle, prev name, and a buffer
+// and copied the next property name in to the buffer.
+// returns -1 if the property is not valid.
+// returns 0 if the prev was the last property.
+// returns 1 otherwise.
+CICell NextProp(CICell phandle, char *previous, char *buf)
+{
+  CIArgs ciArgs;
+  CICell flag;
+  long ret;
+  
+  ciArgs.service = "nextprop";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.nextprop.phandle = phandle;
+  ciArgs.args.nextprop.previous = previous;
+  ciArgs.args.nextprop.buf = buf;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  flag = ciArgs.args.nextprop.flag;
+  
+  return flag;
+}
+
+// SetProp takes a phandle, prop name, buffer and length
+// and copied the buffer in to the property value.
+// returns -1 if the property could not be set or created.
+CICell SetProp(CICell phandle, char *name, char *buf, long buflen)
+{
+  CIArgs ciArgs;
+  CICell size;
+  long ret;
+  
+  ciArgs.service = "setprop";
+  ciArgs.nArgs = 4;
+  ciArgs.nReturns = 1;
+  ciArgs.args.setprop.phandle = phandle;
+  ciArgs.args.setprop.name = name;
+  ciArgs.args.setprop.buf = buf;
+  ciArgs.args.setprop.buflen = buflen;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  size = ciArgs.args.setprop.size;
+  
+  return size;
+}
+
+
+// Device I/O
+
+// Open takes a device specifier and returns an iHandle
+// It returns zero if the device can not be found or opened.
+CICell Open(char *devSpec)
+{
+  CIArgs ciArgs;
+  CICell ihandle;
+  long ret;
+  
+  ciArgs.service = "open";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.open.devSpec = devSpec;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return 0;
+  
+  ihandle = ciArgs.args.open.ihandle;
+  
+  return ihandle;
+}
+
+// Close takes an iHandle and closes the device.
+void Close(CICell ihandle)
+{
+  CIArgs ciArgs;
+  
+  ciArgs.service = "close";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 0;
+  ciArgs.args.close.ihandle = ihandle;
+  
+  CallCI(&ciArgs);
+}
+
+// Read takes an iHandle, an address and a length and return the actual
+// Length read.  Returns -1 if the operaction failed.
+CICell Read(CICell ihandle, long addr, long length)
+{
+  CIArgs ciArgs;
+  long actual;
+  long ret;
+  
+  ciArgs.service = "read";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.read.ihandle = ihandle;
+  ciArgs.args.read.addr = addr;
+  ciArgs.args.read.length = length;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  actual = ciArgs.args.read.actual;
+  
+  // Spin the wait cursor.
+  Spin();
+  
+  return actual;
+}
+
+// Write takes an iHandle, an address and a length and return the actual
+// Length written.  Returns -1 if the operaction failed.
+CICell Write(CICell ihandle, long addr, long length)
+{
+  CIArgs ciArgs;
+  long actual;
+  long ret;
+  
+  ciArgs.service = "write";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.write.ihandle = ihandle;
+  ciArgs.args.write.addr = addr;
+  ciArgs.args.write.length = length;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  actual = ciArgs.args.write.actual;
+  
+  return actual;
+}
+
+// Seek takes an iHandle, and a 64 bit position
+// and moves to that address in file.
+// returns seeks result, or -1 if seek is not supported.
+CICell Seek(CICell ihandle, long long position)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "seek";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.seek.ihandle = ihandle;
+  ciArgs.args.seek.pos_high = position >> 32;
+  ciArgs.args.seek.pos_low = position & 0x00000000FFFFFFFFULL;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  
+  ret = ciArgs.args.seek.result;
+  
+  return ret;
+}
+
+
+// Other Device Method Invocation
+
+// Lots of CallMethod_n_m functions...
+// n is number of args, m is number of returns.
+
+long CallMethod_0_0(CICell iHandle, char *method)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_0_0.iHandle = iHandle;
+  ciArgs.args.callMethod_0_0.method = method;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_0_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long CallMethod_0_1(CICell iHandle, char *method, CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 2;
+  ciArgs.args.callMethod_0_1.iHandle = iHandle;
+  ciArgs.args.callMethod_0_1.method = method;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_0_1.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.callMethod_0_1.return1;
+  
+  return kCINoError;
+}
+
+long CallMethod_1_0(CICell iHandle, char *method, CICell arg1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_1_0.iHandle = iHandle;
+  ciArgs.args.callMethod_1_0.method = method;
+  ciArgs.args.callMethod_1_0.arg1 = arg1;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_1_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long CallMethod_1_1(CICell iHandle, char *method, CICell arg1, CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 2;
+  ciArgs.args.callMethod_1_1.iHandle = iHandle;
+  ciArgs.args.callMethod_1_1.method = method;
+  ciArgs.args.callMethod_1_1.arg1 = arg1;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_1_0.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.callMethod_1_1.return1;
+  
+  return kCINoError;
+}
+
+long CallMethod_2_0(CICell iHandle, char *method,
+                   CICell arg1, CICell arg2)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 4;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_2_0.iHandle = iHandle;
+  ciArgs.args.callMethod_2_0.method = method;
+  ciArgs.args.callMethod_2_0.arg1 = arg1;
+  ciArgs.args.callMethod_2_0.arg2 = arg2;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_2_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long CallMethod_3_0(CICell iHandle, char *method,
+                   CICell arg1, CICell arg2, CICell arg3)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 5;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_3_0.iHandle = iHandle;
+  ciArgs.args.callMethod_3_0.method = method;
+  ciArgs.args.callMethod_3_0.arg1 = arg1;
+  ciArgs.args.callMethod_3_0.arg2 = arg2;
+  ciArgs.args.callMethod_3_0.arg3 = arg3;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_3_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long CallMethod_3_1(CICell iHandle, char *method,
+                   CICell arg1, CICell arg2, CICell arg3, CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 5;
+  ciArgs.nReturns = 2;
+  ciArgs.args.callMethod_3_1.iHandle = iHandle;
+  ciArgs.args.callMethod_3_1.method = method;
+  ciArgs.args.callMethod_3_1.arg1 = arg1;
+  ciArgs.args.callMethod_3_1.arg2 = arg2;
+  ciArgs.args.callMethod_3_1.arg3 = arg3;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_3_1.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.callMethod_3_1.return1;
+  
+  return kCINoError;
+}
+
+long CallMethod_4_0(CICell iHandle, char *method,
+                   CICell arg1, CICell arg2, CICell arg3, CICell arg4)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 6;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_4_0.iHandle = iHandle;
+  ciArgs.args.callMethod_4_0.method = method;
+  ciArgs.args.callMethod_4_0.arg1 = arg1;
+  ciArgs.args.callMethod_4_0.arg2 = arg2;
+  ciArgs.args.callMethod_4_0.arg3 = arg3;
+  ciArgs.args.callMethod_4_0.arg4 = arg4;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_4_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long CallMethod_5_0(CICell iHandle, char *method, CICell arg1, CICell arg2,
+                   CICell arg3, CICell arg4, CICell arg5)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 7;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_5_0.iHandle = iHandle;
+  ciArgs.args.callMethod_5_0.method = method;
+  ciArgs.args.callMethod_5_0.arg1 = arg1;
+  ciArgs.args.callMethod_5_0.arg2 = arg2;
+  ciArgs.args.callMethod_5_0.arg3 = arg3;
+  ciArgs.args.callMethod_5_0.arg4 = arg4;
+  ciArgs.args.callMethod_5_0.arg5 = arg5;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_5_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long CallMethod_6_0(CICell iHandle, char *method, CICell arg1, CICell arg2,
+                   CICell arg3, CICell arg4, CICell arg5, CICell arg6)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "call-method";
+  ciArgs.nArgs = 8;
+  ciArgs.nReturns = 1;
+  ciArgs.args.callMethod_6_0.iHandle = iHandle;
+  ciArgs.args.callMethod_6_0.method = method;
+  ciArgs.args.callMethod_6_0.arg1 = arg1;
+  ciArgs.args.callMethod_6_0.arg2 = arg2;
+  ciArgs.args.callMethod_6_0.arg3 = arg3;
+  ciArgs.args.callMethod_6_0.arg4 = arg4;
+  ciArgs.args.callMethod_6_0.arg5 = arg5;
+  ciArgs.args.callMethod_6_0.arg6 = arg6;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.callMethod_6_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+
+// Memory
+
+// Claim takes a virt address, a size, and an alignment.
+// It return baseaddr or -1 for claim failed.
+CICell Claim(CICell virt, CICell size, CICell align)
+{
+  CIArgs ciArgs;
+  CICell baseaddr;
+  long ret;
+
+  if (gOFVersion >= kOFVersion2x) {
+    // Claim actually works, so use it.
+    ciArgs.service = "claim";
+    ciArgs.nArgs = 3;
+    ciArgs.nReturns = 1;
+    ciArgs.args.claim.virt = virt;
+    ciArgs.args.claim.size = size;
+    ciArgs.args.claim.align = align;
+    
+    ret = CallCI(&ciArgs);
+    if (ret != 0) return kCIError;
+    
+    baseaddr = ciArgs.args.claim.baseaddr;
+  } else {
+    // Claim does not work.  Do it by hand.
+    if ((gMMUIH == 0) || (gMMUIH == 0)) return kCIError;
+    
+    // Get the physical memory
+    ret = CallMethod_3_1(gMemoryIH, "claim", virt, size, 0, &baseaddr);
+    if ((ret != kCINoError) || (virt != baseaddr)) return kCIError;
+    
+    // Get the logical memory
+    ret = CallMethod_3_1(gMMUIH, "claim", virt, size, 0, &baseaddr);
+    if ((ret != kCINoError) || (virt != baseaddr)) return kCIError;
+    
+    // Map them together.
+    ret = CallMethod_4_0(gMMUIH, "map", virt, virt, size, 0);
+    if (ret != kCINoError) return kCIError;
+  }
+  
+  return baseaddr;
+}
+
+// Release takes a virt address, a size
+void Release(CICell virt, CICell size)
+{
+  CIArgs ciArgs;
+  
+  ciArgs.service = "release";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 0;
+  ciArgs.args.claim.virt = virt;
+  ciArgs.args.claim.size = size;
+  
+  CallCI(&ciArgs);
+}
+
+
+// Control Transfer
+
+// Boot trys to boot the bootspec
+void Boot(char *bootspec)
+{
+  CIArgs ciArgs;
+  
+  ciArgs.service = "boot";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 0;
+  ciArgs.args.boot.bootspec = bootspec;
+  
+  CallCI(&ciArgs);
+}
+
+// Enter the user interface.
+// Executing the 'go' command returns to the client.
+void Enter(void)
+{
+  CIArgs ciArgs;
+  
+  ciArgs.service = "enter";
+  ciArgs.nArgs = 0;
+  ciArgs.nReturns = 0;
+  
+  CallCI(&ciArgs);
+}
+
+// Exit the client program.
+void Exit(void)
+{
+  CIArgs ciArgs;
+  
+  ciArgs.service = "exit";
+  ciArgs.nArgs = 0;
+  ciArgs.nReturns = 0;
+  
+  CallCI(&ciArgs);
+}
+
+// Clain
+
+// Quiesce stops any async tasks in Open Firmware.
+void Quiesce(void)
+{
+  CIArgs ciArgs;
+  
+  ciArgs.service = "quiesce";
+  ciArgs.nArgs = 0;
+  ciArgs.nReturns = 0;
+  
+  CallCI(&ciArgs);
+}
+
+
+// User Interface
+
+// Lots of Interpret_n_m fundtions...
+// n is number of args, m is number of returns.
+
+long Interpret_0_0(char *forthString)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 1;
+  ciArgs.args.interpret_0_0.forth = forthString;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_0_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long Interpret_1_0(char *forthString, CICell arg1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 1;
+  ciArgs.args.interpret_1_0.forth = forthString;
+  ciArgs.args.interpret_1_0.arg1 = arg1;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_1_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long Interpret_1_1(char *forthString, CICell arg1, CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 2;
+  ciArgs.args.interpret_1_1.forth = forthString;
+  ciArgs.args.interpret_1_1.arg1 = arg1;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_1_1.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_1_1.return1;
+  
+  return kCINoError;
+}
+
+long Interpret_2_1(char *forthString, CICell arg1, CICell arg2, CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 2;
+  ciArgs.args.interpret_2_1.forth = forthString;
+  ciArgs.args.interpret_2_1.arg1 = arg1;
+  ciArgs.args.interpret_2_1.arg2 = arg2;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_2_1.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_2_1.return1;
+  
+  return kCINoError;
+}
+
+long Interpret_3_1(char *forthString, CICell arg1, CICell arg2, CICell arg3,
+                 CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 4;
+  ciArgs.nReturns = 2;
+  ciArgs.args.interpret_3_1.forth = forthString;
+  ciArgs.args.interpret_3_1.arg1 = arg1;
+  ciArgs.args.interpret_3_1.arg2 = arg2;
+  ciArgs.args.interpret_3_1.arg3 = arg3;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_3_1.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_3_1.return1;
+  
+  return kCINoError;
+}
+
+long Interpret_3_2(char *forthString, CICell arg1, CICell arg2, CICell arg3,
+                  CICell *ret1, CICell *ret2)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 4;
+  ciArgs.nReturns = 3;
+  ciArgs.args.interpret_3_2.forth = forthString;
+  ciArgs.args.interpret_3_2.arg1 = arg1;
+  ciArgs.args.interpret_3_2.arg2 = arg2;
+  ciArgs.args.interpret_3_2.arg3 = arg3;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_3_2.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_3_2.return1;
+  *ret2 = ciArgs.args.interpret_3_2.return2;
+  
+  return kCINoError;
+}
+
+long Interpret_4_0(char *forthString, CICell arg1, CICell arg2, CICell arg3,
+                 CICell arg4)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 5;
+  ciArgs.nReturns = 1;
+  ciArgs.args.interpret_4_0.forth = forthString;
+  ciArgs.args.interpret_4_0.arg1 = arg1;
+  ciArgs.args.interpret_4_0.arg2 = arg2;
+  ciArgs.args.interpret_4_0.arg3 = arg3;
+  ciArgs.args.interpret_4_0.arg4 = arg4;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_4_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long Interpret_0_1(char *forthString, CICell *ret1)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 2;
+  ciArgs.args.interpret_0_1.forth = forthString;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_0_1.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_0_1.return1;
+  
+  return kCINoError;
+}
+
+long Interpret_0_2(char *forthString, CICell *ret1, CICell *ret2)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 3;
+  ciArgs.args.interpret_0_2.forth = forthString;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_0_2.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_0_2.return1;
+  *ret2 = ciArgs.args.interpret_0_2.return2;
+  
+  return kCINoError;
+}
+
+long Interpret_0_3(char *forthString, CICell *ret1, CICell *ret2, CICell *ret3)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 1;
+  ciArgs.nReturns = 4;
+  ciArgs.args.interpret_0_3.forth = forthString;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_0_3.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_0_3.return1;
+  *ret2 = ciArgs.args.interpret_0_3.return2;
+  *ret3 = ciArgs.args.interpret_0_3.return3;
+  
+  return kCINoError;
+}
+
+long Interpret_1_3(char *forthString, CICell arg1, CICell *ret1, CICell *ret2,
+                 CICell *ret3)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 2;
+  ciArgs.nReturns = 4;
+  ciArgs.args.interpret_1_3.forth = forthString;
+  ciArgs.args.interpret_1_3.arg1 = arg1;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_1_3.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_1_3.return1;
+  *ret2 = ciArgs.args.interpret_1_3.return2;
+  *ret3 = ciArgs.args.interpret_1_3.return3;
+  
+  return kCINoError;
+}
+
+long Interpret_2_3(char *forthString, CICell arg1, CICell arg2, CICell *ret1,
+                 CICell *ret2, CICell *ret3)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 4;
+  ciArgs.args.interpret_2_3.forth = forthString;
+  ciArgs.args.interpret_2_3.arg1 = arg1;
+  ciArgs.args.interpret_2_3.arg2 = arg2;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_2_3.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_2_3.return1;
+  *ret2 = ciArgs.args.interpret_2_3.return2;
+  *ret3 = ciArgs.args.interpret_2_3.return3;
+  
+  return kCINoError;
+}
+
+long Interpret_2_4(char *forthString, CICell arg1, CICell arg2, CICell *ret1,
+                 CICell *ret2, CICell *ret3, CICell *ret4)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 5;
+  ciArgs.args.interpret_2_4.forth = forthString;
+  ciArgs.args.interpret_2_4.arg1 = arg1;
+  ciArgs.args.interpret_2_4.arg2 = arg2;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_2_4.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_2_4.return1;
+  *ret2 = ciArgs.args.interpret_2_4.return2;
+  *ret3 = ciArgs.args.interpret_2_4.return3;
+  *ret4 = ciArgs.args.interpret_2_4.return4;
+  
+  return kCINoError;
+}
+
+long Interpret_2_0(char *forthString, CICell arg1, CICell arg2)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 1;
+  ciArgs.args.interpret_2_0.forth = forthString;
+  ciArgs.args.interpret_2_0.arg1 = arg1;
+  ciArgs.args.interpret_2_0.arg2 = arg2;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_2_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
+
+long Interpret_2_2(char *forthString, CICell arg1, CICell arg2, CICell *ret1,
+                 CICell *ret2)
+{
+  CIArgs ciArgs;
+  long ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 3;
+  ciArgs.nReturns = 3;
+  ciArgs.args.interpret_2_2.forth = forthString;
+  ciArgs.args.interpret_2_2.arg1 = arg1;
+  ciArgs.args.interpret_2_2.arg2 = arg2;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_2_2.catchResult != 0) return kCICatch;
+  
+  *ret1 = ciArgs.args.interpret_2_2.return1;
+  *ret2 = ciArgs.args.interpret_2_2.return2;
+  
+  return kCINoError;
+}
+
+long Interpret_3_0(char *forthString, CICell arg1, CICell arg2, CICell arg3)
+{
+  CIArgs ciArgs;
+  int ret;
+  
+  ciArgs.service = "interpret";
+  ciArgs.nArgs = 4;
+  ciArgs.nReturns = 1;
+  ciArgs.args.interpret_3_0.forth = forthString;
+  ciArgs.args.interpret_3_0.arg1 = arg1;
+  ciArgs.args.interpret_3_0.arg2 = arg2;
+  ciArgs.args.interpret_3_0.arg3 = arg3;
+  
+  ret = CallCI(&ciArgs);
+  if (ret != 0) return kCIError;
+  if (ciArgs.args.interpret_3_0.catchResult != 0) return kCICatch;
+  
+  return kCINoError;
+}
diff --git a/bootx.tproj/ci.subproj/ci_io.c b/bootx.tproj/ci.subproj/ci_io.c
new file mode 100644 (file)
index 0000000..8e39804
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  ci_io.c - Primitive OF based IO function for libclite.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <ci.h>
+#include <sl_words.h>
+#include <libclite.h>
+
+void  putchar(int ch)
+{
+  if ((ch == '\r') || (ch == '\n')) CallMethod_0_0(SLWordsIH, "slw_cr");
+  else CallMethod_1_0(SLWordsIH, "slw_emit", ch);
+}
diff --git a/bootx.tproj/ci.subproj/sl_words.c b/bootx.tproj/ci.subproj/sl_words.c
new file mode 100644 (file)
index 0000000..b259a8d
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  sl_words.c - Forth and C code for the sl_words package.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+#if SL_DEBUG
+void InitDebugWords(void);
+#endif
+
+extern const char gMacParts[];
+extern const char *gControl2Source[];
+
+CICell SLWordsIH = 0;
+
+long InitSLWords(long ofVers)
+{
+  long result, cnt;
+  
+  result = Interpret_1_1
+    (
+     " drop"
+     
+     " hex"
+     " unselect-dev"
+     
+     // Create the slWords pseudo-device
+     " \" /packages\" find-device"
+     " new-device"
+     " \" sl_words\" device-name"
+     
+     " : open true ;"
+     " : close ;"
+     
+     // Define all sl words here.
+     
+     // init the outputLevel
+     " 0 value outputLevel"
+     
+     // slw_set_output_level ( level -- )
+     " : slw_set_output_level"
+     "   dup 0= if 0 stdout ! then"
+     "   to outputLevel"
+     " ;"
+     
+     // slw_emit ( ch -- )
+     " : slw_emit 2 outputLevel <= if emit else drop then ;"
+     
+     // slw_cr ( -- )
+     " : slw_cr   2 outputLevel <= if cr then ;"
+     
+     // Static init stuff for keyboard
+     " 0 value keyboardIH"
+     " 20 buffer: keyMap"
+     
+     // slw_init_keymap ( keyboardIH -- keyMap )
+     " : slw_init_keymap"
+     "   to keyboardIH"
+     "   keyMap dup 20 0 fill"
+     " ;"
+     
+     // slw_update_keymap
+     " : slw_update_keymap { ; dpth }"
+     "   depth -> dpth"
+     "   keyboardIH if"
+     "     \" get-key-map\" keyboardIH $call-method"
+     "     depth dpth - 1 = if 20 then"
+     "     4 / 0 do"
+     "       dup i 4 * + l@ keyMap i 4 * + tuck l@ or swap l!"
+     "     loop drop"
+     "   then"
+     " ;"
+     
+     // Set up the spin cursor stuff.
+     " 0 value spinType"
+     " 0 value screenIH"
+     " 0 value cursorAddr"
+     " 0 value cursorX"
+     " 0 value cursorY"
+     " 0 value cursorW"
+     " 0 value cursorH"
+     " 0 value cursorPixelSize"
+     " 0 value cursorStage"
+     " 0 value cursorTime"
+     " 0 value cursorDelay"
+     
+     // slw_spin ( -- )
+     " : slw_spin"
+     "   screenIH 0<> cursorAddr 0<> and if"
+     "     get-msecs dup cursorTime - cursorDelay >= if"
+     "       to cursorTime"
+     "       slw_update_keymap"
+     "       spinType 0= if"
+     "         cursorStage 1+ 3 mod dup to cursorStage"
+     "         cursorW * cursorH * cursorAddr +"
+     "         cursorX cursorY cursorW cursorH"
+     "         \" draw-rectangle\" screenIH $call-method"
+     "       else"
+     "         cursorStage 1+ 6 mod dup to cursorStage"
+     "         dup 3 > if 6 swap - then dup >r"
+     "         1+ cursorW * cursorPixelSize * cursorAddr +"
+     "         cursorX cursorY cursorW cursorH r> 1+ -"
+     "         \" draw-rectangle\" screenIH $call-method"
+     "       then"
+     "     else"
+     "       drop"
+     "     then"
+     "   then"
+     " ;"
+     
+     // slw_spin_init ( screenIH cursorAddr cursorX cursorY cursorW cursorH --)
+     " : slw_spin_init"
+     "   to cursorH to cursorW"
+     "   to cursorY to cursorX"
+     "   to cursorAddr to screenIH"
+     "   d# 111 to cursorDelay"
+     "   ['] slw_spin to spin" 
+     " ;"
+     
+     // slw_spin_init2 ( screenIH cursorAddr cursorX cursorY cursorW cursorH--)
+     " : slw_spin_init2"
+     "   1 to spinType"
+     "   to cursorH dup FFFF and to cursorW 10 >> to cursorPixelSize"
+     "   to cursorY to cursorX"
+     "   to cursorAddr to screenIH"
+     "   d# 50 to cursorDelay"
+     "   ['] slw_spin to spin" 
+     " ;"
+     
+     // slw_pwd ( phandle addr len -- act )
+     " : slw_pwd"
+     "   ['] pwd 138 - execute"
+     " ;"
+     
+     // slw_sum ( adr len -- sum )
+     " : slw_sum { adr len }"
+     "   len 0 tuck do"
+     "     dup 1 and if 10000 or then"
+     "     1 >> adr i + c@ + ffff and"
+     "   loop"
+     " ;"
+     
+     " device-end"
+     
+     " 0 0 \" sl_words\" $open-package"
+     
+     , ofVers, &SLWordsIH);
+  
+  if (result != kCINoError) return result;
+  if (SLWordsIH == 0) return kCIError;
+  
+  if (gOFVersion < kOFVersion3x) {
+    result = Interpret_1_0
+      (
+       " dev /packages/obp-tftp"
+       " ['] load C + l!"
+       , kLoadSize);
+    if (result != kCINoError) return result;
+  }
+  
+  if (gOFVersion < kOFVersion3x) {
+    result = Interpret_1_0
+      (
+       " dev /packages/mac-parts"
+       " \" lame\" device-name"
+       " dev /packages"
+       " 1 byte-load"
+       " device-end"
+       , (long)gMacParts);
+    if (result != kCINoError) return result;
+  }
+  
+  if (gOFVersion < kOFVersion2x) {
+    for(cnt = 0; gControl2Source[cnt] != '\0'; cnt++) {
+      result = Interpret_0_0(gControl2Source[cnt]);
+      if (result == kCIError) return kCIError;
+      if (result == kCICatch) return kCINoError;
+    }
+  }
+  
+#if SL_DEBUG
+  InitDebugWords();
+#endif
+  
+  return kCINoError;
+}
+
+#if SL_DEBUG
+void InitDebugWords(void)
+{
+  Interpret_0_0
+    (
+     // .sc ( -- )
+     " : .sc ?state-valid ci-regs 4+ l@ l@ dup 0= \" Bad Stack\" (abort\")"
+     " cr .\" Stack Trace\""
+    " begin dup while dup 8 + l@ cr u. l@ repeat drop ;"
+     );
+}
+#endif
+
+void SetOutputLevel(long level)
+{
+  CallMethod_1_0(SLWordsIH, "slw_set_output_level", level);
+}
+
+
+char *InitKeyMap(CICell keyboardIH)
+{
+  long ret;
+  char *keyMap;
+  
+  ret = CallMethod_1_1(SLWordsIH, "slw_init_keymap",
+                      keyboardIH, (CICell *)&keyMap);
+  if (ret != kCINoError) return NULL;
+  
+  return keyMap;
+}
+
+void UpdateKeyMap(void)
+{
+  CallMethod_0_0(SLWordsIH, "slw_update_keymap");
+}
+
+
+void SpinInit(long spinType, CICell screenIH, char *cursorAddr,
+             long cursorX, long cursorY, long cursorW, long cursorH,
+             long pixelSize)
+{
+  if (spinType == 0) {
+    CallMethod_6_0(SLWordsIH, "slw_spin_init",
+                  screenIH, (long)cursorAddr,
+                  cursorX, cursorY, cursorW, cursorH);
+  } else {
+    CallMethod_6_0(SLWordsIH, "slw_spin_init2",
+                  screenIH, (long)cursorAddr,
+                  cursorX, cursorY, cursorW | pixelSize << 16, cursorH);
+  }
+}
+
+void Spin(void)
+{
+  CallMethod_0_0(SLWordsIH, "slw_spin");
+}
+
+long GetPackageProperty(CICell phandle, char *propName,
+                       char **propAddr, long *propLen)
+{
+  long ret, nameLen = strlen(propName);
+  
+  ret = Interpret_3_2("get-package-property if 0 0 then",
+                     phandle, nameLen, (CICell)propName,
+                     (CICell *)propLen, (CICell *)propAddr);
+  if ((ret != kCINoError) || (*propAddr == NULL)) return -1;
+  
+  return 0;
+}
diff --git a/bootx.tproj/fs.subproj/CaseTables.h b/bootx.tproj/fs.subproj/CaseTables.h
new file mode 100644 (file)
index 0000000..d4691b6
--- /dev/null
@@ -0,0 +1,275 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+       File:   CaseTables.h
+*/
+
+
+/*     The lower case table consists of a 256-entry high-byte table followed by some number of
+       256-entry subtables. The high-byte table contains either an offset to the subtable for
+       characters with that high byte or zero, which means that there are no case mappings or
+       ignored characters in that block. Ignored characters are mapped to zero.
+ */
+
+u_int16_t gLowerCaseTable[] = {
+
+       // High-byte indices ( == 0 iff no case mapping and no ignorables )
+
+       /* 0 */ 0x0100, 0x0200, 0x0000, 0x0300, 0x0400, 0x0500, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 1 */ 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 2 */ 0x0700, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 3 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 4 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 5 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 6 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 8 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 9 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* A */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* B */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* C */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* D */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* E */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* F */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x0A00,
+
+       // Table 1 (for high byte 0x00)
+
+       /* 0 */ 0xFFFF, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+       /* 1 */ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+       /* 2 */ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+       /* 3 */ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+       /* 4 */ 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       /* 5 */ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+       /* 6 */ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+       /* 7 */ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+       /* 8 */ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+       /* 9 */ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+       /* A */ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+       /* B */ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+       /* C */ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00E6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+       /* D */ 0x00F0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00F8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00FE, 0x00DF,
+       /* E */ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+       /* F */ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF,
+
+       // Table 2 (for high byte 0x01)
+
+       /* 0 */ 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010A, 0x010B, 0x010C, 0x010D, 0x010E, 0x010F,
+       /* 1 */ 0x0111, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F,
+       /* 2 */ 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0127, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F,
+       /* 3 */ 0x0130, 0x0131, 0x0133, 0x0133, 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x0140,
+       /* 4 */ 0x0140, 0x0142, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014B, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F,
+       /* 5 */ 0x0150, 0x0151, 0x0153, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015A, 0x015B, 0x015C, 0x015D, 0x015E, 0x015F,
+       /* 6 */ 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x0167, 0x0167, 0x0168, 0x0169, 0x016A, 0x016B, 0x016C, 0x016D, 0x016E, 0x016F,
+       /* 7 */ 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017A, 0x017B, 0x017C, 0x017D, 0x017E, 0x017F,
+       /* 8 */ 0x0180, 0x0253, 0x0183, 0x0183, 0x0185, 0x0185, 0x0254, 0x0188, 0x0188, 0x0256, 0x0257, 0x018C, 0x018C, 0x018D, 0x01DD, 0x0259,
+       /* 9 */ 0x025B, 0x0192, 0x0192, 0x0260, 0x0263, 0x0195, 0x0269, 0x0268, 0x0199, 0x0199, 0x019A, 0x019B, 0x026F, 0x0272, 0x019E, 0x0275,
+       /* A */ 0x01A0, 0x01A1, 0x01A3, 0x01A3, 0x01A5, 0x01A5, 0x01A6, 0x01A8, 0x01A8, 0x0283, 0x01AA, 0x01AB, 0x01AD, 0x01AD, 0x0288, 0x01AF,
+       /* B */ 0x01B0, 0x028A, 0x028B, 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x0292, 0x01B9, 0x01B9, 0x01BA, 0x01BB, 0x01BD, 0x01BD, 0x01BE, 0x01BF,
+       /* C */ 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C6, 0x01C6, 0x01C6, 0x01C9, 0x01C9, 0x01C9, 0x01CC, 0x01CC, 0x01CC, 0x01CD, 0x01CE, 0x01CF,
+       /* D */ 0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4, 0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC, 0x01DD, 0x01DE, 0x01DF,
+       /* E */ 0x01E0, 0x01E1, 0x01E2, 0x01E3, 0x01E5, 0x01E5, 0x01E6, 0x01E7, 0x01E8, 0x01E9, 0x01EA, 0x01EB, 0x01EC, 0x01ED, 0x01EE, 0x01EF,
+       /* F */ 0x01F0, 0x01F3, 0x01F3, 0x01F3, 0x01F4, 0x01F5, 0x01F6, 0x01F7, 0x01F8, 0x01F9, 0x01FA, 0x01FB, 0x01FC, 0x01FD, 0x01FE, 0x01FF,
+
+       // Table 3 (for high byte 0x03)
+
+       /* 0 */ 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, 0x030A, 0x030B, 0x030C, 0x030D, 0x030E, 0x030F,
+       /* 1 */ 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, 0x0318, 0x0319, 0x031A, 0x031B, 0x031C, 0x031D, 0x031E, 0x031F,
+       /* 2 */ 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, 0x032A, 0x032B, 0x032C, 0x032D, 0x032E, 0x032F,
+       /* 3 */ 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, 0x0338, 0x0339, 0x033A, 0x033B, 0x033C, 0x033D, 0x033E, 0x033F,
+       /* 4 */ 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0345, 0x0346, 0x0347, 0x0348, 0x0349, 0x034A, 0x034B, 0x034C, 0x034D, 0x034E, 0x034F,
+       /* 5 */ 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, 0x0358, 0x0359, 0x035A, 0x035B, 0x035C, 0x035D, 0x035E, 0x035F,
+       /* 6 */ 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, 0x0368, 0x0369, 0x036A, 0x036B, 0x036C, 0x036D, 0x036E, 0x036F,
+       /* 7 */ 0x0370, 0x0371, 0x0372, 0x0373, 0x0374, 0x0375, 0x0376, 0x0377, 0x0378, 0x0379, 0x037A, 0x037B, 0x037C, 0x037D, 0x037E, 0x037F,
+       /* 8 */ 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, 0x038A, 0x038B, 0x038C, 0x038D, 0x038E, 0x038F,
+       /* 9 */ 0x0390, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+       /* A */ 0x03C0, 0x03C1, 0x03A2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
+       /* B */ 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+       /* C */ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x03CF,
+       /* D */ 0x03D0, 0x03D1, 0x03D2, 0x03D3, 0x03D4, 0x03D5, 0x03D6, 0x03D7, 0x03D8, 0x03D9, 0x03DA, 0x03DB, 0x03DC, 0x03DD, 0x03DE, 0x03DF,
+       /* E */ 0x03E0, 0x03E1, 0x03E3, 0x03E3, 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, 0x03ED, 0x03ED, 0x03EF, 0x03EF,
+       /* F */ 0x03F0, 0x03F1, 0x03F2, 0x03F3, 0x03F4, 0x03F5, 0x03F6, 0x03F7, 0x03F8, 0x03F9, 0x03FA, 0x03FB, 0x03FC, 0x03FD, 0x03FE, 0x03FF,
+
+       // Table 4 (for high byte 0x04)
+
+       /* 0 */ 0x0400, 0x0401, 0x0452, 0x0403, 0x0454, 0x0455, 0x0456, 0x0407, 0x0458, 0x0459, 0x045A, 0x045B, 0x040C, 0x040D, 0x040E, 0x045F,
+       /* 1 */ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0419, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+       /* 2 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+       /* 3 */ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+       /* 4 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+       /* 5 */ 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x045D, 0x045E, 0x045F,
+       /* 6 */ 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B, 0x046D, 0x046D, 0x046F, 0x046F,
+       /* 7 */ 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475, 0x0476, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B, 0x047D, 0x047D, 0x047F, 0x047F,
+       /* 8 */ 0x0481, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, 0x048A, 0x048B, 0x048C, 0x048D, 0x048E, 0x048F,
+       /* 9 */ 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B, 0x049D, 0x049D, 0x049F, 0x049F,
+       /* A */ 0x04A1, 0x04A1, 0x04A3, 0x04A3, 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB, 0x04AD, 0x04AD, 0x04AF, 0x04AF,
+       /* B */ 0x04B1, 0x04B1, 0x04B3, 0x04B3, 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB, 0x04BD, 0x04BD, 0x04BF, 0x04BF,
+       /* C */ 0x04C0, 0x04C1, 0x04C2, 0x04C4, 0x04C4, 0x04C5, 0x04C6, 0x04C8, 0x04C8, 0x04C9, 0x04CA, 0x04CC, 0x04CC, 0x04CD, 0x04CE, 0x04CF,
+       /* D */ 0x04D0, 0x04D1, 0x04D2, 0x04D3, 0x04D4, 0x04D5, 0x04D6, 0x04D7, 0x04D8, 0x04D9, 0x04DA, 0x04DB, 0x04DC, 0x04DD, 0x04DE, 0x04DF,
+       /* E */ 0x04E0, 0x04E1, 0x04E2, 0x04E3, 0x04E4, 0x04E5, 0x04E6, 0x04E7, 0x04E8, 0x04E9, 0x04EA, 0x04EB, 0x04EC, 0x04ED, 0x04EE, 0x04EF,
+       /* F */ 0x04F0, 0x04F1, 0x04F2, 0x04F3, 0x04F4, 0x04F5, 0x04F6, 0x04F7, 0x04F8, 0x04F9, 0x04FA, 0x04FB, 0x04FC, 0x04FD, 0x04FE, 0x04FF,
+
+       // Table 5 (for high byte 0x05)
+
+       /* 0 */ 0x0500, 0x0501, 0x0502, 0x0503, 0x0504, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, 0x050A, 0x050B, 0x050C, 0x050D, 0x050E, 0x050F,
+       /* 1 */ 0x0510, 0x0511, 0x0512, 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051A, 0x051B, 0x051C, 0x051D, 0x051E, 0x051F,
+       /* 2 */ 0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052A, 0x052B, 0x052C, 0x052D, 0x052E, 0x052F,
+       /* 3 */ 0x0530, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, 0x056A, 0x056B, 0x056C, 0x056D, 0x056E, 0x056F,
+       /* 4 */ 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, 0x0578, 0x0579, 0x057A, 0x057B, 0x057C, 0x057D, 0x057E, 0x057F,
+       /* 5 */ 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0557, 0x0558, 0x0559, 0x055A, 0x055B, 0x055C, 0x055D, 0x055E, 0x055F,
+       /* 6 */ 0x0560, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, 0x056A, 0x056B, 0x056C, 0x056D, 0x056E, 0x056F,
+       /* 7 */ 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, 0x0578, 0x0579, 0x057A, 0x057B, 0x057C, 0x057D, 0x057E, 0x057F,
+       /* 8 */ 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, 0x058A, 0x058B, 0x058C, 0x058D, 0x058E, 0x058F,
+       /* 9 */ 0x0590, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, 0x0598, 0x0599, 0x059A, 0x059B, 0x059C, 0x059D, 0x059E, 0x059F,
+       /* A */ 0x05A0, 0x05A1, 0x05A2, 0x05A3, 0x05A4, 0x05A5, 0x05A6, 0x05A7, 0x05A8, 0x05A9, 0x05AA, 0x05AB, 0x05AC, 0x05AD, 0x05AE, 0x05AF,
+       /* B */ 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
+       /* C */ 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05C4, 0x05C5, 0x05C6, 0x05C7, 0x05C8, 0x05C9, 0x05CA, 0x05CB, 0x05CC, 0x05CD, 0x05CE, 0x05CF,
+       /* D */ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
+       /* E */ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x05EB, 0x05EC, 0x05ED, 0x05EE, 0x05EF,
+       /* F */ 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x05F5, 0x05F6, 0x05F7, 0x05F8, 0x05F9, 0x05FA, 0x05FB, 0x05FC, 0x05FD, 0x05FE, 0x05FF,
+
+       // Table 6 (for high byte 0x10)
+
+       /* 0 */ 0x1000, 0x1001, 0x1002, 0x1003, 0x1004, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, 0x100A, 0x100B, 0x100C, 0x100D, 0x100E, 0x100F,
+       /* 1 */ 0x1010, 0x1011, 0x1012, 0x1013, 0x1014, 0x1015, 0x1016, 0x1017, 0x1018, 0x1019, 0x101A, 0x101B, 0x101C, 0x101D, 0x101E, 0x101F,
+       /* 2 */ 0x1020, 0x1021, 0x1022, 0x1023, 0x1024, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, 0x102A, 0x102B, 0x102C, 0x102D, 0x102E, 0x102F,
+       /* 3 */ 0x1030, 0x1031, 0x1032, 0x1033, 0x1034, 0x1035, 0x1036, 0x1037, 0x1038, 0x1039, 0x103A, 0x103B, 0x103C, 0x103D, 0x103E, 0x103F,
+       /* 4 */ 0x1040, 0x1041, 0x1042, 0x1043, 0x1044, 0x1045, 0x1046, 0x1047, 0x1048, 0x1049, 0x104A, 0x104B, 0x104C, 0x104D, 0x104E, 0x104F,
+       /* 5 */ 0x1050, 0x1051, 0x1052, 0x1053, 0x1054, 0x1055, 0x1056, 0x1057, 0x1058, 0x1059, 0x105A, 0x105B, 0x105C, 0x105D, 0x105E, 0x105F,
+       /* 6 */ 0x1060, 0x1061, 0x1062, 0x1063, 0x1064, 0x1065, 0x1066, 0x1067, 0x1068, 0x1069, 0x106A, 0x106B, 0x106C, 0x106D, 0x106E, 0x106F,
+       /* 7 */ 0x1070, 0x1071, 0x1072, 0x1073, 0x1074, 0x1075, 0x1076, 0x1077, 0x1078, 0x1079, 0x107A, 0x107B, 0x107C, 0x107D, 0x107E, 0x107F,
+       /* 8 */ 0x1080, 0x1081, 0x1082, 0x1083, 0x1084, 0x1085, 0x1086, 0x1087, 0x1088, 0x1089, 0x108A, 0x108B, 0x108C, 0x108D, 0x108E, 0x108F,
+       /* 9 */ 0x1090, 0x1091, 0x1092, 0x1093, 0x1094, 0x1095, 0x1096, 0x1097, 0x1098, 0x1099, 0x109A, 0x109B, 0x109C, 0x109D, 0x109E, 0x109F,
+       /* A */ 0x10D0, 0x10D1, 0x10D2, 0x10D3, 0x10D4, 0x10D5, 0x10D6, 0x10D7, 0x10D8, 0x10D9, 0x10DA, 0x10DB, 0x10DC, 0x10DD, 0x10DE, 0x10DF,
+       /* B */ 0x10E0, 0x10E1, 0x10E2, 0x10E3, 0x10E4, 0x10E5, 0x10E6, 0x10E7, 0x10E8, 0x10E9, 0x10EA, 0x10EB, 0x10EC, 0x10ED, 0x10EE, 0x10EF,
+       /* C */ 0x10F0, 0x10F1, 0x10F2, 0x10F3, 0x10F4, 0x10F5, 0x10C6, 0x10C7, 0x10C8, 0x10C9, 0x10CA, 0x10CB, 0x10CC, 0x10CD, 0x10CE, 0x10CF,
+       /* D */ 0x10D0, 0x10D1, 0x10D2, 0x10D3, 0x10D4, 0x10D5, 0x10D6, 0x10D7, 0x10D8, 0x10D9, 0x10DA, 0x10DB, 0x10DC, 0x10DD, 0x10DE, 0x10DF,
+       /* E */ 0x10E0, 0x10E1, 0x10E2, 0x10E3, 0x10E4, 0x10E5, 0x10E6, 0x10E7, 0x10E8, 0x10E9, 0x10EA, 0x10EB, 0x10EC, 0x10ED, 0x10EE, 0x10EF,
+       /* F */ 0x10F0, 0x10F1, 0x10F2, 0x10F3, 0x10F4, 0x10F5, 0x10F6, 0x10F7, 0x10F8, 0x10F9, 0x10FA, 0x10FB, 0x10FC, 0x10FD, 0x10FE, 0x10FF,
+
+       // Table 7 (for high byte 0x20)
+
+       /* 0 */ 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 1 */ 0x2010, 0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2016, 0x2017, 0x2018, 0x2019, 0x201A, 0x201B, 0x201C, 0x201D, 0x201E, 0x201F,
+       /* 2 */ 0x2020, 0x2021, 0x2022, 0x2023, 0x2024, 0x2025, 0x2026, 0x2027, 0x2028, 0x2029, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x202F,
+       /* 3 */ 0x2030, 0x2031, 0x2032, 0x2033, 0x2034, 0x2035, 0x2036, 0x2037, 0x2038, 0x2039, 0x203A, 0x203B, 0x203C, 0x203D, 0x203E, 0x203F,
+       /* 4 */ 0x2040, 0x2041, 0x2042, 0x2043, 0x2044, 0x2045, 0x2046, 0x2047, 0x2048, 0x2049, 0x204A, 0x204B, 0x204C, 0x204D, 0x204E, 0x204F,
+       /* 5 */ 0x2050, 0x2051, 0x2052, 0x2053, 0x2054, 0x2055, 0x2056, 0x2057, 0x2058, 0x2059, 0x205A, 0x205B, 0x205C, 0x205D, 0x205E, 0x205F,
+       /* 6 */ 0x2060, 0x2061, 0x2062, 0x2063, 0x2064, 0x2065, 0x2066, 0x2067, 0x2068, 0x2069, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+       /* 7 */ 0x2070, 0x2071, 0x2072, 0x2073, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079, 0x207A, 0x207B, 0x207C, 0x207D, 0x207E, 0x207F,
+       /* 8 */ 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089, 0x208A, 0x208B, 0x208C, 0x208D, 0x208E, 0x208F,
+       /* 9 */ 0x2090, 0x2091, 0x2092, 0x2093, 0x2094, 0x2095, 0x2096, 0x2097, 0x2098, 0x2099, 0x209A, 0x209B, 0x209C, 0x209D, 0x209E, 0x209F,
+       /* A */ 0x20A0, 0x20A1, 0x20A2, 0x20A3, 0x20A4, 0x20A5, 0x20A6, 0x20A7, 0x20A8, 0x20A9, 0x20AA, 0x20AB, 0x20AC, 0x20AD, 0x20AE, 0x20AF,
+       /* B */ 0x20B0, 0x20B1, 0x20B2, 0x20B3, 0x20B4, 0x20B5, 0x20B6, 0x20B7, 0x20B8, 0x20B9, 0x20BA, 0x20BB, 0x20BC, 0x20BD, 0x20BE, 0x20BF,
+       /* C */ 0x20C0, 0x20C1, 0x20C2, 0x20C3, 0x20C4, 0x20C5, 0x20C6, 0x20C7, 0x20C8, 0x20C9, 0x20CA, 0x20CB, 0x20CC, 0x20CD, 0x20CE, 0x20CF,
+       /* D */ 0x20D0, 0x20D1, 0x20D2, 0x20D3, 0x20D4, 0x20D5, 0x20D6, 0x20D7, 0x20D8, 0x20D9, 0x20DA, 0x20DB, 0x20DC, 0x20DD, 0x20DE, 0x20DF,
+       /* E */ 0x20E0, 0x20E1, 0x20E2, 0x20E3, 0x20E4, 0x20E5, 0x20E6, 0x20E7, 0x20E8, 0x20E9, 0x20EA, 0x20EB, 0x20EC, 0x20ED, 0x20EE, 0x20EF,
+       /* F */ 0x20F0, 0x20F1, 0x20F2, 0x20F3, 0x20F4, 0x20F5, 0x20F6, 0x20F7, 0x20F8, 0x20F9, 0x20FA, 0x20FB, 0x20FC, 0x20FD, 0x20FE, 0x20FF,
+
+       // Table 8 (for high byte 0x21)
+
+       /* 0 */ 0x2100, 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2109, 0x210A, 0x210B, 0x210C, 0x210D, 0x210E, 0x210F,
+       /* 1 */ 0x2110, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118, 0x2119, 0x211A, 0x211B, 0x211C, 0x211D, 0x211E, 0x211F,
+       /* 2 */ 0x2120, 0x2121, 0x2122, 0x2123, 0x2124, 0x2125, 0x2126, 0x2127, 0x2128, 0x2129, 0x212A, 0x212B, 0x212C, 0x212D, 0x212E, 0x212F,
+       /* 3 */ 0x2130, 0x2131, 0x2132, 0x2133, 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213A, 0x213B, 0x213C, 0x213D, 0x213E, 0x213F,
+       /* 4 */ 0x2140, 0x2141, 0x2142, 0x2143, 0x2144, 0x2145, 0x2146, 0x2147, 0x2148, 0x2149, 0x214A, 0x214B, 0x214C, 0x214D, 0x214E, 0x214F,
+       /* 5 */ 0x2150, 0x2151, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215A, 0x215B, 0x215C, 0x215D, 0x215E, 0x215F,
+       /* 6 */ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, 0x217D, 0x217E, 0x217F,
+       /* 7 */ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x217C, 0x217D, 0x217E, 0x217F,
+       /* 8 */ 0x2180, 0x2181, 0x2182, 0x2183, 0x2184, 0x2185, 0x2186, 0x2187, 0x2188, 0x2189, 0x218A, 0x218B, 0x218C, 0x218D, 0x218E, 0x218F,
+       /* 9 */ 0x2190, 0x2191, 0x2192, 0x2193, 0x2194, 0x2195, 0x2196, 0x2197, 0x2198, 0x2199, 0x219A, 0x219B, 0x219C, 0x219D, 0x219E, 0x219F,
+       /* A */ 0x21A0, 0x21A1, 0x21A2, 0x21A3, 0x21A4, 0x21A5, 0x21A6, 0x21A7, 0x21A8, 0x21A9, 0x21AA, 0x21AB, 0x21AC, 0x21AD, 0x21AE, 0x21AF,
+       /* B */ 0x21B0, 0x21B1, 0x21B2, 0x21B3, 0x21B4, 0x21B5, 0x21B6, 0x21B7, 0x21B8, 0x21B9, 0x21BA, 0x21BB, 0x21BC, 0x21BD, 0x21BE, 0x21BF,
+       /* C */ 0x21C0, 0x21C1, 0x21C2, 0x21C3, 0x21C4, 0x21C5, 0x21C6, 0x21C7, 0x21C8, 0x21C9, 0x21CA, 0x21CB, 0x21CC, 0x21CD, 0x21CE, 0x21CF,
+       /* D */ 0x21D0, 0x21D1, 0x21D2, 0x21D3, 0x21D4, 0x21D5, 0x21D6, 0x21D7, 0x21D8, 0x21D9, 0x21DA, 0x21DB, 0x21DC, 0x21DD, 0x21DE, 0x21DF,
+       /* E */ 0x21E0, 0x21E1, 0x21E2, 0x21E3, 0x21E4, 0x21E5, 0x21E6, 0x21E7, 0x21E8, 0x21E9, 0x21EA, 0x21EB, 0x21EC, 0x21ED, 0x21EE, 0x21EF,
+       /* F */ 0x21F0, 0x21F1, 0x21F2, 0x21F3, 0x21F4, 0x21F5, 0x21F6, 0x21F7, 0x21F8, 0x21F9, 0x21FA, 0x21FB, 0x21FC, 0x21FD, 0x21FE, 0x21FF,
+
+       // Table 9 (for high byte 0xFE)
+
+       /* 0 */ 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F,
+       /* 1 */ 0xFE10, 0xFE11, 0xFE12, 0xFE13, 0xFE14, 0xFE15, 0xFE16, 0xFE17, 0xFE18, 0xFE19, 0xFE1A, 0xFE1B, 0xFE1C, 0xFE1D, 0xFE1E, 0xFE1F,
+       /* 2 */ 0xFE20, 0xFE21, 0xFE22, 0xFE23, 0xFE24, 0xFE25, 0xFE26, 0xFE27, 0xFE28, 0xFE29, 0xFE2A, 0xFE2B, 0xFE2C, 0xFE2D, 0xFE2E, 0xFE2F,
+       /* 3 */ 0xFE30, 0xFE31, 0xFE32, 0xFE33, 0xFE34, 0xFE35, 0xFE36, 0xFE37, 0xFE38, 0xFE39, 0xFE3A, 0xFE3B, 0xFE3C, 0xFE3D, 0xFE3E, 0xFE3F,
+       /* 4 */ 0xFE40, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE45, 0xFE46, 0xFE47, 0xFE48, 0xFE49, 0xFE4A, 0xFE4B, 0xFE4C, 0xFE4D, 0xFE4E, 0xFE4F,
+       /* 5 */ 0xFE50, 0xFE51, 0xFE52, 0xFE53, 0xFE54, 0xFE55, 0xFE56, 0xFE57, 0xFE58, 0xFE59, 0xFE5A, 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0xFE5F,
+       /* 6 */ 0xFE60, 0xFE61, 0xFE62, 0xFE63, 0xFE64, 0xFE65, 0xFE66, 0xFE67, 0xFE68, 0xFE69, 0xFE6A, 0xFE6B, 0xFE6C, 0xFE6D, 0xFE6E, 0xFE6F,
+       /* 7 */ 0xFE70, 0xFE71, 0xFE72, 0xFE73, 0xFE74, 0xFE75, 0xFE76, 0xFE77, 0xFE78, 0xFE79, 0xFE7A, 0xFE7B, 0xFE7C, 0xFE7D, 0xFE7E, 0xFE7F,
+       /* 8 */ 0xFE80, 0xFE81, 0xFE82, 0xFE83, 0xFE84, 0xFE85, 0xFE86, 0xFE87, 0xFE88, 0xFE89, 0xFE8A, 0xFE8B, 0xFE8C, 0xFE8D, 0xFE8E, 0xFE8F,
+       /* 9 */ 0xFE90, 0xFE91, 0xFE92, 0xFE93, 0xFE94, 0xFE95, 0xFE96, 0xFE97, 0xFE98, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, 0xFE9D, 0xFE9E, 0xFE9F,
+       /* A */ 0xFEA0, 0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4, 0xFEA5, 0xFEA6, 0xFEA7, 0xFEA8, 0xFEA9, 0xFEAA, 0xFEAB, 0xFEAC, 0xFEAD, 0xFEAE, 0xFEAF,
+       /* B */ 0xFEB0, 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4, 0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8, 0xFEB9, 0xFEBA, 0xFEBB, 0xFEBC, 0xFEBD, 0xFEBE, 0xFEBF,
+       /* C */ 0xFEC0, 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4, 0xFEC5, 0xFEC6, 0xFEC7, 0xFEC8, 0xFEC9, 0xFECA, 0xFECB, 0xFECC, 0xFECD, 0xFECE, 0xFECF,
+       /* D */ 0xFED0, 0xFED1, 0xFED2, 0xFED3, 0xFED4, 0xFED5, 0xFED6, 0xFED7, 0xFED8, 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, 0xFEDD, 0xFEDE, 0xFEDF,
+       /* E */ 0xFEE0, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4, 0xFEE5, 0xFEE6, 0xFEE7, 0xFEE8, 0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC, 0xFEED, 0xFEEE, 0xFEEF,
+       /* F */ 0xFEF0, 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, 0xFEF5, 0xFEF6, 0xFEF7, 0xFEF8, 0xFEF9, 0xFEFA, 0xFEFB, 0xFEFC, 0xFEFD, 0xFEFE, 0x0000,
+
+       // Table 10 (for high byte 0xFF)
+
+       /* 0 */ 0xFF00, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F,
+       /* 1 */ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F,
+       /* 2 */ 0xFF20, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F,
+       /* 3 */ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF3E, 0xFF3F,
+       /* 4 */ 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F,
+       /* 5 */ 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFF5E, 0xFF5F,
+       /* 6 */ 0xFF60, 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, 0xFF68, 0xFF69, 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F,
+       /* 7 */ 0xFF70, 0xFF71, 0xFF72, 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B, 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F,
+       /* 8 */ 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84, 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D, 0xFF8E, 0xFF8F,
+       /* 9 */ 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96, 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F,
+       /* A */ 0xFFA0, 0xFFA1, 0xFFA2, 0xFFA3, 0xFFA4, 0xFFA5, 0xFFA6, 0xFFA7, 0xFFA8, 0xFFA9, 0xFFAA, 0xFFAB, 0xFFAC, 0xFFAD, 0xFFAE, 0xFFAF,
+       /* B */ 0xFFB0, 0xFFB1, 0xFFB2, 0xFFB3, 0xFFB4, 0xFFB5, 0xFFB6, 0xFFB7, 0xFFB8, 0xFFB9, 0xFFBA, 0xFFBB, 0xFFBC, 0xFFBD, 0xFFBE, 0xFFBF,
+       /* C */ 0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF,
+       /* D */ 0xFFD0, 0xFFD1, 0xFFD2, 0xFFD3, 0xFFD4, 0xFFD5, 0xFFD6, 0xFFD7, 0xFFD8, 0xFFD9, 0xFFDA, 0xFFDB, 0xFFDC, 0xFFDD, 0xFFDE, 0xFFDF,
+       /* E */ 0xFFE0, 0xFFE1, 0xFFE2, 0xFFE3, 0xFFE4, 0xFFE5, 0xFFE6, 0xFFE7, 0xFFE8, 0xFFE9, 0xFFEA, 0xFFEB, 0xFFEC, 0xFFED, 0xFFEE, 0xFFEF,
+       /* F */ 0xFFF0, 0xFFF1, 0xFFF2, 0xFFF3, 0xFFF4, 0xFFF5, 0xFFF6, 0xFFF7, 0xFFF8, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
+};
+
+
+/* RelString case folding table */
+
+unsigned short gCompareTable[] = {
+
+       /* 0 */ 0x0000, 0x0100, 0x0200, 0x0300, 0x0400, 0x0500, 0x0600, 0x0700, 0x0800, 0x0900, 0x0A00, 0x0B00, 0x0C00, 0x0D00, 0x0E00, 0x0F00, 
+       /* 1 */ 0x1000, 0x1100, 0x1200, 0x1300, 0x1400, 0x1500, 0x1600, 0x1700, 0x1800, 0x1900, 0x1A00, 0x1B00, 0x1C00, 0x1D00, 0x1E00, 0x1F00, 
+       /* 2 */ 0x2000, 0x2100, 0x2200, 0x2300, 0x2400, 0x2500, 0x2600, 0x2700, 0x2800, 0x2900, 0x2A00, 0x2B00, 0x2C00, 0x2D00, 0x2E00, 0x2F00, 
+       /* 3 */ 0x3000, 0x3100, 0x3200, 0x3300, 0x3400, 0x3500, 0x3600, 0x3700, 0x3800, 0x3900, 0x3A00, 0x3B00, 0x3C00, 0x3D00, 0x3E00, 0x3F00, 
+       /* 4 */ 0x4000, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, 0x4700, 0x4800, 0x4900, 0x4A00, 0x4B00, 0x4C00, 0x4D00, 0x4E00, 0x4F00, 
+       /* 5 */ 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, 0x5700, 0x5800, 0x5900, 0x5A00, 0x5B00, 0x5C00, 0x5D00, 0x5E00, 0x5F00, 
+
+       // 0x60 maps to 'a'
+       // range 0x61 to 0x7a ('a' to 'z') map to upper case
+
+       /* 6 */ 0x4180, 0x4100, 0x4200, 0x4300, 0x4400, 0x4500, 0x4600, 0x4700, 0x4800, 0x4900, 0x4A00, 0x4B00, 0x4C00, 0x4D00, 0x4E00, 0x4F00, 
+       /* 7 */ 0x5000, 0x5100, 0x5200, 0x5300, 0x5400, 0x5500, 0x5600, 0x5700, 0x5800, 0x5900, 0x5A00, 0x7B00, 0x7C00, 0x7D00, 0x7E00, 0x7F00, 
+
+       // range 0x80 to 0xd8 gets mapped...
+       
+       /* 8 */ 0x4108, 0x410C, 0x4310, 0x4502, 0x4E0A, 0x4F08, 0x5508, 0x4182, 0x4104, 0x4186, 0x4108, 0x410A, 0x410C, 0x4310, 0x4502, 0x4584,
+       /* 9 */ 0x4586, 0x4588, 0x4982, 0x4984, 0x4986, 0x4988, 0x4E0A, 0x4F82, 0x4F84, 0x4F86, 0x4F08, 0x4F0A, 0x5582, 0x5584, 0x5586, 0x5508,
+       /* A */ 0xA000, 0xA100, 0xA200, 0xA300, 0xA400, 0xA500, 0xA600, 0x5382, 0xA800, 0xA900, 0xAA00, 0xAB00, 0xAC00, 0xAD00, 0x4114, 0x4F0E,
+       /* B */ 0xB000, 0xB100, 0xB200, 0xB300, 0xB400, 0xB500, 0xB600, 0xB700, 0xB800, 0xB900, 0xBA00, 0x4192, 0x4F92, 0xBD00, 0x4114, 0x4F0E,
+       /* C */ 0xC000, 0xC100, 0xC200, 0xC300, 0xC400, 0xC500, 0xC600, 0x2206, 0x2208, 0xC900, 0x2000, 0x4104, 0x410A, 0x4F0A, 0x4F14, 0x4F14,
+       /* D */ 0xD000, 0xD100, 0x2202, 0x2204, 0x2702, 0x2704, 0xD600, 0xD700, 0x5988, 0xD900, 0xDA00, 0xDB00, 0xDC00, 0xDD00, 0xDE00, 0xDF00,
+
+       /* E */ 0xE000, 0xE100, 0xE200, 0xE300, 0xE400, 0xE500, 0xE600, 0xE700, 0xE800, 0xE900, 0xEA00, 0xEB00, 0xEC00, 0xED00, 0xEE00, 0xEF00, 
+       /* F */ 0xF000, 0xF100, 0xF200, 0xF300, 0xF400, 0xF500, 0xF600, 0xF700, 0xF800, 0xF900, 0xFA00, 0xFB00, 0xFC00, 0xFD00, 0xFE00, 0xFF00, 
+
+};
diff --git a/bootx.tproj/fs.subproj/HFSCompare.c b/bootx.tproj/fs.subproj/HFSCompare.c
new file mode 100644 (file)
index 0000000..24efaef
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  HFSCompare.c - Functions for working with and comparing HFS nams.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+#include "CaseTables.h"
+
+
+//_______________________________________________________________________
+//
+//     Routine:        FastRelString
+//
+//     Output:         returns -1 if str1 < str2
+//                             returns  1 if str1 > str2
+//                             return   0 if equal
+//
+//_______________________________________________________________________
+
+int32_t        FastRelString(char *str1, char *str2 )
+{
+       int32_t  bestGuess;
+       u_int8_t length, length2;
+
+       
+       length = *(str1++);
+       length2 = *(str2++);
+
+       if (length == length2)
+               bestGuess = 0;
+       else if (length < length2)
+               bestGuess = -1;
+       else
+       {
+               bestGuess = 1;
+               length = length2;
+       }
+
+       while (length--)
+       {
+               u_int32_t aChar, bChar;
+
+               aChar = *(str1++);
+               bChar = *(str2++);
+               
+               if (aChar != bChar)     /* If they don't match exacly, do case conversion */
+               {       
+                       u_int16_t aSortWord, bSortWord;
+
+                       aSortWord = gCompareTable[aChar];
+                       bSortWord = gCompareTable[bChar];
+
+                       if (aSortWord > bSortWord)
+                               return 1;
+
+                       if (aSortWord < bSortWord)
+                               return -1;
+               }
+               
+               /*
+                * If characters match exactly, then go on to next character
+                * immediately without doing any extra work.
+                */
+       }
+       
+       /* if you got to here, then return bestGuess */
+       return bestGuess;
+}      
+
+
+
+//
+//     FastUnicodeCompare - Compare two Unicode strings; produce a relative ordering
+//
+//         IF                          RESULT
+//     --------------------------
+//     str1 < str2             =>      -1
+//     str1 = str2             =>       0
+//     str1 > str2             =>      +1
+//
+//     The lower case table starts with 256 entries (one for each of the upper bytes
+//     of the original Unicode char).  If that entry is zero, then all characters with
+//     that upper byte are already case folded.  If the entry is non-zero, then it is
+//     the _index_ (not byte offset) of the start of the sub-table for the characters
+//     with that upper byte.  All ignorable characters are folded to the value zero.
+//
+//     In pseudocode:
+//
+//             Let c = source Unicode character
+//             Let table[] = lower case table
+//
+//             lower = table[highbyte(c)]
+//             if (lower == 0)
+//                     lower = c
+//             else
+//                     lower = table[lower+lowbyte(c)]
+//
+//             if (lower == 0)
+//                     ignore this character
+//
+//     To handle ignorable characters, we now need a loop to find the next valid character.
+//     Also, we can't pre-compute the number of characters to compare; the string length might
+//     be larger than the number of non-ignorable characters.  Further, we must be able to handle
+//     ignorable characters at any point in the string, including as the first or last characters.
+//     We use a zero value as a sentinel to detect both end-of-string and ignorable characters.
+//     Since the File Manager doesn't prevent the NUL character (value zero) as part of a filename,
+//     the case mapping table is assumed to map u+0000 to some non-zero value (like 0xFFFF, which is
+//     an invalid Unicode character).
+//
+//     Pseudocode:
+//
+//             while (1) {
+//                     c1 = GetNextValidChar(str1)                     //      returns zero if at end of string
+//                     c2 = GetNextValidChar(str2)
+//
+//                     if (c1 != c2) break                                     //      found a difference
+//
+//                     if (c1 == 0)                                            //      reached end of string on both strings at once?
+//                             return 0;                                               //      yes, so strings are equal
+//             }
+//
+//             // When we get here, c1 != c2.  So, we just need to determine which one is less.
+//             if (c1 < c2)
+//                     return -1;
+//             else
+//                     return 1;
+//
+
+int32_t FastUnicodeCompare (u_int16_t *str1, register u_int32_t length1,
+                           u_int16_t *str2, register u_int32_t length2)
+{
+       register u_int16_t c1,c2;
+       register u_int16_t temp;
+
+       while (1) {
+               /* Set default values for c1, c2 in case there are no more valid chars */
+               c1 = 0;
+               c2 = 0;
+               
+               /* Find next non-ignorable char from str1, or zero if no more */
+               while (length1 && c1 == 0) {
+                       c1 = *(str1++);
+                       --length1;
+                       if ((temp = gLowerCaseTable[c1>>8]) != 0)               // is there a subtable for this upper byte?
+                               c1 = gLowerCaseTable[temp + (c1 & 0x00FF)];     // yes, so fold the char
+               }
+               
+               
+               /* Find next non-ignorable char from str2, or zero if no more */
+               while (length2 && c2 == 0) {
+                       c2 = *(str2++);
+                       --length2;
+                       if ((temp = gLowerCaseTable[c2>>8]) != 0)               // is there a subtable for this upper byte?
+                               c2 = gLowerCaseTable[temp + (c2 & 0x00FF)];     // yes, so fold the char
+               }
+               
+               if (c1 != c2)   /* found a difference, so stop looping */
+                       break;
+               
+               if (c1 == 0)            /* did we reach the end of both strings at the same time? */
+                       return 0;       /* yes, so strings are equal */
+       }
+       
+       if (c1 < c2)
+               return -1;
+       else
+               return 1;
+}
+
+
+/*
+ * UTF-8 (UCS Transformation Format)
+ *
+ * The following subset of UTF-8 is used to encode UCS-2 filenames. It
+ * requires a maximum of three 3 bytes per UCS-2 character.  Only the
+ * shortest encoding required to represent the significant UCS-2 bits
+ * is legal.
+ * 
+ * UTF-8 Multibyte Codes
+ *
+ * Bytes   Bits   UCS-2 Min   UCS-2 Max   UTF-8 Byte Sequence (binary)
+ * -------------------------------------------------------------------
+ *   1       7     0x0000      0x007F      0xxxxxxx
+ *   2      11     0x0080      0x07FF      110xxxxx 10xxxxxx
+ *   3      16     0x0800      0xFFFF      1110xxxx 10xxxxxx 10xxxxxx
+ * -------------------------------------------------------------------
+ */
+
+
+/*
+ * utf_encodestr - Encodes the UCS-2 (Unicode) string at ucsp into a
+ * null terminated UTF-8 string at utf8p.
+ *
+ * ucslen is the number of UCS-2 input characters (not bytes)
+ * bufsize is the size of the output buffer in bytes
+ */
+void
+utf_encodestr(const u_int16_t *ucsp, int ucslen, u_int8_t *utf8p, u_int32_t bufsize)
+{
+       u_int8_t *bufend;
+       u_int16_t ucs_ch;
+       
+       bufend = utf8p + bufsize;
+
+       while (ucslen-- > 0) {
+               ucs_ch = *ucsp++;
+
+               if (ucs_ch < 0x0080) {
+                       if (utf8p >= bufend)
+                               break;
+                       if (ucs_ch == '\0')
+                               continue;       /* skip over embedded NULLs */
+                       *utf8p++ = ucs_ch;
+
+               } else if (ucs_ch < 0x800) {
+                       if ((utf8p + 1) >= bufend)
+                               break;
+                       *utf8p++ = (ucs_ch >> 6)   | 0xc0;
+                       *utf8p++ = (ucs_ch & 0x3f) | 0x80;
+
+               } else {
+                       if ((utf8p + 2) >= bufend)
+                               break;
+                       *utf8p++ = (ucs_ch >> 12)         | 0xe0;
+                       *utf8p++ = ((ucs_ch >> 6) & 0x3f) | 0x80;
+                       *utf8p++ = ((ucs_ch) & 0x3f)      | 0x80;
+               }
+               
+       }
+       
+       *utf8p = '\0';
+}
+
+
+/*
+ * utf_decodestr - Decodes the null terminated UTF-8 string at
+ * utf8p into a UCS-2 (Unicode) string at ucsp.
+ *
+ * ucslen is the number of UCS-2 output characters (not bytes)
+ * bufsize is the size of the output buffer in bytes
+ */
+void
+utf_decodestr(const u_int8_t *utf8p, u_int16_t *ucsp, u_int16_t *ucslen, u_int32_t bufsize)
+{
+       u_int16_t *bufstart;
+       u_int16_t *bufend;
+       u_int16_t ucs_ch;
+       u_int8_t  byte;
+
+       bufstart = ucsp;
+       bufend = (u_int16_t *)((u_int8_t *)ucsp + bufsize);
+
+       while ((byte = *utf8p++) != '\0') {
+               if (ucsp >= bufend)
+                       break;
+
+               /* check for ascii */
+               if (byte < 0x80) {
+                       ucs_ch = byte;
+                       
+                       *ucsp++ = ucs_ch;
+                       continue;
+               }
+
+               switch (byte & 0xf0) {
+               /*  2 byte sequence*/
+               case 0xc0:
+               case 0xd0:
+                       /* extract bits 6 - 10 from first byte */
+                       ucs_ch = (byte & 0x1F) << 6;  
+                       break;
+               /* 3 byte sequence*/
+               case 0xe0:
+                       /* extract bits 12 - 15 from first byte */
+                       ucs_ch = (byte & 0x0F) << 6;
+
+                       /* extract bits 6 - 11 from second byte */
+                       if (((byte = *utf8p++) & 0xc0) != 0x80)
+                               goto stop;
+
+                       ucs_ch += (byte & 0x3F);
+                       ucs_ch <<= 6;
+                       break;
+               default:
+                       goto stop;
+               }
+
+               /* extract bits 0 - 5 from final byte */
+               if (((byte = *utf8p++) & 0xc0) != 0x80)
+                       goto stop;
+               ucs_ch += (byte & 0x3F);  
+
+               *ucsp++ = ucs_ch;
+       }
+stop:
+       *ucslen = ucsp - bufstart;
+}
diff --git a/bootx.tproj/fs.subproj/Makefile b/bootx.tproj/fs.subproj/Makefile
new file mode 100644 (file)
index 0000000..bcc0e14
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Generated by the Apple Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = fs
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Component
+
+HFILES = CaseTables.h ext2fs.h ext2fs_dinode.h ext2fs_dir.h\
+         ufs_byteorder.h
+
+CFILES = cache.c ext2fs.c ext2fs_bswap.c fs.c hfs.c HFSCompare.c\
+         net.c ufs.c ufs_byteorder.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = subproj.make
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(JDKBINDIR)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/bootx.tproj/fs.subproj/Makefile.postamble b/bootx.tproj/fs.subproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/bootx.tproj/fs.subproj/Makefile.preamble b/bootx.tproj/fs.subproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..cfe786a
--- /dev/null
@@ -0,0 +1,139 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/bootx.tproj/fs.subproj/PB.project b/bootx.tproj/fs.subproj/PB.project
new file mode 100644 (file)
index 0000000..8c13e09
--- /dev/null
@@ -0,0 +1,32 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        H_FILES = (CaseTables.h, ext2fs.h, ext2fs_dinode.h, ext2fs_dir.h, ufs_byteorder.h); 
+        OTHER_LINKED = (
+            cache.c, 
+            ext2fs.c, 
+            ext2fs_bswap.c, 
+            fs.c, 
+            hfs.c, 
+            HFSCompare.c, 
+            net.c, 
+            ufs.c, 
+            ufs_byteorder.c
+        ); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(JDKBINDIR)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = fs; 
+    PROJECTTYPE = Component; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/fs.subproj/cache.c b/bootx.tproj/fs.subproj/cache.c
new file mode 100644 (file)
index 0000000..35af072
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  cache.c - A simple cache for file systems meta-data.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+#include <fs.h>
+
+struct CacheEntry {
+  CICell    ih;
+  long      time;
+  long long offset;
+};
+typedef struct CacheEntry CacheEntry;
+
+#define kCacheSize            (0x80000)
+#define kCacheMinBlockSize    (0x200)
+#define kCacheMaxBlockSize    (0x4000)
+#define kCacheMaxEntries      (kCacheSize / kCacheMinBlockSize)
+
+static CICell     gCacheIH;
+static long       gCacheBlockSize;
+static long       gCacheNumEntries;
+static long       gCacheTime;
+static CacheEntry gCacheEntries[kCacheMaxEntries];
+static char       gCacheBuffer[kCacheSize];
+
+unsigned long     gCacheHits;
+unsigned long     gCacheMisses;
+unsigned long     gCacheEvicts;
+
+void CacheInit(CICell ih, long blockSize)
+{
+  if ((blockSize < kCacheMinBlockSize) ||
+      (blockSize >= kCacheMaxBlockSize))
+    return;
+  
+  gCacheBlockSize = blockSize;
+  gCacheNumEntries = kCacheSize / gCacheBlockSize;
+  gCacheTime = 0;
+  
+  gCacheHits = 0;
+  gCacheMisses = 0;
+  gCacheEvicts = 0;
+  
+  bzero(gCacheEntries, sizeof(gCacheEntries));
+  
+  gCacheIH = ih;
+}
+
+
+long CacheRead(CICell ih, char *buffer, long long offset,
+              long length, long cache)
+{
+  long       cnt, oldestEntry, oldestTime, loadCache = 0;
+  CacheEntry *entry;
+  
+  // See if the data can be cached.
+  if (cache && (gCacheIH == ih) && (length == gCacheBlockSize)) {
+    // Look for the data in the cache.
+    for (cnt = 0; cnt < gCacheNumEntries; cnt++) {
+      entry = &gCacheEntries[cnt];
+      if ((entry->ih == ih) && (entry->offset == offset)) {
+       entry->time = ++gCacheTime;
+       break;
+      }
+    }
+    
+    // If the data was found copy it to the caller.
+    if (cnt != gCacheNumEntries) {
+      bcopy(gCacheBuffer + cnt * gCacheBlockSize, buffer, gCacheBlockSize);
+      gCacheHits++;
+      return gCacheBlockSize;
+    }
+    
+    // Could not find the data in the cache.
+    loadCache = 1;
+  }
+  
+  // Read the data from the disk.
+  Seek(ih, offset);
+  Read(ih, (CICell)buffer, length);
+  if (cache) gCacheMisses++;
+  
+  // Put the data from the disk in the cache if needed.
+  if (loadCache) {
+    // Find a free entry.
+    oldestTime = gCacheTime;
+    for (cnt = 0; cnt < gCacheNumEntries; cnt++) {
+      entry = &gCacheEntries[cnt];
+      
+      // Found a free entry.
+      if (entry->ih == 0) break;
+      
+      if (entry->time < oldestTime) {
+       oldestTime = entry->time;
+       oldestEntry = cnt;
+      }
+    }
+    
+    // If no free entry was found, use the oldest.
+    if (cnt == gCacheNumEntries) {
+      cnt = oldestEntry;
+      gCacheEvicts++;
+    }
+    
+    // Copy the data from disk to the new entry.
+    entry = &gCacheEntries[cnt];
+    entry->ih = ih;
+    entry->time = ++gCacheTime;
+    entry->offset = offset;
+    bcopy(buffer, gCacheBuffer + cnt * gCacheBlockSize, gCacheBlockSize);
+  }
+  
+  return length;
+}
diff --git a/bootx.tproj/fs.subproj/ext2fs.c b/bootx.tproj/fs.subproj/ext2fs.c
new file mode 100644 (file)
index 0000000..ca3172e
--- /dev/null
@@ -0,0 +1,376 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  ext2.c - File System Module for Ext2.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+#include <fs.h>
+
+#include <bsd/sys/types.h>
+
+#include "ext2fs.h"
+#include "ext2fs_dinode.h"
+#include "ext2fs_dir.h"
+
+typedef struct ext2fs_dinode Inode, *InodePtr;
+
+// Private function prototypes
+
+static long HowMany(long bufferSize, long unitSize);
+static char *ReadBlock(long blockNum, long blockOffset, long length,
+                      char *buffer, long cache);
+static long ReadInode(long inodeNum, InodePtr inode);
+static long ResolvePathToInode(char *filePath, long *flags,
+                               InodePtr fileInode, InodePtr dirInode);
+static long ReadDirEntry(InodePtr dirInode, long *fileInodeNum,
+                        long *dirIndex, char **name, long *flags, long *time);
+static long FindFileInDir(char *fileName, long *flags,
+                          InodePtr fileInode, InodePtr dirInode);
+static char *ReadFileBlock(InodePtr fileInode, long blockNum, long blockOffset,
+                          long length, char *buffer, long cache);
+static long ReadFile(InodePtr fileInode, long *length);
+
+
+static CICell          gCurrentIH;
+static char            gFSBuf[SBSIZE * 2];
+static struct m_ext2fs *gFS;
+static long            gBlockSize;
+static char            *gTempBlock;
+static char            gTempName[EXT2FS_MAXNAMLEN + 1];
+static char            gTempName2[EXT2FS_MAXNAMLEN + 1];
+static Inode           gRootInode;
+static Inode           gFileInode;
+
+// Public functions
+
+long Ext2InitPartition(CICell ih)
+{
+  long cnt, gdPerBlock;
+  
+  if (ih == gCurrentIH) return 0;
+  
+  printf("Ext2InitPartition: %x\n", ih);
+  
+  gCurrentIH = 0;
+  
+  // Read for the Super Block.
+  Seek(ih, SBOFF);
+  Read(ih, (long)gFSBuf, SBSIZE);
+  
+  gFS = (struct m_ext2fs *)gFSBuf;
+  e2fs_sb_bswap(&gFS->e2fs, &gFS->e2fs);
+  if (gFS->e2fs.e2fs_magic != E2FS_MAGIC) return -1;
+  
+  // Calculate the block size and set up the block cache.
+  gBlockSize = 1024 << gFS->e2fs.e2fs_log_bsize;
+  if (gTempBlock != 0) free(gTempBlock);
+  gTempBlock = malloc(gBlockSize);
+  CacheInit(ih, gBlockSize);
+  
+  gCurrentIH = ih;
+  
+  gdPerBlock = gBlockSize / sizeof(struct ext2_gd);
+  
+  // Fill in the in memory super block fields.
+  gFS->e2fs_bsize = 1024 << gFS->e2fs.e2fs_log_bsize;
+  gFS->e2fs_bshift = LOG_MINBSIZE + gFS->e2fs.e2fs_log_bsize;
+  gFS->e2fs_qbmask = gFS->e2fs_bsize - 1;
+  gFS->e2fs_bmask = ~gFS->e2fs_qbmask;
+  gFS->e2fs_fsbtodb = gFS->e2fs.e2fs_log_bsize + 1;
+  gFS->e2fs_ncg = HowMany(gFS->e2fs.e2fs_bcount - gFS->e2fs.e2fs_first_dblock,
+                        gFS->e2fs.e2fs_bpg);
+  gFS->e2fs_ngdb = HowMany(gFS->e2fs_ncg, gdPerBlock);
+  gFS->e2fs_ipb = gFS->e2fs_bsize / EXT2_DINODE_SIZE;
+  gFS->e2fs_itpg = gFS->e2fs.e2fs_ipg / gFS->e2fs_ipb;
+  gFS->e2fs_gd = malloc(gFS->e2fs_ngdb * gFS->e2fs_bsize);
+  
+  // Read the summary information from disk.
+  for (cnt = 0; cnt < gFS->e2fs_ngdb; cnt++) {
+    ReadBlock(((gBlockSize > 1024) ? 0 : 1) + cnt + 1, 0, gBlockSize,
+             (char *)&gFS->e2fs_gd[gdPerBlock * cnt], 0);
+    e2fs_cg_bswap(&gFS->e2fs_gd[gdPerBlock * cnt],
+                 &gFS->e2fs_gd[gdPerBlock * cnt], gBlockSize);
+  }
+  
+  // Read the Root Inode
+  ReadInode(EXT2_ROOTINO, &gRootInode);
+  
+  return 0;
+}
+
+
+long Ext2LoadFile(CICell ih, char *filePath)
+{
+  long ret, length, flags;
+  
+  if (Ext2InitPartition(ih) == -1) return -1;
+  
+  printf("Loading Ext2 file: [%s] from %x.\n", filePath, ih);
+  
+  // Skip one or two leading '\'.
+  if (*filePath == '\\') filePath++;
+  if (*filePath == '\\') filePath++;
+  ret = ResolvePathToInode(filePath, &flags, &gFileInode, &gRootInode);
+  if ((ret == -1) || (flags != kFlatFileType)) return -1;
+  
+  ret = ReadFile(&gFileInode, &length);
+  if (ret != 0) return -1;
+  
+  return length;
+}
+
+
+long Ext2GetDirEntry(CICell ih, char *dirPath, long *dirIndex,
+                    char **name, long *flags, long *time)
+{
+  long ret, fileInodeNum, dirFlags;
+  
+  if (Ext2InitPartition(ih) == -1) return -1;
+  
+  // Skip a leading '\' if present
+  if (dirPath[0] == '\\') dirPath++;
+  ret = ResolvePathToInode(dirPath, &dirFlags, &gFileInode, &gRootInode);
+  if ((ret == -1) || (dirFlags != kDirectoryFileType)) return -1;
+  
+  do {
+    ret = ReadDirEntry(&gFileInode, &fileInodeNum, dirIndex, name, flags,time);
+  } while ((ret != -1) && (*flags == kUnknownFileType));
+  
+  return ret;
+}
+
+// Private functions
+
+static long HowMany(long bufferSize, long unitSize)
+{
+  return (bufferSize + unitSize - 1) / unitSize;
+}
+
+
+static char *ReadBlock(long blockNum, long blockOffset, long length,
+                     char *buffer, long cache)
+{
+  long long offset;
+  
+  offset = 1ULL * blockNum * gBlockSize;
+  
+  if (cache && ((blockOffset + length) <= gBlockSize)) {
+    CacheRead(gCurrentIH, gTempBlock, offset, gBlockSize, 1);
+    if (buffer != 0) bcopy(gTempBlock + blockOffset, buffer, length);
+    else buffer = gTempBlock + blockOffset;
+  } else {
+    offset += blockOffset;
+    CacheRead(gCurrentIH, buffer, offset, length, 0);
+  }
+  
+  return buffer;
+}
+
+
+static long ReadInode(long inodeNum, InodePtr inode)
+{
+  long blockNum = ino_to_fsba(gFS, inodeNum);
+  long blockOffset = ino_to_fsbo(gFS, inodeNum) * sizeof(Inode);
+  
+  ReadBlock(blockNum, blockOffset, sizeof(Inode), (char *)inode, 1);
+  e2fs_i_bswap(inode, inode);
+  
+  return 0;
+}
+
+
+static long ResolvePathToInode(char *filePath, long *flags,
+                               InodePtr fileInode, InodePtr dirInode)
+{
+  char *restPath;
+  long ret, cnt;
+  
+  // if filePath is empty the we want this directory.
+  if (*filePath == '\0') {
+    bcopy((char *)dirInode, (char *)fileInode, sizeof(Inode));
+    return 0;
+  }
+  
+  // Copy the file name to gTempName
+  cnt = 0;
+  while ((filePath[cnt] != '\\') && (filePath[cnt] != '\0')) cnt++;
+  strncpy(gTempName, filePath, cnt);
+  
+  // Move restPath to the right place.
+  if (filePath[cnt] != '\0') cnt++;
+  restPath = filePath + cnt;
+  
+  // gTempName is a name in the current Dir.
+  // restPath is the rest of the path if any.
+  
+  ret = FindFileInDir(gTempName, flags, fileInode, dirInode);
+  if (ret == -1) return -1;
+
+  if ((*restPath != '\0') && (*flags == kDirectoryFileType))
+    ret = ResolvePathToInode(restPath, flags, fileInode, fileInode);
+  
+  return ret;
+}
+
+
+static long ReadDirEntry(InodePtr dirInode, long *fileInodeNum,
+                        long *dirIndex, char **name, long *flags, long *time)
+{
+  struct ext2fs_direct *dir;
+  char                 *buffer;
+  long                 offset, index = *dirIndex;
+  long                 blockNum, inodeNum;
+  Inode                tmpInode;
+  
+  offset = index % gBlockSize;
+  blockNum = index / gBlockSize;
+  
+  buffer = ReadFileBlock(dirInode, blockNum, 0, gBlockSize, 0, 1);
+  if (buffer == 0) return -1;
+  
+  dir = (struct ext2fs_direct *)(buffer + offset);
+  inodeNum = bswap32(dir->e2d_ino);
+  if (inodeNum == 0) return -1;
+  
+  *dirIndex += bswap16(dir->e2d_reclen);
+  *fileInodeNum = inodeNum;
+  *name = strncpy(gTempName2, dir->e2d_name, dir->e2d_namlen);
+  
+  ReadInode(inodeNum, &tmpInode);
+  
+  *time = tmpInode.e2di_mtime;
+  
+  switch (tmpInode.e2di_mode & EXT2_IFMT) {
+  case EXT2_IFREG: *flags = kFlatFileType; break;
+  case EXT2_IFDIR: *flags = kDirectoryFileType; break;
+  case EXT2_IFLNK: *flags = kLinkFileType; break;
+  default :        *flags = kUnknownFileType; break;
+  }
+  
+  return 0;
+}
+
+
+static long FindFileInDir(char *fileName, long *flags,
+                          InodePtr fileInode, InodePtr dirInode)
+{
+  long ret, inodeNum, time, index = 0;
+  char *name;
+  
+  while (1) {
+    ret = ReadDirEntry(dirInode, &inodeNum, &index, &name, flags, &time);
+    if (ret == -1) return -1;
+    
+    if (*flags == kUnknownFileType) continue;
+    
+    if (strcmp(fileName, name) == 0) break;
+  }
+  
+  ReadInode(inodeNum, fileInode);
+  
+  return 0;
+}
+
+
+static char *ReadFileBlock(InodePtr fileInode, long blockNum, long blockOffset,
+                          long length, char *buffer, long cache)
+{
+  long diskBlockNum, indBlockNum, indBlockOff, refsPerBlock;
+  char *indBlock;
+  
+  if (blockNum >= fileInode->e2di_nblock) return 0;
+  
+  refsPerBlock = gBlockSize / sizeof(u_int32_t);
+  
+  // Get Direct Block Number.
+  if (blockNum < NDADDR) {
+    diskBlockNum = bswap32(fileInode->e2di_blocks[blockNum]);
+  } else {
+    blockNum -= NDADDR;
+    
+    // Get Single Indirect Block Number.
+    if (blockNum < refsPerBlock) {
+      indBlockNum = bswap32(fileInode->e2di_blocks[NDADDR]);
+    } else {
+      blockNum -= refsPerBlock;
+      
+      // Get Double Indirect Block Number.
+      if (blockNum < (refsPerBlock * refsPerBlock)) {
+       indBlockNum = fileInode->e2di_blocks[NDADDR + 1];
+      } else {
+       blockNum -= refsPerBlock * refsPerBlock;
+       
+       // Get Triple Indirect Block Number.
+       indBlockNum = fileInode->e2di_blocks[NDADDR + 2];
+       
+       indBlock = ReadBlock(indBlockNum, 0, gBlockSize, 0, 1);
+       indBlockOff = blockNum / (refsPerBlock * refsPerBlock);
+       blockNum %= (refsPerBlock * refsPerBlock);
+       indBlockNum = bswap32(((u_int32_t *)indBlock)[indBlockOff]);
+      }
+      
+      indBlock = ReadBlock(indBlockNum, 0, gBlockSize, 0, 1);
+      indBlockOff = blockNum / refsPerBlock;
+      blockNum %= refsPerBlock;
+      indBlockNum = bswap32(((u_int32_t *)indBlock)[indBlockOff]);
+    }
+    
+    indBlock = ReadBlock(indBlockNum, 0, gBlockSize, 0, 1);
+    diskBlockNum = bswap32(((u_int32_t *)indBlock)[blockNum]);
+  }
+  
+  buffer = ReadBlock(diskBlockNum, blockOffset, length, buffer, cache);
+  
+  return buffer;
+}
+
+static long ReadFile(InodePtr fileInode, long *length)
+{
+  long bytesLeft, curSize, curBlock = 0;
+  char *buffer, *curAddr = (char *)kLoadAddr;
+  
+  bytesLeft = *length = fileInode->e2di_size;
+  
+  if (*length > kLoadSize) {
+    printf("File is too large.\n");
+    return -1;
+  }
+  
+  while (bytesLeft) {
+    if (bytesLeft > gBlockSize) curSize = gBlockSize;
+    else curSize = bytesLeft;
+    
+    buffer = ReadFileBlock(fileInode, curBlock, 0, curSize, curAddr, 0);
+    if (buffer == 0) break;
+    
+    curBlock++;
+    curAddr += curSize;
+    bytesLeft -= curSize;
+  }
+  
+  return bytesLeft;
+}
diff --git a/bootx.tproj/fs.subproj/ext2fs.h b/bootx.tproj/fs.subproj/ext2fs.h
new file mode 100644 (file)
index 0000000..0cb9acb
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*     $NetBSD: ext2fs.h,v 1.10 2000/01/28 16:00:23 bouyer Exp $       */
+/*
+ * Copyright (c) 1997 Manuel Bouyer.
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fs.h        8.10 (Berkeley) 10/27/94
+ *  Modified for ext2fs by Manuel Bouyer.
+ */
+/*
+ *  ext2fs.h - Headers for Ext2 disk structures.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+/*
+ * Each disk drive contains some number of file systems.
+ * A file system consists of a number of cylinder groups.
+ * Each cylinder group has inodes and data.
+ *
+ * A file system is described by its super-block, which in turn
+ * describes the cylinder groups.  The super-block is critical
+ * data and is replicated in each cylinder group to protect against
+ * catastrophic loss.  This is done at `newfs' time and the critical
+ * super-block data does not change, so the copies need not be
+ * referenced further unless disaster strikes.
+ *
+ * The first boot and super blocks are given in absolute disk addresses.
+ * The byte-offset forms are preferred, as they don't imply a sector size.
+ */
+#define BBSIZE         1024
+#define SBSIZE         1024
+#define        BBOFF           ((off_t)(0))
+#define        SBOFF           ((off_t)(BBOFF + BBSIZE))
+#define        BBLOCK          ((ufs_daddr_t)(0))
+#define        SBLOCK          ((ufs_daddr_t)(BBLOCK + BBSIZE / DEV_BSIZE))
+
+/*
+ * Addresses stored in inodes are capable of addressing blocks
+ * XXX
+ */
+
+/*
+ * MINBSIZE is the smallest allowable block size.
+ * MINBSIZE must be big enough to hold a cylinder group block,
+ * thus changes to (struct cg) must keep its size within MINBSIZE.
+ * Note that super blocks are always of size SBSIZE,
+ * and that both SBSIZE and MAXBSIZE must be >= MINBSIZE.
+ */
+#define LOG_MINBSIZE 10
+#define MINBSIZE       (1 << LOG_MINBSIZE)
+
+/*
+ * The path name on which the file system is mounted is maintained
+ * in fs_fsmnt. MAXMNTLEN defines the amount of space allocated in
+ * the super block for this name.
+ */
+#define MAXMNTLEN      512
+
+/*
+ * MINFREE gives the minimum acceptable percentage of file system
+ * blocks which may be free. If the freelist drops below this level
+ * only the superuser may continue to allocate blocks. This may
+ * be set to 0 if no reserve of free blocks is deemed necessary,
+ * however throughput drops by fifty percent if the file system
+ * is run at between 95% and 100% full; thus the minimum default
+ * value of fs_minfree is 5%. However, to get good clustering
+ * performance, 10% is a better choice. hence we use 10% as our
+ * default value. With 10% free space, fragmentation is not a
+ * problem, so we choose to optimize for time.
+ */
+#define MINFREE                5
+
+/*
+ * Super block for an ext2fs file system.
+ */
+struct ext2fs {
+       u_int32_t  e2fs_icount;         /* Inode count */
+       u_int32_t  e2fs_bcount;         /* blocks count */
+       u_int32_t  e2fs_rbcount;        /* reserved blocks count */
+       u_int32_t  e2fs_fbcount;        /* free blocks count */
+       u_int32_t  e2fs_ficount;        /* free inodes count */
+       u_int32_t  e2fs_first_dblock;   /* first data block */
+       u_int32_t  e2fs_log_bsize;      /* block size = 1024*(2^e2fs_log_bsize) */
+       u_int32_t  e2fs_fsize;          /* fragment size */
+       u_int32_t  e2fs_bpg;            /* blocks per group */
+       u_int32_t  e2fs_fpg;            /* frags per group */
+       u_int32_t  e2fs_ipg;            /* inodes per group */
+       u_int32_t  e2fs_mtime;          /* mount time */
+       u_int32_t  e2fs_wtime;          /* write time */
+       u_int16_t  e2fs_mnt_count;      /* mount count */
+       u_int16_t  e2fs_max_mnt_count;  /* max mount count */
+       u_int16_t  e2fs_magic;          /* magic number */
+       u_int16_t  e2fs_state;          /* file system state */
+       u_int16_t  e2fs_beh;            /* behavior on errors */
+       u_int16_t  e2fs_minrev;         /* minor revision level */
+       u_int32_t  e2fs_lastfsck;       /* time of last fsck */
+       u_int32_t  e2fs_fsckintv;       /* max time between fscks */
+       u_int32_t  e2fs_creator;        /* creator OS */
+       u_int32_t  e2fs_rev;            /* revision level */
+       u_int16_t  e2fs_ruid;           /* default uid for reserved blocks */
+       u_int16_t  e2fs_rgid;           /* default gid for reserved blocks */
+       /* EXT2_DYNAMIC_REV superblocks */
+       u_int32_t  e2fs_first_ino;      /* first non-reserved inode */
+       u_int16_t  e2fs_inode_size;     /* size of inode structure */
+       u_int16_t  e2fs_block_group_nr; /* block grp number of this sblk*/
+       u_int32_t  e2fs_features_compat; /*  compatible feature set */
+       u_int32_t  e2fs_features_incompat; /* incompatible feature set */
+       u_int32_t  e2fs_features_rocompat; /* RO-compatible feature set */
+       u_int8_t   e2fs_uuid[16];       /* 128-bit uuid for volume */
+       char       e2fs_vname[16];      /* volume name */
+       char       e2fs_fsmnt[64];      /* name mounted on */
+       u_int32_t  e2fs_algo;           /* For compression */
+       u_int8_t   e2fs_prealloc;       /* # of blocks to preallocate */
+       u_int8_t   e2fs_dir_prealloc;   /* # of blocks to preallocate for dir */
+       u_int16_t  pad1;
+       u_int32_t  reserved2[204];
+};
+
+
+/* in-memory data for ext2fs */
+struct m_ext2fs {
+       struct ext2fs e2fs;
+       u_char  e2fs_fsmnt[MAXMNTLEN];  /* name mounted on */
+       int8_t  e2fs_ronly;     /* mounted read-only flag */
+       int8_t  e2fs_fmod;      /* super block modified flag */
+       int32_t e2fs_bsize;     /* block size */
+       int32_t e2fs_bshift;    /* ``lblkno'' calc of logical blkno */
+       int32_t e2fs_bmask;     /* ``blkoff'' calc of blk offsets */
+       int64_t e2fs_qbmask;    /* ~fs_bmask - for use with quad size */
+       int32_t e2fs_fsbtodb;   /* fsbtodb and dbtofsb shift constant */
+       int32_t e2fs_ncg;       /* number of cylinder groups */
+       int32_t e2fs_ngdb;      /* number of group descriptor block */
+       int32_t e2fs_ipb;       /* number of inodes per block */
+       int32_t e2fs_itpg;      /* number of inode table per group */
+       struct  ext2_gd *e2fs_gd; /* group descripors */
+};
+
+
+
+/*
+ * Filesystem identification
+ */
+#define        E2FS_MAGIC      0xef53  /* the ext2fs magic number */
+#define E2FS_REV0      0       /* revision levels */
+#define E2FS_REV1      1       /* revision levels */
+
+/* compatible/imcompatible features */
+#define EXT2F_COMPAT_PREALLOC          0x0001
+
+#define EXT2F_ROCOMPAT_SPARSESUPER     0x0001
+#define EXT2F_ROCOMPAT_LARGEFILE       0x0002
+#define EXT2F_ROCOMPAT_BTREE_DIR       0x0004
+
+#define EXT2F_INCOMPAT_COMP            0x0001
+#define EXT2F_INCOMPAT_FTYPE           0x0002
+
+/* features supported in this implementation */
+#define EXT2F_COMPAT_SUPP              0x0000
+#define EXT2F_ROCOMPAT_SUPP            EXT2F_ROCOMPAT_SPARSESUPER
+#define EXT2F_INCOMPAT_SUPP            EXT2F_INCOMPAT_FTYPE
+
+/*
+ * OS identification
+ */
+#define E2FS_OS_LINUX 0
+#define E2FS_OS_HURD  1
+#define E2FS_OS_MASIX 2
+
+/*
+ * Filesystem clean flags
+ */
+#define        E2FS_ISCLEAN    0x01
+#define        E2FS_ERRORS     0x02
+
+/* ext2 file system block group descriptor */
+
+struct ext2_gd {
+       u_int32_t ext2bgd_b_bitmap;     /* blocks bitmap block */
+       u_int32_t ext2bgd_i_bitmap;     /* inodes bitmap block */
+       u_int32_t ext2bgd_i_tables;     /* inodes table block  */
+       u_int16_t ext2bgd_nbfree;       /* number of free blocks */
+       u_int16_t ext2bgd_nifree;       /* number of free inodes */
+       u_int16_t ext2bgd_ndirs;        /* number of directories */
+       u_int16_t reserved;
+       u_int32_t reserved2[3];
+
+};
+
+
+/*
+ * If the EXT2F_ROCOMPAT_SPARSESUPER flag is set, the cylinder group has a
+ * copy of the super and cylinder group descriptors blocks only if it's
+ * a power of 3, 5 or 7
+ */
+
+static __inline__ int cg_has_sb __P((int)) __attribute__((__unused__));
+static __inline int
+cg_has_sb(i)
+       int i;
+{
+       int a3 ,a5 , a7;
+
+       if (i == 0 || i == 1)
+               return 1;
+       for (a3 = 3, a5 = 5, a7 = 7;
+           a3 <= i || a5 <= i || a7 <= i;
+           a3 *= 3, a5 *= 5, a7 *= 7)
+               if (i == a3 || i == a5 || i == a7)
+                       return 1;
+       return 0;
+}
+
+/* EXT2FS metadatas are stored in little-endian byte order. These macros
+ * helps reading theses metadatas
+ */
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+#      define h2fs16(x) (x)
+#      define h2fs32(x) (x)
+#      define fs2h16(x) (x)
+#      define fs2h32(x) (x)
+#      define e2fs_sbload(old, new) memcpy((new), (old), SBSIZE);
+#      define e2fs_cgload(old, new, size) memcpy((new), (old), (size));
+#      define e2fs_sbsave(old, new) memcpy((new), (old), SBSIZE);
+#      define e2fs_cgsave(old, new, size) memcpy((new), (old), (size));
+#else
+void e2fs_sb_bswap __P((struct ext2fs *, struct ext2fs *));
+void e2fs_cg_bswap __P((struct ext2_gd *, struct ext2_gd *, int));
+#      define h2fs16(x) bswap16(x)
+#      define h2fs32(x) bswap32(x)
+#      define fs2h16(x) bswap16(x)
+#      define fs2h32(x) bswap32(x)
+#      define e2fs_sbload(old, new) e2fs_sb_bswap((old), (new))
+#      define e2fs_cgload(old, new, size) e2fs_cg_bswap((old), (new), (size));
+#      define e2fs_sbsave(old, new) e2fs_sb_bswap((old), (new))
+#      define e2fs_cgsave(old, new, size) e2fs_cg_bswap((old), (new), (size));
+#endif
+
+/*
+ * Turn file system block numbers into disk block addresses.
+ * This maps file system blocks to device size blocks.
+ */
+#define fsbtodb(fs, b) ((b) << (fs)->e2fs_fsbtodb)
+#define dbtofsb(fs, b) ((b) >> (fs)->e2fs_fsbtodb)
+
+/*
+ * Macros for handling inode numbers:
+ *      inode number to file system block offset.
+ *      inode number to cylinder group number.
+ *      inode number to file system block address.
+ */
+#define        ino_to_cg(fs, x)        (((x) - 1) / (fs)->e2fs.e2fs_ipg)
+#define        ino_to_fsba(fs, x)                                              \
+       ((fs)->e2fs_gd[ino_to_cg(fs, x)].ext2bgd_i_tables + \
+       (((x)-1) % (fs)->e2fs.e2fs_ipg)/(fs)->e2fs_ipb)
+#define        ino_to_fsbo(fs, x)      (((x)-1) % (fs)->e2fs_ipb)
+
+/*
+ * Give cylinder group number for a file system block.
+ * Give cylinder group block number for a file system block.
+ */
+#define        dtog(fs, d) (((d) - (fs)->e2fs.e2fs_first_dblock) / (fs)->e2fs.e2fs_fpg)
+#define        dtogd(fs, d) \
+       (((d) - (fs)->e2fs.e2fs_first_dblock) % (fs)->e2fs.e2fs_fpg)
+
+/*
+ * The following macros optimize certain frequently calculated
+ * quantities by using shifts and masks in place of divisions
+ * modulos and multiplications.
+ */
+#define blkoff(fs, loc)                /* calculates (loc % fs->e2fs_bsize) */ \
+       ((loc) & (fs)->e2fs_qbmask)
+#define lblktosize(fs, blk)    /* calculates (blk * fs->e2fs_bsize) */ \
+       ((blk) << (fs)->e2fs_bshift)
+#define lblkno(fs, loc)                /* calculates (loc / fs->e2fs_bsize) */ \
+       ((loc) >> (fs)->e2fs_bshift)
+#define blkroundup(fs, size)   /* calculates roundup(size, fs->e2fs_bsize) */ \
+       (((size) + (fs)->e2fs_qbmask) & (fs)->e2fs_bmask)
+#define fragroundup(fs, size)  /* calculates roundup(size, fs->e2fs_bsize) */ \
+       (((size) + (fs)->e2fs_qbmask) & (fs)->e2fs_bmask)
+/* 
+ * Determine the number of available frags given a
+ * percentage to hold in reserve.
+ */   
+#define freespace(fs) \
+   ((fs)->e2fs.e2fs_fbcount - (fs)->e2fs.e2fs_rbcount) 
+
+/*
+ * Number of indirects in a file system block.
+ */
+#define        NINDIR(fs)      ((fs)->e2fs_bsize / sizeof(u_int32_t))
diff --git a/bootx.tproj/fs.subproj/ext2fs_bswap.c b/bootx.tproj/fs.subproj/ext2fs_bswap.c
new file mode 100644 (file)
index 0000000..8699b65
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*     $NetBSD: ext2fs_bswap.c,v 1.4 2000/01/28 16:00:23 bouyer Exp $  */
+/*
+ * Copyright (c) 1997 Manuel Bouyer.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+/*
+ *  ext2fs_bswap.c - Functions for endian swapping Ext2 disk structures.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+#include "ext2fs.h"
+#include "ext2fs_dinode.h"
+
+/* These functions are only needed if native byte order is not big endian */
+#if BYTE_ORDER == BIG_ENDIAN
+void
+e2fs_sb_bswap(old, new)
+       struct ext2fs *old, *new;
+{
+       /* preserve unused fields */
+       memcpy(new, old, sizeof(struct ext2fs));
+       new->e2fs_icount        =       bswap32(old->e2fs_icount);
+       new->e2fs_bcount        =       bswap32(old->e2fs_bcount);
+       new->e2fs_rbcount       =       bswap32(old->e2fs_rbcount);
+       new->e2fs_fbcount       =       bswap32(old->e2fs_fbcount);
+       new->e2fs_ficount       =       bswap32(old->e2fs_ficount);
+       new->e2fs_first_dblock  =       bswap32(old->e2fs_first_dblock);
+       new->e2fs_log_bsize     =       bswap32(old->e2fs_log_bsize);
+       new->e2fs_fsize         =       bswap32(old->e2fs_fsize);
+       new->e2fs_bpg           =       bswap32(old->e2fs_bpg);
+       new->e2fs_fpg           =       bswap32(old->e2fs_fpg);
+       new->e2fs_ipg           =       bswap32(old->e2fs_ipg);
+       new->e2fs_mtime         =       bswap32(old->e2fs_mtime);
+       new->e2fs_wtime         =       bswap32(old->e2fs_wtime);
+       new->e2fs_mnt_count     =       bswap16(old->e2fs_mnt_count);
+       new->e2fs_max_mnt_count =       bswap16(old->e2fs_max_mnt_count);
+       new->e2fs_magic         =       bswap16(old->e2fs_magic);
+       new->e2fs_state         =       bswap16(old->e2fs_state);
+       new->e2fs_beh           =       bswap16(old->e2fs_beh);
+       new->e2fs_minrev        =       bswap16(old->e2fs_minrev);
+       new->e2fs_lastfsck      =       bswap32(old->e2fs_lastfsck);
+       new->e2fs_fsckintv      =       bswap32(old->e2fs_fsckintv);
+       new->e2fs_creator       =       bswap32(old->e2fs_creator);
+       new->e2fs_rev           =       bswap32(old->e2fs_rev);
+       new->e2fs_ruid          =       bswap16(old->e2fs_ruid);
+       new->e2fs_rgid          =       bswap16(old->e2fs_rgid);
+       new->e2fs_first_ino     =       bswap32(old->e2fs_first_ino);
+       new->e2fs_inode_size    =       bswap16(old->e2fs_inode_size);
+       new->e2fs_block_group_nr =      bswap16(old->e2fs_block_group_nr);
+       new->e2fs_features_compat =     bswap32(old->e2fs_features_compat);
+       new->e2fs_features_incompat =   bswap32(old->e2fs_features_incompat);
+       new->e2fs_features_rocompat =   bswap32(old->e2fs_features_rocompat);
+       new->e2fs_algo          =       bswap32(old->e2fs_algo);
+}
+
+void e2fs_cg_bswap(old, new, size)
+       struct  ext2_gd *old, *new;
+       int size;
+{
+       int i;
+       for (i=0; i < (size / sizeof(struct  ext2_gd)); i++) {
+               new[i].ext2bgd_b_bitmap = bswap32(old[i].ext2bgd_b_bitmap);
+               new[i].ext2bgd_i_bitmap = bswap32(old[i].ext2bgd_i_bitmap);
+               new[i].ext2bgd_i_tables = bswap32(old[i].ext2bgd_i_tables);
+               new[i].ext2bgd_nbfree   = bswap16(old[i].ext2bgd_nbfree);
+               new[i].ext2bgd_nifree   = bswap16(old[i].ext2bgd_nifree);
+               new[i].ext2bgd_ndirs    = bswap16(old[i].ext2bgd_ndirs);
+       }
+}
+
+void e2fs_i_bswap(old, new)
+       struct ext2fs_dinode *old, *new;
+{
+       new->e2di_mode          =       bswap16(old->e2di_mode);
+       new->e2di_uid           =       bswap16(old->e2di_uid);
+       new->e2di_gid           =       bswap16(old->e2di_gid);
+       new->e2di_nlink         =       bswap16(old->e2di_nlink);
+       new->e2di_size          =       bswap32(old->e2di_size);
+       new->e2di_atime         =       bswap32(old->e2di_atime);
+       new->e2di_ctime         =       bswap32(old->e2di_ctime);
+       new->e2di_mtime         =       bswap32(old->e2di_mtime);
+       new->e2di_dtime         =       bswap32(old->e2di_dtime);
+       new->e2di_nblock        =       bswap32(old->e2di_nblock);
+       new->e2di_flags         =       bswap32(old->e2di_flags);
+       new->e2di_gen           =       bswap32(old->e2di_gen);
+       new->e2di_facl          =       bswap32(old->e2di_facl);
+       new->e2di_dacl          =       bswap32(old->e2di_dacl);
+       new->e2di_faddr         =       bswap32(old->e2di_faddr);
+        memcpy(&new->e2di_blocks[0], &old->e2di_blocks[0],
+               (NDADDR+NIADDR) * sizeof(int));
+}
+#endif
diff --git a/bootx.tproj/fs.subproj/ext2fs_dinode.h b/bootx.tproj/fs.subproj/ext2fs_dinode.h
new file mode 100644 (file)
index 0000000..276254d
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*     $NetBSD: ext2fs_dinode.h,v 1.6 2000/01/26 16:21:33 bouyer Exp $ */
+/*
+ * Copyright (c) 1997 Manuel Bouyer.
+ * Copyright (c) 1982, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)dinode.h    8.6 (Berkeley) 9/13/94
+ *  Modified for ext2fs by Manuel Bouyer.
+ */
+/*
+ *  ext2fs_dinode.h - Headers for Ext2 disk inode structures.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+/*
+ * The root inode is the root of the file system.  Inode 0 can't be used for
+ * normal purposes and bad blocks are normally linked to inode 1, thus
+ * the root inode is 2.
+ * Inode 3 to 10 are reserved in ext2fs.
+ */
+#define        EXT2_ROOTINO ((ino_t)2)
+#define EXT2_FIRSTINO ((ino_t)11)
+
+/*
+ * A dinode contains all the meta-data associated with a UFS file.
+ * This structure defines the on-disk format of a dinode. Since
+ * this structure describes an on-disk structure, all its fields
+ * are defined by types with precise widths.
+ */
+
+#define        NDADDR  12                      /* Direct addresses in inode. */
+#define        NIADDR  3                       /* Indirect addresses in inode. */
+
+#define EXT2_MAXSYMLINKLEN ((NDADDR+NIADDR) * sizeof (u_int32_t))
+
+struct ext2fs_dinode {
+       u_int16_t       e2di_mode;      /*   0: IFMT, permissions; see below. */
+       u_int16_t       e2di_uid;       /*   2: Owner UID */
+       u_int32_t       e2di_size;      /*       4: Size (in bytes) */
+       u_int32_t       e2di_atime;     /*       8: Acces time */
+       u_int32_t       e2di_ctime;     /*      12: Create time */
+       u_int32_t       e2di_mtime;     /*      16: Modification time */
+       u_int32_t       e2di_dtime;     /*      20: Deletion time */
+       u_int16_t       e2di_gid;       /*  24: Owner GID */
+       u_int16_t       e2di_nlink;     /*  26: File link count */
+       u_int32_t       e2di_nblock;    /*  28: Blocks count */
+       u_int32_t       e2di_flags;     /*  32: Status flags (chflags) */
+       u_int32_t       e2di_linux_reserved1; /* 36 */
+       u_int32_t       e2di_blocks[NDADDR+NIADDR]; /* 40: disk blocks */
+       u_int32_t       e2di_gen;       /* 100: generation number */
+       u_int32_t       e2di_facl;      /* 104: file ACL (not implemented) */
+       u_int32_t       e2di_dacl;      /* 108: dir ACL (not implemented) */
+       u_int32_t       e2di_faddr;     /* 112: fragment address */
+       u_int8_t        e2di_nfrag;     /* 116: fragment number */
+       u_int8_t        e2di_fsize;     /* 117: fragment size */
+       u_int16_t       e2di_linux_reserved2; /* 118 */
+       u_int32_t       e2di_linux_reserved3[2]; /* 120 */
+};
+       
+
+       
+#define        E2MAXSYMLINKLEN ((NDADDR + NIADDR) * sizeof(u_int32_t))
+
+/* File permissions. */
+#define        EXT2_IEXEC              0000100         /* Executable. */
+#define        EXT2_IWRITE             0000200         /* Writeable. */
+#define        EXT2_IREAD              0000400         /* Readable. */
+#define        EXT2_ISVTX              0001000         /* Sticky bit. */
+#define        EXT2_ISGID              0002000         /* Set-gid. */
+#define        EXT2_ISUID              0004000         /* Set-uid. */
+
+/* File types. */
+#define        EXT2_IFMT               0170000         /* Mask of file type. */
+#define        EXT2_IFIFO              0010000         /* Named pipe (fifo). */
+#define        EXT2_IFCHR              0020000         /* Character device. */
+#define        EXT2_IFDIR              0040000         /* Directory file. */
+#define        EXT2_IFBLK              0060000         /* Block device. */
+#define        EXT2_IFREG              0100000         /* Regular file. */
+#define        EXT2_IFLNK              0120000         /* Symbolic link. */
+#define        EXT2_IFSOCK             0140000         /* UNIX domain socket. */
+
+/* file flags */
+#define EXT2_SECRM             0x00000001      /* Secure deletion */
+#define EXT2_UNRM              0x00000002      /* Undelete */
+#define EXT2_COMPR             0x00000004      /* Compress file */
+#define EXT2_SYNC              0x00000008      /* Synchronous updates */
+#define EXT2_IMMUTABLE 0x00000010      /* Immutable file */
+#define EXT2_APPEND            0x00000020      /* writes to file may only append */
+#define EXT2_NODUMP            0x00000040      /* do not dump file */
+
+/* Size of on-disk inode. */
+#define        EXT2_DINODE_SIZE        (sizeof(struct ext2fs_dinode))  /* 128 */
+
+/*
+ * The e2di_blocks fields may be overlaid with other information for
+ * file types that do not have associated disk storage. Block
+ * and character devices overlay the first data block with their
+ * dev_t value. Short symbolic links place their path in the
+ * di_db area.
+ */
+
+#define e2di_rdev              e2di_blocks[0]
+#define e2di_shortlink e2di_blocks
+
+/* e2fs needs byte swapping on big-endian systems */
+#if BYTE_ORDER == LITTLE_ENDIAN
+#      define e2fs_iload(old, new) memcpy((new),(old),sizeof(struct ext2fs_dinode))
+#      define e2fs_isave(old, new) memcpy((new),(old),sizeof(struct ext2fs_dinode))
+#else
+void e2fs_i_bswap __P((struct ext2fs_dinode *, struct ext2fs_dinode *));
+#      define e2fs_iload(old, new) e2fs_i_bswap((old), (new))
+#      define e2fs_isave(old, new) e2fs_i_bswap((old), (new))
+#endif
diff --git a/bootx.tproj/fs.subproj/ext2fs_dir.h b/bootx.tproj/fs.subproj/ext2fs_dir.h
new file mode 100644 (file)
index 0000000..30bf40f
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*     $NetBSD: ext2fs_dir.h,v 1.4 2000/01/28 16:00:23 bouyer Exp $    */
+/*
+ * Copyright (c) 1997 Manuel Bouyer.
+ * Copyright (c) 1982, 1986, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)dir.h       8.4 (Berkeley) 8/10/94
+ * Modified for ext2fs by Manuel Bouyer.
+ */
+/*
+ *  ext2fs_dir.h - Headers for Ext2 disk directory structures.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _EXT2FS_DIR_H_
+#define        _EXT2FS_DIR_H_
+
+/*
+ * Theoretically, directories can be more than 2Gb in length, however, in
+ * practice this seems unlikely. So, we define the type doff_t as a 32-bit
+ * quantity to keep down the cost of doing lookup on a 32-bit machine.
+ */
+#define        doff_t          int32_t
+#define        EXT2FS_MAXDIRSIZE       (0x7fffffff)
+
+/*
+ * A directory consists of some number of blocks of e2fs_bsize bytes.
+ *
+ * Each block contains some number of directory entry
+ * structures, which are of variable length.  Each directory entry has
+ * a struct direct at the front of it, containing its inode number,
+ * the length of the entry, and the length of the name contained in
+ * the entry.  These are followed by the name padded to a 4 byte boundary
+ * with null bytes.  All names are guaranteed null terminated.
+ * The maximum length of a name in a directory is EXT2FS_MAXNAMLEN.
+ *
+ * The macro EXT2FS_DIRSIZ(fmt, dp) gives the amount of space required to
+ * represent a directory entry.  Free space in a directory is represented by
+ * entries which have dp->e2d_reclen > DIRSIZ(fmt, dp).  All d2fs_bsize bytes
+ * in a directory block are claimed by the directory entries.  This
+ * usually results in the last entry in a directory having a large
+ * dp->e2d_reclen.  When entries are deleted from a directory, the
+ * space is returned to the previous entry in the same directory
+ * block by increasing its dp->e2d_reclen.  If the first entry of
+ * a directory block is free, then its dp->e2d_ino is set to 0.
+ * Entries other than the first in a directory do not normally have
+ * dp->e2d_ino set to 0.
+ * Ext2 rev 0 has a 16 bits e2d_namlen. For Ext2 vev 1 this has been split
+ * into a 8 bits e2d_namlen and 8 bits e2d_type (looks like ffs, isnt't it ? :)
+ * It's safe to use this for rev 0 as well because all ext2 are little-endian.
+ */
+
+#define        EXT2FS_MAXNAMLEN        255
+
+struct ext2fs_direct {
+       u_int32_t e2d_ino;              /* inode number of entry */
+       u_int16_t e2d_reclen;           /* length of this record */
+       u_int8_t e2d_namlen;            /* length of string in d_name */
+       u_int8_t e2d_type;              /* file type */
+       char      e2d_name[EXT2FS_MAXNAMLEN];/* name with length <= EXT2FS_MAXNAMLEN */
+};
+
+/* Ext2 directory file types (not the same as FFS. Sigh. */
+#define EXT2_FT_UNKNOWN         0
+#define EXT2_FT_REG_FILE        1 
+#define EXT2_FT_DIR             2
+#define EXT2_FT_CHRDEV          3
+#define EXT2_FT_BLKDEV          4
+#define EXT2_FT_FIFO            5
+#define EXT2_FT_SOCK            6
+#define EXT2_FT_SYMLINK         7
+
+#define EXT2_FT_MAX             8
+
+#define E2IFTODT(mode)    (((mode) & 0170000) >> 12)
+
+static __inline__ u_int8_t inot2ext2dt __P((u_int16_t))
+    __attribute__((__unused__));
+static __inline__ u_int8_t
+inot2ext2dt(type)
+       u_int16_t type;
+{
+       switch(type) {
+       case E2IFTODT(EXT2_IFIFO):
+               return EXT2_FT_FIFO;
+       case E2IFTODT(EXT2_IFCHR):
+               return EXT2_FT_CHRDEV;
+       case E2IFTODT(EXT2_IFDIR):
+               return EXT2_FT_DIR;
+       case E2IFTODT(EXT2_IFBLK):
+               return EXT2_FT_BLKDEV;
+       case E2IFTODT(EXT2_IFREG):
+               return EXT2_FT_REG_FILE;
+       case E2IFTODT(EXT2_IFLNK):
+               return EXT2_FT_SYMLINK;
+       case E2IFTODT(EXT2_IFSOCK):
+               return EXT2_FT_SOCK;
+       default:
+               return 0;
+       }
+}
+
+/*
+ * The EXT2FS_DIRSIZ macro gives the minimum record length which will hold
+ * the directory entryfor a name len "len" (without the terminating null byte).
+ * This requires the amount of space in struct direct
+ * without the d_name field, plus enough space for the name without a
+ * terminating null byte, rounded up to a 4 byte boundary.
+ */
+#define EXT2FS_DIRSIZ(len) \
+   (( 8 + len + 3) &~ 3)
+
+/*
+ * Template for manipulating directories.  Should use struct direct's,
+ * but the name field is EXT2FS_MAXNAMLEN - 1, and this just won't do.
+ */
+struct ext2fs_dirtemplate {
+       u_int32_t       dot_ino;
+       int16_t         dot_reclen;
+       u_int8_t        dot_namlen;
+       u_int8_t        dot_type;
+       char            dot_name[4];    /* must be multiple of 4 */
+       u_int32_t       dotdot_ino;
+       int16_t         dotdot_reclen;
+       u_int8_t        dotdot_namlen;
+       u_int8_t        dotdot_type;
+       char            dotdot_name[4]; /* ditto */
+};
+
+#endif /* !_EXT2FS_DIR_H_ */
diff --git a/bootx.tproj/fs.subproj/fs.c b/bootx.tproj/fs.subproj/fs.c
new file mode 100644 (file)
index 0000000..9a236fc
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  fs.c - Generic access to the file system modules.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+typedef long (* FSLoadFile)(CICell ih, char *filePath);
+typedef long (* FSGetDirEntry)(CICell ih, char *dirPath,
+                              long *dirIndex, char **name,
+                              long *flags, long *time);
+
+#define kPartNet     (0)
+#define kPartHFS     (1)
+#define kPartUFS     (2)
+#define kPartExt2    (3)
+
+struct PartInfo {
+  long            partType;
+  CICell          partIH;
+  FSLoadFile      loadFile;
+  FSGetDirEntry   getDirEntry;
+  char            partName[1024];
+};
+typedef struct PartInfo PartInfo, *PartInfoPtr;
+
+#define kNumPartInfos  (16)
+static PartInfo gParts[kNumPartInfos];
+
+// Private function prototypes
+long LookupPartition(char *devSpec);
+
+
+// Public functions
+
+long LoadFile(char *fileSpec)
+{
+  char       devSpec[256];
+  char       *filePath;
+  FSLoadFile loadFile;
+  long       ret, length, partIndex;
+  
+  ret = ConvertFileSpec(fileSpec, devSpec, &filePath);
+  if ((ret == -1) || (filePath == NULL)) return -1;
+  
+  // Get the partition index for devSpec.
+  partIndex = LookupPartition(devSpec);
+  if (partIndex == -1) return -1;
+  
+  loadFile = gParts[partIndex].loadFile;
+  length = loadFile(gParts[partIndex].partIH, filePath);
+  
+//  if (length == 0) return -1;
+  
+  return length;
+}
+
+long CopyFile(char *fileSpec, char **addr, long *length)
+{
+  long len;
+  char *file;
+  
+  len = LoadFile(fileSpec);
+  if (len == -1) return -1;
+  
+  file = malloc(len + 2);
+  if (file == NULL) return -1;
+  
+  strncpy(file, (char *)kLoadAddr, len);
+  
+  // Just to make sure.
+  file[len] = '\0';
+  file[len + 1] = '\0';
+  
+  *addr = file;
+  *length = len;
+  
+  return 0;
+}
+
+long GetFileInfo(char *dirSpec, char *name, long *flags, long *time)
+{
+  long ret, index = 0;
+  char *curName;
+  
+  while (1) {
+    ret = GetDirEntry(dirSpec, &index, &curName, flags, time);
+    if (ret == -1) break;
+    
+    if (!strcmp(name, curName)) break;
+  }
+  
+  return ret;
+}
+
+long GetDirEntry(char *dirSpec, long *dirIndex, char **name,
+                long *flags, long *time)
+{
+  char          devSpec[256];
+  char          *dirPath;
+  FSGetDirEntry getDirEntry;
+  long          ret, partIndex;
+  
+  ret = ConvertFileSpec(dirSpec, devSpec, &dirPath);
+  if ((ret == -1) || (dirPath == NULL)) return -1;
+  
+  // Get the partition index for devSpec.
+  partIndex = LookupPartition(devSpec);
+  if (partIndex == -1) return -1;
+  
+  getDirEntry = gParts[partIndex].getDirEntry;
+  ret = getDirEntry(gParts[partIndex].partIH, dirPath,
+                   dirIndex, name, flags, time);
+  
+  return ret;
+}
+
+long DumpDir(char *dirSpec)
+{
+  long ret, flags, time, index = 0;
+  char *name;
+  
+  printf("DumpDir on [%s]\n", dirSpec);
+  
+  while (1) {
+    ret = GetDirEntry(dirSpec, &index, &name, &flags, &time);
+    if (ret == -1) break;
+    
+    printf("%x %x [%s]\n", flags, time, name);
+  }
+  
+  return 0;
+}
+
+
+// Private functions
+
+long LookupPartition(char *devSpec)
+{
+  CICell partIH;
+  long   partIndex, partType;
+  long   deviceType;
+  
+  // See if the devSpec has already been opened.
+  for (partIndex = 0; partIndex < kNumPartInfos; partIndex++) {
+    if (!strcmp(gParts[partIndex].partName, devSpec)) break;
+  }
+  
+  // If it has not been opened, do so now.
+  if (partIndex == kNumPartInfos) {
+    // Find a free slot.
+    for (partIndex = 0; partIndex < kNumPartInfos; partIndex++) {
+      if (gParts[partIndex].partIH == 0) break;
+    }
+    // No free slots, so return error.
+    if (partIndex == kNumPartInfos) return -1;
+    
+    deviceType = GetDeviceType(devSpec);
+    switch (deviceType) {
+    case kNetworkDeviceType :
+      partIH = NetInitPartition(devSpec);
+      if (partIH == 0) return -1;
+      partType = kPartNet;
+      break;
+      
+    case kBlockDeviceType :
+      printf("Opening partition [%s]...\n", devSpec);
+      partIH = Open(devSpec);
+      if (partIH == 0) {
+       printf("Failed to open partition [%s].\n", devSpec);
+       return -1;
+      }
+      
+      // Find out what kind of partition it is.
+      if      (HFSInitPartition(partIH)  != -1) partType = kPartHFS;
+      else if (UFSInitPartition(partIH)  != -1) partType = kPartUFS;
+      else if (Ext2InitPartition(partIH) != -1) partType = kPartExt2;
+      else return -1;
+      break;
+      
+    default :
+      return -1;
+    }
+    
+    gParts[partIndex].partIH = partIH;
+    gParts[partIndex].partType = partType;
+    strcpy(gParts[partIndex].partName, devSpec);
+    
+    switch (partType) {
+    case kPartNet:
+      gParts[partIndex].loadFile      = NetLoadFile;
+      gParts[partIndex].getDirEntry   = NetGetDirEntry;
+      break;
+      
+    case kPartHFS:
+      gParts[partIndex].loadFile      = HFSLoadFile;
+      gParts[partIndex].getDirEntry   = HFSGetDirEntry;
+      break;
+      
+    case kPartUFS:
+      gParts[partIndex].loadFile      = UFSLoadFile;
+      gParts[partIndex].getDirEntry   = UFSGetDirEntry;
+      break;
+      
+    case kPartExt2:
+      gParts[partIndex].loadFile      = Ext2LoadFile;
+      gParts[partIndex].getDirEntry   = Ext2GetDirEntry;
+      break;
+    }
+  }
+  
+  return partIndex;
+}
diff --git a/bootx.tproj/fs.subproj/hfs.c b/bootx.tproj/fs.subproj/hfs.c
new file mode 100644 (file)
index 0000000..e85e499
--- /dev/null
@@ -0,0 +1,832 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  hfs.c - File System Module for HFS and HFS+.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+#if kMacOSXServer
+#define _LONG_LONG
+#include <bsd/hfs/hfscommon/headers/HFSBtreesPriv.h>
+#include <bsd/hfs/hfscommon/headers/system/MacOSTypes.h>
+#include <bsd/hfs/hfscommon/headers/system/MacOSStubs.h>
+#include <bsd/hfs/hfscommon/headers/HFSVolumes.h>
+#define kBTIndexNode kIndexNode
+#define BTHeaderRec HeaderRec
+#define GetNodeType(node) (node->type)
+#else
+#define GetNodeType(node) (node->kind)
+#include <bsd/hfs/hfs_format.h>
+#endif
+
+
+
+#define kBlockSize (0x200)
+
+#define kMDBBaseOffset (2 * kBlockSize)
+
+#define kBTreeCatalog (0)
+#define kBTreeExtents (1)
+
+static CICell                  gCurrentIH;
+static long long               gAllocationOffset;
+static long                    gIsHFSPlus;
+static long                    gBlockSize;
+static char                    gBTreeHeaderBuffer[512];
+static BTHeaderRec             *gBTHeaders[2];
+static char                    gHFSMdbVib[kBlockSize];
+static HFSMasterDirectoryBlock *gHFSMDB =(HFSMasterDirectoryBlock*)gHFSMdbVib;
+static char                    gHFSPlusHeader[kBlockSize];
+static HFSPlusVolumeHeader     *gHFSPlus =(HFSPlusVolumeHeader*)gHFSPlusHeader;
+static char                    gLinkTemp[64];
+
+
+static long ReadFile(void *file, long *length);
+static long ResolvePathToCatalogEntry(char *filePath, long *flags,
+                                     void *entry, long dirID, long *dirIndex);
+
+static long GetCatalogEntry(long *dirIndex, char **name,
+                           long *flags, long *time);
+static long ReadCatalogEntry(char *fileName, long dirID, void *entry,
+                            long *dirIndex);
+static long ReadExtentsEntry(long fileID, long startBlock, void *entry);
+
+static long ReadBTreeEntry(long btree, void *key, char *entry, long *dirIndex);
+static void GetBTreeRecord(long index, char *nodeBuffer, long nodeSize,
+                          char **key, char **data);
+
+static long ReadExtent(char *extent, long extentSize, long extentFile,
+                      long offset, long size, void *buffer, long cache);
+
+static long GetExtentStart(void *extents, long index);
+static long GetExtentSize(void *extents, long index);
+
+static long CompareHFSCatalogKeys(void *key, void *testKey);
+static long CompareHFSPlusCatalogKeys(void *key, void *testKey);
+static long CompareHFSExtentsKeys(void *key, void *testKey);
+static long CompareHFSPlusExtentsKeys(void *key, void *testKey);
+
+extern long FastRelString(char *str1, char *str2);
+extern long FastUnicodeCompare(u_int16_t *uniStr1, u_int32_t len1,
+                              u_int16_t *uniStr2, u_int32_t len2);
+extern void utf_encodestr(const u_int16_t *ucsp, int ucslen,
+                         u_int8_t *utf8p, u_int32_t bufsize);
+extern void utf_decodestr(const u_int8_t *utf8p, u_int16_t *ucsp,
+                         u_int16_t *ucslen, u_int32_t bufsize);
+
+
+long HFSInitPartition(CICell ih)
+{
+  long extentSize, extentFile, nodeSize;
+  void *extent;
+  
+  if (ih == gCurrentIH) return 0;
+  
+  printf("HFSInitPartition: %x\n", ih);
+  
+  gAllocationOffset = 0;
+  gIsHFSPlus = 0;
+  gBTHeaders[0] = 0;
+  gBTHeaders[1] = 0;
+  
+  // Look for the HFS MDB
+  Seek(ih, kMDBBaseOffset);
+  Read(ih, (long)gHFSMdbVib, kBlockSize);
+  
+  if (gHFSMDB->drSigWord == kHFSSigWord) {
+    gAllocationOffset = gHFSMDB->drAlBlSt * kBlockSize;
+    
+    // See if it is HFSPlus
+    if (gHFSMDB->drEmbedSigWord != kHFSPlusSigWord) {
+      // Normal HFS;
+      gBlockSize = gHFSMDB->drAlBlkSiz;
+      CacheInit(ih, gBlockSize);
+      gCurrentIH = ih;
+      
+      // Get the Catalog BTree node size.
+      extent     = (HFSExtentDescriptor *)&gHFSMDB->drCTExtRec;
+      extentSize = gHFSMDB->drCTFlSize;
+      extentFile = kHFSCatalogFileID;
+      ReadExtent(extent, extentSize, extentFile, 0, 256,
+                gBTreeHeaderBuffer + kBTreeCatalog * 256, 0);
+      nodeSize = ((BTHeaderRec *)(gBTreeHeaderBuffer + kBTreeCatalog * 256 + sizeof(BTNodeDescriptor)))->nodeSize;
+      
+      // If the BTree node size is larger than the block size, reset the cache.
+      if (nodeSize > gBlockSize) CacheInit(ih, nodeSize);
+      
+      return 0;
+    }
+    
+    // Calculate the offset to the embeded HFSPlus volume.
+    gAllocationOffset += (long long)gHFSMDB->drEmbedExtent.startBlock * gHFSMDB->drAlBlkSiz;
+  }
+  
+  // Look for the HFSPlus Header
+  Seek(ih, gAllocationOffset + kMDBBaseOffset);
+  Read(ih, (long)gHFSPlusHeader, kBlockSize);
+  
+  // Not a HFS[+] volume.
+  if (gHFSPlus->signature != kHFSPlusSigWord) return -1;
+  
+  gIsHFSPlus = 1;
+  gBlockSize = gHFSPlus->blockSize;
+  CacheInit(ih, gBlockSize);
+  gCurrentIH = ih;
+  
+  // Get the Catalog BTree node size.
+  extent     = &gHFSPlus->catalogFile.extents;
+  extentSize = gHFSPlus->catalogFile.logicalSize;
+  extentFile = kHFSCatalogFileID;
+  ReadExtent(extent, extentSize, extentFile, 0, 256,
+            gBTreeHeaderBuffer + kBTreeCatalog * 256, 0);
+  nodeSize = ((BTHeaderRec *)(gBTreeHeaderBuffer + kBTreeCatalog * 256 + sizeof(BTNodeDescriptor)))->nodeSize;
+  
+  // If the BTree node size is larger than the block size, reset the cache.
+  if (nodeSize > gBlockSize) CacheInit(ih, nodeSize);
+  
+  return 0;
+}
+
+long HFSLoadFile(CICell ih, char *filePath)
+{
+  char entry[512];
+  long dirID, result, length, flags;
+  
+  if (HFSInitPartition(ih) == -1) return -1;
+  
+  printf("Loading HFS%s file: [%s] from %x.\n",
+        (gIsHFSPlus ? "+" : ""), filePath, ih);
+  
+  dirID = kHFSRootFolderID;
+  // Skip a lead '\'.  Start in the system folder if there are two.
+  if (filePath[0] == '\\') {
+    if (filePath[1] == '\\') {
+      if (gIsHFSPlus) dirID = ((long *)gHFSPlus->finderInfo)[5];
+      else dirID = gHFSMDB->drFndrInfo[5];
+      if (dirID == 0) return -1;
+      filePath++;
+    }
+    filePath++;
+  }
+  
+  result = ResolvePathToCatalogEntry(filePath, &flags, entry, dirID, 0);
+  if ((result == -1) || (flags != kFlatFileType)) return -1;
+  
+  result = ReadFile(entry, &length);
+  if (result == -1) return -1;
+  
+  return length;
+}
+
+long HFSGetDirEntry(CICell ih, char *dirPath, long *dirIndex, char **name,
+                   long *flags, long *time)
+{
+  char entry[512];
+  long dirID, dirFlags;
+  
+  if (HFSInitPartition(ih) == -1) return -1;
+  
+  if (*dirIndex == -1) return -1;
+  
+  dirID = kHFSRootFolderID;
+  // Skip a lead '\'.  Start in the system folder if there are two.
+  if (dirPath[0] == '\\') {
+    if (dirPath[1] == '\\') {
+      if (gIsHFSPlus) dirID = ((long *)gHFSPlus->finderInfo)[5];
+      else dirID = gHFSMDB->drFndrInfo[5];
+      if (dirID == 0) return -1;
+      dirPath++;
+    }
+    dirPath++;
+  }
+  
+  if (*dirIndex == 0) {
+    ResolvePathToCatalogEntry(dirPath, &dirFlags, entry, dirID, dirIndex);
+    if (*dirIndex == 0) *dirIndex = -1;
+    if (dirFlags != kUnknownFileType) return -1;
+  }
+  
+  GetCatalogEntry(dirIndex, name, flags, time);
+  if (*dirIndex == 0) *dirIndex = -1;
+  if (*flags == kUnknownFileType) return -1;
+  
+  return 0;
+}
+
+
+// Private Functions
+
+static long ReadFile(void *file, long *length)
+{
+  void               *extents;
+  long               fileID;
+  HFSCatalogFile     *hfsFile     = file;
+  HFSPlusCatalogFile *hfsPlusFile = file;
+  
+  if (gIsHFSPlus) {
+    fileID  = hfsPlusFile->fileID;
+    *length = hfsPlusFile->dataFork.logicalSize;
+    extents = &hfsPlusFile->dataFork.extents;
+  } else {
+    fileID  = hfsFile->fileID;
+    *length = hfsFile->dataLogicalSize;
+    extents = &hfsFile->dataExtents;
+  }
+  
+  if (*length > kLoadSize) {
+    printf("File is too large.\n");
+    return -1;
+  }
+  
+  *length = ReadExtent((char *)extents, *length, fileID,
+                      0, *length, (char *)kLoadAddr, 0);
+  
+  return 0;
+}
+
+static long ResolvePathToCatalogEntry(char *filePath, long *flags,
+                                     void *entry, long dirID, long *dirIndex)
+{
+  char                 *restPath;
+  long                 result, cnt, subFolderID, tmpDirIndex;
+  HFSCatalogFolder     *hfsFolder;
+  HFSPlusCatalogFolder *hfsPlusFolder;
+  HFSPlusCatalogFile   *hfsPlusFile;
+  
+  hfsFolder     = (HFSCatalogFolder *)entry;
+  hfsPlusFolder = (HFSPlusCatalogFolder *)entry;
+  
+  // Copy the file name to gTempStr
+  cnt = 0;
+  while ((filePath[cnt] != '\\') && (filePath[cnt] != '\0')) cnt++;
+  strncpy(gTempStr, filePath, cnt);
+  
+  // Move restPath to the right place.
+  if (filePath[cnt] != '\0') cnt++;
+  restPath = filePath + cnt;
+  
+  // gTempStr is a name in the current Dir.
+  // restPath is the rest of the path if any.
+  
+  result = ReadCatalogEntry(gTempStr, dirID, entry, dirIndex);
+  if (result == -1) return -1;
+  
+  if (gIsHFSPlus) {
+    if (hfsPlusFolder->recordType == kHFSPlusFolderRecord) {
+      *flags = kDirectoryFileType;
+      subFolderID = hfsPlusFolder->folderID;
+    } else if (hfsPlusFolder->recordType == kHFSPlusFileRecord) {
+      *flags = kFlatFileType;
+    } else if (hfsPlusFolder->recordType == kHFSPlusFolderThreadRecord) {
+      *flags = kUnknownFileType;
+    } else return -1;
+  } else {
+    if (hfsFolder->recordType == kHFSFolderRecord) {
+      *flags = kDirectoryFileType;
+      subFolderID = hfsFolder->folderID;
+    } else if (hfsFolder->recordType == kHFSFileRecord) {
+      *flags = kFlatFileType;
+    } else if (hfsFolder->recordType == kHFSFolderThreadRecord) {
+      *flags = kUnknownFileType;
+    } else return -1;
+  }
+  
+  if (*flags == kDirectoryFileType)
+    result = ResolvePathToCatalogEntry(restPath, flags, entry,
+                                      subFolderID, dirIndex);
+  
+  if (gIsHFSPlus && (*flags == kFlatFileType)) {
+    hfsPlusFile = (HFSPlusCatalogFile *)entry;
+    if ((hfsPlusFile->userInfo.fdType == kHardLinkFileType) &&
+       (hfsPlusFile->userInfo.fdCreator == kHFSPlusCreator)) {
+      sprintf(gLinkTemp, "%s\\%s%d", HFSPLUSMETADATAFOLDER,
+             HFS_INODE_PREFIX, hfsPlusFile->bsdInfo.special.iNodeNum);
+      result = ResolvePathToCatalogEntry(gLinkTemp, flags, entry,
+                                        kHFSRootFolderID, &tmpDirIndex);
+    }
+  }
+  
+  return result;
+}
+
+static long GetCatalogEntry(long *dirIndex, char **name,
+                           long *flags, long *time)
+{
+  long              extentSize, nodeSize, curNode, index, tmpTime;
+  void              *extent;
+  char              *nodeBuf, *testKey, *recordData;
+  BTNodeDescriptor  *node;
+  
+  if (gIsHFSPlus) {
+    extent     = &gHFSPlus->catalogFile.extents;
+    extentSize = gHFSPlus->catalogFile.logicalSize;
+  } else {
+    extent     = (HFSExtentDescriptor *)&gHFSMDB->drCTExtRec;
+    extentSize = gHFSMDB->drCTFlSize;
+  }
+  
+  nodeSize = gBTHeaders[kBTreeCatalog]->nodeSize;
+  nodeBuf = (char *)malloc(nodeSize);
+  node = (BTNodeDescriptor *)nodeBuf;
+  
+  index   = *dirIndex % nodeSize;
+  curNode = *dirIndex / nodeSize;
+  
+  // Read the BTree node and get the record for index.
+  ReadExtent(extent, extentSize, kHFSCatalogFileID,
+            curNode * nodeSize, nodeSize, nodeBuf, 1);
+  GetBTreeRecord(index, nodeBuf, nodeSize, &testKey, &recordData);
+  
+  // Get the kind of file.
+  switch (*(short *)recordData) {
+  case kHFSFolderRecord           :
+    *flags = kDirectoryFileType;
+    tmpTime = ((HFSCatalogFolder *)recordData)->modifyDate;
+    break;
+    
+  case kHFSPlusFolderRecord       :
+    *flags = kDirectoryFileType;
+    tmpTime = ((HFSPlusCatalogFolder *)recordData)->contentModDate;
+    break;
+    
+  case kHFSFileRecord             :
+    *flags = kFlatFileType;
+    tmpTime = ((HFSCatalogFile *)recordData)->modifyDate;
+    break;
+    
+  case kHFSPlusFileRecord         :
+    *flags = kFlatFileType;
+    tmpTime = ((HFSPlusCatalogFile *)recordData)->contentModDate;
+    break;
+    
+  case kHFSFileThreadRecord       :
+  case kHFSPlusFileThreadRecord   :
+  case kHFSFolderThreadRecord     :
+  case kHFSPlusFolderThreadRecord :
+    *flags = kUnknownFileType;
+    tmpTime = 0;
+    break;
+  }
+  
+  // Convert base time from 1904 to 1970.
+  *time = tmpTime - 2082844800;
+  
+  // Get the file name.
+  if (gIsHFSPlus) {
+    utf_encodestr(((HFSPlusCatalogKey *)testKey)->nodeName.unicode,
+                 ((HFSPlusCatalogKey *)testKey)->nodeName.length,
+                 gTempStr, 256);
+  } else {
+    strncpy(gTempStr,
+           &((HFSCatalogKey *)testKey)->nodeName[1],
+           ((HFSCatalogKey *)testKey)->nodeName[0]);
+  }
+  *name = gTempStr;
+  
+  // Update dirIndex.
+  index++;
+  if (index == node->numRecords) {
+    index = 0;
+    curNode = node->fLink;
+  }
+  *dirIndex = curNode * nodeSize + index;
+  
+  free(nodeBuf);
+  
+  return 0;
+}
+
+static long ReadCatalogEntry(char *fileName, long dirID,
+                            void *entry, long *dirIndex)
+{
+  long              length;
+  char              key[sizeof(HFSPlusCatalogKey)];
+  HFSCatalogKey     *hfsKey     = (HFSCatalogKey *)key;
+  HFSPlusCatalogKey *hfsPlusKey = (HFSPlusCatalogKey *)key;
+  
+  // Make the catalog key.
+  if (gIsHFSPlus) {
+    hfsPlusKey->parentID = dirID;
+    length = strlen(fileName);
+    if (length > 255) length = 255;
+    utf_decodestr(fileName, hfsPlusKey->nodeName.unicode,
+                 &(hfsPlusKey->nodeName.length), 512);
+  } else {
+    hfsKey->parentID = dirID;
+    length = strlen(fileName);
+    if (length > 31) length = 31;
+    hfsKey->nodeName[0] = length;
+    strncpy(hfsKey->nodeName + 1, fileName, length);
+  }
+  
+  return ReadBTreeEntry(kBTreeCatalog, &key, entry, dirIndex);
+}
+
+static long ReadExtentsEntry(long fileID, long startBlock, void *entry)
+{
+  char             key[sizeof(HFSPlusExtentKey)];
+  HFSExtentKey     *hfsKey     = (HFSExtentKey *)key;
+  HFSPlusExtentKey *hfsPlusKey = (HFSPlusExtentKey *)key;
+  
+  // Make the extents key.
+  if (gIsHFSPlus) {
+    hfsPlusKey->forkType   = 0;
+    hfsPlusKey->fileID     = fileID;
+    hfsPlusKey->startBlock = startBlock;
+  } else {
+    hfsKey->forkType   = 0;
+    hfsKey->fileID     = fileID;
+    hfsKey->startBlock = startBlock;
+  }
+  
+  return ReadBTreeEntry(kBTreeExtents, &key, entry, 0);
+}
+
+static long ReadBTreeEntry(long btree, void *key, char *entry, long *dirIndex)
+{
+  long             extentSize;
+  void             *extent;
+  short            extentFile;
+  char             *nodeBuf;
+  BTNodeDescriptor *node;
+  long             nodeSize, result, entrySize;
+  long             curNode, index, lowerBound, upperBound;
+  char             *testKey, *recordData;
+  
+  // Figure out which tree is being looked at.
+  if (btree == kBTreeCatalog) {
+    if (gIsHFSPlus) {
+      extent     = &gHFSPlus->catalogFile.extents;
+      extentSize = gHFSPlus->catalogFile.logicalSize;
+    } else {
+      extent     = (HFSExtentDescriptor *)&gHFSMDB->drCTExtRec;
+      extentSize = gHFSMDB->drCTFlSize;
+    }
+    extentFile = kHFSCatalogFileID;
+  } else {
+    if (gIsHFSPlus) {
+      extent     = &gHFSPlus->extentsFile.extents;
+      extentSize = gHFSPlus->extentsFile.logicalSize;
+    } else {
+      extent     = (HFSExtentDescriptor *)&gHFSMDB->drXTExtRec;
+      extentSize = gHFSMDB->drXTFlSize;
+    }
+    extentFile = kHFSExtentsFileID;
+  }
+  
+  // Read the BTree Header if needed.
+  if (gBTHeaders[btree] == 0) {
+    ReadExtent(extent, extentSize, extentFile, 0, 256,
+              gBTreeHeaderBuffer + btree * 256, 0);
+    gBTHeaders[btree] = (BTHeaderRec *)(gBTreeHeaderBuffer + btree * 256 +
+                                      sizeof(BTNodeDescriptor));
+  }
+  
+  curNode = gBTHeaders[btree]->rootNode;
+  
+  nodeSize = gBTHeaders[btree]->nodeSize;
+  nodeBuf = (char *)malloc(nodeSize);
+  node = (BTNodeDescriptor *)nodeBuf;
+  
+  while (1) {
+    // Read the current node.
+    ReadExtent(extent, extentSize, extentFile,
+              curNode * nodeSize, nodeSize, nodeBuf, 1);
+    
+    // Find the matching key.
+    lowerBound = 0;
+    upperBound = node->numRecords - 1;
+    while (lowerBound <= upperBound) {
+      index = (lowerBound + upperBound) / 2;
+      
+      GetBTreeRecord(index, nodeBuf, nodeSize, &testKey, &recordData);
+      
+      if (gIsHFSPlus) {
+       if (btree == kBTreeCatalog) {
+         result = CompareHFSPlusCatalogKeys(key, testKey);
+       } else {
+         result = CompareHFSPlusExtentsKeys(key, testKey);
+       }
+      } else {
+       if (btree == kBTreeCatalog) {
+         result = CompareHFSCatalogKeys(key, testKey);
+       } else {
+         result = CompareHFSExtentsKeys(key, testKey);
+       }
+      }
+      
+      if (result < 0) upperBound = index - 1;        // search < trial
+      else if (result > 0) lowerBound = index + 1;   // search > trial
+      else break;                                    // search = trial
+    }
+    
+    if (result < 0) {
+      index = upperBound;
+      GetBTreeRecord(index, nodeBuf, nodeSize, &testKey, &recordData);
+    }
+    
+    // Found the closest key... Recurse on it if this is an index node.
+    if (GetNodeType(node) == kBTIndexNode) {
+      curNode = *((long *)recordData);
+    } else break;
+  }
+  
+  // Return error if the file was not found.
+  if (result != 0) return -1;
+  
+  if (btree == kBTreeCatalog) {
+    switch (*(short *)recordData) {
+    case kHFSFolderRecord           : entrySize = 70;  break;
+    case kHFSFileRecord             : entrySize = 102; break;
+    case kHFSFolderThreadRecord     : entrySize = 46;  break;
+    case kHFSFileThreadRecord       : entrySize = 46;  break;
+    case kHFSPlusFolderRecord       : entrySize = 88;  break;
+    case kHFSPlusFileRecord         : entrySize = 248; break;
+    case kHFSPlusFolderThreadRecord : entrySize = 264; break;
+    case kHFSPlusFileThreadRecord   : entrySize = 264; break;
+    }
+  } else {
+    if (gIsHFSPlus) entrySize = sizeof(HFSPlusExtentRecord);
+    else entrySize = sizeof(HFSExtentRecord);
+  }
+  
+  bcopy(recordData, entry, entrySize);
+  
+  // Update dirIndex.
+  if (dirIndex != 0) {
+    index++;
+    if (index == node->numRecords) {
+      index = 0;
+      curNode = node->fLink;
+    }
+    *dirIndex = curNode * nodeSize + index;
+  }
+  
+  free(nodeBuf);
+  
+  return 0;
+}
+
+static void GetBTreeRecord(long index, char *nodeBuffer, long nodeSize,
+            char **key, char **data)
+{
+  long keySize;
+  long recordOffset;
+  
+  recordOffset = *((short *)(nodeBuffer + (nodeSize - 2 * index - 2)));
+  *key = nodeBuffer + recordOffset;
+  if (gIsHFSPlus) {
+    keySize = *(short *)*key;
+    *data = *key + 2 + keySize;
+  } else {
+    keySize = **key;
+    *data = *key + 2 + keySize - (keySize & 1);
+  }
+}
+static long ReadExtent(char *extent, long extentSize,
+                      long extentFile, long offset, long size,
+                      void *buffer, long cache)
+{
+  long      lastOffset, blockNumber, countedBlocks = 0;
+  long      nextExtent = 0, sizeRead = 0, readSize;
+  long      nextExtentBlock, currentExtentBlock = 0;
+  long long readOffset;
+  long      extentDensity, sizeofExtent, currentExtentSize;
+  char      *currentExtent, *extentBuffer = 0, *bufferPos = buffer;
+  
+  if (offset >= extentSize) return 0;
+  
+  if (gIsHFSPlus) {
+    extentDensity = kHFSPlusExtentDensity;
+    sizeofExtent = sizeof(HFSPlusExtentDescriptor);
+  } else {
+    extentDensity = kHFSExtentDensity;
+    sizeofExtent = sizeof(HFSExtentDescriptor);
+  }
+  
+  lastOffset = offset + size;
+  while (offset < lastOffset) {
+    blockNumber = offset / gBlockSize;
+    
+    // Find the extent for the offset.
+    for (; ; nextExtent++) {
+      if (nextExtent < extentDensity) {
+       if ((countedBlocks+GetExtentSize(extent, nextExtent)-1)<blockNumber) {
+         countedBlocks += GetExtentSize(extent, nextExtent);
+         continue;
+       }
+       
+       currentExtent = extent + nextExtent * sizeofExtent;
+       break;
+      }
+      
+      if (extentBuffer == 0) {
+       extentBuffer = malloc(sizeofExtent * extentDensity);
+       if (extentBuffer == 0) return -1;
+      }
+      
+      nextExtentBlock = nextExtent / extentDensity;
+      if (currentExtentBlock != nextExtentBlock) {
+       ReadExtentsEntry(extentFile, countedBlocks, extentBuffer);
+       currentExtentBlock = nextExtentBlock;
+      }
+      
+      currentExtentSize = GetExtentSize(extentBuffer,
+                                       nextExtent % extentDensity);
+      
+      if ((countedBlocks + currentExtentSize - 1) >= blockNumber) {
+       currentExtent = extentBuffer + sizeofExtent *
+         (nextExtent % extentDensity);
+       break;
+      }
+      
+      countedBlocks += currentExtentSize;
+    }
+    
+    readOffset = ((blockNumber - countedBlocks) * gBlockSize) +
+      (offset % gBlockSize);
+    
+    readSize = GetExtentSize(currentExtent, 0) * gBlockSize - readOffset;
+    if (readSize > (size - sizeRead)) readSize = size - sizeRead;
+    
+    readOffset += (long long)GetExtentStart(currentExtent, 0) * gBlockSize;
+    
+    CacheRead(gCurrentIH, bufferPos, gAllocationOffset + readOffset,
+             readSize, cache);
+    
+    sizeRead += readSize;
+    offset += readSize;
+    bufferPos += readSize;
+  }
+  
+  if (extentBuffer) free(extentBuffer);
+  
+  return sizeRead;
+}
+
+static long GetExtentStart(void *extents, long index)
+{
+  long                    start;
+  HFSExtentDescriptor     *hfsExtents     = extents;
+  HFSPlusExtentDescriptor *hfsPlusExtents = extents;
+  
+  if (gIsHFSPlus) start = hfsPlusExtents[index].startBlock;
+  else start = hfsExtents[index].startBlock;
+  
+  return start;
+}
+
+static long GetExtentSize(void *extents, long index)
+{
+  long                    size;
+  HFSExtentDescriptor     *hfsExtents     = extents;
+  HFSPlusExtentDescriptor *hfsPlusExtents = extents;
+  
+  if (gIsHFSPlus) size = hfsPlusExtents[index].blockCount;
+  else size = hfsExtents[index].blockCount;
+  
+  return size;
+}
+
+static long CompareHFSCatalogKeys(void *key, void *testKey)
+{
+  HFSCatalogKey *searchKey, *trialKey;
+  long          result, searchParentID, trialParentID;
+  
+  searchKey = key;
+  trialKey  = testKey;
+  
+  searchParentID = searchKey->parentID;
+  trialParentID = trialKey->parentID;
+  
+  // parent dirID is unsigned
+  if (searchParentID > trialParentID)  result = 1;
+  else if (searchParentID < trialParentID) result = -1;
+  else {
+    // parent dirID's are equal, compare names
+    result = FastRelString(searchKey->nodeName, trialKey->nodeName);
+  }
+  
+  return result;
+}
+
+static long CompareHFSPlusCatalogKeys(void *key, void *testKey)
+{
+  HFSPlusCatalogKey *searchKey, *trialKey;
+  long              result, searchParentID, trialParentID;
+  
+  searchKey = key;
+  trialKey  = testKey;
+  
+  searchParentID = searchKey->parentID;
+  trialParentID = trialKey->parentID;
+  
+  // parent dirID is unsigned
+  if (searchParentID > trialParentID)  result = 1;
+  else if (searchParentID < trialParentID) result = -1;
+  else {
+    // parent dirID's are equal, compare names
+    if ((searchKey->nodeName.length == 0) || (trialKey->nodeName.length == 0))
+      result = searchKey->nodeName.length - trialKey->nodeName.length;
+    else
+      result = FastUnicodeCompare(&searchKey->nodeName.unicode[0],
+                                 searchKey->nodeName.length,
+                                 &trialKey->nodeName.unicode[0],
+                                 trialKey->nodeName.length);
+  }
+  
+  return result;
+}
+
+static long CompareHFSExtentsKeys(void *key, void *testKey)
+{
+  HFSExtentKey *searchKey, *trialKey;
+  long         result;
+  
+  searchKey = key;
+  trialKey  = testKey;
+  
+  // assume searchKey < trialKey
+  result = -1;            
+  
+  if (searchKey->fileID == trialKey->fileID) {
+    // FileNum's are equal; compare fork types
+    if (searchKey->forkType == trialKey->forkType) {
+      // Fork types are equal; compare allocation block number
+      if (searchKey->startBlock == trialKey->startBlock) {
+       // Everything is equal
+       result = 0;
+      } else {
+       // Allocation block numbers differ; determine sign
+       if (searchKey->startBlock > trialKey->startBlock) result = 1;
+      }
+    } else {
+      // Fork types differ; determine sign
+      if (searchKey->forkType > trialKey->forkType) result = 1;
+    }
+  } else {
+    // FileNums differ; determine sign
+    if (searchKey->fileID > trialKey->fileID) result = 1;
+  }
+  
+  return result;
+}
+
+static long CompareHFSPlusExtentsKeys(void *key, void *testKey)
+{
+  HFSPlusExtentKey *searchKey, *trialKey;
+  long             result;
+  
+  searchKey = key;
+  trialKey  = testKey;
+  
+  // assume searchKey < trialKey
+  result = -1;            
+  
+  if (searchKey->fileID == trialKey->fileID) {
+    // FileNum's are equal; compare fork types
+    if (searchKey->forkType == trialKey->forkType) {
+      // Fork types are equal; compare allocation block number
+      if (searchKey->startBlock == trialKey->startBlock) {
+       // Everything is equal
+       result = 0;
+      } else {
+       // Allocation block numbers differ; determine sign
+       if (searchKey->startBlock > trialKey->startBlock) result = 1;
+      }
+    } else {
+      // Fork types differ; determine sign
+      if (searchKey->forkType > trialKey->forkType) result = 1;
+    }
+  } else {
+    // FileNums differ; determine sign
+    if (searchKey->fileID > trialKey->fileID) result = 1;
+  }
+  
+  return result;
+}
diff --git a/bootx.tproj/fs.subproj/net.c b/bootx.tproj/fs.subproj/net.c
new file mode 100644 (file)
index 0000000..161a057
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  net.c - File System Module for wrapping TFTP.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+#include <fs.h>
+
+struct NetPartInfo {
+  char devSpec[1024];
+};
+typedef struct NetPartInfo NetPartInfo, *NetPartInfoPtr;
+
+
+// Public functions
+
+CICell NetInitPartition(char *devSpec)
+{
+  NetPartInfoPtr net;
+  
+  net = (NetPartInfoPtr)malloc(sizeof(NetPartInfo));
+  if (net == 0) return 0;
+  
+  strcpy(net->devSpec, devSpec);
+  
+  return (CICell)net;
+}
+
+long NetLoadFile(CICell ih, char *filePath)
+{
+  CICell         netIH;
+  NetPartInfoPtr net;
+  long           ret, length, triesLeft;
+  char           fileSpec[2048];
+  
+  net = (NetPartInfoPtr)ih;
+  
+  sprintf(fileSpec, "%s,%s", net->devSpec, filePath);
+  
+  printf("Opening [%s]...\n", fileSpec);
+  
+  triesLeft = 10;
+  do {
+    netIH = Open(fileSpec);
+    triesLeft--;
+  } while ((netIH == 0) &&  triesLeft);
+  if (netIH == 0) return -1;
+  
+  triesLeft = 10;
+  do {
+    ret = CallMethod_1_1(netIH, "load", kLoadAddr, &length);
+    if (gOFVersion < kOFVersion3x) {
+      if (length == 0) ret = -1;
+    }
+    triesLeft--;
+  } while ((ret != kCINoError) && triesLeft);
+  if (ret != kCINoError) return -1;
+  
+  Close(netIH);
+  
+  return length;
+}
+
+long NetGetDirEntry(CICell ih, char *dirPath, long *dirIndex,
+                   char **name, long *flags, long *time)
+{
+  return -1;
+}
diff --git a/bootx.tproj/fs.subproj/ufs.c b/bootx.tproj/fs.subproj/ufs.c
new file mode 100644 (file)
index 0000000..76d1741
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  ufs.c - File System Module for UFS.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+#include "ufs_byteorder.h"
+
+typedef struct dinode Inode, *InodePtr;
+
+// Private function prototypes
+
+static char *ReadBlock(long fragNum, long fragOffset, long length,
+                      char *buffer, long cache);
+static long ReadInode(long inodeNum, InodePtr inode);
+static long ResolvePathToInode(char *filePath, long *flags,
+                              InodePtr fileInode, InodePtr dirInode);
+static long ReadDirEntry(InodePtr dirInode, long *fileInodeNum,
+                        long *dirIndex, char **name, long *flags, long *time);
+static long FindFileInDir(char *fileName, long *flags,
+                         InodePtr fileInode, InodePtr dirInode);
+static char *ReadFileBlock(InodePtr fileInode, long fragNum, long blockOffset,
+                          long length, char *buffer, long cache);
+static long ReadFile(InodePtr fileInode, long *length);
+
+
+#define kDevBlockSize (0x200)    // Size of each disk block.
+#define kDiskLableBlock (15)     // Block the DL is in.
+
+static CICell    gCurrentIH;
+static long long gPartitionBase;
+static char      gDLBuf[8192];
+static char      gFSBuf[SBSIZE];
+static struct fs *gFS;
+static long      gBlockSize;
+static long      gFragSize;
+static long      gFragsPerBlock;
+static char      *gTempBlock;
+static char      gTempName[MAXNAMLEN + 1];
+static char      gTempName2[MAXNAMLEN + 1];
+static Inode     gRootInode;
+static Inode     gFileInode;
+
+// Public functions
+
+long UFSInitPartition(CICell ih)
+{
+  disk_label_t *dl;
+  partition_t  *part;
+  
+  if (ih == gCurrentIH) return 0;
+  
+  printf("UFSInitPartition: %x\n", ih);
+  
+  gCurrentIH = 0;
+  
+  // Assume there is no Disk Label
+  gPartitionBase = 0;
+  
+  // Look for the Super Block
+  Seek(ih, gPartitionBase + SBOFF);
+  Read(ih, (long)gFSBuf, SBSIZE);
+  
+  gFS = (struct fs *)gFSBuf;
+  if (gFS->fs_magic != FS_MAGIC) {
+    // Did not find it... Look for the Disk Label.
+    // Look for the Disk Label
+    Seek(ih, 1ULL * kDevBlockSize * kDiskLableBlock);
+    Read(ih, (long)gDLBuf, 8192);
+    
+    dl = (disk_label_t *)gDLBuf;
+    byte_swap_disklabel_in(dl);
+    
+    if (dl->dl_version != DL_VERSION) {
+      return -1;
+    }
+    
+    part = &dl->dl_part[0];
+    gPartitionBase = (1ULL * (dl->dl_front + part->p_base) * dl->dl_secsize) -
+      (1ULL * (dl->dl_label_blkno - kDiskLableBlock) * kDevBlockSize);
+    
+    // Re-read the Super Block.
+    Seek(ih, gPartitionBase + SBOFF);
+    Read(ih, (long)gFSBuf, SBSIZE);
+    
+    gFS = (struct fs *)gFSBuf;
+    if (gFS->fs_magic != FS_MAGIC) {
+      return -1;
+    }
+  }
+  
+  // Calculate the block size and set up the block cache.
+  gBlockSize = gFS->fs_bsize;
+  gFragSize  = gFS->fs_fsize;
+  gFragsPerBlock = gBlockSize / gFragSize;
+  if (gTempBlock != 0) free(gTempBlock);
+  gTempBlock = malloc(gBlockSize);
+  CacheInit(ih, gBlockSize);
+  
+  gCurrentIH = ih;
+  
+  // Read the Root Inode
+  ReadInode(ROOTINO, &gRootInode);
+  
+  return 0;
+}
+
+
+long UFSLoadFile(CICell ih, char *filePath)
+{
+  long ret, length, flags;
+  
+  if (UFSInitPartition(ih) == -1) return -1;
+  
+  printf("Loading UFS file: [%s] from %x.\n", filePath, ih);
+  
+  // Skip one or two leading '\'.
+  if (*filePath == '\\') filePath++;
+  if (*filePath == '\\') filePath++;
+  ret = ResolvePathToInode(filePath, &flags, &gFileInode, &gRootInode);
+  if ((ret == -1) || (flags != kFlatFileType)) return -1;
+  
+  ret = ReadFile(&gFileInode, &length);
+  if (ret == -1) return -1;
+  
+  return length;
+}
+
+
+long UFSGetDirEntry(CICell ih, char *dirPath, long *dirIndex,
+                   char **name, long *flags, long *time)
+{
+  long ret, fileInodeNum, dirFlags;
+  
+  if (UFSInitPartition(ih) == -1) return -1;
+  
+  // Skip a leading '\' if present
+  if (*dirPath == '\\') dirPath++;
+  if (*dirPath == '\\') dirPath++;
+  ret = ResolvePathToInode(dirPath, &dirFlags, &gFileInode, &gRootInode);
+  if ((ret == -1) || (dirFlags != kDirectoryFileType)) return -1;
+  
+  do {
+    ret = ReadDirEntry(&gFileInode, &fileInodeNum, dirIndex,
+                      name, flags, time);
+  } while ((ret != -1) && (*flags == kUnknownFileType));
+  
+  return ret;
+}
+
+// Private functions
+
+static char *ReadBlock(long fragNum, long blockOffset, long length,
+                      char *buffer, long cache)
+{
+  long long offset;
+  long blockNum;
+  
+  blockNum = fragNum / gFragsPerBlock;
+  fragNum -= blockNum * gFragsPerBlock;
+  
+  blockOffset += fragNum * gFragSize;
+  
+  offset = gPartitionBase + 1ULL * blockNum * gBlockSize;
+  
+  if (cache && ((blockOffset + length) <= gBlockSize)) {
+    CacheRead(gCurrentIH, gTempBlock, offset, gBlockSize, 1);
+    if (buffer != 0) bcopy(gTempBlock + blockOffset, buffer, length);
+    else buffer = gTempBlock + blockOffset;
+  } else {
+    offset += blockOffset;
+    CacheRead(gCurrentIH, buffer, offset, length, 0);
+  }
+  
+  return buffer;
+}
+
+
+static long ReadInode(long inodeNum, InodePtr inode)
+{
+  long fragNum = ino_to_fsba(gFS, inodeNum);
+  long blockOffset = ino_to_fsbo(gFS, inodeNum) * sizeof(Inode);
+  
+  ReadBlock(fragNum, blockOffset, sizeof(Inode), (char *)inode, 1);
+  
+  return 0;
+}
+
+
+static long ResolvePathToInode(char *filePath, long *flags,
+                              InodePtr fileInode, InodePtr dirInode)
+{
+  char *restPath;
+  long ret, cnt;
+  
+  // if filePath is empty the we want this directory.
+  if (*filePath == '\0') {
+    bcopy((char *)dirInode, (char *)fileInode, sizeof(Inode));
+    return 0;
+  }
+  
+  // Copy the file name to gTempName
+  cnt = 0;
+  while ((filePath[cnt] != '\\') && (filePath[cnt] != '\0')) cnt++;
+  strncpy(gTempName, filePath, cnt);
+  
+  // Move restPath to the right place.
+  if (filePath[cnt] != '\0') cnt++;
+  restPath = filePath + cnt;
+  
+  // gTempName is a name in the current Dir.
+  // restPath is the rest of the path if any.
+  
+  ret = FindFileInDir(gTempName, flags, fileInode, dirInode);
+  if (ret == -1) return -1;
+  
+  if ((*restPath != '\0') && (*flags == kDirectoryFileType))
+    ret = ResolvePathToInode(restPath, flags, fileInode, fileInode);
+  
+  return ret;
+}
+
+
+static long ReadDirEntry(InodePtr dirInode, long *fileInodeNum,
+                        long *dirIndex, char **name, long *flags, long *time)
+{
+  struct direct *dir;
+  char          *buffer;
+  long          index = *dirIndex;
+  long          dirBlockNum, dirBlockOffset;
+  Inode         tmpInode;
+  
+  dirBlockOffset = index % DIRBLKSIZ;
+  dirBlockNum    = index / DIRBLKSIZ;
+  
+  buffer = ReadFileBlock(dirInode, dirBlockNum, 0, DIRBLKSIZ, 0, 1);
+  if (buffer == 0) return -1;
+  
+  dir = (struct direct *)(buffer + dirBlockOffset);
+  if (dir->d_ino == 0) return -1;
+  
+  *dirIndex += dir->d_reclen;
+  *fileInodeNum = dir->d_ino;
+  *name = strncpy(gTempName2, dir->d_name, dir->d_namlen);
+  
+  ReadInode(dir->d_ino, &tmpInode);
+  
+  *time = tmpInode.di_mtime;
+  
+  switch (tmpInode.di_mode & IFMT) {
+  case IFREG: *flags = kFlatFileType; break;
+  case IFDIR: *flags = kDirectoryFileType; break;
+  case IFLNK: *flags = kLinkFileType; break;
+  default :   *flags = kUnknownFileType; break;
+  }
+  
+  return 0;
+}
+
+
+static long FindFileInDir(char *fileName, long *flags,
+                         InodePtr fileInode, InodePtr dirInode)
+{
+  long ret, inodeNum, time, index = 0;
+  char *name;
+  
+  while (1) {
+    ret = ReadDirEntry(dirInode, &inodeNum, &index, &name, flags, &time);
+    if (ret == -1) return -1;
+    
+    if (*flags == kUnknownFileType) continue;
+    
+    if (strcmp(fileName, name) == 0) break;
+  }
+  
+  ReadInode(inodeNum, fileInode);
+  
+  return 0;
+}
+
+
+static char *ReadFileBlock(InodePtr fileInode, long fragNum, long blockOffset,
+                          long length, char *buffer, long cache)
+{
+  long fragCount, blockNum;
+  long diskFragNum, indFragNum, indBlockOff, refsPerBlock;
+  char *indBlock;
+  
+  fragCount = (fileInode->di_size + gFragSize - 1) / gFragSize;
+  if (fragNum >= fragCount) return 0;
+  
+  refsPerBlock = gBlockSize / sizeof(ufs_daddr_t);
+  
+  blockNum = fragNum / gFragsPerBlock;
+  fragNum -= blockNum * gFragsPerBlock;
+  
+  // Get Direct Block Number.
+  if (blockNum < NDADDR) {
+    diskFragNum = fileInode->di_db[blockNum];
+  } else {
+    blockNum -= NDADDR;
+    
+    // Get Single Indirect Fragment Number.
+    if (blockNum < refsPerBlock) {
+      indFragNum = fileInode->di_ib[0];
+    } else {
+      blockNum -= refsPerBlock;
+      
+      // Get Double Indirect Fragment Number.
+      if (blockNum < (refsPerBlock * refsPerBlock)) {
+       indFragNum = fileInode->di_ib[1];
+      } else {
+       blockNum -= refsPerBlock * refsPerBlock;
+       
+       // Get Triple Indirect Fragment Number.
+       indFragNum = fileInode->di_ib[2];
+       
+       indBlock = ReadBlock(indFragNum, 0, gBlockSize, 0, 1);
+       indBlockOff = blockNum / (refsPerBlock * refsPerBlock);
+       blockNum %= (refsPerBlock * refsPerBlock);
+       indFragNum = ((ufs_daddr_t *)indBlock)[indBlockOff];
+      }
+      
+      indBlock = ReadBlock(indFragNum, 0, gBlockSize, 0, 1);
+      indBlockOff = blockNum / refsPerBlock;
+      blockNum %= refsPerBlock;
+      indFragNum = ((ufs_daddr_t *)indBlock)[indBlockOff];
+    }
+    
+    indBlock = ReadBlock(indFragNum, 0, gBlockSize, 0, 1);
+    diskFragNum = ((ufs_daddr_t *)indBlock)[blockNum];
+  }
+  
+  buffer = ReadBlock(diskFragNum+fragNum, blockOffset, length, buffer, cache);
+  
+  return buffer;
+}
+
+
+static long ReadFile(InodePtr fileInode, long *length)
+{
+  long bytesLeft, curSize, curFrag = 0;
+  char *buffer, *curAddr = (char *)kLoadAddr;
+  
+  bytesLeft = *length = fileInode->di_size;
+  
+  if (*length > kLoadSize) {
+    printf("File is too large.\n");
+    return -1;
+  }
+  
+  while (bytesLeft) {
+    if (bytesLeft > gBlockSize) curSize = gBlockSize;
+    else curSize = bytesLeft;
+    
+    buffer = ReadFileBlock(fileInode, curFrag, 0, curSize, curAddr, 0);
+    if (buffer == 0) break;
+    
+    curFrag += gFragsPerBlock;
+    curAddr += curSize;
+    bytesLeft -= curSize;
+  }
+  
+  return bytesLeft;
+}
diff --git a/bootx.tproj/fs.subproj/ufs_byteorder.c b/bootx.tproj/fs.subproj/ufs_byteorder.c
new file mode 100644 (file)
index 0000000..426d0ab
--- /dev/null
@@ -0,0 +1,234 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright 1993 NeXT, Inc.
+ * All rights reserved.
+ */
+/*
+ *  ufs_byteorder.c - Functions for endian swapping UFS disk structures.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <architecture/byte_order.h>
+
+#include "ufs_byteorder.h"
+
+#define        swapBigLongToHost(thing) ((thing) = NXSwapBigLongToHost(thing))
+#define        swapBigShortToHost(thing) ((thing) = NXSwapBigShortToHost(thing))
+
+void
+swapBigIntsToHost(int *array, int count)
+{
+       register int    i;
+
+       for (i = 0;  i < count;  i++)
+               swapBigLongToHost(array[i]);
+}
+
+
+void
+swapBigShortToHosts(short *array, int count)
+{
+       register int    i;
+
+       for (i = 0;  i < count;  i++)
+               swapBigShortToHost(array[i]);
+}
+
+
+void
+byte_swap_superblock(struct fs *sb)
+{
+#ifdef notyet
+       swapBigIntsToHost(((int *) sb) + 2, 50);
+       
+       swapBigLongToHost(sb->fs_cgrotor);
+       swapBigLongToHost(sb->fs_cpc);
+
+       swapBigShortToHosts((short *) sb->fs_postbl, MAXCPG * NRPOS); 
+
+       swapBigLongToHost(sb->fs_magic);
+#endif
+}
+
+
+static inline void
+byte_swap_disklabel_common(disk_label_t *dl)
+{
+
+       swapBigLongToHost(dl->dl_version);      /* ditto */
+       swapBigLongToHost(dl->dl_label_blkno);
+       swapBigLongToHost(dl->dl_size);
+       swapBigLongToHost(dl->dl_flags);
+       swapBigLongToHost(dl->dl_tag);
+//     swapBigShortToHost(dl->dl_checksum);
+//     if (dl->dl_version >= DL_V3)
+//             swapBigShortToHost(dl->dl_un.DL_v3_checksum);
+//     else
+//             swapBigIntsToHost(dl->dl_un.DL_bad, NBAD);
+
+}
+
+
+void
+byte_swap_disklabel_in(disk_label_t *dl)
+{
+
+       byte_swap_disklabel_common(dl);
+       byte_swap_disktab_in(&dl->dl_dt);
+
+}
+
+
+static inline void
+byte_swap_disktab_common(struct disktab *dt)
+{
+
+       register unsigned int   i;
+
+       swapBigLongToHost(dt->d_secsize);
+       swapBigLongToHost(dt->d_ntracks);
+       swapBigLongToHost(dt->d_nsectors);
+       swapBigLongToHost(dt->d_ncylinders);
+//     swapBigLongToHost(dt->d_rpm);
+       swapBigShortToHost(dt->d_front);
+       swapBigShortToHost(dt->d_back);
+//     swapBigShortToHost(dt->d_ngroups);
+//     swapBigShortToHost(dt->d_ag_size);
+//     swapBigShortToHost(dt->d_ag_alts);
+//     swapBigShortToHost(dt->d_ag_off);
+//     swapBigIntsToHost(dt->d_boot0_blkno, NBOOTS);
+
+       for (i=0; i < NPART; i++)
+               byte_swap_partition(&dt->d_partitions[i]);
+
+}
+
+/*
+ *  This is particularly grody.  The beginning of the partition array is two
+ *  bytes low on the 68 wrt natural alignment rules.  Furthermore, each
+ *  element of the partition table is two bytes smaller on 68k due to padding
+ *  at the end of the struct.
+ */
+void
+byte_swap_disktab_in(struct disktab *dt)
+{
+
+       struct partition        *pp;
+       int                     i;
+
+       /*
+        *  Shift each struct partition up in memory by 2 + 2 * offset bytes.
+        *  Do it backwards so we don't overwrite anything.
+        */
+       for (i=NPART - 1; i >=0; i--) {
+               struct partition temp;
+               pp = &dt->d_partitions[i];
+               /* beware: compiler doesn't do overlapping struct assignment */
+               temp = *(struct partition *)(((char *) pp) - 2 * (i + 1));
+               *pp = temp;
+       }
+
+       byte_swap_disktab_common(dt);
+
+}
+
+
+void
+byte_swap_partition(struct partition *part)
+{
+
+       swapBigLongToHost(part->p_base);
+       swapBigLongToHost(part->p_size);
+       swapBigShortToHost(part->p_bsize);
+       swapBigShortToHost(part->p_fsize);
+       swapBigShortToHost(part->p_cpg);
+       swapBigShortToHost(part->p_density);
+
+}
+
+
+void
+byte_swap_inode_in(struct dinode *dc, struct dinode *ic)
+{
+#ifdef notyet
+       register int            i;
+
+       ic->ic_mode = NXSwapBigShortToHost(dc->ic_mode);
+       ic->ic_nlink = NXSwapBigShortToHost(dc->ic_nlink);
+//     ic->ic_uid = NXSwapBigShortToHost(dc->ic_uid);
+//     ic->ic_gid = NXSwapBigShortToHost(dc->ic_gid);
+
+       ic->ic_size.val[0] = NXSwapBigLongToHost(dc->ic_size.val[1]);
+       ic->ic_size.val[1] = NXSwapBigLongToHost(dc->ic_size.val[0]);
+
+//     ic->ic_atime = NXSwapBigLongToHost(dc->ic_atime);
+//     ic->ic_mtime = NXSwapBigLongToHost(dc->ic_mtime);
+//     ic->ic_ctime = NXSwapBigLongToHost(dc->ic_ctime);
+//     ic->ic_atspare = NXSwapBigLongToHost(dc->ic_atspare);
+//     ic->ic_mtspare = NXSwapBigLongToHost(dc->ic_mtspare);
+//     ic->ic_ctspare = NXSwapBigLongToHost(dc->ic_ctspare);
+
+       ic->ic_flags = NXSwapBigLongToHost(dc->ic_flags);
+
+       if ((ic->ic_flags & IC_FASTLINK) == 0) { /* not a fast symlink */
+
+               for (i=0; i < NDADDR; i++)      /* direct blocks */
+                       ic->ic_db[i] = NXSwapBigLongToHost(dc->ic_db[i]);
+       
+               for (i=0; i < NIADDR; i++)      /* indirect blocks */
+                       ic->ic_ib[i] = NXSwapBigLongToHost(dc->ic_ib[i]);
+       }
+       else
+               bcopy(dc->ic_symlink, ic->ic_symlink, sizeof(dc->ic_symlink));
+
+       ic->ic_blocks = NXSwapBigLongToHost(dc->ic_blocks);
+       ic->ic_gen = NXSwapBigLongToHost(dc->ic_gen);
+       for (i=0; i < sizeof(ic->ic_spare) / sizeof(int); i++)
+               ic->ic_spare[i] = NXSwapBigLongToHost(dc->ic_spare[i]);
+#else
+       *ic = *dc;
+#endif
+}
+
+
+void
+byte_swap_dir_block_in(char *addr, int count)
+{
+#ifdef notyet
+       register struct direct  *ep = (struct direct *) addr;
+       register int            entryoffsetinblk = 0;
+
+       while (entryoffsetinblk < count) {
+               ep = (struct direct *) (entryoffsetinblk + addr);
+               swapBigLongToHost(ep->d_ino);
+               swapBigShortToHost(ep->d_reclen);
+               swapBigShortToHost(ep->d_namlen);
+               entryoffsetinblk += ep->d_reclen;
+               if (ep->d_reclen < 12)          /* handle garbage in dirs */
+                       break;
+       }
+#endif
+}
diff --git a/bootx.tproj/fs.subproj/ufs_byteorder.h b/bootx.tproj/fs.subproj/ufs_byteorder.h
new file mode 100644 (file)
index 0000000..3bb6134
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright (c) 1992 NeXT Computer, Inc.
+ *
+ * UFS byte swapping routines to make a big endian file system useful on a
+ * little endian machine.
+ *
+ * HISTORY
+ *
+ * 8 Jul 1992 Brian Pinkerton at NeXT
+ *      Created.
+ */
+/*
+ *  ufs_byteorder.h - Externs for endian swapping UFS disk structures.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <bsd/sys/param.h>
+#include <bsd/sys/types.h>
+#include <bsd/sys/disktab.h>
+#include <bsd/sys/vnode.h>
+#include <bsd/sys/buf.h>
+#include <bsd/dev/disk.h>
+#include <bsd/ufs/ufs/quota.h>
+#include <bsd/ufs/ufs/inode.h>
+#include <bsd/ufs/ffs/fs.h>
+
+void byte_swap_ints(int *array, int count);
+void byte_swap_shorts(short *array, int count);
+
+void byte_swap_disklabel_in(disk_label_t *dl);
+void byte_swap_disktab_in(struct disktab *dt);
+void byte_swap_partition(struct partition *part);
+void byte_swap_inode_in(struct dinode *dc, struct dinode *ic);
+void byte_swap_dir_block_in(char *addr, int count);
diff --git a/bootx.tproj/include.subproj/Makefile b/bootx.tproj/include.subproj/Makefile
new file mode 100644 (file)
index 0000000..5f0a9e4
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# Generated by the NeXT Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = include
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Component
+
+HFILES = boot_args.h ci.h device_tree.h fs.h libclite.h sl.h\
+         sl_words.h
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = subproj.make
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(JDKBINDIR)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/bootx.tproj/include.subproj/Makefile.postamble b/bootx.tproj/include.subproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/bootx.tproj/include.subproj/Makefile.preamble b/bootx.tproj/include.subproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..cfe786a
--- /dev/null
@@ -0,0 +1,139 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/bootx.tproj/include.subproj/PB.project b/bootx.tproj/include.subproj/PB.project
new file mode 100644 (file)
index 0000000..d564e6c
--- /dev/null
@@ -0,0 +1,21 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        H_FILES = (boot_args.h, ci.h, device_tree.h, fs.h, libclite.h, sl.h, sl_words.h); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(JDKBINDIR)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = include; 
+    PROJECTTYPE = Component; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/include.subproj/boot_args.h b/bootx.tproj/include.subproj/boot_args.h
new file mode 100644 (file)
index 0000000..36080aa
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  boot_args.h - Data stuctures for the information passed to the kernel.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_BOOT_ARGS_H_
+#define _BOOTX_BOOT_ARGS_H_
+
+// Video information..
+
+struct Boot_Video {
+  unsigned long v_baseAddr; /* Base address of video memory */
+  unsigned long v_display;  /* Display Code (if Applicable */
+  unsigned long v_rowBytes; /* Number of bytes per pixel row */
+  unsigned long v_width;    /* Width */
+  unsigned long v_height;   /* Height */
+  unsigned long v_depth;    /* Pixel Depth */
+};
+typedef struct Boot_Video Boot_Video, *Boot_Video_Ptr;
+
+
+// DRAM Bank definitions - describes physical memory layout.
+#define kMaxDRAMBanks (26) /* maximum number of DRAM banks */
+
+struct DRAMBank {
+  unsigned long base;       /* physical base of DRAM bank */
+  unsigned long size;       /* size of bank */
+};
+typedef struct DRAMBank DRAMBank, *DRAMBankPtr;
+
+
+// Boot argument structure - passed into kernel at boot time.
+
+#define kBootArgsRevision (1)
+#define kBootArgsVersion  (1)
+
+#define BOOT_LINE_LENGTH  (256)
+
+struct boot_args {
+  unsigned short Revision;                /* Revision of boot_args structure */
+  unsigned short Version;                 /* Version of boot_args structure */
+  char CommandLine[BOOT_LINE_LENGTH];     /* Passed in command line */
+  DRAMBank PhysicalDRAM[kMaxDRAMBanks];   /* base/range pairs for the 26 DRAM banks */
+  Boot_Video     Video;                   /* Video Information */
+  unsigned long  machineType;             /* Machine Type (gestalt) */
+  void           *deviceTreeP;            /* Base of flattened device tree */
+  unsigned long  deviceTreeLength;        /* Length of flattened tree */
+  unsigned long  topOfKernelData;         /* Last address of kernel data area*/
+};
+typedef struct boot_args boot_args, *boot_args_ptr;
+
+#endif /* ! _BOOTX_BOOT_ARGS_H_ */
diff --git a/bootx.tproj/include.subproj/ci.h b/bootx.tproj/include.subproj/ci.h
new file mode 100644 (file)
index 0000000..8922e68
--- /dev/null
@@ -0,0 +1,460 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  ci.h - Headers for the OF Client Interface Library
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_CI_H_
+#define _BOOTX_CI_H_
+
+#define kCINoError (0)
+#define kCIError   (-1)
+#define kCICatch   (-2)
+
+typedef long CICell;
+
+struct CIArgs {
+  char *service;
+  CICell nArgs;
+  CICell nReturns;
+  
+  union {
+    struct {                   // nArgs=1, nReturns=1
+      char *forth;
+      CICell catchResult;
+    } interpret_0_0;
+       
+    struct {                   // nArgs=2, nReturns=1
+      char *forth;
+      CICell arg1;
+      CICell catchResult;
+    } interpret_1_0;
+       
+    struct {                   // nArgs=2, nReturns=2
+      char *forth;
+      CICell arg1;
+      CICell catchResult;
+      CICell return1;
+    } interpret_1_1;
+       
+    struct {                   // nArgs=3, nReturns=2
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell catchResult;
+      CICell return1;
+    } interpret_2_1;
+       
+    struct {                   // nArgs=4, nReturns=2
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell arg3;
+      CICell catchResult;
+      CICell return1;
+    } interpret_3_1;
+       
+    struct {                   // nArgs=4, nReturns=3
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell arg3;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+    } interpret_3_2;
+       
+    struct {            // nArgs=5, nReturns=1
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell arg3;
+      CICell arg4;
+      CICell catchResult;
+    } interpret_4_0;
+       
+    struct {                   // nArgs=1, nReturns=2
+      char *forth;
+      CICell catchResult;
+      CICell return1;
+    } interpret_0_1;
+       
+    struct {                   // nArgs=1, nReturns=3
+      char *forth;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+    } interpret_0_2;
+       
+    struct {                   // nArgs=1, nReturns=4
+      char *forth;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+      CICell return3;
+    } interpret_0_3;
+       
+    struct {                   // nArgs=2, nReturns=4
+      char *forth;
+      CICell arg1;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+      CICell return3;
+    } interpret_1_3;
+       
+    struct {                   // nArgs=3, nReturns=4
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+      CICell return3;
+    } interpret_2_3;
+       
+    struct {                   // nArgs=3, nReturns=5
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+      CICell return3;
+      CICell return4;
+    } interpret_2_4;
+       
+    struct {                   // nArgs=3, nReturns=1
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell catchResult;
+    } interpret_2_0;
+       
+    struct {                   // nArgs=3, nReturns=3
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell catchResult;
+      CICell return1;
+      CICell return2;
+    } interpret_2_2;
+       
+    struct {                   // nArgs=4, nReturns=1
+      char *forth;
+      CICell arg1;
+      CICell arg2;
+      CICell arg3;
+      CICell catchResult;
+    } interpret_3_0;
+
+    struct {                   // nArgs=2, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell catchResult;
+    } callMethod_0_0;
+
+    struct {                   // nArgs=2, nReturns=2
+      char *method;
+      CICell iHandle;
+      CICell catchResult;
+      CICell return1;
+    } callMethod_0_1;
+
+    struct {                   // nArgs=3, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell arg1;
+      CICell catchResult;
+    } callMethod_1_0;
+
+    struct {                   // nArgs=3, nReturns=2
+      char *method;
+      CICell iHandle;
+      CICell arg1;
+      CICell catchResult;
+      CICell return1;
+    } callMethod_1_1;
+
+    struct {                   // nArgs=4, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell arg2;
+      CICell arg1;
+      CICell catchResult;
+    } callMethod_2_0;
+
+    struct {                   // nArgs=5, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell arg3;
+      CICell arg2;
+      CICell arg1;
+      CICell catchResult;
+    } callMethod_3_0;
+
+    struct {                   // nArgs=5, nReturns=2
+      char *method;
+      CICell iHandle;
+      CICell arg3;
+      CICell arg2;
+      CICell arg1;
+      CICell catchResult;
+      CICell return1;
+    } callMethod_3_1;
+
+    struct {                   // nArgs=6, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell arg4;
+      CICell arg3;
+      CICell arg2;
+      CICell arg1;
+      CICell catchResult;
+    } callMethod_4_0;
+
+    struct {                   // nArgs=7, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell arg5;
+      CICell arg4;
+      CICell arg3;
+      CICell arg2;
+      CICell arg1;
+      CICell catchResult;
+    } callMethod_5_0;
+
+    struct {                   // nArgs=8, nReturns=1
+      char *method;
+      CICell iHandle;
+      CICell arg6;
+      CICell arg5;
+      CICell arg4;
+      CICell arg3;
+      CICell arg2;
+      CICell arg1;
+      CICell catchResult;
+    } callMethod_6_0;
+
+    struct {                   // nArgs=1, nReturns=1  ( device-specifier -- ihandle )
+      char *devSpec;           // IN parameter
+      CICell ihandle;          // RETURN value
+    } open;
+       
+    struct {                   // nArgs=1, nReturns=0  ( ihandle -- )
+      CICell ihandle;          // IN parameter
+    } close;
+
+    struct {                    // nArgs=3, nReturns=1 ( ihandle addr length -- actual )
+      CICell ihandle;
+      CICell addr;
+      CICell length;
+      CICell actual;
+    } read;
+    
+    struct {                    // nArgs=3, nReturns=1 ( ihandle addr length -- actual )
+      CICell ihandle;
+      CICell addr;
+      CICell length;
+      CICell actual;
+    } write;
+    
+    struct {                    // nArgs=3, nReturns=1 ( ihandle pos.high pos.low -- result )
+      CICell ihandle;
+      CICell pos_high;
+      CICell pos_low;
+      CICell result;
+    } seek;
+    
+    struct {                   // nArgs=3, nReturns=1
+      CICell virt;
+      CICell size;
+      CICell align;
+      CICell baseaddr;
+    } claim;
+    
+    struct {                   // nArgs=2, nReturns=0
+      CICell virt;
+      CICell size;
+    } release;
+    
+    struct {                   // nArgs=1, nReturns=1  ( phandle -- peer-phandle )
+      CICell phandle;          // IN parameter
+      CICell peerPhandle;      // RETURN value
+    } peer;
+    
+    struct {                   // nArgs=1, nReturns=1  ( phandle -- child-phandle )
+      CICell phandle;          // IN parameter
+      CICell childPhandle;     // RETURN value
+    } child;
+    
+    struct {                   // nArgs=1, nReturns=1  ( phandle -- parent-phandle )
+      CICell childPhandle;     // IN parameter
+      CICell parentPhandle;    // RETURN value
+    } parent;
+    
+    struct {                   // nArgs=1, nReturns=1  ( devSpec -- phandle )
+      char *devSpec;           // IN parameter
+      CICell phandle;          // RETURN value
+    } finddevice;
+    
+    struct {                    // nArgs=3, nReturns=1 ( ihandle buf buflen -- length )
+      CICell ihandle;           // IN ihandle
+      char   *buf;              // IN buf
+      CICell buflen;            // IN buflen
+      CICell length;            // RETURN length
+    } instanceToPath;
+    
+    struct {                    // nArgs=1, nReturns=1 ( ihandle -- phandle )
+      CICell ihandle;           // IN ihandle
+      CICell phandle;           // RETURN phandle
+    } instanceToPackage;
+    
+    struct {                    // nArgs=3, nReturns=1 ( phandle buf buflen -- length )
+      CICell phandle;           // IN phandle
+      char   *buf;              // IN buf
+      CICell buflen;            // IN buflen
+      CICell length;            // RETURN length
+    } packageToPath;
+    
+    struct {                   // nArgs=2, nReturns=1  ( phandle name -- size )
+      CICell phandle;          // IN parameter
+      char   *name;            // IN parameter
+      CICell size;             // RETURN value
+    } getproplen;
+    
+    struct {                   // nArgs=4, nReturns=1  ( phandle name buf buflen -- size )
+      CICell phandle;          // IN parameter
+      char   *name;            // IN parameter
+      char   *buf;             // IN parameter
+      CICell buflen;           // IN parameter
+      CICell size;             // RETURN value
+    } getprop;
+    
+    struct {                   // nArgs=3, nReturns=1  ( phandle previous buf -- flag )
+      CICell phandle;          // IN parameter
+      char *previous;          // IN parameter
+      char *buf;               // IN parameter
+      CICell flag;             // RETURN value
+    } nextprop;
+    
+    struct {                   // nArgs=4, nReturns=1  ( phandle name buf buflen -- size )
+      CICell phandle;          // IN parameter
+      char *name;              // IN parameter
+      char *buf;               // IN parameter
+      CICell buflen;           // IN parameter
+      CICell size;             // RETURN value
+    } setprop;
+    
+    struct {                   // nArgs=1, nReturns=0
+      char *bootspec;
+    } boot;
+  } args;
+};
+typedef struct CIArgs CIArgs;
+
+typedef long (*ClientInterfacePtr)(CIArgs *args);
+
+// ci.c
+long InitCI(ClientInterfacePtr ciPtr);
+
+long CallCI(CIArgs *ciArgsPtr);
+
+// Device Tree
+CICell Peer(CICell phandle);
+CICell Child(CICell phandle);
+CICell Parent(CICell phandle);
+CICell FindDevice(char *devSpec);
+CICell InstanceToPath(CICell ihandle, char *buf, long buflen);
+CICell InstanceToPackage(CICell ihandle);
+CICell PackageToPath(CICell phandle, char *buf, long buflen);
+CICell GetPropLen(CICell phandle, char *name);
+CICell GetProp(CICell phandle, char *name, char *buf, long buflen);
+CICell NextProp(CICell phandle, char *previous, char *buf);
+CICell SetProp(CICell phandle, char *name, char *buf, long buflen);
+
+// Device I/O
+CICell Open(char *devSpec);
+void   Close(CICell ihandle);
+CICell Read(CICell ihandle, long addr, long length);
+CICell Write(CICell ihandle, long addr, long length);
+CICell Seek(CICell ihandle, long long position);
+
+// Call Method
+long CallMethod_0_0(CICell ihandle, char *method);
+long CallMethod_0_1(CICell ihandle, char *method, CICell *ret1);
+long CallMethod_1_0(CICell ihandle, char *method, CICell arg1);
+long CallMethod_1_1(CICell iHandle, char *method, CICell arg1, CICell *ret1);
+long CallMethod_2_0(CICell ihandle, char *method,
+                   CICell arg1, CICell arg2);
+long CallMethod_3_0(CICell ihandle, char *method,
+                   CICell arg1, CICell arg2, CICell arg3);
+long CallMethod_3_1(CICell ihandle, char *method,
+                   CICell arg1, CICell arg2, CICell arg3, CICell *ret1);
+long CallMethod_4_0(CICell ihandle, char *method,
+                   CICell arg1, CICell arg2, CICell arg3, CICell arg4);
+long CallMethod_5_0(CICell ihandle, char *method, CICell arg1, CICell arg2,
+                   CICell arg3, CICell arg4, CICell arg5);
+long CallMethod_6_0(CICell ihandle, char *method, CICell arg1, CICell arg2,
+                   CICell arg3, CICell arg4, CICell arg5, CICell arg6);
+
+// Memory
+CICell Claim(CICell virt, CICell size, CICell align);
+void   Release(CICell virt, CICell size);
+
+// Control Transfer
+void Boot(char *bootspec);
+void Enter(void);
+void Exit(void);
+void Quiesce(void);
+
+// Interpret_n_m
+long Interpret_0_0(char *forthString);
+long Interpret_1_0(char *forthString, CICell arg1);
+long Interpret_1_1(char *forthString, CICell arg1, CICell *ret1);
+long Interpret_2_1(char *forthString, CICell arg1, CICell arg2, CICell *ret1);
+long Interpret_3_1(char *forthString, CICell arg1, CICell arg2, CICell arg3,
+                 CICell *ret1);
+long Interpret_3_2(char *forthString, CICell arg1, CICell arg2, CICell arg3,
+                 CICell *ret1, CICell *ret2);
+long Interpret_4_0(char *forthString, CICell arg1, CICell arg2, CICell arg3,
+                 CICell arg4);
+long Interpret_0_1(char *forthString, CICell *ret1);
+long Interpret_0_2(char *forthString, CICell *ret1, CICell *ret2);
+long Interpret_0_3(char *forthString, CICell *ret1,
+                  CICell *ret2, CICell *ret3);
+long Interpret_1_3(char *forthString, CICell arg1, CICell *ret1, CICell *ret2,
+                 CICell *ret3);
+long Interpret_2_3(char *forthString, CICell arg1, CICell arg2, CICell *ret1,
+                 CICell *ret2, CICell *ret3);
+long Interpret_2_4(char *forthString, CICell arg1, CICell arg2, CICell *ret1,
+                 CICell *ret2, CICell *ret3, CICell *ret4);
+long Interpret_2_0(char *forthString, CICell arg1, CICell arg2);
+long Interpret_2_2(char *forthString, CICell arg1, CICell arg2, CICell *ret1,
+                 CICell *ret2);
+long Interpret_3_0(char *forthString, CICell arg1, CICell arg2, CICell arg3);
+
+#endif /* ! _BOOTX_CI_H_ */
diff --git a/bootx.tproj/include.subproj/device_tree.h b/bootx.tproj/include.subproj/device_tree.h
new file mode 100644 (file)
index 0000000..b842c1d
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  device_tree.h - Data structures for the flattened device tree.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_DEVICE_TREE_H_
+#define _BOOTX_DEVICE_TREE_H_
+
+#define kPropNameLength (32)
+#define kPropValueMaxLength (0x100000)
+
+struct DTProperty {
+  char name[kPropNameLength];  // NUL terminated property name
+  unsigned long length;        // Length (bytes) of property value that follows
+  //unsigned long value[1];    // Variable length value of property
+                               // Padded to a multiple of a longword
+};
+typedef struct DTProperty DTProperty, *DTPropertyPtr;
+
+struct DTNode {
+  unsigned long nProperties;   // Number of props[] elements (0 => end of list)
+  unsigned long nChildren;     // Number of children[] elements
+  //DTProperty props[];        // nProperties DeviceTreeNodeProperty structs
+  //DTNode children[];         // nChildren DeviceTreeNode structs
+};
+typedef struct DTNode DTNode, *DTNodePtr;
+
+#endif /* ! _BOOTX_DEVICE_TREE_H_ */
diff --git a/bootx.tproj/include.subproj/fs.h b/bootx.tproj/include.subproj/fs.h
new file mode 100644 (file)
index 0000000..01dbb70
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  fs.h - Externs for the File System Modules
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_FS_H_
+#define _BOOTX_FS_H_
+
+// Externs for fs.c
+extern long LoadFile(char *fileSpec);
+extern long CopyFile(char *fileSpec, char **addr, long *length);
+extern long GetFileInfo(char *dirSpec, char *name, long *flags, long *time);
+extern long GetDirEntry(char *dirSpec, long *dirIndex, char **name,
+                       long *flags, long *time);
+extern long DumpDir(char *dirSpec);
+
+// Externs for cache.c
+extern unsigned long gCacheHits;
+extern unsigned long gCacheMisses;
+extern unsigned long gCacheEvicts;
+
+extern void CacheInit(CICell ih, long chunkSize);
+extern long CacheRead(CICell ih, char *buffer, long long offset,
+                     long length, long cache);
+
+// Externs for net.c
+extern CICell NetInitPartition(char *devSpec);
+extern long   NetLoadFile(CICell ih, char *filePath);
+extern long   NetGetDirEntry(CICell ih, char *dirPath,
+                            long *dirIndex, char **name,
+                            long *flags, long *time);
+
+// Externs for hfs.c
+extern long HFSInitPartition(CICell ih);
+extern long HFSLoadFile(CICell ih, char *filePath);
+extern long HFSGetDirEntry(CICell ih, char *dirPath,
+                          long *dirIndex, char **name,
+                          long *flags, long *time);
+
+// Externs for ufs.c
+extern long UFSInitPartition(CICell ih);
+extern long UFSLoadFile(CICell ih, char *filePath);
+extern long UFSGetDirEntry(CICell ih, char *dirPath,
+                          long *dirIndex, char **name,
+                          long *flags, long *time);
+
+// Externs for ext2.c
+extern long Ext2InitPartition(CICell ih);
+extern long Ext2LoadFile(CICell ih, char *filePath);
+extern long Ext2GetDirEntry(CICell ih, char *dirPath,
+                          long *dirIndex, char **name,
+                           long *flags, long *time);
+
+#endif /* ! _BOOTX_FS_H_ */
diff --git a/bootx.tproj/include.subproj/libclite.h b/bootx.tproj/include.subproj/libclite.h
new file mode 100644 (file)
index 0000000..bd1daeb
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  libclite.h - Headers for the LibC Lite Functions
+ *
+ *  Ported from i386's libsa and libsaio
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_LIBCLITE_H_
+#define _BOOTX_LIBCLITE_H_
+
+#include <bsd/sys/types.h>
+
+#include <stdarg.h>
+#include <stddef.h>
+
+// ci_io.c
+extern void  putchar(int ch);
+
+// prf.c
+extern void prf(char *fmt, unsigned int *adx, void (*putfn_p)(),
+               void *putfn_arg);
+
+// printf.c
+extern int printf(const char *format, ...);
+
+// sprintf.c
+extern int sprintf(char *str, const char *fmt, ...);
+
+// string.c
+extern int strlen(const char *s);
+extern int strcmp(const char *s1, const char *s2);
+extern int strncmp(const char *s1, const char *s2, size_t len);
+extern char *strcpy(char *s1, const char *s2);
+extern char *strncpy(char *s1, const char *s2, size_t n);
+extern int ptol(char *str);
+extern int atoi(const char *str);
+extern char *strncat(char *s1, const char *s2, size_t n);
+extern char *strcat(char *s1, const char *s2);
+extern int strncasecmp(const char *s1, const char *s2, size_t len);
+
+// strtol.c
+extern int isupper(char c);
+extern int isalpha(char c);
+extern int isspace(char c);
+extern int isdigit(char c);
+extern char tolower(char c);
+extern long strtol(const char *nptr, char **endptr, register int base);
+
+// zalloc.c
+extern void malloc_init(char *start, int size);
+extern void malloc_error_init(void (*error_fn)());
+extern void *malloc(size_t size);
+extern void free(void *pointer);
+extern void *realloc(void *start, size_t newsize);
+
+// mem.c
+extern void *memcpy(void *dst, const void *src, size_t len);
+extern void *memset(void *dst, int ch, size_t len);
+extern void *bcopy(void *src, void *dst, int len);
+extern void bzero(void *dst, int len);
+
+// bsearch.c
+extern void *bsearch(const void *key, const void *base, size_t nmemb,
+                    size_t size, int (*compar)(const void *, const void *));
+
+// bswap.c
+extern int16_t bswap16(int16_t data);
+extern int32_t bswap32(int32_t data);
+
+#endif /* ! _BOOTX_LIBCLITE_H_ */
diff --git a/bootx.tproj/include.subproj/sl.h b/bootx.tproj/include.subproj/sl.h
new file mode 100644 (file)
index 0000000..ecaba85
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  sl.h - Headers for configuring the Secondary Loader
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_SL_H_
+#define _BOOTX_SL_H_
+
+#define kFailToBoot (1)
+
+#if ! defined(kMacOSXServer)
+#define kMacOSXServer (0)
+#endif
+
+/*
+
+Memory Map...  Assumes 32 MB
+
+Physical Address
+
+Open Firmware Version     1x, 2x                        3x
+00000000 - 00003FFF  :             Exception Vectors
+00004000 - 002FFFFF  :                Free Memory
+00300000 - 004FFFFF  :   OF Image         /            Free Memory
+00500000 - 01DFFFFF  :                Free Memory
+01E00000 - 01FFFFFF  :   Free Memory      /            OF Image
+
+
+Logical Address
+
+00000000 - 00003FFF  : Exception Vectors
+00004000 - 013FFFFF  : Kernal Image, Boot Struct and Drivers
+01400000 - 01BFFFFF  : File Load Area
+01C00000 - 01CFFFFF  : Secondary Loader Image
+01D00000 - 01DFFFFF  : Malloc Area
+01E00000 - 01FFFFFF  : Unused
+
+To provide a consistant Logical Memory Usage between OF 1,2 and OF 3
+the Logical Addresses 0x00300000 - 0x004FFFFF will be mapped to
+Physical Address 0x01E00000 - 0x01FFFFFF and will be copied back
+just before the kernel is loaded.
+
+
+*/
+
+#define kVectorAddr     (0x00000000)
+#define kVectorSize     (0x00004000)
+
+// OF 3.x
+#define kImageAddr      (0x00004000)
+#define kImageSize      (0x013FC000)
+
+// OF 1.x 2.x
+#define kImageAddr0     (0x00004000)
+#define kImageSize0     (0x002FC000)
+#define kImageAddr1     (0x00300000)
+#define kImageSize1     (0x00200000)
+#define kImageAddr1Phys (0x01E00000)
+#define kImageAddr2     (0x00500000)
+#define kImageSize2     (0x00F00000)
+
+#define kLoadAddr       (0x01400000)
+#define kLoadSize       (0x00800000)
+
+#define kMallocAddr     (0x01D00000)
+#define kMallocSize     (0x00100000)
+
+// Default Output Level
+#define kOutputLevelOff  (0)
+#define kOutputLevelFull (16)
+
+// OF versions
+#define kOFVersion1x    (0x01000000)
+#define kOFVersion2x    (0x02000000)
+#define kOFVersion3x    (0x03000000)
+
+// Device Types
+enum {
+  kUnknownDeviceType = 0,
+  kNetworkDeviceType,
+  kBlockDeviceType
+};
+
+// File Type
+enum {
+  kUnknownFileType = 0,
+  kFlatFileType,
+  kDirectoryFileType,
+  kLinkFileType
+};
+
+// Key Numbers
+#define kCommandKey (0x200)
+#define kOptKey     (0x201)
+#define kShiftKey   (0x202)
+#define kControlKey (0x203)
+
+// Mac OS X Booter Signature 'MOSX'
+#define kMacOSXSignature (0x4D4F5358)
+
+
+#include <bsd/sys/types.h>
+
+#include <ci.h>
+#include <sl_words.h>
+#include <libclite.h>
+#include <fs.h>
+#include <boot_args.h>
+
+// Externs for main.c
+extern char *gVectorSaveAddr;
+extern long gKernelEntryPoint;
+extern long gDeviceTreeAddr;
+extern long gDeviceTreeSize;
+extern long gBootArgsAddr;
+extern long gBootArgsSize;
+extern long gSymbolTableAddr;
+extern long gSymbolTableSize;
+
+extern long gBootDeviceType;
+extern long gBootFileType;
+extern char gBootDevice[256];
+extern char gBootFile[256];
+extern char gRootDir[256];
+
+extern char gTempStr[4096];
+
+extern long *gDeviceTreeMMTmp;
+
+extern long gOFVersion;
+
+extern char *gKeyMap;
+
+extern CICell gChosenPH;
+extern CICell gOptionsPH;
+extern CICell gScreenPH;
+extern CICell gMemoryMapPH;
+extern CICell gStdOutPH;
+
+extern CICell gMMUIH;
+extern CICell gMemoryIH;
+extern CICell gStdOutIH;
+extern CICell gKeyboardIH;
+
+extern long GetDeviceType(char *devSpec);
+extern long ConvertFileSpec(char *fileSpec, char *devSpec, char **filePath);
+extern long MatchThis(CICell phandle, char *string);
+extern void *AllocateBootXMemory(long size);
+extern long AllocateKernelMemory(long size);
+extern long AllocateMemoryRange(char *rangeName, long start, long length);
+extern unsigned long Alder32(unsigned char *buffer, long length);
+
+// Externs for macho.c
+extern long DecodeMachO(void);
+
+// Externs for elf.c
+extern long DecodeElf(void);
+
+// Externs for device_tree.c
+extern long FlattenDeviceTree(void);
+extern CICell SearchForNode(CICell ph, long top, char *prop, char *value);
+extern CICell SearchForNodeMatching(CICell ph, long top, char *value);
+
+// Externs for display.c
+extern long InitDisplays(void);
+extern long LoadDisplayDrivers(void);
+extern long DrawSplashScreen(void);
+extern long DrawBrokenSystemFolder(void);
+extern void GetMainScreenPH(Boot_Video_Ptr video);
+
+// Externs for drivers.c
+extern long LoadDrivers(char *dirPath);
+
+// Externs for config.c
+extern long InitConfig(void);
+extern long ParseConfigFile(char *addr);
+
+// Externs for PEFSupport.c
+extern unsigned long GetSymbolFromPEF(char *name, char *pef,
+                                     void *desc, long descSize);
+
+#endif /* ! _BOOTX_SL_H_ */
diff --git a/bootx.tproj/include.subproj/sl_words.h b/bootx.tproj/include.subproj/sl_words.h
new file mode 100644 (file)
index 0000000..ee2766b
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  sl_words.h - Headers for the Secondary Loader Words.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#ifndef _BOOTX_SL_WORDS_H_
+#define _BOOTX_SL_WORDS_H_
+
+#include <ci.h>
+
+// The iHandle for the SL Words.
+extern CICell SLWordsIH;
+
+// Call InitSLWords before using SLWordsIH.
+// outputLevel is used to supress output.
+// 0 - all off
+// 1 - OF stdout only
+// 2 - SLW's emit and cr.
+// 3 - ???
+extern long InitSLWords(long ofVers);
+
+
+//  Suported words.
+
+//  slw_set_output_level ( level -- )
+//   set the current output level.
+extern void SetOutputLevel(long level);
+
+//  slw_emit ( ch -- )                     Output Level: 2
+//    calls emit ( ch -- )
+extern void Emit(char ch);
+
+//  slw_cr ( -- )                          Output Level: 2
+//    calls cr ( -- )
+extern void CR(void);
+
+//  slw_init_keymap ( keyboardIH -- keyMap )
+//  sets the ihandle for the keyboard and
+//  puts the address of the keyMap on the stack
+extern char *InitKeyMap(CICell keyboardIH);
+
+//  slw_update_keymap ( -- )
+//  Called by slw_spin to make sure all the keys are caught.
+extern void UpdateKeyMap(void);
+
+// slw_spin_init ( screenIH cursorAddr cursorX cursorY cursorW cursorH --)
+// slw_spin_init2 ( screenIH cursorAddr cursorX cursorY cursorW cursorH --)
+//    Sets up the wait cursor.
+extern void SpinInit(long spinType, CICell screenIH, char *cursorAddr,
+                    long cursorX, long cursorY, long cursorW, long cursorH,
+                    long pixelSize);
+
+// slw_spin ( -- )
+//    Spins the wait cursor.
+extern void Spin(void);
+
+extern long GetPackageProperty(CICell phandle, char *propName,
+                              char **propAddr, long *propLen);
+
+// slw_pwd ( phandle addr len -- act )
+// does pwd the hard way.
+
+#define SL_DEBUG (0)
+
+/*
+  .sc ( -- )
+    does a simple stack crawl.
+
+
+
+ */
+
+#endif /* ! _BOOTX_SL_WORDS_H_ */
diff --git a/bootx.tproj/libclite.subproj/Makefile b/bootx.tproj/libclite.subproj/Makefile
new file mode 100644 (file)
index 0000000..abd9a0d
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# Generated by the Apple Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = libclite
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Component
+
+CFILES = bsearch.c bswap.c mem.c prf.c printf.c sprintf.c string.c\
+         strtol.c zalloc.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = subproj.make
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/bootx.tproj/libclite.subproj/Makefile.postamble b/bootx.tproj/libclite.subproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/bootx.tproj/libclite.subproj/Makefile.preamble b/bootx.tproj/libclite.subproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..cfe786a
--- /dev/null
@@ -0,0 +1,139 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/bootx.tproj/libclite.subproj/PB.project b/bootx.tproj/libclite.subproj/PB.project
new file mode 100644 (file)
index 0000000..046c7a1
--- /dev/null
@@ -0,0 +1,40 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        BUNDLES = (); 
+        CLASSES = (); 
+        C_FILES = (); 
+        FRAMEWORKSEARCH = (); 
+        HEADERSEARCH = (); 
+        H_FILES = (); 
+        M_FILES = (); 
+        OTHER_LINKED = (
+            bsearch.c, 
+            bswap.c, 
+            mem.c, 
+            prf.c, 
+            printf.c, 
+            sprintf.c, 
+            string.c, 
+            strtol.c, 
+            zalloc.c
+        ); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+        SUBPROJECTS = (); 
+        TOOLS = (); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = libclite; 
+    PROJECTTYPE = Component; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/libclite.subproj/bsearch.c b/bootx.tproj/libclite.subproj/bsearch.c
new file mode 100644 (file)
index 0000000..a9168a7
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  bsearch.c - bsearch from libc.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <libclite.h>
+
+void *
+bsearch(const void *key, const void *base, size_t nmemb, size_t size,
+       int (*compar)(const void *, const void *))
+{
+    int l = 0;
+    int u = nmemb - 1;
+    int m;
+    void *mp;
+    int r;
+
+    while (l <= u) {
+       m = (l + u) / 2;
+       mp = (void *)(((char *)base) + (m * size));
+       if ((r = (*compar) (key, mp)) == 0) {
+           return mp;
+       } else if (r < 0) {
+           u = m - 1;
+       } else {
+           l = m + 1;
+       }
+    }
+    return NULL;
+}
+
diff --git a/bootx.tproj/libclite.subproj/bswap.c b/bootx.tproj/libclite.subproj/bswap.c
new file mode 100644 (file)
index 0000000..7aec0d7
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  bswap.c - Endian Swapping functions.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <libclite.h>
+
+int16_t bswap16(int16_t data)
+{
+  int16_t tmpData;
+  
+  __asm__ volatile("sthbrx %0, 0, %1" : : "r" (data), "r" (&tmpData));
+  
+  return tmpData;
+}
+
+int32_t bswap32(int32_t data)
+{
+  int32_t tmpData;
+  
+  __asm__ volatile("stwbrx %0, 0, %1" : : "r" (data), "r" (&tmpData));
+  
+  return tmpData;
+}
diff --git a/bootx.tproj/libclite.subproj/mem.c b/bootx.tproj/libclite.subproj/mem.c
new file mode 100644 (file)
index 0000000..8f06ab2
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  mem.c - Standard memory functions.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#import <libclite.h>
+#import <ci.h>
+
+
+void *memcpy(void *dst, const void *src, size_t len)
+{
+  char *s = src, *d = dst;
+  int pos = 0, dir = 1;
+
+  if (d > s) {
+    dir = -1;
+    pos = len - 1;
+  }
+
+  while (len--) {
+    d[pos] = s[pos];
+    pos += dir;
+  }
+
+  return dst;
+}
+
+
+void *memset(void *dst, int ch, size_t len)
+{
+  long tmp = 0x01010101 * (ch & 0x000000FF);
+
+  if (len < 32) while (len--) *(((char *)dst)++) = ch;
+  else {
+    // do the front chunk as chars
+    while ((long)dst & 3) {
+      len--;
+      *(((char *)dst)++) = ch;
+    }
+    
+    // do the middle chunk as longs
+    while (len > 3) {
+      len -= 4;
+      *(((long *)dst)++) = tmp;
+    }
+    
+    // do the last chunk as chars
+    while (len--) *(((char *)dst)++) = ch;
+  }
+
+  return dst;
+}
+
+void *bcopy(void *src, void *dst, int len)
+{
+  return memcpy(dst, src, len);
+}
+
+void bzero(void *dst, int len)
+{
+  memset(dst, 0, len);
+}
+
diff --git a/bootx.tproj/libclite.subproj/prf.c b/bootx.tproj/libclite.subproj/prf.c
new file mode 100644 (file)
index 0000000..b61effc
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/* 
+ * Mach Operating System
+ * Copyright (c) 1990 Carnegie-Mellon University
+ * Copyright (c) 1989 Carnegie-Mellon University
+ * Copyright (c) 1988 Carnegie-Mellon University
+ * Copyright (c) 1987 Carnegie-Mellon University
+ * All rights reserved.  The CMU software License Agreement specifies
+ * the terms and conditions for use and redistribution.
+ */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)prf.c       7.1 (Berkeley) 6/5/86
+ */
+/*
+ *  prf.c - Helpers for the printf function.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sys/param.h>
+
+#define SPACE  1
+#define ZERO   2
+
+/*
+ * Scaled down version of C Library printf.
+ * Used to print diagnostic information directly on console tty.
+ * Since it is not interrupt driven, all system activities are
+ * suspended.
+ *
+ */
+
+/*
+ * Printn prints a number n in base b.
+ * We don't use recursion to avoid deep kernel stacks.
+ */
+static void
+printn(n, b, flag, minwidth, putfn_p, putfn_arg)
+       u_long n;
+       int b, flag, minwidth;
+       void (*putfn_p)();
+       void *putfn_arg;
+{
+       char prbuf[11];
+       register char *cp;
+       int width = 0, neg = 0;
+
+       if (b == 10 && (int)n < 0) {
+               neg = 1;
+               n = (unsigned)(-(int)n);
+       }
+       cp = prbuf;
+       do {
+               *cp++ = "0123456789abcdef"[n%b];
+               n /= b;
+               width++;
+       } while (n);
+       
+       if (neg) {
+               (*putfn_p)('-', putfn_arg);
+               width++;
+       }
+       while (width++ < minwidth)
+               (*putfn_p)( (flag & ZERO) ? '0' : ' ', putfn_arg);
+               
+       do
+               (*putfn_p)(*--cp, putfn_arg);
+       while (cp > prbuf);
+}
+
+void prf(
+       char *fmt,
+       unsigned int *adx,
+       void (*putfn_p)(),
+       void *putfn_arg
+)
+{
+       int b, c;
+       char *s;
+       int flag = 0, minwidth = 0, width = 0;
+
+loop:
+       while ((c = *fmt++) != '%') {
+               if(c == '\0')
+                       return;
+               (*putfn_p)(c, putfn_arg);
+       }
+again:
+       c = *fmt++;
+       switch (c) {
+       case 'l':
+               goto again;
+       case ' ':
+               flag |= SPACE;
+               goto again;
+       case '0':
+               if (minwidth == 0) {
+                   /* this is a flag */
+                   flag |= ZERO;
+                   goto again;
+               } /* fall through */
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+               minwidth *= 10;
+               minwidth += c - '0';
+               goto again;
+       case 'x': case 'X':
+               b = 16;
+               goto number;
+       case 'd':
+               b = 10;
+               goto number;
+       case 'o': case 'O':
+               b = 8;
+number:
+               printn((u_long)*adx, b, flag, minwidth, putfn_p, putfn_arg);
+               break;
+       case 's':
+               s = (char *)*adx;
+               while (c = *s++) {
+                       (*putfn_p)(c, putfn_arg);
+                       width++;
+               }
+               while (width++ < minwidth)
+                   (*putfn_p)(' ', putfn_arg);
+               break;
+       case 'c':
+               (*putfn_p)((char)*adx, putfn_arg);
+               break;
+       }
+       adx++;
+       goto loop;
+}
diff --git a/bootx.tproj/libclite.subproj/printf.c b/bootx.tproj/libclite.subproj/printf.c
new file mode 100644 (file)
index 0000000..926cc27
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  printf.c - printf
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <libclite.h>
+
+int printf(const char *format, ...)
+{
+    va_list ap;
+    va_start(ap, format);
+    prf(format, ap, putchar, 0);
+    va_end(ap);
+    return 0;
+}
+
diff --git a/bootx.tproj/libclite.subproj/sprintf.c b/bootx.tproj/libclite.subproj/sprintf.c
new file mode 100644 (file)
index 0000000..f995f5f
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright 1993 NeXT, Inc.
+ * All rights reserved.
+ */
+/*
+ *  sprintf.c - sprintf and helper functions.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <libclite.h>
+
+struct putc_info {
+    char *str;
+    char *last_str;
+};
+
+static void
+sputc(
+    int c,
+    struct putc_info *pi
+)
+{
+    if (pi->last_str)
+       if (pi->str == pi->last_str) {
+           *(pi->str) = '\0';
+           return;
+       }
+    *(pi->str)++ = c;
+}
+
+/*VARARGS1*/
+int sprintf(char *str, const char *fmt, ...)
+{
+    va_list ap;
+    struct putc_info pi;
+    
+    va_start(ap, fmt); 
+    pi.str = str;
+    pi.last_str = 0;
+    prf(fmt, ap, sputc, &pi);
+    *pi.str = '\0';
+    va_end(ap);
+    return 0;
+}
+
+/*VARARGS1*/
+int slvprintf(char *str, int len, const char *fmt, va_list ap )
+{
+    struct putc_info pi;
+    pi.str = str;
+    pi.last_str = str + len - 1;
+    prf(fmt, ap, sputc, &pi);
+    *pi.str = '\0';
+    return (pi.str - str);
+}
diff --git a/bootx.tproj/libclite.subproj/string.c b/bootx.tproj/libclite.subproj/string.c
new file mode 100644 (file)
index 0000000..d2fb44c
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  string.c - string operations.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include "libclite.h"
+
+/*#if DONT_USE_GCC_BUILT_IN_STRLEN*/
+
+#define tolower(c)     ((int)((c) & ~0x20))
+#define toupper(c)     ((int)((c) | 0x20))
+
+int strlen(const char *s)
+{
+       int n;
+
+       n = 0;
+       while (*s++) n++;
+       return(n);
+}
+
+/*#endif*/
+
+int
+strcmp(const char *s1, const char *s2)
+{
+       while (*s1 && (*s1 == *s2)) {
+               s1++;
+               s2++;
+       }
+       return (*s1 - *s2);
+}
+
+int strncmp(const char *s1, const char *s2, size_t len)
+{
+       register int n = len;
+       while (--n >= 0 && *s1 == *s2++)
+               if (*s1++ == '\0')
+                       return(0);
+       return(n<0 ? 0 : *s1 - *--s2);
+}
+
+char *
+strcpy(char *s1, const char *s2)
+{
+       register char *ret = s1;
+       while (*s1++ = *s2++)
+               continue;
+       return ret;
+}
+
+char *
+strncpy(char *s1, const char *s2, size_t n)
+{
+       register char *ret = s1;
+       while (n && (*s1++ = *s2++))
+               n--;
+       if (!n) *s1=0;
+       return ret;
+}
+
+int
+ptol(char *str)
+{
+       register int c = *str;
+
+       if (c <= '7' && c >= '0')
+               c -= '0';
+       else if (c <= 'h' && c >= 'a')
+               c -= 'a';
+       else c = 0;
+       return c;
+}
+
+int
+atoi(const char *str)
+{
+       register int sum = 0;
+       while (*str == ' ' || *str == '\t')
+               str++;
+       while (*str >= '0' && *str <= '9') {
+               sum *= 10;
+               sum += *str++ - '0';
+       }
+       return sum;
+}
+
+
+char *strncat(char *s1, const char *s2, size_t n)
+{
+       register char *ret = s1;
+       while (*s1)
+               s1++;
+       while (n-- && *s2)
+               *s1++ = *s2++;
+       *s1 = '\0';
+       return ret;
+}
+
+char *strcat(char *s1, const char *s2)
+{
+       return(strncat(s1, s2, strlen(s2)));
+}
+
+/*#if STRNCASECMP*/
+int strncasecmp(const char *s1, const char *s2, size_t len)
+{
+       register int n = len;
+       while (--n >= 0 && tolower(*s1) == tolower(*s2++))
+               if (*s1++ == '\0')
+                       return(0);
+       return(n<0 ? 0 : tolower(*s1) - tolower(*--s2));
+}
+/*#endif*/
+
diff --git a/bootx.tproj/libclite.subproj/strtol.c b/bootx.tproj/libclite.subproj/strtol.c
new file mode 100644 (file)
index 0000000..2e19b42
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*-
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*      Copyright (c) 1995 NeXT Computer, Inc.  All rights reserved.
+ *
+ * HISTORY
+ *     Modified by Curtis Galloway at NeXT June 1993,
+ *     for use in the standalone library.
+ *
+ * 30-Nov-1995    Dean Reece at NeXT
+ *      Created based on BSD4.4's strtol.c & strtoul.c.
+ *      Removed dependency on _ctype_ by static versions of isupper()...
+ *      Added support for "0b101..." binary constants.
+ *      Commented out references to errno.
+ */
+/*
+ *  strtol.c - string conversion utilities.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)strtol.c   5.4 (Berkeley) 2/23/91";
+#endif /* LIBC_SCCS and not lint */
+
+#include <libclite.h>
+#include <limits.h>
+
+int isupper(char c)
+{
+    return (c >= 'A' && c <= 'Z');
+}
+
+int isalpha(char c)
+{
+    return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
+}
+
+
+int isspace(char c)
+{
+    return (c == ' ' || c == '\t' || c == '\n' || c == '\12');
+}
+
+int isdigit(char c)
+{
+    return (c >= '0' && c <= '9');
+}
+
+char tolower(char c)
+{
+  return isalpha(c) ? (c | 0x20) : c;
+}
+
+/*
+ * Convert a string to a long integer.
+ *
+ * Ignores `locale' stuff.  Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+long
+strtol(nptr, endptr, base)
+       const char *nptr;
+       char **endptr;
+       register int base;
+{
+       register const char *s = nptr;
+       register unsigned long acc;
+       register int c;
+       register unsigned long cutoff;
+       register int neg = 0, any, cutlim;
+
+       /*
+        * Skip white space and pick up leading +/- sign if any.
+        * If base is 0, allow 0x for hex and 0 for octal, else
+        * assume decimal; if base is already 16, allow 0x.
+        */
+       do {
+               c = *s++;
+       } while (isspace(c));
+       if (c == '-') {
+               neg = 1;
+               c = *s++;
+       } else if (c == '+')
+               c = *s++;
+       if ((base == 0 || base == 16) &&
+           c == '0' && (*s == 'x' || *s == 'X')) {
+               c = s[1];
+               s += 2;
+               base = 16;
+       } else if ((base == 0 || base == 2) &&
+           c == '0' && (*s == 'b' || *s == 'B')) {
+               c = s[1];
+               s += 2;
+               base = 2;
+       }
+       if (base == 0)
+               base = c == '0' ? 8 : 10;
+
+       /*
+        * Compute the cutoff value between legal numbers and illegal
+        * numbers.  That is the largest legal value, divided by the
+        * base.  An input number that is greater than this value, if
+        * followed by a legal input character, is too big.  One that
+        * is equal to this value may be valid or not; the limit
+        * between valid and invalid numbers is then based on the last
+        * digit.  For instance, if the range for longs is
+        * [-2147483648..2147483647] and the input base is 10,
+        * cutoff will be set to 214748364 and cutlim to either
+        * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated
+        * a value > 214748364, or equal but the next digit is > 7 (or 8),
+        * the number is too big, and we will return a range error.
+        *
+        * Set any if any `digits' consumed; make it negative to indicate
+        * overflow.
+        */
+       cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX;
+       cutlim = cutoff % (unsigned long)base;
+       cutoff /= (unsigned long)base;
+       for (acc = 0, any = 0;; c = *s++) {
+               if (isdigit(c))
+                       c -= '0';
+               else if (isalpha(c))
+                       c -= isupper(c) ? 'A' - 10 : 'a' - 10;
+               else
+                       break;
+               if (c >= base)
+                       break;
+               if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
+                       any = -1;
+               else {
+                       any = 1;
+                       acc *= base;
+                       acc += c;
+               }
+       }
+       if (any < 0) {
+               acc = neg ? LONG_MIN : LONG_MAX;
+//             errno = ERANGE;
+       } else if (neg)
+               acc = -acc;
+       if (endptr != 0)
+               *endptr = (char *)(any ? s - 1 : nptr);
+       return (acc);
+}
+
+
+/*
+ * Convert a string to an unsigned long integer.
+ *
+ * Ignores `locale' stuff.  Assumes that the upper and lower case
+ * alphabets and digits are each contiguous.
+ */
+unsigned long
+strtoul(nptr, endptr, base)
+       const char *nptr;
+       char **endptr;
+       register int base;
+{
+       register const char *s = nptr;
+       register unsigned long acc;
+       register int c;
+       register unsigned long cutoff;
+       register int neg = 0, any, cutlim;
+
+       /*
+        * See strtol for comments as to the logic used.
+        */
+       do {
+               c = *s++;
+       } while (isspace(c));
+       if (c == '-') {
+               neg = 1;
+               c = *s++;
+       } else if (c == '+')
+               c = *s++;
+       if ((base == 0 || base == 16) &&
+           c == '0' && (*s == 'x' || *s == 'X')) {
+               c = s[1];
+               s += 2;
+               base = 16;
+       } else if ((base == 0 || base == 2) &&
+           c == '0' && (*s == 'b' || *s == 'B')) {
+               c = s[1];
+               s += 2;
+               base = 2;
+       }
+       if (base == 0)
+               base = c == '0' ? 8 : 10;
+       cutoff = (unsigned long)ULONG_MAX / (unsigned long)base;
+       cutlim = (unsigned long)ULONG_MAX % (unsigned long)base;
+       for (acc = 0, any = 0;; c = *s++) {
+               if (isdigit(c))
+                       c -= '0';
+               else if (isalpha(c))
+                       c -= isupper(c) ? 'A' - 10 : 'a' - 10;
+               else
+                       break;
+               if (c >= base)
+                       break;
+               if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
+                       any = -1;
+               else {
+                       any = 1;
+                       acc *= base;
+                       acc += c;
+               }
+       }
+       if (any < 0) {
+               acc = ULONG_MAX;
+//             errno = ERANGE;
+       } else if (neg)
+               acc = -acc;
+       if (endptr != 0)
+               *endptr = (char *)(any ? s - 1 : nptr);
+       return (acc);
+}
+
diff --git a/bootx.tproj/libclite.subproj/zalloc.c b/bootx.tproj/libclite.subproj/zalloc.c
new file mode 100644 (file)
index 0000000..96a9645
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ * Copyright 1993 NeXT Computer, Inc.
+ * All rights reserved.
+ *
+ * Sam's simple memory allocator.
+ *
+ */
+/*
+ *  zalloc.c - malloc functions.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <libclite.h>
+
+#define ZALLOC_NODES    384
+
+#define ZDEBUG 0
+
+#if ZDEBUG
+int zout;
+#endif
+
+typedef struct {
+       char *start;
+       int size;
+} zmem;
+
+static int zalloc_addr;
+static int zalloc_len;
+static zmem *zalloced;
+static zmem *zavailable;
+static short availableNodes, allocedNodes, totalNodes;
+static char *zalloc_base;
+static void (*zerror)();
+
+static void zallocate(char *start,int size);
+static void zinsert(zmem *zp, int ndx);
+static void zdelete(zmem *zp, int ndx);
+static void zcoalesce(void);
+
+
+// define the block of memory that the allocator will use
+void malloc_init(char *start, int size)
+{
+        int nodes = ZALLOC_NODES;
+
+        zalloc_addr = (int)start;
+        zalloc_len = size;
+       
+       zalloc_base = start;
+       totalNodes = nodes;
+       zalloced = (zmem *)zalloc_base;
+       start += sizeof(zmem) * nodes;
+       zavailable = (zmem *)start;
+       start += sizeof(zmem) * nodes;
+       zavailable[0].start = start;
+       zavailable[0].size = size;
+       availableNodes = 1;
+       allocedNodes = 0;
+}
+
+void malloc_error_init(void (*error_fn)())
+{
+    zerror = error_fn;
+}
+
+void * malloc(size_t size)
+{
+       int i;
+       char *ret = 0;
+#if 0
+       extern char     _DATA__end;
+#endif
+       if (!zalloc_base) {
+         // return error until malloc_init is called.
+         return NULL;
+       }
+
+       size = ((size + 0xf) & ~0xf);
+       for (i=0; i<availableNodes; i++)
+       {
+               // uses first possible node, doesn't try to find best fit
+               if (zavailable[i].size == size)
+               {
+                       zallocate(ret = zavailable[i].start, size);
+                       zdelete(zavailable, i); availableNodes--;
+                       goto done;
+               }
+               else if (zavailable[i].size > size)
+               {
+                       zallocate(ret = zavailable[i].start, size);
+                       zavailable[i].start += size;
+                       zavailable[i].size -= size;
+                       goto done;
+               }
+       }
+
+done:
+/*     if (ret + size >= (char*)_sp()) _stop("stack clobbered"); */
+       if ((ret == 0) || (ret + size >= (char *)(zalloc_addr + zalloc_len)))
+               if (zerror)
+                   (*zerror)(ret);
+       if (ret != 0)
+               bzero(ret, size);
+       return (void *)ret;
+}
+
+void
+free(void *pointer)
+{
+       int i, tsize, found = 0;
+       char *start = pointer;
+
+       if (!zalloc_base) {
+         // return until malloc_init is called.
+         return;
+       }
+
+       if (!start) return;
+
+       for (i=0; i<allocedNodes; i++)
+       {
+               if (zalloced[i].start == start)
+               {
+                       tsize = zalloced[i].size;
+#if ZDEBUG
+                       zout -= tsize;
+                       printf("    zz out %d\n",zout);
+#endif
+                       zdelete(zalloced, i); allocedNodes--;
+                       found = 1;
+                       break;
+               }
+       }
+       if (!found) return;
+
+       for (i=0; i<availableNodes; i++)
+       {
+               if ((start+tsize) == zavailable[i].start)  // merge it in
+               {
+                       zavailable[i].start = start;
+                       zavailable[i].size += tsize;
+                       zcoalesce();
+                       return;
+               }
+
+               if (i>0 && (zavailable[i-1].start + zavailable[i-1].size == 
+                                                                   start))
+               {
+                       zavailable[i-1].size += tsize;
+                       zcoalesce();
+                       return;
+               }
+
+               if ((start+tsize) < zavailable[i].start)
+               {
+                       zinsert(zavailable, i); availableNodes++;
+                       zavailable[i].start = start;
+                       zavailable[i].size = tsize;
+                       return;
+               }
+       }
+
+       zavailable[i].start = start;
+       zavailable[i].size = tsize;
+       availableNodes++;
+       zcoalesce();
+       return;
+}
+
+
+static void
+zallocate(char *start,int size)
+{
+#if ZDEBUG
+       zout += size;
+       printf("    alloc %d, total 0x%x\n",size,zout);
+#endif
+       zalloced[allocedNodes].start = start;
+       zalloced[allocedNodes].size = size;
+       allocedNodes++;
+}
+
+static void
+zinsert(zmem *zp, int ndx)
+{
+       int i;
+       zmem *z1, *z2;
+
+       i=totalNodes-2;
+       z1 = zp + i;
+       z2 = z1+1;
+
+       for (; i>= ndx; i--, z1--, z2--)
+       {
+               z2->start = z1->start;
+               z2->size = z1->size;
+       }
+}
+
+static void
+zdelete(zmem *zp, int ndx)
+{
+       int i;
+       zmem *z1, *z2;
+
+       z1 = zp + ndx;
+       z2 = z1+1;
+
+       for (i=ndx; i<totalNodes-1; i++, z1++, z2++)
+       {
+               z1->start = z2->start;
+               z1->size = z2->size;
+       }
+}
+
+static void
+zcoalesce(void)
+{
+       int i;
+       for (i=0; i<availableNodes-1; i++)
+       {
+               if (zavailable[i].start + zavailable[i].size == 
+                                               zavailable[i+1].start)
+               {
+                       zavailable[i].size += zavailable[i+1].size;
+                       zdelete(zavailable, i+1); availableNodes--;
+                       return;
+               }
+       }       
+}
+
+/* This is the simplest way possible.  Should fix this. */
+void *realloc(void *start, size_t newsize)
+{
+    void *newstart;
+
+    if (!zalloc_base) {
+      // return error until malloc_init is called.
+      return NULL;
+    }
+
+    newstart = malloc(newsize);
+    bcopy(start, newstart, newsize);
+    free(start);
+    return newstart;
+}
+
+
diff --git a/bootx.tproj/sl.subproj/GetSymbolFromPEF.h b/bootx.tproj/sl.subproj/GetSymbolFromPEF.h
new file mode 100644 (file)
index 0000000..78dcf24
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+       File:           GetSymbolFromPEF.h
+
+       Contains:       xxx put contents here xxx
+
+       Written by:     Jeffrey Robbin
+
+       Copyright:      Â© 1994 by Apple Computer, Inc., all rights reserved.
+
+       Change History (most recent first):
+
+                <2>     9/20/94        TS              Dump the globals!
+                <1>      9/6/94        TS              first checked in
+
+*/
+
+#ifndef __GETSYMBOLFROMPEF__
+#define __GETSYMBOLFROMPEF__
+
+//#include <Types.h>
+
+#pragma options align=mac68k
+
+#include <libclite.h>
+
+#define NewPtrSys(a)   malloc(a)
+#define DisposePtr(a)  free(a)
+
+/*
+       Container information
+*/
+
+struct ContainerHeader {                                       /* File/container header layout:                                        */
+       unsigned long   magicCookie;                    /*              PEF container magic cookie                                      */
+       unsigned long   containerID;                    /*              'peff'                                                                          */
+       unsigned long   architectureID;                 /*              'pwpc' | 'm68k'                                                         */
+       unsigned long   versionNumber;                  /*              format version number                                           */
+       unsigned long   dateTimeStamp;                  /*              date/time stamp (Mac format)                            */
+       unsigned long   oldDefVersion;                  /*              old definition version number                           */
+       unsigned long   oldImpVersion;                  /*              old implementation version number                       */
+       unsigned long   currentVersion;                 /*              current version number                                          */
+       short                   nbrOfSections;                  /*              nbr of sections (rel. 1)                                        */
+       short                   loadableSections;               /*              nbr of loadable sectionsfor execution           */
+                                                       /*              (= nbr of 1st non-loadable section)                     */
+       LogicalAddress  memoryAddress;                  /*              location this container was last loaded         */
+};
+typedef struct ContainerHeader ContainerHeader, *ContainerHeaderPtr;
+
+#define        kMagic1         'joy!'
+#define        kMagic2         'peff'
+
+
+/*
+       Section information
+*/
+
+struct SectionHeader {                                         /* Section header layout:                                               */
+       long                    sectionName;                    /*              section name (str tbl container offset) */
+       unsigned long   sectionAddress;                 /*              preferred base address for the section  */
+       long                    execSize;                               /*              execution (byte) size including 0 init) */
+       long                    initSize;                               /*              init (byte) size before 0 init                  */
+       long                    rawSize;                                /*              raw data size (bytes)                                   */
+       long                    containerOffset;                /*              container offest to section's raw data  */
+       unsigned char   regionKind;                             /*              section/region classification                   */
+       unsigned char   shareKind;                              /*              sharing classification                                  */
+       unsigned char   alignment;                              /*              log 2 alignment                                                 */
+       unsigned char   reserved;                               /*              <reserved>                                                              */
+};
+typedef struct SectionHeader SectionHeader, *SectionHeaderPtr;
+
+                                                                                       /* regionKind section classification:                   */
+                                                                                       /*              loadable sections                                               */
+#define kCodeSection           0U                              /*                              code section                                    */
+#define kDataSection           1U                              /*                              data section                                    */
+#define kPIDataSection                 2U                              /*                              "pattern" initialized data              */
+#define kConstantSection       3U                              /*                              read-only data                                  */
+#define kExecDataSection       6U                              /*                              "self modifying" code (!?)              */
+                                                                                       /*              non-loadable sections                                   */
+#define kLoaderSection                 4U                              /*                              loader                                                  */
+#define kDebugSection          5U                              /*                              debugging info                                  */
+#define kExceptionSection      7U                              /*                              exception data                                  */
+#define kTracebackSection      8U                              /*                              traceback data                                  */
+
+
+/*
+       Loader Information
+*/
+
+struct LoaderHeader {                                          /* Loader raw data section header layout:               */
+       long entrySection;                                              /*              entry point section number                              */
+       long entryOffset;                                               /*              entry point descr. ldr section offset   */
+       long initSection;                                               /*              init routine section number                             */
+       long initOffset;                                                /*              init routine descr. ldr section offset  */
+       long termSection;                                               /*              term routine section number                             */
+       long termOffset;                                                /*              term routine descr. ldr section offset  */
+       long nbrImportIDs;                                              /*              nbr of import container id entries              */
+       long nbrImportSyms;                                             /*              nbr of import symbol table entries              */
+       long nbrRelocSects;                                             /*              nbr of relocation sections (headers)    */
+       long relocsOffset;                                              /*              reloc. instructions ldr section offset  */
+       long strTblOffset;                                              /*              string table ldr section offset                 */
+       long slotTblOffset;                                     /*              hash slot table ldr section offset              */
+       long hashSlotTblSz;                                     /*              log 2 of nbr of hash slot entries               */
+       long nbrExportSyms;                                             /*              nbr of export symbol table entries              */
+};
+typedef struct LoaderHeader LoaderHeader, *LoaderHeaderPtr;
+
+struct LoaderHashSlotEntry {                           /* Loader export hash slot table entry layout:  */
+       unsigned long slotEntry;                                /*              chain count (0:13), chain index (14:31) */
+};
+typedef struct LoaderHashSlotEntry LoaderHashSlotEntry, *LoaderHashSlotEntryPtr;
+
+struct LoaderExportChainEntry {                                /* Loader export hash chain tbl entry layout:   */
+       union {
+               unsigned long _hashWord;                        /*              name length and hash value                              */
+               struct {
+                       unsigned short _nameLength;             /*              name length is top half of hash word    */
+                       unsigned short doNotUseThis;    /*              this field should never be accessed!    */
+               } _h_h;
+       } _h;
+};
+typedef struct LoaderExportChainEntry LoaderExportChainEntry, *LoaderExportChainEntryPtr;
+
+struct ExportSymbolEntry {                                     /* Loader export symbol table entry layout:             */
+       unsigned long   class_and_name;                 /*              symClass (0:7), nameOffset (8:31)               */
+       long                    address;                                /*              ldr section offset to exported symbol   */
+       short                   sectionNumber;                  /*              section nbr that this export belongs to */
+};
+typedef struct ExportSymbolEntry ExportSymbolEntry, *ExportSymbolEntryPtr;
+
+
+
+/*
+       Unpacking Information
+*/
+
+                                                                                       /* "pattern" initialized data opcodes:                   */
+#define kZero                                  0U                      /*              zero (clear) bytes                                              */
+#define kBlock                                         1U                      /*              block transfer bytes                                    */
+#define kRepeat                                2U                      /*              repeat block xfer       bytes                           */
+#define kRepeatBlock                   3U                      /*              repeat block xfer with contant prefix   */
+#define kRepeatZero                    4U                      /*              repeat block xfer with contant prefix 0 */
+
+#define kOpcodeShift                   0x05U           /* shift to access opcode                                               */
+#define kFirstOperandMask              0x1FU           /* mask to access 1st operand (count)                   */
+
+#define PIOP(x)        (unsigned char)((x) >> kOpcodeShift)    /* extract opcode                               */
+#define PICNT(x) (long)((x) & kFirstOperandMask)                       /* extract 1st operand (count)  */
+
+/* The following macros are used for extracting count value operands from pidata...                    */
+
+#define kCountShift                            0x07UL          /* value shift to concat count bytes                    */
+#define kCountMask                             0x7FUL          /* mask to extract count bits from a byte               */
+
+#define IS_LAST_PICNT_BYTE(x) (((x) & 0x80U) == 0)                     /* true if last count byte              */
+
+#define CONCAT_PICNT(value, x) (((value)<<kCountShift) | ((x) & kCountMask))
+
+
+
+/*
+       Function Prototypes
+*/
+
+OSStatus GetSymbolFromPEF (    StringPtr               theSymbolName,
+                                                       LogicalAddress  thePEFPtr,
+                                                       LogicalAddress  theSymbolPtr,
+                                                       ByteCount               theSymbolSize);
+
+Boolean        SymbolCompare ( StringPtr               theLookedForSymbol,
+                                               StringPtr               theExportSymbol,
+                                               unsigned long   theExportSymbolLength);
+                                               
+OSErr UnpackPiData (LogicalAddress             thePEFPtr,
+                                       SectionHeaderPtr        sectionHeaderPtr,
+                                       LogicalAddress *        theData);
+
+unsigned char PEFGetNextByte (unsigned char** rawBuffer, long* rawBufferRemaining);
+
+unsigned long PEFGetCount(unsigned char** rawBuffer, long* rawBufferRemaining);
+
+void MemSet (unsigned char* theBuffer, long theValue, long theCount);
+
+
+enum {
+        paramErr = -10000,
+        memFullErr = -10001,
+        cfragNoSectionErr = -10002,
+        cfragNoSymbolErr = -10003,
+        cfragFragmentFormatErr = -10004,
+        cfragFragmentCorruptErr = -10005
+};
+
+#pragma options align=reset
+
+#endif
diff --git a/bootx.tproj/sl.subproj/Makefile b/bootx.tproj/sl.subproj/Makefile
new file mode 100644 (file)
index 0000000..995540d
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Generated by the Apple Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = sl
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Component
+
+HFILES = bad_system.h clut.h elf.h GetSymbolFromPEF.h happy_foot.h\
+         happy_mac.h images.h
+
+CFILES = main.c macho.c device_tree.c display.c drivers.c\
+         PEFSupport.c elf.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = subproj.make
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/bootx.tproj/sl.subproj/Makefile.postamble b/bootx.tproj/sl.subproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/bootx.tproj/sl.subproj/Makefile.preamble b/bootx.tproj/sl.subproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..cfe786a
--- /dev/null
@@ -0,0 +1,139 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+LIBRARY_STYLE = STATIC
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/bootx.tproj/sl.subproj/PB.project b/bootx.tproj/sl.subproj/PB.project
new file mode 100644 (file)
index 0000000..8c3674e
--- /dev/null
@@ -0,0 +1,38 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        BUNDLES = (); 
+        CLASSES = (); 
+        C_FILES = (); 
+        FRAMEWORKSEARCH = (); 
+        HEADERSEARCH = (); 
+        H_FILES = (
+            bad_system.h, 
+            clut.h, 
+            elf.h, 
+            GetSymbolFromPEF.h, 
+            happy_foot.h, 
+            happy_mac.h, 
+            images.h
+        ); 
+        M_FILES = (); 
+        OTHER_LINKED = (main.c, macho.c, device_tree.c, display.c, PEFSupport.c, elf.c, drivers.c); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+        SUBPROJECTS = (); 
+        TOOLS = (); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = sl; 
+    PROJECTTYPE = Component; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/bootx.tproj/sl.subproj/PEFSupport.c b/bootx.tproj/sl.subproj/PEFSupport.c
new file mode 100644 (file)
index 0000000..38066ca
--- /dev/null
@@ -0,0 +1,453 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+       File:           UnpackPiData.c
+       Written by:     Jeffrey Robbin
+       Copyright:      Â© 1994, 1996 by Apple Computer, Inc., all rights reserved.
+
+       Change History (most recent first):
+                <3>     9/20/96        MRN             Changed "" to <> on including Types.h, Errors.h and Memory.h
+                                                                       that was breaking MW.
+                <2>     9/20/94        TS              Dump the globals!
+                <1>      9/6/94        TS              first checked in
+
+
+       File:           GetSymbolFromPEF.c
+       Written by:     Jeffrey Robbin
+       Copyright:      Â© 1994, 1996 by Apple Computer, Inc., all rights reserved.
+
+       Change History (most recent first):
+
+                <6>     9/20/96        MRN             Changed <> to "" on including GetSymbolFromPEF.h that was
+                                                                       breaking MW.
+                <5>      3/7/96        MRN             Minor adjustments to build with the latest version of
+                                                                       SuperMarioLatestBuild name revision of MasterInterfaces.
+                <4>    10/13/94        JF              Changed CFM error enums-- from 'cfragXXXErr' to 'fragXXX'
+                <3>    10/11/94        TS              Move to new CFM error codes
+                <2>     9/16/94        TS              Switch to pascal strings in SymbolCompare function
+                <1>      9/6/94        TS              first checked in
+
+*/
+
+typedef unsigned char Boolean;
+typedef unsigned char *Ptr;
+typedef char *StringPtr;
+
+typedef long OSErr;
+
+typedef unsigned long OSStatus;
+typedef unsigned long ByteCount;
+typedef unsigned long LogicalAddress;
+
+#define nil (void *)0
+#define false (0)
+#define true (1)
+#define noErr (0)
+
+#include "GetSymbolFromPEF.h"
+//#include <Types.h>
+//#include <Errors.h>
+//#include <Memory.h>
+
+
+unsigned char PEFGetNextByte (unsigned char** rawBuffer, long* rawBufferRemaining)
+{
+       *rawBufferRemaining = *rawBufferRemaining - 1;
+       return *(*rawBuffer)++;
+}
+
+
+unsigned long PEFGetCount(unsigned char** rawBuffer, long* rawBufferRemaining)
+{
+       register unsigned char b;
+       register unsigned long value = 0UL;
+  
+       /* Scan the count value.  All required bytes MUST be present...                                                                         */
+       
+       b = PEFGetNextByte(rawBuffer, rawBufferRemaining);
+       if (!IS_LAST_PICNT_BYTE(b)) {                                                   /* if 1st byte is not that last...                      */
+               value = CONCAT_PICNT(value, b);                                         /*   ...init value using 1st byte                       */
+      
+               b = PEFGetNextByte(rawBuffer, rawBufferRemaining);
+               if (!IS_LAST_PICNT_BYTE(b)) {                                           /*       if 2nd byte is not the last...                 */
+                       value = CONCAT_PICNT(value, b);                                 /*       ...add in 2nd byte                                             */
+        
+                       b = PEFGetNextByte(rawBuffer, rawBufferRemaining);
+                       if (!IS_LAST_PICNT_BYTE(b)) {                                   /*         if 3rd byte is not the last...               */
+                               value = CONCAT_PICNT(value, b);                         /*         ...add in 3rd byte                                   */
+           
+                               b = PEFGetNextByte(rawBuffer, rawBufferRemaining);
+                               if (!IS_LAST_PICNT_BYTE(b)) {                           /*                 if 4th byte is not the last...       */
+                                       value = CONCAT_PICNT(value, b);                 /*                 ...add in 4th byte                           */
+       
+                                                                                                                       /*               5th byte is definitly last!            */
+                                       b = PEFGetNextByte(rawBuffer, rawBufferRemaining);      
+                               }
+                       }
+               }
+       }
+
+       value = CONCAT_PICNT(value, b);                                                 /* add in "last" byte (whichever one)           */
+
+       return (value);
+}
+
+
+void MemSet (unsigned char* theBuffer, long theValue, long theCount)
+{
+       while (theCount-- > 0)
+               *theBuffer++ = theValue;
+}
+
+
+// UnpackPiData expands a compressed section into memory.
+
+OSErr UnpackPiData (LogicalAddress             thePEFPtr,
+                                       SectionHeaderPtr        sectionHeaderPtr,
+                                       LogicalAddress*         theData)
+{
+       long                    cntX, cnt, rpt, dcnt, delta;
+       unsigned char   op, b;
+       unsigned char*  unpackBuffer;
+       unsigned char*  originalUnpackBuffer;
+       unsigned char*  endUnpackBuffer;
+       unsigned char*  oldRawBuffer;
+       long                    oldRawBufferRemaining;
+       unsigned char*  rawBuffer;
+       long                    rawBufferRemaining;
+       
+       // Verify incoming section is packed.
+       if (sectionHeaderPtr->regionKind != kPIDataSection)
+               return (paramErr);
+       
+
+       // Allocate memory to unpack into
+       originalUnpackBuffer = (unsigned char*)NewPtrSys(sectionHeaderPtr->initSize);
+       if (originalUnpackBuffer == nil)
+               return memFullErr;
+
+       unpackBuffer            = originalUnpackBuffer;
+       endUnpackBuffer         = unpackBuffer + sectionHeaderPtr->initSize;
+       rawBuffer                       = (unsigned char*)((unsigned long)thePEFPtr + sectionHeaderPtr->containerOffset);
+       rawBufferRemaining      = sectionHeaderPtr->rawSize;
+
+       
+       /* Expand the pidata instructions.  EOF will terminate processing through the setjmp    */
+       /* on pidData_jmpbuf above...                                                                                                                   */
+
+       while (rawBufferRemaining > 0) {
+               
+               /* The first byte of each instruction contains the opcode and a count. If the count     */
+               /* is 0, the count starts in the next byte...                                                                           */
+               
+               /* Pick up the opcode and first count operand...                                                                        */
+               
+               b = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+               
+               op  = PIOP(b);
+               cnt = PICNT(b);
+               
+               if (cnt == 0)
+                       cnt = PEFGetCount(&rawBuffer, &rawBufferRemaining);
+               
+               /* Unpack the data as a function of the opcode...                                                                       */
+               
+               switch (op) {
+                       case kZero:                                                                                                                             /* zero out cnt bytes...*/
+                               if (unpackBuffer + cnt > endUnpackBuffer)
+                                       goto Error;
+                               MemSet(unpackBuffer, 0, cnt);
+                               unpackBuffer += cnt;
+                               break;
+                       
+                       case kBlock:                                                                                                                    /* copy cnt bytes...*/
+                               if (unpackBuffer + cnt > endUnpackBuffer)
+                                       goto Error;
+                               while (--cnt >= 0)
+                                       *unpackBuffer++ = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+                               break;
+                               
+                       case kRepeat:                                                                                                                   /* copy cnt bytes rpt times...*/
+                               rpt = PEFGetCount(&rawBuffer, &rawBufferRemaining) + 1;
+                               
+                               if (cnt == 1)
+                               {
+                                       if (unpackBuffer + rpt > endUnpackBuffer)
+                                               goto Error;
+                                       b = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+                                       MemSet(unpackBuffer, b, rpt);
+                                       unpackBuffer += rpt;
+                               }
+                               else
+                               {
+                                       oldRawBufferRemaining   = rawBufferRemaining;
+                                       oldRawBuffer                    = rawBuffer;
+                                       while (--rpt >= 0) {
+                                               if (unpackBuffer + cnt > endUnpackBuffer)
+                                                       goto Error;
+                                               rawBufferRemaining      = oldRawBufferRemaining;
+                                               rawBuffer                       = oldRawBuffer;
+                                               cntX = cnt;
+                                               while (--cntX >= 0)
+                                                       *unpackBuffer++ = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+                                       }
+                               }
+                               break;
+                               
+                       case kRepeatZero:                                                                                                               /* copy cnt 0's and dcnt bytes rpt times*/
+                               dcnt                     = PEFGetCount(&rawBuffer, &rawBufferRemaining);        /* ...then copy cnt more 0's                    */
+                               rpt                      = PEFGetCount(&rawBuffer, &rawBufferRemaining);
+                               
+                               goto rptPart1;                                                                          /* jump into loop to copy 0's first...  */
+                               
+                               while (--rpt >= 0) {
+                                       if (unpackBuffer + dcnt > endUnpackBuffer)
+                                               goto Error;
+                                       cntX = dcnt;                                                                    /* cnt repeating parts follow each other*/
+                                       while (--cntX >= 0)
+                                               *unpackBuffer++ = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+rptPart1:                                                                                                                      /* non-repeating part is always 0's...  */
+                                       if (unpackBuffer + cnt > endUnpackBuffer)
+                                               goto Error;
+                                       MemSet(unpackBuffer, 0, cnt);
+                                       unpackBuffer += cnt;
+                               }
+                               
+                               break;
+                               
+                       case kRepeatBlock:                                                                              /* copy cnt repeating bytes and dcnt            */
+                               dcnt                     = PEFGetCount(&rawBuffer, &rawBufferRemaining);                                        /* non-repating bytes rcnt times...                     */
+                               rpt                      = PEFGetCount(&rawBuffer, &rawBufferRemaining);                                        /* ...then copy cnt repeating bytes                     */
+                               
+                               oldRawBufferRemaining   = rawBufferRemaining;
+                               oldRawBuffer                    = rawBuffer;
+                               delta                                   = 0;                                            /*  the repeating part and each non-rep */
+                               
+                               goto rptPart2;                                                                          /* jump into loop to copy rptng part 1st*/
+                               
+                               while (--rpt >= 0) {
+                                       if (unpackBuffer + dcnt > endUnpackBuffer)
+                                               goto Error;
+                                       
+                                       rawBuffer                       = oldRawBuffer + cnt + delta;
+                                       rawBufferRemaining      = oldRawBufferRemaining - (cnt + delta);
+                                       cntX = dcnt;
+                                       while (--cntX >= 0)
+                                               *unpackBuffer++ = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+                                       delta += dcnt;
+rptPart2:                                                                                                                      
+                                       if (unpackBuffer + cnt > endUnpackBuffer)
+                                               goto Error;
+                                       rawBuffer                       = oldRawBuffer;
+                                       rawBufferRemaining      = oldRawBufferRemaining;
+                                       cntX = cnt;
+                                       while (--cntX >= 0)
+                                               *unpackBuffer++ = PEFGetNextByte(&rawBuffer, &rawBufferRemaining);
+                               }
+                               
+                               rawBuffer                       = oldRawBuffer + cnt + delta;
+                               rawBufferRemaining      = oldRawBufferRemaining - (cnt + delta);
+                               break;
+                       
+                       default:
+                               goto Error;
+               } /* switch */
+       } /* for */
+       
+       *theData = originalUnpackBuffer;
+               
+       return noErr;
+
+Error:
+       if (unpackBuffer)
+               DisposePtr((Ptr)originalUnpackBuffer);
+       
+       *theData = nil;
+
+       return paramErr;
+}
+
+
+
+
+// GetSymbolFromPEF will extract from a PEF container the data associated
+// with a given symbol name.  It requires that the PEF file have been previously
+// loaded into memory.
+
+OSStatus GetSymbolFromPEF (    StringPtr               theSymbolName,
+                                                       LogicalAddress  thePEFPtr,
+                                                       LogicalAddress  theSymbolPtr,
+                                                       ByteCount               theSymbolSize)
+{
+       ContainerHeaderPtr                      containerHeaderPtr;     // Pointer to the Container Header
+       SectionHeaderPtr                        loaderSectionPtr;       // Pointer to the Loader Section Header
+       SectionHeaderPtr                        exportSectionPtr;       // Pointer to the Section Header with the symbol
+       short                                           currentSection;
+       Boolean                                         foundSection;
+       Boolean                                         foundSymbol;
+       long                                            numExportSymbols;
+       LoaderHeaderPtr                         loaderHeaderPtr;
+       ExportSymbolEntryPtr            exportSymbolEntryPtr;
+       LoaderExportChainEntryPtr       exportChainEntryPtr;
+       StringPtr                                       exportSymbolName;
+       LogicalAddress                          expandedDataPtr;
+       unsigned char*                          sourceDataPtr;
+       unsigned char*                          destDataPtr;
+       
+
+       containerHeaderPtr = (ContainerHeaderPtr)thePEFPtr;
+       
+       // Does the magic cookie match?
+       if (containerHeaderPtr->magicCookie != 'Joy!')
+               return cfragFragmentFormatErr;
+       
+       // Is this a known PEF container format?
+       if (containerHeaderPtr->containerID != 'peff')
+               return cfragFragmentFormatErr;
+       
+       // Validate parameters
+       if (theSymbolPtr == nil)
+               return paramErr;
+       
+       
+       // Find the loader section.
+       foundSection = false;
+       for (currentSection = 0; currentSection < containerHeaderPtr->nbrOfSections; currentSection++)
+       {
+               loaderSectionPtr = (SectionHeaderPtr)(  (unsigned long)containerHeaderPtr +
+                                                                                               sizeof(ContainerHeader) +
+                                                                                               (sizeof(SectionHeader) * currentSection));
+               if (loaderSectionPtr->regionKind == kLoaderSection)
+               {
+                       foundSection = true;
+                       break;
+               }
+       }
+       
+       if (foundSection == false)
+               return cfragNoSectionErr;
+       
+       // Get the number of export symbols.
+       loaderHeaderPtr         = (LoaderHeaderPtr)((unsigned long)thePEFPtr + loaderSectionPtr->containerOffset);
+       numExportSymbols        = loaderHeaderPtr->nbrExportSyms;
+       
+       // Start at the first exported symbol.
+       exportSymbolEntryPtr = (ExportSymbolEntryPtr)(  (unsigned long)loaderHeaderPtr +
+                                                                                                       loaderHeaderPtr->slotTblOffset +
+                                                                                                       (sizeof(LoaderHashSlotEntry) * (1<<loaderHeaderPtr->hashSlotTblSz)) +
+                                                                                                       (sizeof(LoaderExportChainEntry) * numExportSymbols));
+                                                                                                       
+       exportChainEntryPtr = (LoaderExportChainEntryPtr)(      (unsigned long)loaderHeaderPtr +
+                                                                                                       loaderHeaderPtr->slotTblOffset +
+                                                                                                       (sizeof(LoaderHashSlotEntry) * (1<<loaderHeaderPtr->hashSlotTblSz)));
+       
+       foundSymbol = false;
+       while (numExportSymbols-- > 0)
+       {
+               exportSymbolName = (StringPtr)( (unsigned long)loaderHeaderPtr +
+                                                                               loaderHeaderPtr->strTblOffset +
+                                                                               (exportSymbolEntryPtr->class_and_name & 0x00FFFFFF));
+               if (SymbolCompare(theSymbolName, exportSymbolName, exportChainEntryPtr->_h._h_h._nameLength))
+               {
+                       foundSymbol = true;
+                       break;
+               }
+        exportSymbolEntryPtr = (ExportSymbolEntryPtr)(((int)exportSymbolEntryPtr) + 10);
+               exportChainEntryPtr++;
+       }
+       
+       if (foundSymbol == false)
+               return cfragNoSymbolErr;
+               
+       
+       // Found the symbol, so... let's go get the data!
+               
+       exportSectionPtr = (SectionHeaderPtr)(  (unsigned long)containerHeaderPtr +
+                                                                                       sizeof(ContainerHeader) +
+                                                                                       (sizeof(SectionHeader) * exportSymbolEntryPtr->sectionNumber));
+       
+       expandedDataPtr = nil;
+       
+       switch (exportSectionPtr -> regionKind)
+       {
+               case kPIDataSection:
+               
+                       // Expand the data!  (Not yet... :)
+                       
+                       if (UnpackPiData (thePEFPtr, exportSectionPtr, &expandedDataPtr) != noErr)
+                               return cfragFragmentCorruptErr;
+               
+                       sourceDataPtr = (unsigned char*)((unsigned long)expandedDataPtr +
+                                                       exportSymbolEntryPtr->address);
+                       break;
+               
+               default:
+                       sourceDataPtr = (unsigned char*)((unsigned long)thePEFPtr +
+                                                       exportSectionPtr->containerOffset +
+                                                       exportSymbolEntryPtr->address);
+                       break;
+       }
+       
+       
+       // Copy the data!
+       
+       destDataPtr = (unsigned char*)theSymbolPtr;
+       
+       
+       while (theSymbolSize-- > 0)
+               *destDataPtr++ = *sourceDataPtr++;
+       
+       
+       // Cleanup any expanded data
+       
+       if (expandedDataPtr != nil)
+               DisposePtr((Ptr)expandedDataPtr);
+
+       return noErr;
+}
+
+
+//
+// SymbolCompare
+//
+// theExportSymbol is NOT null-terminated, so use theExportSymbolLength.
+//
+Boolean        SymbolCompare ( StringPtr               theLookedForSymbol,
+                                               StringPtr               theExportSymbol,
+                                               unsigned long   theExportSymbolLength)
+{
+       unsigned char*  p1 = (unsigned char*)theLookedForSymbol;
+       unsigned char*  p2 = (unsigned char*)theExportSymbol;
+       
+       // Same length?
+       // (skip over p string len byte)
+       if ( theExportSymbolLength != *p1++ )
+               return false;
+               
+       while ( theExportSymbolLength-- != 0 )
+       {
+               if ( *p1++ != *p2++ )
+                       return false;
+       }
+       
+       return true;
+}
diff --git a/bootx.tproj/sl.subproj/bad_system.h b/bootx.tproj/sl.subproj/bad_system.h
new file mode 100644 (file)
index 0000000..5a1b500
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  bad_system.h - Broken System Folder Icon.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+static char gBrokenSystemFolderIcon[ 32 * 32 ] = {
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x80,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0x80,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x80,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0x80,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x80,
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+  0x80,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,
+  0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,0x80,
+  0x80,0x80,0x80,0x80,0xff,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xff,
+  0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0x00,0xff,0xff,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0xff,0xff,0xff,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0xf7,0xf7,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0xf7,0xfc,0xf7,0xf7,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0xf7,0xfc,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0xff,0xf7,0xff,0xf7,0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0xf7,0xfc,0x00,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0x00,0xf7,0xf7,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0xf7,0xfc,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0x00,0xfc,0x00,0xf7,0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0xf7,0xfc,0x00,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0x00,0xf7,0xf7,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0xf7,0xfc,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0x00,0xfc,0x00,0xf7,0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0xf7,0xfc,0x00,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0x00,0xf7,0xf7,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0xf7,0xf7,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0x00,0xf7,0x00,0xf7,0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0xf7,0xf7,0xf7,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0xf7,0xf7,0xf7,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0xf7,0xff,0xf7,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0xf7,0xf7,0xf7,0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,0xf7,0xfc,0xf7,0xff,0x80,0x80,
+  0x80,0x80,0x80,0xff,0xff,0xff,0xf7,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0xf7,0xf7,0xff,0x80,0x80,0x80,
+  0x80,0x80,0xff,0xf7,0xf7,0xf7,0xf7,0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,0xff,0x80,0x80,0x80,0x80,
+  0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0x00,0xff,0xff,0x80,0x80,0x80,0x80,
+  0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xff,
+  0xff,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xff,0x80,0x80,0x80,0x80,0x80,
+  0xff,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0x00,0xf7,0xf7,0xff,
+  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x80,0x80,0x80,
+  0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
+};
diff --git a/bootx.tproj/sl.subproj/clut.h b/bootx.tproj/sl.subproj/clut.h
new file mode 100644 (file)
index 0000000..805d08e
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  clut.h - Default Mac OS 7 System CLUT.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+const unsigned char gClut[] = {
+       0xFF,0xFF,0xFF, 0xFF,0xFF,0xCC, 0xFF,0xFF,0x99, 0xFF,0xFF,0x66,
+       0xFF,0xFF,0x33, 0xFF,0xFF,0x00, 0xFF,0xCC,0xFF, 0xFF,0xCC,0xCC,
+       0xFF,0xCC,0x99, 0xFF,0xCC,0x66, 0xFF,0xCC,0x33, 0xFF,0xCC,0x00,
+       0xFF,0x99,0xFF, 0xFF,0x99,0xCC, 0xFF,0x99,0x99, 0xFF,0x99,0x66,
+       0xFF,0x99,0x33, 0xFF,0x99,0x00, 0xFF,0x66,0xFF, 0xFF,0x66,0xCC,
+       0xFF,0x66,0x99, 0xFF,0x66,0x66, 0xFF,0x66,0x33, 0xFF,0x66,0x00,
+       0xFF,0x33,0xFF, 0xFF,0x33,0xCC, 0xFF,0x33,0x99, 0xFF,0x33,0x66,
+       0xFF,0x33,0x33, 0xFF,0x33,0x00, 0xFF,0x00,0xFF, 0xFF,0x00,0xCC,
+       0xFF,0x00,0x99, 0xFF,0x00,0x66, 0xFF,0x00,0x33, 0xFF,0x00,0x00,
+       0xCC,0xFF,0xFF, 0xCC,0xFF,0xCC, 0xCC,0xFF,0x99, 0xCC,0xFF,0x66,
+       0xCC,0xFF,0x33, 0xCC,0xFF,0x00, 0xCC,0xCC,0xFF, 0xCC,0xCC,0xCC,
+       0xCC,0xCC,0x99, 0xCC,0xCC,0x66, 0xCC,0xCC,0x33, 0xCC,0xCC,0x00,
+       0xCC,0x99,0xFF, 0xCC,0x99,0xCC, 0xCC,0x99,0x99, 0xCC,0x99,0x66,
+       0xCC,0x99,0x33, 0xCC,0x99,0x00, 0xCC,0x66,0xFF, 0xCC,0x66,0xCC,
+       0xCC,0x66,0x99, 0xCC,0x66,0x66, 0xCC,0x66,0x33, 0xCC,0x66,0x00,
+       0xCC,0x33,0xFF, 0xCC,0x33,0xCC, 0xCC,0x33,0x99, 0xCC,0x33,0x66,
+       0xCC,0x33,0x33, 0xCC,0x33,0x00, 0xCC,0x00,0xFF, 0xCC,0x00,0xCC,
+       0xCC,0x00,0x99, 0xCC,0x00,0x66, 0xCC,0x00,0x33, 0xCC,0x00,0x00,
+       0x99,0xFF,0xFF, 0x99,0xFF,0xCC, 0x99,0xFF,0x99, 0x99,0xFF,0x66,
+       0x99,0xFF,0x33, 0x99,0xFF,0x00, 0x99,0xCC,0xFF, 0x99,0xCC,0xCC,
+       0x99,0xCC,0x99, 0x99,0xCC,0x66, 0x99,0xCC,0x33, 0x99,0xCC,0x00,
+       0x99,0x99,0xFF, 0x99,0x99,0xCC, 0x99,0x99,0x99, 0x99,0x99,0x66,
+       0x99,0x99,0x33, 0x99,0x99,0x00, 0x99,0x66,0xFF, 0x99,0x66,0xCC,
+       0x99,0x66,0x99, 0x99,0x66,0x66, 0x99,0x66,0x33, 0x99,0x66,0x00,
+       0x99,0x33,0xFF, 0x99,0x33,0xCC, 0x99,0x33,0x99, 0x99,0x33,0x66,
+       0x99,0x33,0x33, 0x99,0x33,0x00, 0x99,0x00,0xFF, 0x99,0x00,0xCC,
+       0x99,0x00,0x99, 0x99,0x00,0x66, 0x99,0x00,0x33, 0x99,0x00,0x00,
+       0x66,0xFF,0xFF, 0x66,0xFF,0xCC, 0x66,0xFF,0x99, 0x66,0xFF,0x66,
+       0x66,0xFF,0x33, 0x66,0xFF,0x00, 0x66,0xCC,0xFF, 0x66,0xCC,0xCC,
+       0x66,0xCC,0x99, 0x66,0xCC,0x66, 0x66,0xCC,0x33, 0x66,0xCC,0x00,
+       0x66,0x99,0xFF, 0x66,0x99,0xCC, 0x66,0x99,0x99, 0x66,0x99,0x66,
+       0x66,0x99,0x33, 0x66,0x99,0x00, 0x66,0x66,0xFF, 0x66,0x66,0xCC,
+       0x66,0x66,0x99, 0x66,0x66,0x66, 0x66,0x66,0x33, 0x66,0x66,0x00,
+       0x66,0x33,0xFF, 0x66,0x33,0xCC, 0x66,0x33,0x99, 0x66,0x33,0x66,
+       0x66,0x33,0x33, 0x66,0x33,0x00, 0x66,0x00,0xFF, 0x66,0x00,0xCC,
+       0x66,0x00,0x99, 0x66,0x00,0x66, 0x66,0x00,0x33, 0x66,0x00,0x00,
+       0x33,0xFF,0xFF, 0x33,0xFF,0xCC, 0x33,0xFF,0x99, 0x33,0xFF,0x66,
+       0x33,0xFF,0x33, 0x33,0xFF,0x00, 0x33,0xCC,0xFF, 0x33,0xCC,0xCC,
+       0x33,0xCC,0x99, 0x33,0xCC,0x66, 0x33,0xCC,0x33, 0x33,0xCC,0x00,
+       0x33,0x99,0xFF, 0x33,0x99,0xCC, 0x33,0x99,0x99, 0x33,0x99,0x66,
+       0x33,0x99,0x33, 0x33,0x99,0x00, 0x33,0x66,0xFF, 0x33,0x66,0xCC,
+       0x33,0x66,0x99, 0x33,0x66,0x66, 0x33,0x66,0x33, 0x33,0x66,0x00,
+       0x33,0x33,0xFF, 0x33,0x33,0xCC, 0x33,0x33,0x99, 0x33,0x33,0x66,
+       0x33,0x33,0x33, 0x33,0x33,0x00, 0x33,0x00,0xFF, 0x33,0x00,0xCC,
+       0x33,0x00,0x99, 0x33,0x00,0x66, 0x33,0x00,0x33, 0x33,0x00,0x00,
+       0x00,0xFF,0xFF, 0x00,0xFF,0xCC, 0x00,0xFF,0x99, 0x00,0xFF,0x66,
+       0x00,0xFF,0x33, 0x00,0xFF,0x00, 0x00,0xCC,0xFF, 0x00,0xCC,0xCC,
+       0x00,0xCC,0x99, 0x00,0xCC,0x66, 0x00,0xCC,0x33, 0x00,0xCC,0x00,
+       0x00,0x99,0xFF, 0x00,0x99,0xCC, 0x00,0x99,0x99, 0x00,0x99,0x66,
+       0x00,0x99,0x33, 0x00,0x99,0x00, 0x00,0x66,0xFF, 0x00,0x66,0xCC,
+       0x00,0x66,0x99, 0x00,0x66,0x66, 0x00,0x66,0x33, 0x00,0x66,0x00,
+       0x00,0x33,0xFF, 0x00,0x33,0xCC, 0x00,0x33,0x99, 0x00,0x33,0x66,
+       0x00,0x33,0x33, 0x00,0x33,0x00, 0x00,0x00,0xFF, 0x00,0x00,0xCC,
+       0x00,0x00,0x99, 0x00,0x00,0x66, 0x00,0x00,0x33, 0xEE,0x00,0x00,
+       0xDD,0x00,0x00, 0xBB,0x00,0x00, 0xAA,0x00,0x00, 0x88,0x00,0x00,
+       0x77,0x00,0x00, 0x55,0x00,0x00, 0x44,0x00,0x00, 0x22,0x00,0x00,
+       0x11,0x00,0x00, 0x00,0xEE,0x00, 0x00,0xDD,0x00, 0x00,0xBB,0x00,
+       0x00,0xAA,0x00, 0x00,0x88,0x00, 0x00,0x77,0x00, 0x00,0x55,0x00,
+       0x00,0x44,0x00, 0x00,0x22,0x00, 0x00,0x11,0x00, 0x00,0x00,0xEE,
+       0x00,0x00,0xDD, 0x00,0x00,0xBB, 0x00,0x00,0xAA, 0x00,0x00,0x88,
+       0x00,0x00,0x77, 0x00,0x00,0x55, 0x00,0x00,0x44, 0x00,0x00,0x22,
+       0x00,0x00,0x11, 0xEE,0xEE,0xEE, 0xDD,0xDD,0xDD, 0xBB,0xBB,0xBB,
+       0xAA,0xAA,0xAA, 0x88,0x88,0x88, 0x77,0x77,0x77, 0x55,0x55,0x55,
+       0x44,0x44,0x44, 0x22,0x22,0x22, 0x11,0x11,0x11, 0x00,0x00,0x00
+};
diff --git a/bootx.tproj/sl.subproj/device_tree.c b/bootx.tproj/sl.subproj/device_tree.c
new file mode 100644 (file)
index 0000000..8cbd4dc
--- /dev/null
@@ -0,0 +1,239 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  device_tree.c - Functions for flattening the Device Tree.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+#include <device_tree.h>
+
+
+static long FlatenNode(CICell ph, long nodeAddr, long *nodeSize);
+static long FlatenProps(CICell ph, long propAddr, long *propSize,
+                       long *numProps);
+
+// Public Functions
+
+long FlattenDeviceTree(void)
+{
+  CICell RootPH;
+  long   ret;
+  
+  gDeviceTreeAddr = AllocateKernelMemory(0);
+  
+  RootPH = Peer(0);
+  if (RootPH == kCIError) return -1;
+  
+  ret = FlatenNode(RootPH, gDeviceTreeAddr, &gDeviceTreeSize);
+  
+  AllocateKernelMemory(gDeviceTreeSize);
+  
+  return ret;
+}
+
+
+CICell SearchForNode(CICell ph, long top, char *prop, char *value)
+{
+  CICell curChild, result;
+  
+  if (ph == 0) ph = Peer(0);
+  
+  if (top == 0) {
+    // Look for it in the current node.
+    if (GetProp(ph, prop, gTempStr, 4095) != -1) {
+      if (strcmp(value, gTempStr) == 0) {
+       return ph;
+      }
+    }
+  }
+  
+  // Look for it in the children.
+  curChild = Child(ph);
+  
+  while (curChild != 0) {
+    result = SearchForNode(curChild, 0, prop, value);
+    if (result != 0) return result;
+    curChild = Peer(curChild);
+  }
+  
+  if (top != 0) {
+    while (ph != 0) {
+      curChild = Peer(ph);
+      while (curChild != 0) {
+       result = SearchForNode(curChild, 0, prop, value);
+       if (result != 0) return result;
+       curChild = Peer(curChild);
+      }
+      
+      ph = Parent(ph);
+    }
+  }
+  
+  return 0;
+}
+
+
+CICell SearchForNodeMatching(CICell ph, long top, char *value)
+{
+  CICell curChild, result;
+  
+  if (ph == 0) ph = Peer(0);
+  
+  if (top == 0) {
+    // Look for it in the current node.
+    if (MatchThis(ph, value) == 0) return ph;
+  }
+  
+  // Look for it in the children.
+  curChild = Child(ph);
+  
+  while (curChild != 0) {
+    result = SearchForNodeMatching(curChild, 0, value);
+    if (result != 0) return result;
+    curChild = Peer(curChild);
+  }
+  
+  if (top != 0) {
+    while (ph != 0) {
+      curChild = Peer(ph);
+      while (curChild != 0) {
+       result = SearchForNodeMatching(curChild, 0, value);
+       if (result != 0) return result;
+       curChild = Peer(curChild);
+      }
+      
+      ph = Parent(ph);
+    }
+  }
+  
+  return 0;
+}
+
+// Private Functions
+
+long FlatenNode(CICell ph, long nodeAddr, long *nodeSize)
+{
+  DTNodePtr node;
+  CICell    childPH;
+  long      curAddr, ret;
+  long      propSize, numProps, childSize, numChildren;
+
+  node = (DTNodePtr)nodeAddr;
+  curAddr = nodeAddr + sizeof(DTNode);
+  numProps = 0;
+  numChildren = 0;
+  
+  ret = FlatenProps(ph, curAddr, &propSize, &numProps);
+  if (ret != 0) return ret;
+
+  curAddr += propSize;
+  node->nProperties = numProps;
+
+  childPH = Child(ph);
+  if (childPH == kCIError) return -1;
+
+  while (childPH != 0) {
+    ret = FlatenNode(childPH, curAddr, &childSize);
+    curAddr += childSize;
+    numChildren++;
+
+    childPH = Peer(childPH);
+    if (childPH == -1) return -1;
+  }
+
+  node->nChildren = numChildren;
+  *nodeSize = curAddr - nodeAddr;
+  
+  return 0;
+}
+
+
+long FlatenProps(CICell ph, long propAddr, long *propSize, long *numProps)
+{
+  DTPropertyPtr prop;
+  long          ret, cnt, curAddr, valueAddr, valueSize, nProps;
+  char          *prevName;
+  
+  curAddr = propAddr;
+  prevName = "";
+  nProps = 0;
+  
+  // make the first property the phandle
+  prop = (DTPropertyPtr)curAddr;
+  valueAddr = curAddr + sizeof(DTProperty);
+  strcpy(prop->name, "AAPL,phandle");
+  *((long *)valueAddr) = ph;
+  prop->length = 4;
+  curAddr = valueAddr + 4;
+  nProps++;
+  
+  // Make the AAPL,unit-string property.
+  ret = PackageToPath(ph, gTempStr, 4095);
+  if (ret > 0) {
+    cnt = ret - 1;
+    while (cnt && (gTempStr[cnt - 1] != '@') &&
+          (gTempStr[cnt - 1] != '/')) cnt--;
+    
+    if (gTempStr[cnt - 1] == '@') {
+      prop = (DTPropertyPtr)curAddr;
+      valueAddr = curAddr + sizeof(DTProperty);
+      strcpy(prop->name, "AAPL,unit-string");
+      strcpy((char *)valueAddr, &gTempStr[cnt]);
+      prop->length = ret - cnt;
+      curAddr = valueAddr + ((prop->length + 3) & ~3);
+      nProps++;
+    }
+  }
+  
+  while (1) {
+    prop = (DTPropertyPtr)curAddr;
+    valueAddr = curAddr + sizeof(DTProperty);
+    
+    ret = NextProp(ph, prevName, prop->name);
+    if (ret == -1) return -1;
+    if (ret == 0) break;
+    
+    valueSize = GetProp(ph, prop->name, (char *)valueAddr,
+                       kPropValueMaxLength);
+    if (valueSize == -1) return -1;
+    prop->length = valueSize;
+    
+    // Save the address of the value if this is
+    // the memory map property for the device tree.
+    if ((ph == gMemoryMapPH) && !strcmp(prop->name, "DeviceTree")) {
+      gDeviceTreeMMTmp = (long *)valueAddr;
+    }
+    
+    nProps++;
+    curAddr = valueAddr + ((valueSize + 3) & ~3);
+    prevName = prop->name;
+  };
+  
+  *numProps = nProps;
+  *propSize = curAddr - propAddr;
+  
+  return 0;
+}
diff --git a/bootx.tproj/sl.subproj/display.c b/bootx.tproj/sl.subproj/display.c
new file mode 100644 (file)
index 0000000..ba03f92
--- /dev/null
@@ -0,0 +1,701 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  display.c - Functions to manage and find displays.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+#include "clut.h"
+
+#include "bad_system.h"
+
+#if kMacOSXServer
+#include "images.h"
+#else
+#include "happy_mac.h"
+#include "happy_foot.h"
+#endif
+
+struct DisplayInfo {
+  CICell screenPH;
+  CICell screenIH;
+  CICell address;
+  CICell width;
+  CICell height;
+  CICell depth;
+  CICell linebytes;
+};
+
+typedef struct DisplayInfo DisplayInfo, *DisplayInfoPtr;
+
+// The Driver Description
+enum {
+  kInitialDriverDescriptor     = 0,
+  kVersionOneDriverDescriptor  = 1,
+  kTheDescriptionSignature     = 'mtej',
+  kDriverDescriptionSignature  = 'pdes'
+};
+
+struct DriverType {
+  unsigned char nameInfoStr[32]; // Driver Name/Info String
+  unsigned long        version;         // Driver Version Number - really NumVersion
+};
+typedef struct DriverType DriverType;
+
+struct DriverDescription {
+  unsigned long driverDescSignature; // Signature field of this structure
+  unsigned long driverDescVersion;   // Version of this data structure
+  DriverType    driverType;          // Type of Driver
+  char          otherStuff[512];
+};
+typedef struct DriverDescription DriverDescription;
+
+#define kNumNetDrivers (7)
+
+char *gNetDriverFileNames[kNumNetDrivers] = {
+  "ATYRagePro_ndrv",
+  "Spinnaker_ndrv",
+  "ATYLT-G_ndrv",
+  "ATYLTPro_ndrv",
+  "chips65550_ndrv",
+  "control_ndrv",
+  "ATYRage_ndrv"
+};
+
+char *gNetDriverMatchNames[kNumNetDrivers] = {
+  "ATY,mach64_3DUPro",
+  "ATY,mach64",
+  "ATY,264LT-G",
+  "ATY,RageLTPro",
+  "chips65550",
+  "control",
+  "ATY,mach64_3DU"
+};
+
+static long FindDisplays(void);
+static long OpenDisplays(void);
+static void DumpDisplaysInfo(void);
+static long OpenDisplay(long displayNum);
+static long InitDisplay(long displayNum);
+static long NetLoadDrivers(void);
+static long DiskLoadDrivers(void);
+static long LoadDisplayDriver(char *fileSpec);
+static long LookUpCLUTIndex(long index, long depth);
+
+static long        gNumDisplays;
+static long        gMainDisplayNum;
+static DisplayInfo gDisplays[16];
+
+// Public Functions
+
+long InitDisplays(void)
+{
+  FindDisplays();
+  OpenDisplays();
+  
+  return 0;
+}
+
+
+long LoadDisplayDrivers(void)
+{
+  long ret;
+  
+  // Don't bother if there are no displays.
+  if (gNumDisplays == 0) return 0;
+  
+  ret = NetLoadDrivers();
+  
+#if 0
+  switch (gBootFileType) {
+  case kNetworkDeviceType :
+    ret = NetLoadDrivers();
+    break;
+    
+  case kBlockDeviceType :
+    ret = DiskLoadDrivers();
+    break;
+    
+  case kUnknownDeviceType :
+    ret = 0;
+  }
+#endif
+  
+  return ret;
+}
+
+
+long DrawSplashScreen(void)
+{
+  DisplayInfoPtr display;
+  unsigned char  *happyMac, *happyFoot;
+  short          *happyMac16, *happyFoot16;
+  long           *happyMac32, *happyFoot32;
+  long           cnt, x, y, pixelSize;
+  
+  if (gMainDisplayNum == -1) return 0;
+  
+  display = &gDisplays[gMainDisplayNum];
+  
+  // Make sure the boot display is marked.
+  SetProp(display->screenPH, "AAPL,boot-display", NULL, 0);
+  
+#if kMacOSXServer
+  x = (display->width - BIG_WIDTH) / 2;
+  y = ((display->height - BIG_HEIGHT)) / 2 + BIG_DY;
+  
+  CallMethod_5_0(display->screenIH, "draw-rectangle", (long)bigImage,
+                x, y, BIG_WIDTH, BIG_HEIGHT);
+  
+  x = (display->width - SPIN_WIDTH) / 2;
+  y = ((display->height - SPIN_WIDTH) / 2) + 28;
+  
+  // Set up the spin cursor.
+  SpinInit(0, display->screenIH, waitCursors,
+          x, y, SPIN_WIDTH, SPIN_WIDTH);
+  
+  // Do a spin to start things off.
+  Spin();
+  
+#else
+  
+  switch (display->depth) {
+  case 16 :
+    happyMac16 = malloc(kHappyMacWidth * kHappyMacHeight * 2);
+    for (cnt = 0; cnt < (kHappyMacWidth * kHappyMacHeight); cnt++)
+      happyMac16[cnt] = LookUpCLUTIndex(gHappyMacIcon[cnt], 16);
+    happyMac = (char *)happyMac16;
+    break;
+    
+  case 32 :
+    happyMac32 = malloc(kHappyMacWidth * kHappyMacHeight * 4);
+    for (cnt = 0; cnt < (kHappyMacWidth * kHappyMacHeight); cnt++)
+      happyMac32[cnt] = LookUpCLUTIndex(gHappyMacIcon[cnt], 32);
+    happyMac = (char *)happyMac32;
+    break;
+    
+  default :
+    happyMac = gHappyMacIcon;
+    break;
+  }
+  
+  x = (display->width - kHappyMacWidth) / 2;
+  y = (display->height - kHappyMacHeight) / 2;
+  
+  CallMethod_5_0(display->screenIH, "draw-rectangle", (long)happyMac,
+                x, y, kHappyMacWidth, kHappyMacHeight);
+  
+  if (gBootFileType != kNetworkDeviceType) {
+    SpinInit(0, 0, NULL, 0, 0, 0, 0, 0);
+  } else {
+    Interpret_1_0("ms", 1000);
+    
+    switch (display->depth) {
+    case 16 :
+      pixelSize = 2;
+      happyFoot16 = malloc(kHappyFootWidth * kHappyFootHeight * 2);
+      for (cnt = 0; cnt < (kHappyFootWidth * kHappyFootHeight); cnt++)
+       happyFoot16[cnt] = LookUpCLUTIndex(gHappyFootPict[cnt], 16);
+      happyFoot = (char *)happyFoot16;
+      break;
+      
+    case 32 :
+      pixelSize = 4;
+      happyFoot32 = malloc(kHappyFootWidth * kHappyFootHeight * 4);
+      for (cnt = 0; cnt < (kHappyFootWidth * kHappyFootHeight); cnt++)
+       happyFoot32[cnt] = LookUpCLUTIndex(gHappyFootPict[cnt], 32);
+      happyFoot = (char *)happyFoot32;
+      break;
+      
+    default :
+      pixelSize = 1;
+      happyFoot = gHappyFootPict;
+      break;
+    }
+    
+    for (cnt = 0; cnt < kHappyFootHeight - 1; cnt++) {
+      
+      CallMethod_5_0(display->screenIH, "draw-rectangle", (long)happyMac,
+                    x, y - cnt, kHappyMacWidth, kHappyMacHeight);
+      
+      CallMethod_5_0(display->screenIH, "draw-rectangle",
+                    (long)happyFoot + pixelSize *
+                    kHappyFootWidth * (kHappyFootHeight - cnt - 1),
+                    x + 6, y + kHappyMacHeight - 1 - cnt,
+                    kHappyFootWidth, cnt + 1);
+      
+      CallMethod_5_0(display->screenIH, "draw-rectangle",
+                    (long)happyFoot + pixelSize *
+                    kHappyFootWidth * (kHappyFootHeight - cnt - 1),
+                    x + 15, y + kHappyMacHeight - 1 - cnt,
+                    kHappyFootWidth, cnt + 1);
+      
+      Interpret_1_0("ms", 75);
+    }
+    
+    // Set up the spin cursor.
+    SpinInit(1, display->screenIH, happyFoot,
+            x + 15, y + kHappyMacHeight - kHappyFootHeight + 1,
+            kHappyFootWidth, kHappyFootHeight, pixelSize);
+  }
+#endif
+  
+  return 0;
+}
+
+
+long DrawBrokenSystemFolder(void)
+{
+  long           cnt;
+  unsigned char  *iconPtr, tmpIcon[1024];
+  short          *icon16;
+  long           *icon32;
+  DisplayInfoPtr display = &gDisplays[gMainDisplayNum];
+  
+  long x, y;
+  
+#if kMacOSXServer
+  // Set the screen to Medium Blue
+  CallMethod_5_0(display->screenIH, "fill-rectangle", 128, 0, 0,
+                display->width, display->height);
+  
+  // Use the default icon.
+  iconPtr = gBrokenSystemFolderIcon;
+#else
+  // Set the screen to Medium Grey
+  CallMethod_5_0(display->screenIH, "fill-rectangle",
+                LookUpCLUTIndex(0xF9, display->depth),
+                0, 0, display->width, display->height);
+  
+  // Convert the default icon.
+  for (cnt = 0; cnt < 1024; cnt++) {
+    tmpIcon[cnt] = gBrokenSystemFolderIcon[cnt];
+    if (tmpIcon[cnt] == 0x80) tmpIcon[cnt] = 0xF9;
+  }
+  iconPtr = tmpIcon;
+#endif
+  
+  switch (display->depth) {
+  case 16 :
+    icon16 = malloc(32 * 32 * 2);
+    for (cnt = 0; cnt < (32 * 32); cnt++)
+      icon16[cnt] = LookUpCLUTIndex(iconPtr[cnt], 16);
+    iconPtr = (char *)icon16;
+    break;
+    
+  case 32 :
+    icon32 = malloc(32 * 32 * 4);
+    for (cnt = 0; cnt < (32 * 32); cnt++)
+      icon32[cnt] = LookUpCLUTIndex(iconPtr[cnt], 32);
+    iconPtr = (char *)icon32;
+    break;
+    
+  default :
+    break;
+  }
+  
+  // Draw the broken system folder.
+  x = (display->width - 32) / 2;
+  y = ((display->height - 32)) / 2;
+  CallMethod_5_0(display->screenIH, "draw-rectangle",
+                (long)iconPtr, x, y, 32, 32);
+  
+  return 0;
+}
+
+
+void GetMainScreenPH(Boot_Video_Ptr video)
+{
+  DisplayInfoPtr display;
+  
+  if (gMainDisplayNum == -1) {
+    // No display, set it to zero.
+    video->v_baseAddr = 0;
+    video->v_rowBytes = 0;
+    video->v_width = 0;
+    video->v_height = 0;
+    video->v_depth = 0;
+  } else {
+    display = &gDisplays[gMainDisplayNum];
+    
+    video->v_baseAddr = display->address;
+    video->v_rowBytes = display->linebytes;
+    video->v_width = display->width;
+    video->v_height = display->height;
+    video->v_depth = display->depth;
+  }
+}
+
+// Private Functions
+
+static long FindDisplays(void)
+{
+  CICell screenPH, controlPH;
+  long   cnt;
+  
+  // Find all the screens in the system.
+  screenPH = 0;
+  while (1) {
+    screenPH = SearchForNode(screenPH, 1, "device_type", "display");
+    if (screenPH != 0) gDisplays[gNumDisplays++].screenPH = screenPH;
+    else break;
+  }
+  
+  // Find /chaos/control, and
+  // invalidate gStdOutPH if equal (since new OF was downloaded).
+  controlPH = FindDevice("/chaos/control");
+  if (gStdOutPH == controlPH) gStdOutPH = 0;
+  
+  // Find the main screen using the screen alias or chaos/control.
+  gMainDisplayNum = -1;
+  screenPH = FindDevice("screen");
+  if (screenPH == -1) screenPH = controlPH;
+  for (cnt = 0; cnt < gNumDisplays; cnt++)
+    if (gDisplays[cnt].screenPH == screenPH) gMainDisplayNum = cnt;
+  
+  return 0;
+}
+
+
+static long OpenDisplays(void)
+{
+  long cnt;
+  
+  // Open the main screen or
+  // look for a main screen if we don't have one.
+  if ((gMainDisplayNum == -1) || !OpenDisplay(gMainDisplayNum)) {
+    gMainDisplayNum = -1;
+    for (cnt = 0; cnt < gNumDisplays; cnt++) {
+      if (OpenDisplay(cnt)) {
+       gMainDisplayNum = cnt;
+       break;
+      }
+    }
+  }
+  
+  return 0;
+}
+
+static void DumpDisplaysInfo(void)
+{
+  long cnt, length;
+  char tmpStr[512];
+  
+  printf("gNumDisplays: %x, gMainDisplayNum: %x\n",
+        gNumDisplays, gMainDisplayNum);
+  
+  for (cnt = 0; cnt < gNumDisplays; cnt++) {
+    printf("Display: %x, screenPH: %x,  screenIH: %x\n",
+          cnt, gDisplays[cnt].screenPH, gDisplays[cnt].screenIH);
+    
+    if (gDisplays[cnt].screenPH) {
+      length = PackageToPath(gDisplays[cnt].screenPH, tmpStr, 511);
+      tmpStr[length] = '\0';
+      printf("PHandle Path: %s\n", tmpStr);
+    }
+    
+    if (gDisplays[cnt].screenIH) {
+      length = InstanceToPath(gDisplays[cnt].screenIH, tmpStr, 511);
+      tmpStr[length] = '\0';
+      printf("IHandle Path: %s\n", tmpStr);
+    }
+    
+    printf("address = %x\n", gDisplays[cnt].address);
+    printf("linebytes = %x\n", gDisplays[cnt].linebytes);
+    printf("width = %x\n", gDisplays[cnt].width);
+    printf("height = %x\n", gDisplays[cnt].height);
+    printf("depth = %x\n", gDisplays[cnt].depth);
+    printf("\n");
+  }
+}
+
+
+static long OpenDisplay(long displayNum)
+{
+  char   screenPath[256];
+  CICell screenIH;
+  long   ret;
+  
+  // Try to use mac-boot's ihandle.
+  Interpret_0_1("\" _screen-ihandle\" $find if execute else 0 then",
+               &screenIH);
+  
+  // Try to use stdout as the screen's ihandle
+  if (gStdOutPH == gDisplays[displayNum].screenPH) screenIH = gStdOutIH;
+  
+  // Try to open the display.
+  if (screenIH == 0) {
+    screenPath[255] = '\0';
+    ret = PackageToPath(gDisplays[displayNum].screenPH, screenPath, 255);
+    if (ret != -1) {
+      screenIH = Open(screenPath);
+    }
+  }
+  
+  // Save the ihandle for later use.
+  gDisplays[displayNum].screenIH = screenIH;
+  
+  // Initialize the display.
+  if (screenIH != 0) InitDisplay(displayNum);
+  
+  return screenIH != 0;
+}
+
+
+static long InitDisplay(long displayNum)
+{
+  DisplayInfoPtr display = &gDisplays[displayNum];
+  CICell         screenPH = display->screenPH;
+  CICell         screenIH = display->screenIH;
+  
+  // Get the vital info for this screen.
+  GetProp(screenPH, "address", (char *)&(display->address), 4);
+  GetProp(screenPH, "width", (char *)&(display->width), 4);
+  GetProp(screenPH, "height", (char *)&(display->height), 4);
+  GetProp(screenPH, "depth", (char *)&(display->depth), 4);
+  GetProp(screenPH, "linebytes", (char *)&(display->linebytes), 4);
+  
+  // Replace some of the drivers words.
+  Interpret_3_1(
+   " to active-package"
+   " value rowbytes"
+   " value depthbytes"
+   
+   " : rect-setup"      // ( adr|index x y w h -- w adr|index xy-adr h )
+   "   >r >r rowbytes * swap depthbytes * + frame-buffer-adr +"
+   "   r> depthbytes * -rot r>"
+   " ;"
+   
+   " : DRAW-RECTANGLE"                          // ( adr x y w h -- )
+   "   rect-setup"                              // ( w adr xy-adr h )
+   "   0 ?do"                                   // ( w adr xy-adr )
+   "     2dup 4 pick move"
+   "     2 pick rowbytes d+"
+   "   loop"
+   "   3drop"
+   " ;"
+   
+   " : FILL-RECTANGLE"                           // ( index x y w h -- )
+   "   rect-setup rot depthbytes case"
+   "     1 of dup 8 << or dup 10 << or endof"
+   "     2 of dup 10 << or endof"
+   "   endcase -rot 0 ?do"
+   "     dup 3 pick 3 pick filll"
+   "     rowbytes +"
+   "   loop"
+   "   3drop"
+   " ;"
+   
+   " : READ-RECTANGLE"                            // ( adr x y w h -- )
+   "   rect-setup  >r swap r> 0 ?do"
+   "     2dup 4 pick move"
+   "     rowbytes 3 pick d+"
+   "   loop"
+   "   3drop"
+   " ;"
+   
+   " frame-buffer-adr"
+   " 0 to active-package"
+   , display->screenPH, display->linebytes,
+   display->depth / 8, &display->address);
+  
+  // Set the CLUT for 8 bit displays
+  if (display->depth == 8) {
+    CallMethod_3_0(screenIH, "set-colors", (long)gClut, 0, 256);
+  }
+  
+#if kMacOSXServer  
+  // Set the screen to Medium Blue
+  CallMethod_5_0(screenIH, "fill-rectangle", 128, 0, 0,
+                display->width, display->height);
+#else
+  // Set the screen to Medium Grey
+  CallMethod_5_0(screenIH, "fill-rectangle",
+                LookUpCLUTIndex(0xF9, display->depth),
+                0, 0, display->width, display->height);
+#endif
+  
+  return 0;
+}
+
+
+static long NetLoadDrivers(void)
+{
+  long   ret, cnt, curDisplay;
+  CICell screenPH;
+  char   fileSpec[512];
+  
+  for (cnt = 0; cnt < kNumNetDrivers; cnt++) {
+    
+    // See if there is a display for this driver.
+    for (curDisplay = 0; curDisplay < gNumDisplays; curDisplay++) {
+      screenPH = gDisplays[curDisplay].screenPH;
+      if (MatchThis(screenPH, gNetDriverMatchNames[cnt]) == 0) break;
+    }
+    
+    if (curDisplay == gNumDisplays) continue;
+    
+    sprintf(fileSpec, "%s%sDrivers\\ppc\\IONDRV.config\\%s",
+           gRootDir,
+           (gBootFileType == kNetworkDeviceType) ? "" : "private\\",
+           gNetDriverFileNames[cnt]);
+    
+    ret = LoadDisplayDriver(fileSpec);
+  }
+  
+  return 0;
+}
+
+static long DiskLoadDrivers(void)
+{
+  long ret, flags, index, time;
+  char dirSpec[512], *name;
+  
+  index = 0;
+  while (1) {
+    sprintf(dirSpec, "%sprivate\\Drivers\\ppc\\IONDRV.config\\", gRootDir);
+    
+    ret = GetDirEntry(dirSpec, &index, &name, &flags, &time);
+    if (ret == -1) break;
+    
+    if (flags != kFlatFileType) continue;
+    
+    strcat(dirSpec, name);
+    ret = LoadDisplayDriver(dirSpec);
+    
+    if (ret == -1) return -1;
+  }
+  
+  return 0;
+}
+
+static long LoadDisplayDriver(char *fileSpec)
+{
+  char              *pef, *currentPef, *buffer;
+  long              pefLen, currentPefLen, ndrvUsed;
+  long              curDisplay;
+  char              descripName[] = " TheDriverDescription";
+  long              err;
+  DriverDescription descrip;
+  DriverDescription curDesc;
+  char              matchName[40];
+  unsigned long     newVersion;
+  unsigned long     curVersion;
+  CICell            screenPH;
+  
+  pefLen = LoadFile(fileSpec);
+  if (pefLen == -1) return -1;
+  if (pefLen == 0) return 0;
+  
+  pef = (char *)kLoadAddr;
+  
+  descripName[0] = strlen(descripName + 1);
+  err = GetSymbolFromPEF(descripName, pef, &descrip, sizeof(descrip));
+  if(err != 0) {
+    printf("\nGetSymbolFromPEF returns %d\n",err);
+    return -1;
+  }
+  if((descrip.driverDescSignature != kTheDescriptionSignature) ||
+     (descrip.driverDescVersion != kInitialDriverDescriptor))
+    return 0;
+  
+  strncpy(matchName, descrip.driverType.nameInfoStr + 1,
+         descrip.driverType.nameInfoStr[0]);
+  newVersion = descrip.driverType.version;
+  
+  if((newVersion & 0xffff) == 0x8000)  // final stage, release rev
+    newVersion |= 0xff;
+  
+  ndrvUsed = 0;
+  buffer = (char *)malloc(pefLen);
+  if (buffer == NULL) {
+    printf("No space for the NDRV\n");
+    return -1;
+  }
+  bcopy(pef, buffer, pefLen);
+  
+  for (curDisplay = 0; curDisplay < gNumDisplays; curDisplay++) {
+    screenPH = gDisplays[curDisplay].screenPH;
+    
+    if (MatchThis(screenPH, matchName) != 0) continue;
+    
+    err = GetPackageProperty(screenPH, "driver,AAPL,MacOS,PowerPC",
+                            &currentPef, &currentPefLen);
+    
+    if (err == 0) {
+      err = GetSymbolFromPEF(descripName,currentPef,&curDesc,sizeof(curDesc));
+      if (err != 0) {
+       if((curDesc.driverDescSignature == kTheDescriptionSignature) &&
+          (curDesc.driverDescVersion == kInitialDriverDescriptor)) {
+         curVersion = curDesc.driverType.version;
+         if((curVersion & 0xffff) == 0x8000) // final stage, release rev
+           curVersion |= 0xff;
+
+         if( newVersion <= curVersion)
+           pefLen = 0;
+       }
+      }
+    }
+    
+    if(pefLen == 0) continue;
+    
+    printf("Installing patch driver\n");
+    
+    SetProp(screenPH, "driver,AAPL,MacOS,PowerPC", buffer, pefLen);
+    ndrvUsed = 1;
+  }
+  
+  if (ndrvUsed == 0) free(buffer);
+  
+  return 0;
+}
+
+
+static long LookUpCLUTIndex(long index, long depth)
+{
+  long result, red, green, blue;
+  
+  red   = gClut[index * 3 + 0];
+  green = gClut[index * 3 + 1];
+  blue  = gClut[index * 3 + 2];
+  
+  switch (depth) {
+  case 16 :
+    result = ((red & 0xF8) << 7)|((green & 0xF8) << 2)|((blue & 0xF8) >> 3);
+    break;
+    
+  case 32 :
+    result = (red << 16) | (green << 8) | blue;
+    break;
+    
+  default :
+    result = index;
+    break;
+  }
+  
+  return result;
+}
diff --git a/bootx.tproj/sl.subproj/drivers.c b/bootx.tproj/sl.subproj/drivers.c
new file mode 100644 (file)
index 0000000..d98d696
--- /dev/null
@@ -0,0 +1,1128 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  drivers.c - Driver Loading Functions.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+enum {
+  kTagTypeNone = 0,
+  kTagTypeDict,
+  kTagTypeKey,
+  kTagTypeString,
+  kTagTypeInteger,
+  kTagTypeData,
+  kTagTypeDate,
+  kTagTypeFalse,
+  kTagTypeTrue,
+  kTagTypeArray
+};
+
+#define kXMLTagPList   "plist "
+#define kXMLTagDict    "dict"
+#define kXMLTagKey     "key"
+#define kXMLTagString  "string"
+#define kXMLTagInteger "integer"
+#define kXMLTagData    "data"
+#define kXMLTagDate    "date"
+#define kXMLTagFalse   "false/"
+#define kXMLTagTrue    "true/"
+#define kXMLTagArray   "array"
+
+#define kPropCFBundleIdentifier ("CFBundleIdentifier")
+#define kPropCFBundleExecutable ("CFBundleExecutable")
+#define kPropOSBundleRequired   ("OSBundleRequired")
+#define kPropOSBundleLibraries  ("OSBundleLibraries")
+#define kPropIOKitPersonalities ("IOKitPersonalities")
+#define kPropIONameMatch        ("IONameMatch")
+
+struct Tag {
+  long       type;
+  char       *string;
+  struct Tag *tag;
+  struct Tag *tagNext;
+};
+typedef struct Tag Tag, *TagPtr;
+
+struct Module {  
+  struct Module *nextModule;
+  long          willLoad;
+  TagPtr        dict;
+  char          *plistAddr;
+  long          plistLength;
+  char          *driverPath;
+};
+typedef struct Module Module, *ModulePtr;
+
+struct DriverInfo {
+  char *plistAddr;
+  long plistLength;
+  void *moduleAddr;
+  long moduleLength;
+};
+typedef struct DriverInfo DriverInfo, *DriverInfoPtr;
+
+#define kDriverPackageSignature1 'MKXT'
+#define kDriverPackageSignature2 'MOSX'
+
+struct DriversPackage {
+  unsigned long signature1;
+  unsigned long signature2;
+  unsigned long length;
+  unsigned long alder32;
+  unsigned long version;
+  unsigned long numDrivers;
+  unsigned long reserved1;
+  unsigned long reserved2;
+};
+typedef struct DriversPackage DriversPackage;
+
+static long FileLoadDrivers(char *dirSpec, long plugin);
+static long NetLoadDrivers(char *dirSpec);
+static long LoadDriverMKext(char *fileSpec);
+static long LoadDriverPList(char *dirSpec, char *name);
+static long LoadMatchedModules(void);
+static long MatchPersonalities(void);
+static long MatchLibraries(void);
+static TagPtr GetProperty(TagPtr dict, char *key);
+static ModulePtr FindModule(char *name);
+static long ParseXML(char *buffer, ModulePtr *module, TagPtr *personalities);
+static long ParseNextTag(char *buffer, TagPtr *tag);
+static long ParseTagList(char *buffer, TagPtr *tag, long type, long empty);
+static long ParseTagKey(char *buffer, TagPtr *tag);
+static long ParseTagString(char *buffer, TagPtr *tag);
+static long ParseTagInteger(char *buffer, TagPtr *tag);
+static long ParseTagData(char *buffer, TagPtr *tag);
+static long ParseTagDate(char *buffer, TagPtr *tag);
+static long ParseTagBoolean(char *buffer, TagPtr *tag, long type);
+static long GetNextTag(char *buffer, char **tag, long *start);
+static long FixDataMatchingTag(char *buffer, char *tag);
+static TagPtr NewTag(void);
+static void FreeTag(TagPtr tag);
+static char *NewSymbol(char *string);
+static void FreeSymbol(char *string);
+static void DumpTag(TagPtr tag, long depth);
+
+static ModulePtr gModuleHead, gModuleTail;
+static TagPtr    gPersonalityHead, gPersonalityTail;
+static char      gExtensionsSpec[4096];
+static char      gDriverSpec[4096];
+static char      gFileSpec[4096];
+
+// Public Functions
+
+long LoadDrivers(char *dirSpec)
+{
+  if (gBootFileType == kNetworkDeviceType) {
+    NetLoadDrivers(dirSpec);
+  } else if (gBootFileType == kBlockDeviceType) {
+    strcpy(gExtensionsSpec, dirSpec);
+    strcat(gExtensionsSpec, "System\\Library\\");
+    FileLoadDrivers(gExtensionsSpec, 0);
+  } else {
+    return 0;
+  }
+  
+  MatchPersonalities();
+  
+  MatchLibraries();
+  
+  LoadMatchedModules();
+  
+  return 0;
+}
+
+// Private Functions
+
+static long FileLoadDrivers(char *dirSpec, long plugin)
+{
+  long      ret, length, index, flags, time, time2;
+  char      *name;
+  
+  if (!plugin) {
+    ret = GetFileInfo(dirSpec, "Extensions.mkext", &flags, &time);
+    if ((ret == 0) && (flags == kFlatFileType)) {
+      ret = GetFileInfo(dirSpec, "Extensions", &flags, &time2);
+      if ((ret != 0) || (flags == kDirectoryFileType) || (time > time2)) {
+       sprintf(gDriverSpec, "%sExtensions.mkext", dirSpec);
+       printf("LoadDrivers: Loading from [%s]\n", gDriverSpec);
+       if (LoadDriverMKext(gDriverSpec) == 0) return 0;
+      }
+    }
+    
+    strcat(dirSpec, "Extensions");
+  }
+  
+  printf("LoadDrivers: Loading from [%s]\n", dirSpec);
+  
+  index = 0;
+  while (1) {
+    ret = GetDirEntry(dirSpec, &index, &name, &flags, &time);
+    if (ret == -1) break;
+    
+    // Make sure this is a directory.
+    if (flags != kDirectoryFileType) continue;
+    
+    // Make sure this is a kext.
+    length = strlen(name);
+    if (strcmp(name + length - 5, ".kext")) continue;
+    
+    if (!plugin)
+      sprintf(gDriverSpec, "%s\\%s\\Contents\\PlugIns", dirSpec, name);
+    
+    ret = LoadDriverPList(dirSpec, name);
+    if (ret != 0) {
+      printf("LoadDrivers: failed\n");
+    }
+    
+    if (!plugin) 
+      ret = FileLoadDrivers(gDriverSpec, 1);
+  }
+  
+  return 0;
+}
+
+
+static long NetLoadDrivers(char *dirSpec)
+{
+  long tries, cnt;
+  
+  // Get the name of the kernel
+  cnt = strlen(gBootFile);
+  while (cnt--) {
+    if ((gBootFile[cnt] == '\\')  || (gBootFile[cnt] == ',')) {
+      cnt++;
+      break;
+    }
+  }
+  
+  sprintf(gDriverSpec, "%s%s.mkext", dirSpec, gBootFile + cnt);
+  
+  printf("NetLoadDrivers: Loading from [%s]\n", gDriverSpec);
+  
+  tries = 10;
+  while (tries--) {
+    if (LoadDriverMKext(gDriverSpec) == 0) break;
+  }
+  if (tries == -1) return -1;
+  
+  return 0;
+}
+
+
+static long LoadDriverMKext(char *fileSpec)
+{
+  long           driversAddr, driversLength;
+  char           segName[32];
+  DriversPackage *package = (DriversPackage *)kLoadAddr;
+  
+  // Load the MKext.
+  if (LoadFile(fileSpec) == -1) return -1;
+  
+  // Verify the MKext.
+  if ((package->signature1 != kDriverPackageSignature1) ||
+      (package->signature2 != kDriverPackageSignature2)) return -1;
+  if (package->length > kLoadSize) return -1;
+  if (package->alder32 != Alder32((char *)&package->version,
+                                 package->length - 0x10)) return -1;
+  
+  // Make space for the MKext.
+  driversLength = package->length;
+  driversAddr = AllocateKernelMemory(driversLength);
+  
+  // Copy the MKext.
+  memcpy((void *)driversAddr, (void *)kLoadAddr, driversLength);
+  
+  // Add the MKext to the memory map.
+  sprintf(segName, "DriversPackage-%x", driversAddr);
+  AllocateMemoryRange(segName, driversAddr, driversLength);
+  
+  return 0;
+}
+
+
+static long LoadDriverPList(char *dirSpec, char *name)
+{
+  long      length, ret, driverPathLength;
+  char      *buffer;
+  ModulePtr module;
+  TagPtr    personalities;
+  char      *tmpDriverPath;
+  
+  // Save the driver path.
+  sprintf(gFileSpec, "%s\\%s\\Contents\\MacOS\\", dirSpec, name);
+  driverPathLength = strlen(gFileSpec);
+  tmpDriverPath = malloc(driverPathLength + 1);
+  if (tmpDriverPath == 0) return -1;
+  strcpy(tmpDriverPath, gFileSpec);
+  
+  // Construct the file spec.
+  sprintf(gFileSpec, "%s\\%s\\Contents\\Info.plist", dirSpec, name);
+  
+  length = LoadFile(gFileSpec);
+  if (length == -1) {
+    free(tmpDriverPath);
+    return -1;
+  }
+  
+  buffer = malloc(length + 1);
+  if (buffer == 0) {
+    free(tmpDriverPath);
+    return -1;
+  }
+  strncpy(buffer, (char *)kLoadAddr, length);
+  
+  ret = ParseXML(buffer, &module, &personalities);
+  free(buffer);
+  if (ret != 0) {
+    free(tmpDriverPath);
+    return -1;
+  }
+  
+  // Allocate memory for the driver path and the plist.
+  module->driverPath = AllocateBootXMemory(driverPathLength + 1);
+  module->plistAddr = AllocateBootXMemory(length + 1);
+  
+  if ((module->driverPath == 0) | (module->plistAddr == 0)) {
+    free(tmpDriverPath);
+    return -1;
+  }
+  
+  // Save the driver path in the module.
+  strcpy(module->driverPath, tmpDriverPath);
+  free(tmpDriverPath);
+  
+  // Add the origin plist to the module.
+  strncpy(module->plistAddr, (char *)kLoadAddr, length);
+  module->plistLength = length + 1;
+  
+  // Add the module to the end of the module list.
+  if (gModuleHead == 0) gModuleHead = module;
+  else gModuleTail->nextModule = module;
+  gModuleTail = module;
+  
+  // Add the persionalities to the personality list.
+  if (personalities) personalities = personalities->tag;
+  while (personalities != 0) {
+    if (gPersonalityHead == 0) gPersonalityHead = personalities->tag;
+    else gPersonalityTail->tagNext = personalities->tag;
+    gPersonalityTail = personalities->tag;
+    
+    personalities = personalities->tagNext;
+  }
+  
+  return 0;
+}
+
+
+static long LoadMatchedModules(void)
+{
+  TagPtr        prop;
+  ModulePtr     module;
+  char          *fileName, segName[32];
+  DriverInfoPtr driver;
+  long          length, driverAddr, driverLength;
+  
+  module = gModuleHead;
+  while (module != 0) {
+    if (module->willLoad) {
+      prop = GetProperty(module->dict, kPropCFBundleExecutable);
+      if (prop != 0) {
+       fileName = prop->string;
+       sprintf(gFileSpec, "%s%s", module->driverPath, fileName);
+       length = LoadFile(gFileSpec);
+      } else length = 0;
+      if (length != -1) {
+       // Make make in the image area.
+       driverLength = sizeof(DriverInfo) + module->plistLength + length;
+       driverAddr = AllocateKernelMemory(driverLength);
+       
+       // Set up the DriverInfo.
+       driver = (DriverInfoPtr)driverAddr;
+       driver->plistAddr = (char *)(driverAddr + sizeof(DriverInfo));
+       driver->plistLength = module->plistLength;
+       if (length != 0) {
+         driver->moduleAddr   = (void *)(driverAddr + sizeof(DriverInfo) +
+                                       module->plistLength);
+         driver->moduleLength = length;
+       } else {
+         driver->moduleAddr   = 0;
+         driver->moduleLength = 0;
+       }
+       
+       // Save the plist and module.
+       strcpy(driver->plistAddr, module->plistAddr);
+       if (length != 0) {
+         memcpy(driver->moduleAddr, (void *)kLoadAddr, driver->moduleLength);
+       }
+       
+       // Add an entry to the memory map.
+       sprintf(segName, "Driver-%x", driver);
+       AllocateMemoryRange(segName, driverAddr, driverLength);
+      }
+    }
+    
+    module = module->nextModule;
+  }
+  
+  return 0;
+}
+
+
+static long MatchPersonalities(void)
+{
+  TagPtr    persionality;
+  TagPtr    prop;
+  ModulePtr module;
+  CICell    ph;
+  
+  // Try to match each of the personalities.
+  for(persionality = gPersonalityHead; persionality != 0;
+       persionality = persionality->tagNext) {
+    // Get the module name. Make sure it exists and has not
+    // already been marked for loading.
+    prop = GetProperty(persionality, kPropCFBundleIdentifier);
+    if (prop == 0) continue;
+    module = FindModule(prop->string);
+    if (module == 0) continue;
+    if (module->willLoad) continue;
+    
+    // Look for the exact match property.
+    // Try to match with it.
+    
+    // Look for the old match property.
+    // Try to match with it.
+    ph = 0;
+    prop = GetProperty(persionality, kPropIONameMatch);
+    if ((prop != 0) && (prop->tag != 0)) prop = prop->tag;
+    while (prop != 0) {
+      ph = SearchForNodeMatching(0, 1, prop->string);
+      if (ph != 0) break;
+      
+      prop = prop->tagNext;
+    }
+    
+    // If a node was found mark the module to be loaded.
+    if (ph != 0) {
+      module->willLoad = 1;
+    }
+  }
+  
+  return 0;
+}
+
+
+static long MatchLibraries(void)
+{
+  TagPtr        prop, prop2;
+  ModulePtr     module, module2;
+  long          done;
+  
+  do {
+    done = 1;
+    module = gModuleHead;
+    while (module != 0) {
+      if (module->willLoad == 1) {
+       prop = GetProperty(module->dict, kPropOSBundleLibraries);
+       if (prop != 0) {
+         prop = prop->tag;
+         while (prop != 0) {
+           module2 = gModuleHead;
+           while (module2 != 0) {
+             prop2 = GetProperty(module2->dict, kPropCFBundleIdentifier);
+             if ((prop2 != 0) && (!strcmp(prop->string, prop2->string))) {
+               if (module2->willLoad == 0) module2->willLoad = 1;
+               break;
+             }
+             module2 = module2->nextModule;
+           }
+           prop = prop->tagNext;
+         }
+       }
+       module->willLoad = 2;
+       done = 0;
+      }
+      module = module->nextModule;
+    }
+  } while (!done);
+  
+  return 0;
+}
+
+
+static TagPtr GetProperty(TagPtr dict, char *key)
+{
+  TagPtr tagList, tag;
+  
+  if (dict->type != kTagTypeDict) return 0;
+  
+  tag = 0;
+  tagList = dict->tag;
+  while (tagList) {
+    tag = tagList;
+    tagList = tag->tagNext;
+    
+    if ((tag->type != kTagTypeKey) || (tag->string == 0)) continue;
+    
+    if (!strcmp(tag->string, key)) return tag->tag;
+  }
+  
+  return 0;
+}
+
+
+static ModulePtr FindModule(char *name)
+{
+  ModulePtr module;
+  TagPtr    prop;
+  
+  module = gModuleHead;
+  
+  while (module != 0) {
+    prop = GetProperty(module->dict, kPropCFBundleIdentifier);
+    if ((prop != 0) && !strcmp(name, prop->string)) break;
+    module = module->nextModule;
+  }
+  
+  return module;
+}
+
+
+static long ParseXML(char *buffer, ModulePtr *module, TagPtr *personalities)
+{
+  long           length, pos;
+  TagPtr         moduleDict, required;
+  ModulePtr      tmpModule;
+  
+  pos = 0;
+  while (1) {
+    length = ParseNextTag(buffer + pos, &moduleDict);
+    if (length == -1) break;
+    pos += length;
+    
+    if (moduleDict == 0) continue;
+    
+    if (moduleDict->type == kTagTypeDict) break;
+    
+    FreeTag(moduleDict);
+  }
+  
+  if (length == -1) return -1;
+  
+  required = GetProperty(moduleDict, kPropOSBundleRequired);
+  if ((required == 0) || (required->type != kTagTypeString) ||
+      !strcmp(required->string, "Safe Boot")) {
+    FreeTag(moduleDict);
+    return -1;
+  }
+  
+  tmpModule = AllocateBootXMemory(sizeof(Module));
+  if (tmpModule == 0) {
+    FreeTag(moduleDict);
+    return -1;
+  }
+  tmpModule->dict = moduleDict;
+  
+  // For now, load any module that has OSBundleRequired != "Safe Boot".
+  tmpModule->willLoad = 1;
+  
+  *module = tmpModule;
+  
+  // Get the personalities.
+  *personalities = GetProperty(moduleDict, kPropIOKitPersonalities);
+  
+  return 0;
+}
+
+
+static long ParseNextTag(char *buffer, TagPtr *tag)
+{
+  long length, pos;
+  char *tagName;
+  
+  length = GetNextTag(buffer, &tagName, 0);
+  if (length == -1) return -1;
+  
+  pos = length;
+  if (!strncmp(tagName, kXMLTagPList, 6)) {
+    length = 0;
+  } else if (!strcmp(tagName, kXMLTagDict)) {
+    length = ParseTagList(buffer + pos, tag, kTagTypeDict, 0);
+  } else if (!strcmp(tagName, kXMLTagDict "/")) {
+    length = ParseTagList(buffer + pos, tag, kTagTypeDict, 1);
+  } else if (!strcmp(tagName, kXMLTagKey)) {
+    length = ParseTagKey(buffer + pos, tag);
+  } else if (!strcmp(tagName, kXMLTagString)) {
+    length = ParseTagString(buffer + pos, tag);
+  } else if (!strcmp(tagName, kXMLTagInteger)) {
+    length = ParseTagInteger(buffer + pos, tag);
+  } else if (!strcmp(tagName, kXMLTagData)) {
+    length = ParseTagData(buffer + pos, tag);
+  } else if (!strcmp(tagName, kXMLTagDate)) {
+    length = ParseTagDate(buffer + pos, tag);
+  } else if (!strcmp(tagName, kXMLTagFalse)) {
+    length = ParseTagBoolean(buffer + pos, tag, kTagTypeFalse);
+  } else if (!strcmp(tagName, kXMLTagTrue)) {
+    length = ParseTagBoolean(buffer + pos, tag, kTagTypeTrue);
+  } else if (!strcmp(tagName, kXMLTagArray)) {
+    length = ParseTagList(buffer + pos, tag, kTagTypeArray, 0);
+  } else if (!strcmp(tagName, kXMLTagArray "/")) {
+    length = ParseTagList(buffer + pos, tag, kTagTypeArray, 1);
+  } else {
+    *tag = 0;
+    length = 0;
+  }
+  
+  if (length == -1) return -1;
+  
+  return pos + length;
+}
+
+
+static long ParseTagList(char *buffer, TagPtr *tag, long type, long empty)
+{
+  long   length, pos;
+  TagPtr tagList, tmpTag;
+  
+  tagList = 0;
+  pos = 0;
+  
+  if (!empty) {
+    while (1) {
+      length = ParseNextTag(buffer + pos, &tmpTag);
+      if (length == -1) break;
+      pos += length;
+      
+      if (tmpTag == 0) break;
+      tmpTag->tagNext = tagList;
+      tagList = tmpTag;
+    }
+    
+    if (length == -1) {
+      FreeTag(tagList);
+      return -1;
+    }
+  }
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) {
+    FreeTag(tagList);
+    return -1;
+  }
+  
+  tmpTag->type = type;
+  tmpTag->string = 0;
+  tmpTag->tag = tagList;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return pos;
+}
+
+
+static long ParseTagKey(char *buffer, TagPtr *tag)
+{
+  long   length, length2;
+  char   *string;
+  TagPtr tmpTag, subTag;
+  
+  length = FixDataMatchingTag(buffer, kXMLTagKey);
+  if (length == -1) return -1;
+  
+  length2 = ParseNextTag(buffer + length, &subTag);
+  if (length2 == -1) return -1;
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) {
+    FreeTag(subTag);
+    return -1;
+  }
+  
+  string = NewSymbol(buffer);
+  if (string == 0) {
+    FreeTag(subTag);
+    FreeTag(tmpTag);
+    return -1;
+  }
+  
+  tmpTag->type = kTagTypeKey;
+  tmpTag->string = string;
+  tmpTag->tag = subTag;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return length + length2;
+}
+
+
+static long ParseTagString(char *buffer, TagPtr *tag)
+{
+  long   length;
+  char   *string;
+  TagPtr tmpTag;
+  
+  length = FixDataMatchingTag(buffer, kXMLTagString);
+  if (length == -1) return -1;
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) return -1;
+  
+  string = NewSymbol(buffer);
+  if (string == 0) {
+    FreeTag(tmpTag);
+    return -1;
+  }
+  
+  tmpTag->type = kTagTypeString;
+  tmpTag->string = string;
+  tmpTag->tag = 0;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return length;
+}
+
+
+static long ParseTagInteger(char *buffer, TagPtr *tag)
+{
+  long   length, integer;
+  TagPtr tmpTag;
+  
+  length = FixDataMatchingTag(buffer, kXMLTagInteger);
+  if (length == -1) return -1;
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) return -1;
+  
+  integer = 0;
+  
+  tmpTag->type = kTagTypeInteger;
+  tmpTag->string = (char *)integer;
+  tmpTag->tag = 0;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return length;
+}
+
+
+static long ParseTagData(char *buffer, TagPtr *tag)
+{
+  long   length;
+  TagPtr tmpTag;
+  
+  length = FixDataMatchingTag(buffer, kXMLTagData);
+  if (length == -1) return -1;
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) return -1;
+  
+  tmpTag->type = kTagTypeData;
+  tmpTag->string = 0;
+  tmpTag->tag = 0;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return length;
+}
+
+
+static long ParseTagDate(char *buffer, TagPtr *tag)
+{
+  long   length;
+  TagPtr tmpTag;
+  
+  length = FixDataMatchingTag(buffer, kXMLTagDate);
+  if (length == -1) return -1;
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) return -1;
+  
+  tmpTag->type = kTagTypeDate;
+  tmpTag->string = 0;
+  tmpTag->tag = 0;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return length;
+}
+
+
+static long ParseTagBoolean(char *buffer, TagPtr *tag, long type)
+{
+  TagPtr tmpTag;
+  
+  tmpTag = NewTag();
+  if (tmpTag == 0) return -1;
+  
+  tmpTag->type = type;
+  tmpTag->string = 0;
+  tmpTag->tag = 0;
+  tmpTag->tagNext = 0;
+  
+  *tag = tmpTag;
+  
+  return 0;
+}
+
+
+static long GetNextTag(char *buffer, char **tag, long *start)
+{
+  long cnt, cnt2;
+  
+  if (tag == 0) return -1;
+  
+  // Find the start of the tag.
+  cnt = 0;
+  while ((buffer[cnt] != '\0') && (buffer[cnt] != '<')) cnt++;
+  if (buffer[cnt] == '\0') return -1;
+  
+  // Find the end of the tag.
+  cnt2 = cnt + 1;
+  while ((buffer[cnt2] != '\0') && (buffer[cnt2] != '>')) cnt2++;
+  if (buffer[cnt2] == '\0') return -1;
+  
+  // Fix the tag data.
+  *tag = buffer + cnt + 1;
+  buffer[cnt2] = '\0';
+  if (start) *start = cnt;
+  
+  return cnt2 + 1;
+}
+
+
+static long FixDataMatchingTag(char *buffer, char *tag)
+{
+  long length, start, stop;
+  char *endTag;
+  
+  start = 0;
+  while (1) {
+    length = GetNextTag(buffer + start, &endTag, &stop);
+    if (length == -1) return -1;
+    
+    if ((*endTag == '/') && !strcmp(endTag + 1, tag)) break;
+    start += length;
+  }
+  
+  buffer[start + stop] = '\0';
+  
+  return start + length;
+}
+
+
+#define kTagsPerBlock (0x1000)
+
+static TagPtr gTagsFree;
+
+static TagPtr NewTag(void)
+{
+  long   cnt;
+  TagPtr tag;
+  
+  if (gTagsFree == 0) {
+    tag = (TagPtr)AllocateBootXMemory(kTagsPerBlock * sizeof(Tag));
+    if (tag == 0) return 0;
+    
+    // Initalize the new tags.
+    for (cnt = 0; cnt < kTagsPerBlock; cnt++) {
+      tag[cnt].type = kTagTypeNone;
+      tag[cnt].string = 0;
+      tag[cnt].tag = 0;
+      tag[cnt].tagNext = tag + cnt + 1;
+    }
+    tag[kTagsPerBlock - 1].tagNext = 0;
+    
+    gTagsFree = tag;
+  }
+  
+  tag = gTagsFree;
+  gTagsFree = tag->tagNext;
+  
+  return tag;
+}
+
+
+static void FreeTag(TagPtr tag)
+{
+  return;
+  if (tag == 0) return;
+  
+  if (tag->string) FreeSymbol(tag->string);
+  
+  FreeTag(tag->tag);
+  FreeTag(tag->tagNext);
+  
+  // Clear and free the tag.
+  tag->type = kTagTypeNone;
+  tag->string = 0;
+  tag->tag = 0;
+  tag->tagNext = gTagsFree;
+  gTagsFree = tag;
+}
+
+
+struct Symbol {
+  long          refCount;
+  struct Symbol *next;
+  char          string[1];
+};
+typedef struct Symbol Symbol, *SymbolPtr;
+
+static SymbolPtr FindSymbol(char *string, SymbolPtr *prevSymbol);
+
+static SymbolPtr gSymbolsHead;
+
+
+static char *NewSymbol(char *string)
+{
+  SymbolPtr symbol;
+  
+  // Look for string in the list of symbols.
+  symbol = FindSymbol(string, 0);
+  
+  // Add the new symbol.
+  if (symbol == 0) {
+    symbol = AllocateBootXMemory(sizeof(Symbol) + strlen(string));
+    if (symbol == 0) return 0;
+    
+    // Set the symbol's data.
+    symbol->refCount = 0;
+    strcpy(symbol->string, string);
+    
+    // Add the symbol to the list.
+    symbol->next = gSymbolsHead;
+    gSymbolsHead = symbol;
+  }
+  
+  // Update the refCount and return the string.
+  symbol->refCount++;
+  return symbol->string;
+}
+
+
+static void FreeSymbol(char *string)
+{ 
+#if 0
+  SymbolPtr symbol, prev;
+  
+  // Look for string in the list of symbols.
+  symbol = FindSymbol(string, &prev);
+  if (symbol == 0) return;
+  
+  // Update the refCount.
+  symbol->refCount--;
+  
+  if (symbol->refCount != 0) return;
+  
+  // Remove the symbol from the list.
+  if (prev != 0) prev->next = symbol->next;
+  else gSymbolsHead = symbol->next;
+  
+  // Free the symbol's memory.
+  free(symbol);
+#endif
+}
+
+
+static SymbolPtr FindSymbol(char *string, SymbolPtr *prevSymbol)
+{
+  SymbolPtr symbol, prev;
+  
+  symbol = gSymbolsHead;
+  prev = 0;
+  
+  while (symbol != 0) {
+    if (!strcmp(symbol->string, string)) break;
+    
+    prev = symbol;
+    symbol = symbol->next;
+  }
+  
+  if ((symbol != 0) && (prevSymbol != 0)) *prevSymbol = prev;
+  
+  return symbol;
+}
+
+#if 0
+static void DumpTagDict(TagPtr tag, long depth);
+static void DumpTagKey(TagPtr tag, long depth);
+static void DumpTagString(TagPtr tag, long depth);
+static void DumpTagInteger(TagPtr tag, long depth);
+static void DumpTagData(TagPtr tag, long depth);
+static void DumpTagDate(TagPtr tag, long depth);
+static void DumpTagBoolean(TagPtr tag, long depth);
+static void DumpTagArray(TagPtr tag, long depth);
+static void DumpSpaces(long depth);
+
+static void DumpTag(TagPtr tag, long depth)
+{
+  if (tag == 0) return;
+  
+  switch (tag->type) {
+  case kTagTypeDict :
+    DumpTagDict(tag, depth);
+    break;
+    
+  case kTagTypeKey :
+    DumpTagKey(tag, depth);
+    break;
+    
+  case kTagTypeString :
+    DumpTagString(tag, depth);
+    break;
+    
+  case kTagTypeInteger :
+    DumpTagInteger(tag, depth);
+    break;
+    
+  case kTagTypeData :
+    DumpTagData(tag, depth);
+    break;
+    
+  case kTagTypeDate :
+    DumpTagDate(tag, depth);
+    break;
+    
+  case kTagTypeFalse :
+  case kTagTypeTrue :
+    DumpTagBoolean(tag, depth);
+    break;
+    
+  case kTagTypeArray :
+    DumpTagArray(tag, depth);
+    break;
+    
+  default :
+    break;
+  }
+}
+
+
+static void DumpTagDict(TagPtr tag, long depth)
+{
+  TagPtr tagList;
+  
+  if (tag->tag == 0) {
+    DumpSpaces(depth);
+    printf("<%s/>\n", kXMLTagDict);
+  } else {
+    DumpSpaces(depth);
+    printf("<%s>\n", kXMLTagDict);
+    
+    tagList = tag->tag;
+    while (tagList) {
+      DumpTag(tagList, depth + 1);
+      tagList = tagList->tagNext;
+    }
+    
+    DumpSpaces(depth);
+    printf("</%s>\n", kXMLTagDict);
+  }
+}
+
+
+static void DumpTagKey(TagPtr tag, long depth)
+{
+  DumpSpaces(depth);
+  printf("<%s>%s</%s>\n", kXMLTagKey, tag->string, kXMLTagKey);
+  
+  DumpTag(tag->tag, depth);
+}
+
+
+static void DumpTagString(TagPtr tag, long depth)
+{
+  DumpSpaces(depth);
+  printf("<%s>%s</%s>\n", kXMLTagString, tag->string, kXMLTagString);
+}
+
+
+static void DumpTagInteger(TagPtr tag, long depth)
+{
+  DumpSpaces(depth);
+  printf("<%s>%x</%s>\n", kXMLTagInteger, tag->string, kXMLTagInteger);
+}
+
+
+static void DumpTagData(TagPtr tag, long depth)
+{
+  DumpSpaces(depth);
+  printf("<%s>%x</%s>\n", kXMLTagData, tag->string, kXMLTagData);
+}
+
+
+static void DumpTagDate(TagPtr tag, long depth)
+{
+  DumpSpaces(depth);
+  printf("<%s>%x</%s>\n", kXMLTagDate, tag->string, kXMLTagDate);
+}
+
+
+static void DumpTagBoolean(TagPtr tag, long depth)
+{
+  DumpSpaces(depth);
+  printf("<%s>\n", (tag->type == kTagTypeTrue) ? kXMLTagTrue : kXMLTagFalse);
+}
+
+
+static void DumpTagArray(TagPtr tag, long depth)
+{
+  TagPtr tagList;
+  
+  if (tag->tag == 0) {
+    DumpSpaces(depth);
+    printf("<%s/>\n", kXMLTagArray);
+  } else {
+    DumpSpaces(depth);
+    printf("<%s>\n", kXMLTagArray);
+    
+    tagList = tag->tag;
+    while (tagList) {
+      DumpTag(tagList, depth + 1);
+      tagList = tagList->tagNext;
+    }
+    
+    DumpSpaces(depth);
+    printf("</%s>\n", kXMLTagArray);
+  }
+}
+
+
+static void DumpSpaces(long depth)
+{
+  long cnt;
+  
+  for (cnt = 0; cnt < (depth * 4); cnt++) putchar(' ');
+}
+#endif
diff --git a/bootx.tproj/sl.subproj/elf.c b/bootx.tproj/sl.subproj/elf.c
new file mode 100644 (file)
index 0000000..9bdc1cf
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  elf.c - A function to decode a PPC Linux Kernel.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <sl.h>
+
+#include "elf.h"
+
+// Public Functions
+
+long DecodeElf(void)
+{
+  ElfHeaderPtr     ehPtr;
+  ProgramHeaderPtr phPtr;
+  long             cnt, paddr, offset, memsz, filesz, entry, *tmp;
+  
+  ehPtr = (ElfHeaderPtr)kLoadAddr;
+  if (ehPtr->signature != kElfSignature) return 0;
+  
+  entry = ehPtr->entry & kElfAddressMask;
+  
+  for (cnt = 0; cnt < ehPtr->phnum; cnt++) { 
+    phPtr = (ProgramHeaderPtr)(kLoadAddr+ehPtr->phoff+cnt*ehPtr->phentsize);
+    
+    if (phPtr->type == kElfProgramTypeLoad) {
+      paddr = phPtr->paddr & kElfAddressMask;
+      offset = phPtr->offset;
+      filesz = phPtr->filesz;
+      memsz = phPtr->memsz;
+      
+      // Get the actual entry if it is in this program.
+      if ((entry >= paddr) && (entry < (paddr + filesz))) {
+       tmp = (long *)(kLoadAddr + offset + entry);
+       if (tmp[2] == 0) entry +=  tmp[0];
+       
+      }
+      entry += paddr;
+      
+      // Add the kernel to the memory-map.
+      AllocateMemoryRange("Kernel-PROGRAM", 0, memsz);
+      
+      // Set the last address used by the kernel program.
+      AllocateKernelMemory(paddr + memsz);
+      
+      if (paddr < kImageAddr) {
+       // Copy the Vectors out of the way.
+       bcopy((char *)(kLoadAddr + offset), gVectorSaveAddr,
+             kVectorSize - paddr);
+       
+       offset += kImageAddr - paddr;
+       filesz -= kImageAddr - paddr;
+       paddr = kImageAddr;
+      }
+      
+      // Move the program.
+      bcopy((char *)(kLoadAddr + offset), (char *)paddr, filesz);
+    }
+  }
+  
+  return 0;
+}
diff --git a/bootx.tproj/sl.subproj/elf.h b/bootx.tproj/sl.subproj/elf.h
new file mode 100644 (file)
index 0000000..80c1e0e
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  elf.h - Header for Elf stuctures.
+ *
+ *  Copyright (c) 2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+// Elf Signature is a 0x7f + ELF
+#define kElfSignature (0x7f454C46)
+
+#define kElfProgramTypeLoad (1)
+
+#define kElfAddressMask (0x0FFFFFFF)
+
+struct ElfHeader {
+  long  signature;
+  char  class;
+  char  ei_data;
+  char  ei_version;
+  char  pad1;
+  long  pad2;
+  long  pad3;
+  short type;
+  short machine;
+  long  version;
+  long  entry;
+  long  phoff;
+  long  shoff;
+  long  flags;
+  short ehsize;
+  short phentsize;
+  short phnum;
+  short shentsize;
+  short shnum;
+  short shstrndx;
+};
+typedef struct ElfHeader ElfHeader, *ElfHeaderPtr;
+
+struct ProgramHeader {
+  long  type;
+  long  offset;
+  long  vaddr;
+  long  paddr;
+  long  filesz;
+  long  memsz;
+  long  flags;
+  long  align;
+};
+typedef struct ProgramHeader ProgramHeader, *ProgramHeaderPtr;
+
+struct SectionHeader {
+  long  name;
+  long  type;
+  long  flags;
+  long  addr;
+  long  offset;
+  long  size;
+  long  link;
+  long  info;
+  long  align;
+  long  entsize;
+};
+typedef struct SectionHeader SectionHeader, *SectionHeaderPtr;
diff --git a/bootx.tproj/sl.subproj/happy_foot.h b/bootx.tproj/sl.subproj/happy_foot.h
new file mode 100644 (file)
index 0000000..cdb710f
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  happy_foot.h - Icon for the happy mac's little foot.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#define kHappyFootWidth  (10)
+#define kHappyFootHeight (12)
+
+unsigned char gHappyFootPict[] = {
+       0xF9,0xF9,0xF9,0xFF,0xFB,0xFB,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xFF,0xFB,0xFB,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xFF,0xFA,0xFB,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xFF,0xFA,0xFA,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xFF,0xF9,0xFA,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xFF,0xF9,0xF9,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xFF,0xFB,0xF9,0xF9,0xFB,0xFF,0xF9,0xF9,
+       0xF9,0xFF,0x2B,0x2B,0xFB,0xFB,0xF9,0xF9,0xFF,0xF9,
+       0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0xF9,0xF9,0xFF,0xF9,
+       0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0xF9,0xF9,0xF9,
+       0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9
+};
diff --git a/bootx.tproj/sl.subproj/happy_mac.h b/bootx.tproj/sl.subproj/happy_mac.h
new file mode 100644 (file)
index 0000000..f7f9982
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  happy_mac.h - Icon for the happy mac.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#define kHappyMacWidth  (32)
+#define kHappyMacHeight (34)
+
+unsigned char gHappyMacIcon[] = {
+  0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0xFF,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0xFF,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFF,0xFF,0xFF,0xFF,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xFC,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0xFA,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xE3,0xE3,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0xD8,0xD8,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xFF,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0x2B,0xFF,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xFF,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xFF,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xFA,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xF9,0xF9,0xF9,0xF9,
+  0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9
+};
+
diff --git a/bootx.tproj/sl.subproj/images.h b/bootx.tproj/sl.subproj/images.h
new file mode 100644 (file)
index 0000000..af3963e
--- /dev/null
@@ -0,0 +1,5920 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  images.h - Graphics for Mac OS X Server.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#define SPIN_WIDTH 16
+
+#define BIG_WIDTH      353
+#define BIG_HEIGHT     264
+#define BIG_DY 0
+
+static char waitCursors[ 3 * SPIN_WIDTH * SPIN_WIDTH ] = {
+
+        0xf9,0xf9,0x56,0xf9,0xfa,0x2c,0x32,0x2d,0x57,0x51,0x56,0x56,0x56,0xf9,0xf9,0x56,
+        0x56,0xfa,0x56,0x56,0x2c,0x5e,0x58,0x5f,0x58,0x7d,0x52,0x57,0x56,0x56,0xf9,0xf9,
+        0xf9,0x56,0xf9,0x33,0x3a,0x34,0x5f,0x59,0x83,0x52,0x7c,0x76,0x76,0x7b,0x5d,0x56,
+        0xf9,0x56,0x0f,0x39,0x33,0x3a,0x34,0x59,0x58,0x58,0x52,0x76,0x4b,0x75,0x7b,0x56,
+        0xf9,0x0e,0x15,0x0f,0x39,0x34,0x5e,0x59,0x83,0x7c,0x7c,0x4b,0x75,0x6f,0x7b,0x56,
+        0x56,0x39,0x0e,0x14,0x0e,0x39,0x33,0x57,0x57,0x7c,0x4b,0x6f,0x4a,0x75,0x6e,0xa6,
+        0x32,0x38,0x3f,0x39,0x39,0x0e,0x5d,0x81,0x81,0x57,0x75,0x6f,0x75,0x6e,0x75,0xa6,
+        0x31,0x3e,0x38,0x3e,0x38,0x38,0x7b,0x81,0x56,0x56,0x75,0x74,0x6e,0x74,0x74,0xa5,
+        0x38,0x3f,0x63,0x63,0x69,0x62,0x81,0x7b,0x56,0x56,0xa5,0x99,0x9f,0x99,0x9f,0xa6,
+        0x31,0x69,0x62,0x68,0x62,0x8d,0x5c,0x5c,0x56,0xa5,0xc2,0xc2,0x98,0xc3,0x98,0xac,
+        0x5c,0x62,0x69,0x68,0x8c,0x62,0x86,0x7f,0x7f,0x79,0xa4,0xc2,0xc9,0x9e,0xc9,0xac,
+        0x56,0x62,0x62,0x8c,0x62,0x85,0x5b,0x7e,0x78,0x7f,0x9d,0xc8,0x9e,0xc8,0xc9,0x81,
+        0xf9,0x81,0x8c,0x62,0x8c,0x85,0x85,0x7e,0x7f,0x79,0xa3,0x9d,0xa4,0xc8,0xac,0x56,
+        0xf9,0xf9,0x80,0x86,0x5b,0x85,0x5a,0x7e,0x54,0x7f,0x79,0xa3,0x9d,0xd0,0x56,0xf9,
+        0xf9,0xf9,0x56,0x81,0x86,0x5b,0x85,0x7e,0x7e,0x78,0xa3,0xa4,0xac,0x56,0xfa,0xf9,
+        0xf9,0x56,0xf9,0xf9,0x56,0xab,0xa5,0x80,0x80,0xab,0xac,0x81,0x56,0xf9,0x56,0xf9,
+
+        0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x2c,0x2c,0x2d,0x2c,0x56,0x56,0x56,0xf9,0xf9,0x56,
+        0x56,0xfa,0x56,0x56,0x08,0x09,0x09,0x2d,0x2d,0x58,0x52,0x7b,0x56,0x56,0xf9,0xf9,
+        0xf9,0x56,0x07,0x33,0x33,0x09,0x09,0x2d,0x2e,0x52,0x7d,0x7d,0xa7,0x7b,0x5d,0x56,
+        0xf9,0x56,0x39,0x3a,0x33,0x0f,0x08,0x09,0x2d,0x58,0x76,0xa7,0xa1,0xa0,0x81,0x56,
+        0xf9,0x39,0x64,0x3a,0x3a,0x33,0x0f,0x09,0x58,0x7c,0xa7,0xa1,0xa1,0xa0,0xa6,0x7b,
+        0x56,0x6a,0x64,0x64,0x3a,0x3a,0x0f,0x2c,0x2d,0x7d,0xa1,0xa0,0x9a,0xa0,0x99,0xac,
+        0x32,0x64,0x6a,0x6a,0x6a,0x40,0x5d,0x81,0x81,0x7b,0xa1,0x9a,0xa0,0x75,0x9f,0xa6,
+        0x32,0x69,0x63,0x6a,0x64,0x6a,0x7b,0x81,0x56,0x56,0x75,0x74,0x6e,0x74,0x6e,0x9f,
+        0x5c,0x63,0x69,0x63,0x69,0x62,0x81,0x7b,0x56,0x56,0x74,0x6d,0x74,0x6e,0x74,0x9f,
+        0x31,0x62,0x3e,0x3e,0x37,0x3d,0x55,0x5c,0x50,0xa5,0x73,0x73,0x6d,0x73,0x49,0xa5,
+        0x5c,0x37,0x3e,0x37,0x3d,0x30,0x5b,0x85,0xd4,0xa4,0xa4,0x97,0x97,0x6d,0x73,0xac,
+        0x56,0x37,0x36,0x37,0x30,0x36,0x5a,0x85,0xaa,0xce,0x9d,0x9e,0x73,0x73,0x74,0x81,
+        0xf9,0x81,0x37,0x30,0x36,0x5b,0x85,0xa9,0xd4,0xce,0xce,0x9e,0xa4,0x9e,0xac,0x56,
+        0xf9,0xf9,0x5c,0x36,0x30,0x61,0x7f,0xa9,0xa9,0xce,0xc8,0xa4,0x9e,0xd0,0x56,0xf9,
+        0xf9,0xf9,0x56,0x81,0x86,0x5b,0x85,0xaa,0xd4,0xaa,0xcf,0xcf,0xd6,0x56,0xfa,0xf9,
+        0xf9,0x56,0xf9,0xf9,0x7b,0xac,0xab,0xab,0xab,0xd0,0xac,0x81,0x56,0xf9,0x56,0xf9,
+
+        0xf9,0xf9,0x56,0xf9,0xfa,0x2c,0x2c,0x2c,0x2c,0x2c,0x56,0x56,0x56,0xf9,0xf9,0x56,
+        0x56,0xfa,0x56,0x56,0x33,0x5e,0x34,0x2d,0x27,0x2d,0x26,0x50,0x56,0x56,0xf9,0xf9,
+        0xf9,0x56,0x32,0x65,0x65,0x58,0x5e,0x2e,0x2d,0x27,0x2d,0x51,0x76,0x7b,0x5d,0x56,
+        0xf9,0x56,0x5e,0x65,0x5f,0x5e,0x34,0x34,0x27,0x27,0x27,0x76,0x75,0x76,0x81,0x56,
+        0x56,0x39,0x6a,0x64,0x6b,0x65,0x5f,0x34,0x2d,0x27,0x51,0x75,0xa0,0xa0,0xa6,0x56,
+        0xf9,0x64,0x39,0x64,0x64,0x65,0x5e,0x33,0x26,0x51,0x75,0x9a,0x9a,0xc4,0xa0,0xac,
+        0x32,0x39,0x3f,0x3f,0x64,0x40,0x5d,0x81,0x81,0x57,0xa0,0xa0,0xca,0xa0,0xca,0xa6,
+        0xf7,0x38,0x14,0x38,0x38,0x38,0x7b,0x81,0x56,0x56,0xa0,0xc4,0xc3,0xc4,0x9f,0xca,
+        0x32,0x13,0x14,0x13,0x13,0x13,0x81,0x7b,0x56,0x56,0x9f,0x9f,0x9f,0x9f,0xc3,0xca,
+        0xf7,0x13,0x0d,0x13,0x13,0x3d,0x5c,0x5c,0x50,0x80,0x6d,0x97,0x98,0x9e,0x98,0xac,
+        0x81,0x13,0x3d,0x37,0x61,0x61,0x8c,0xaa,0xaa,0x72,0x73,0x73,0x97,0x73,0x9e,0xac,
+        0x56,0x37,0x37,0x61,0x61,0x86,0xaa,0xaa,0xa3,0x79,0x72,0x72,0x6c,0x73,0x9e,0x81,
+        0xf9,0x5d,0x62,0x61,0x8c,0x8c,0xb1,0xaa,0xaa,0x7f,0x79,0x4e,0x73,0x73,0xac,0x56,
+        0xf9,0xf9,0x80,0x86,0x86,0xb0,0xaa,0xaa,0xa3,0xa3,0x78,0x78,0x72,0xac,0x56,0xf9,
+        0xf9,0xf9,0x56,0x81,0xb1,0xaa,0xb0,0xaa,0xaa,0x7f,0xa3,0xa4,0xac,0x56,0xfa,0xf9,
+        0xf9,0x56,0xf9,0xf9,0x56,0x87,0xac,0xab,0xab,0xac,0xa5,0x81,0x56,0xf9,0x56,0xf9
+};
+
+static unsigned char bigImage[ BIG_WIDTH * BIG_HEIGHT ] = {
+
+0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf6,0x2b,0x2b,
+       0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0xf6,0xf6,0x2b,0xf6,0x2b,0xf6,
+       0x2b,0xf6,0x2b,0x2b,0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0x2b,0x2b,
+       0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,0xf6,0xf6,
+       0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,
+       0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0xf6,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,
+       0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,
+       0xf6,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+       0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xf7,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+       0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,
+       0x2b,0xf6,0x2b,0xf6,0xf6,0x2b,0xf6,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0x2b,0x2b,0x2b,
+       0xf6,0xf6,0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,
+       0xf6,0x2b,0xf6,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,
+       0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0xf6,
+       0x2b,0x2b,0xf6,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0xf6,
+       0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0x2b,
+       0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0x2b,0xf6,0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0x2b,
+       0x2b,0xf6,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0xf6,
+       0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0x2b,
+       0xf6,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,0xf6,0xf6,0x2b,0xf6,0xf6,0x2b,0x2b,0xf6,
+       0x2b,0x2b,0x2b,0x2b,0x2b,0xf6,0xf6,0x2b,0x2b,0x2b,0x2b,0xf6,0x2b,0x2b,0xf6,0x2b,
+       0xf6,0x2b,0xf6,0x2b,0xf9,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x81,0xfa,0xfa,
+       0xfa,0x81,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x81,0xfa,0xf9,0x81,0xf9,
+       0xfa,0xfa,0x81,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf8,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x81,0xf9,0xfa,0x81,
+       0xfa,0xf9,0x81,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0xf6,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0x81,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf8,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0x80,0x80,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x81,0xfa,0xfa,0xfa,0x81,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xfc,0xff,0xff,0xaa,0x80,0x80,
+       0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0xf6,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0x81,0xfb,
+       0xaa,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xfa,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xaa,
+       0xfb,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0x81,0xf9,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x81,0xf9,0xf9,0x81,0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfc,0xff,0xff,
+       0xfb,0x80,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,
+       0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,
+       0xfa,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xfc,0xff,
+       0xff,0xfb,0xaa,0xfb,0x80,0x80,0xaa,0x81,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfc,
+       0xff,0xff,0xfb,0xfb,0xaa,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xfa,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0x81,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,
+       0xfc,0xff,0xff,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x81,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,
+       0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xfc,0xff,0xff,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0xaa,0x81,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0x56,0xfa,
+       0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xfc,0xff,0xff,0xab,0xfb,0xaa,0xfb,0xfb,0xaa,0x81,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x81,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xfb,0xff,0xff,0xab,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0xfa,0x56,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xfb,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0x80,0xaa,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,
+       0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x2b,0xf5,0x00,0xf8,0x56,0x56,0xfa,
+       0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,
+       0x80,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0xf6,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf7,0xf5,0x00,0x00,0x00,0xf8,0xf9,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,
+       0xaa,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xfa,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0x81,0xfa,0x81,0xf9,0xf9,0xf9,0xfa,0xf9,0x81,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0xfa,0xf9,0xfa,0xf9,0xf6,0x00,0x00,0x00,0x00,0x00,0x56,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,
+       0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,
+       0xab,0xab,0xfb,0xab,0x80,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x81,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xf9,0x81,0xfa,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfc,0xff,0xff,
+       0xab,0xfc,0xab,0xfb,0xaa,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,
+       0xf7,0x81,0x81,0xfb,0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,
+       0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0x81,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x2b,0x00,0x00,0x00,0x00,0x00,
+       0xf7,0x81,0x81,0xfb,0x81,0x81,0x81,0x81,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xfc,
+       0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf6,0x00,0x00,0x00,0x00,
+       0xf7,0x81,0x81,0x81,0x81,0xfb,0x81,0x81,0xf9,0xfa,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfb,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,
+       0xfa,0xfa,0x81,0x81,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf8,0xf8,0xf8,0xf8,0xf9,0xfa,0xf9,0xf9,0xf6,0x00,0x00,0x2b,
+       0xf9,0x81,0x81,0xfb,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x56,0xfa,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,0xfb,0x80,0x80,0xaa,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0x56,0x56,
+       0xf9,0x56,0xf8,0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0xf8,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xfa,0xf8,0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf8,0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0xf6,0xf7,
+       0x2b,0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xfc,0xff,0xff,0xab,0xab,0xab,0xab,0xfb,0x80,0xaa,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xaa,0xfb,0xfb,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x81,0xfa,0x81,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0xf6,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,0xfb,0xaa,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0x56,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0xf7,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xaa,0x80,
+       0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x81,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x56,0xfb,0x81,0x81,0xfa,0x81,0xfa,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xab,0xfb,0xfb,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0x81,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x56,0xfb,0xfb,0x81,0x81,0x81,0x81,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,0xfb,0xaa,0xfb,
+       0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0x81,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x2b,0xfc,0xfb,0xfb,0x81,0xfb,0x81,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,
+       0xab,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0xfb,0xfc,0xfc,0xfb,0xfb,0xfb,0x81,0xf9,0xfa,0xfa,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,
+       0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0xf6,0xfc,0xfc,0xfc,0xfb,0xfb,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfc,0xff,0xff,0xab,0xab,
+       0xab,0xab,0xfb,0xaa,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xfa,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0x81,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xfa,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0xf8,0xfc,0xfc,0xfc,0xfb,0xfb,0x81,0xfa,0xfa,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,
+       0xfc,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x81,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x56,0xfc,0xfc,0xfc,0xfb,0x81,0x81,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xfc,0xff,0xff,
+       0xfc,0xab,0xab,0xab,0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf8,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xfc,0xfc,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfc,0xff,
+       0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xfc,0xfc,0xfb,0xfb,0xfb,0x81,0xfa,0xfa,
+       0xfa,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfb,
+       0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,
+       0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xfa,0xfa,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0xfc,0xfc,0xfb,0xfb,0x81,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfc,0xff,0xff,0xfc,0xfc,0xab,0xaa,0xfb,0xaa,0x80,0xaa,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x81,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xfc,0xfb,0xfb,0x81,0xfa,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0xfb,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xf9,0xf9,0x81,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xfa,0x56,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf6,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0xfc,0xfb,0x81,0x81,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xaa,0xfb,0x80,0x80,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x2b,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x56,0xfb,0xfb,
+       0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf8,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0xfa,
+       0xfb,0x81,0x81,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xfa,0x56,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xab,0x80,0xfb,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x56,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfb,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0xf5,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,
+       0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xfa,0x81,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,
+       0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xf7,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xfb,
+       0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xfb,0x81,0xfa,0x81,0x81,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,
+       0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xfa,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xfc,0xfb,0xfb,0xfb,0x81,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfb,0xff,0xff,0xfc,0xab,0xfb,
+       0xab,0xfb,0xaa,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0xfc,0xfc,0xfc,0xfb,0x81,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,
+       0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xac,0xab,
+       0xab,0xfb,0xfb,0xfb,0xaa,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0x81,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf7,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0xfc,0xfc,0xfb,0x81,0x81,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfc,0xff,0xff,0xfc,
+       0xab,0xfb,0xab,0xaa,0x80,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0x81,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf6,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xac,0xfc,0xfc,0xfb,0xfb,0x81,0x81,0x81,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,
+       0xab,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf5,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0xfc,0xfc,0xfc,0xfc,0xfb,0x81,0x81,0x81,
+       0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfc,0xff,
+       0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,
+       0xfa,0x81,0x81,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0xfc,0xac,0xfc,0xfc,0xfc,0x81,0x81,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xfc,
+       0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0xf8,0x81,0xfa,0x81,0xfa,0xf8,
+       0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0x81,0x81,
+       0x81,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,
+       0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfb,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,0x80,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf7,0xf6,0x00,0xf5,0x2b,0xfa,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xf9,0x2b,0xf5,0x00,0x2b,0xf9,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0x81,0x81,
+       0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0xf9,
+       0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xaa,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0x81,0x81,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,
+       0xfb,0xfb,0xfc,0xfb,0xfb,0xfc,0xfb,0xfb,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0x81,
+       0x81,0x81,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0x81,0xfa,0xf9,0xf9,0xf9,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfb,
+       0xfb,0xfb,0x81,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0xfb,0x81,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,
+       0xf9,0xf9,0x56,0xf8,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0x81,0xfb,0xfb,0xfb,0xfb,
+       0x81,0x81,0x81,0xfb,0xfb,0x81,0x81,0x81,0x81,0xfb,0x81,0xfb,0xfb,0x81,0x81,0xfb,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xab,0x80,0xfb,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x81,0xfa,0x81,0x81,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfb,0x81,0x81,
+       0x81,0x81,0xfb,0x81,0x81,0x81,0xfa,0xfa,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
+       0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xaa,0xfb,0xfb,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0xf9,0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,0xaa,0x80,
+       0xaa,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0x81,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xac,0xfc,0xab,0xfb,0xfb,0xfb,
+       0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xaa,0xfb,
+       0xaa,0x80,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xfa,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,
+       0xfb,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xfc,0xff,0xff,0xab,0xfc,0xab,
+       0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,
+       0xab,0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xab,
+       0xfc,0xfc,0xaa,0xfb,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfc,0xff,0xff,
+       0xfc,0xab,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,
+       0xfa,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xfc,0xff,
+       0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfc,
+       0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,
+       0xfc,0xff,0xff,0xfc,0xfc,0xab,0xaa,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x00,
+       0x00,0x00,0x00,0x00,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,
+       0xf8,0x00,0x00,0x00,0x00,0xf5,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0x81,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x2b,0xf5,0x00,0x00,0xf5,0xf6,0xf8,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0x2b,0xf6,0x00,0x00,0xf6,0x2b,
+       0xf8,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x00,0x00,0xf6,
+       0xf6,0x2b,0xf6,0xf6,0xf6,0xf8,0x56,0xf9,0xf9,0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf5,
+       0x00,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x2b,0xf6,0x00,
+       0x00,0xf6,0xf7,0xf8,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf8,0xf7,0x00,0x00,0x00,0x2b,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf7,0x00,0x00,0x00,0xf7,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x81,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf6,0x00,0xf5,0x2b,0xf8,0xf8,0xf7,0xf6,0x00,0xf6,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf7,0x00,0x2b,0xf7,0xf8,0xf7,0xf6,
+       0x00,0x00,0x2b,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x2b,
+       0x00,0x00,0x00,0x00,0x2b,0xf7,0xf9,0x56,0xf9,0xf9,0x56,0x2b,0x00,0x00,0x00,0xf6,
+       0xf7,0xf8,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x2b,0x00,0x2b,0xf7,
+       0xf8,0xf7,0xf6,0x00,0x00,0x2b,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf7,0x00,0x00,0xf5,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf6,0x00,0x00,0xf7,0xfa,0xfa,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf8,0x00,0x00,0xf7,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf8,0x00,0x00,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf7,0x00,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x2b,0x00,0xf6,0xfa,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x2b,0x00,0x00,0xf5,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x00,0x00,0x2b,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf7,0xf5,0xf8,0x56,
+       0x56,0xf9,0xf9,0xfa,0x2b,0x00,0xf6,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xfb,0xff,0xff,0xab,0xab,0xab,0xab,0xfb,0xaa,0x81,0xfb,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf8,0x00,0x00,0x00,0xfa,0x81,0x81,0x81,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x00,0x00,0x00,0xf7,0xfa,0x81,0xfa,0x81,0xfa,0x81,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf5,0x00,0xf7,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x56,
+       0x00,0xf5,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf5,0x2b,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf5,0xf5,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x00,0x00,0x00,0xfa,0x81,0x81,0x81,0x81,0xfa,0xf9,0xf8,0x00,0xf6,
+       0xf9,0xfa,0xfa,0x81,0x81,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x00,0x2b,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf5,0xf5,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0xfa,0x56,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xfc,0xfb,0xaa,0xfb,0xfb,0xfb,0x80,0xaa,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf7,0xfa,0x81,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xfa,0x56,0xf9,0xf7,0xf5,0x00,0x00,0x56,0xfc,0xfb,0x81,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf7,0x00,0x00,0x00,0xf7,0x81,0xfb,0xfb,0xfb,0x81,0x81,0xfa,0xfa,
+       0xf9,0xf9,0x81,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf5,0x00,0xf6,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfb,0x81,0x81,
+       0x81,0xf7,0x00,0xf5,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0x2b,0x00,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf8,0x00,0x81,0xfb,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0xfa,0xf9,0xfa,0x2b,0x00,0x00,0xf8,0xfb,0xfb,0xfb,0x81,0xfa,0xf9,0x2b,0x00,
+       0xf9,0x81,0xfb,0xfb,0xfc,0xfb,0x81,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0x2b,0x00,0x56,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0x81,0xf7,0x00,0x81,0x81,0xfb,0xfa,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,0x80,0xaa,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x2b,0xf7,0xf5,0x00,0x2b,0xfc,0xfc,0x81,0x81,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x2b,0x2b,0x00,0x00,0xf8,0xfb,0xfc,0xfc,0xfb,0x81,0x81,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf6,0x00,0x00,0x56,0xf9,0xfa,0xfa,0x81,0x81,0xfb,0x81,0x81,
+       0xfa,0xfa,0x81,0xf5,0x00,0x2b,0x81,0x81,0xf9,0xf9,0x56,0xf6,0x00,0x56,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0x00,0xfb,0xfb,0x81,0xfa,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf5,0x00,0xf5,0xfb,0xfc,0xfc,0x81,0x81,0xf9,0x00,
+       0xf8,0xfa,0x81,0x81,0xfb,0xfb,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xf9,0xf9,0xf6,0x00,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x00,0x81,0xfb,0xfb,0x81,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfc,0xab,0xfb,0xfb,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf7,0xf7,0x2b,0x00,0xf5,0xfc,0xfc,0xfc,0x81,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf5,0xf8,0x00,0x00,0xf8,0xfb,0xac,0xfc,0xfc,0xfb,0x81,
+       0x81,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf8,0x00,0x00,0x2b,0xf9,0xf9,0x81,0xfb,0x81,0xfb,0xfb,0x81,
+       0xfa,0xfa,0x81,0xfa,0xf7,0x00,0x00,0xfa,0x81,0xfa,0xf9,0xf9,0xf5,0x00,0x56,0xf9,
+       0xfa,0x81,0xfa,0x81,0xfa,0xfa,0x81,0xf8,0x81,0xfb,0xfb,0x81,0x81,0xfa,0xfa,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf7,0x00,0x00,0x56,0xac,0xfc,0xfb,0xfa,0xf7,
+       0xf5,0x56,0xfa,0x81,0x81,0xfb,0xfc,0xfb,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf5,
+       0x00,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0x81,0x81,0x81,0xf8,0xfb,0xfb,0xfb,0x81,0xfa,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,
+       0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xfa,0xfa,0xf9,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf7,0xf7,0xf8,0x00,0x00,0x81,0xac,0xfc,
+       0xfb,0xfa,0xf9,0xf9,0x56,0xf8,0xf5,0xfa,0x00,0x00,0xf8,0xfc,0xac,0xac,0xfc,0xfb,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x81,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x2b,0x00,0x00,0x56,0xf9,0x81,0xfb,0xfb,0xfb,0x81,0x81,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x00,0x00,0xf7,0x81,0x81,0x81,0xfa,0x00,0x00,0xf8,
+       0xfa,0xfa,0x81,0xfa,0x81,0x81,0xfa,0xfa,0xfa,0x81,0x81,0xfb,0x81,0x81,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf5,0x00,0xf5,0xfc,0xfc,0xfb,0x81,
+       0x00,0xf7,0xf9,0xfa,0x81,0xfb,0xfc,0xfb,0xfb,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x00,0x00,0xf8,0xf9,0xfa,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0x81,0xfb,0xfb,
+       0x81,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,
+       0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xfa,0x56,0x56,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf7,0xf8,0xf9,0x00,0x00,0xf8,0xfc,
+       0xfc,0xfc,0x81,0xf9,0xf9,0x56,0x2b,0x2b,0xf9,0x00,0x00,0xf8,0xfc,0xac,0xfc,0xfc,
+       0xfb,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0xf5,0xf9,0xfa,0x81,0xfb,0xfb,0x81,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf6,0x00,0xf5,0xfb,0xfb,0x81,0xfa,0x00,0x00,
+       0xf5,0xfa,0x81,0x81,0x81,0x81,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0x81,0xfb,0x81,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf7,0x00,0x00,0x56,0xfc,0xfb,
+       0xf8,0xf5,0x56,0xf9,0xfa,0xfa,0xfb,0x81,0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x00,0x00,0xf5,0x81,0xfb,0xfb,0x81,0xfa,0x81,0xf9,0x56,0xf9,0xf9,0xfa,0x81,
+       0x81,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,
+       0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xf9,0x56,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x2b,0xf8,0xf9,0xf5,0x00,0xf6,
+       0xfc,0xac,0xfc,0x81,0xf9,0x56,0x56,0xf6,0xf8,0x56,0x00,0x00,0xf8,0xfc,0xac,0xfc,
+       0xfb,0x81,0xfa,0xf9,0xfa,0xf8,0x2b,0xf5,0x00,0xf5,0x2b,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0x56,0x2b,0xf6,0xf6,0xf5,0xf5,0x2b,0x56,0x56,0x56,0xf9,0xfa,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf8,0x00,0x00,0xf6,0xfa,0x81,0xfc,0xfb,0xfb,0x81,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf7,0x00,0x00,0xf9,0xfc,0xfb,0xfa,0xf6,
+       0x00,0x00,0x2b,0xfa,0x81,0x81,0x81,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0x81,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf5,0x00,0xf5,0xfc,
+       0xfc,0xf5,0xf7,0xf9,0xf9,0xfa,0xfa,0xfb,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf6,0x00,0x00,0xf7,0xfa,0xfb,0x81,0x81,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xfa,0x81,0xfa,0xf9,0xf9,0x56,0x2b,0xf6,0xf6,0xf5,0x2b,0xf7,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0x2b,0x56,0xf9,0x56,0x2b,0x00,0xf5,0xf7,0xf6,0x00,0x00,0x00,
+       0x00,0xf5,0xf7,0x56,0xf9,0x56,0xf6,0x00,0x00,0x00,0x00,0xf8,0xf9,0xf9,0x56,0x56,
+       0xf7,0xf6,0xf6,0xf5,0xf6,0xf7,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x2b,0xf9,
+       0xf9,0x56,0x2b,0x00,0xf5,0xf8,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xaa,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf6,0xf8,0xf9,0xf7,0x00,
+       0x00,0xfb,0xfc,0xfb,0x81,0xfa,0xf9,0x56,0x00,0x56,0xf9,0x00,0x00,0x56,0xfb,0xfc,
+       0xfc,0xfb,0x81,0xfa,0xfa,0xf6,0xf6,0xf8,0xfa,0x56,0xf5,0x00,0xf7,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0x56,0x56,0xf7,0xf5,0x2b,0xf9,0xf9,0xfa,0x2b,0x00,0x00,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x2b,0x00,0x00,0xf7,0xfa,0x81,0xfc,0xfb,0xfb,
+       0x81,0x81,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf7,0x00,0x00,0xf8,0xfb,0xfb,0x81,
+       0xf8,0x00,0x00,0x00,0xf6,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf7,0x00,0x00,
+       0x56,0x56,0xf5,0xfa,0xfa,0xfa,0x81,0x81,0xfb,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf7,0x00,0x00,0x00,0xf6,0xfa,0x81,0xfa,0xfa,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf8,0x00,0x2b,0x56,0x56,0x56,0xf8,0x00,0x2b,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x2b,0x00,0xf9,0x56,0x00,0x00,0x00,0x00,0x00,0xfa,0xf7,0x00,
+       0x00,0xf6,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x00,0xf5,0x56,0xf9,0xf9,0xf9,0xf8,
+       0x00,0x2b,0xf9,0xfa,0x56,0xf7,0x00,0x2b,0xf9,0x56,0x56,0x56,0x56,0x56,0x2b,0x00,
+       0xf9,0x56,0x00,0x00,0x00,0x00,0x00,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,
+       0xab,0xab,0xfb,0x80,0xfb,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf6,0xf8,0xf9,0x56,
+       0x00,0x00,0xf9,0xfc,0xfc,0xfb,0xfa,0xfa,0xf8,0xf6,0xf9,0xfa,0x00,0x00,0xf8,0xfc,
+       0xfc,0xfc,0xfb,0x81,0xf9,0x00,0xf6,0xf9,0xfa,0xf9,0xfa,0xf8,0x00,0xf6,0xfa,0x81,
+       0xfa,0xf9,0xf9,0xf9,0xf7,0x00,0x2b,0x56,0xf9,0xf9,0xf9,0xf9,0xf6,0x00,0xf7,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf6,0x00,0x00,0x56,0x81,0xfb,0xfc,0xfc,
+       0x81,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf8,0x00,0x00,0x2b,0xfc,0xfc,
+       0xfb,0xfa,0xf5,0x00,0x00,0x00,0x00,0xf8,0xfa,0x81,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x00,
+       0x00,0xf5,0xf5,0xf8,0x81,0x81,0xfa,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x00,0x00,0x00,0x00,0x00,0xf8,0xfa,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf7,0x00,0xf7,0xf9,0xfa,0xf9,0xf9,0xf9,0xf7,0x00,0x2b,
+       0xf9,0xfa,0xf9,0x56,0xf5,0x00,0x00,0xf9,0xf6,0xf7,0xf7,0x00,0x00,0xf5,0xf9,0xfa,
+       0x00,0x00,0xf6,0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xf9,0x00,0xf8,0xf9,0xf9,0xf9,0xf7,
+       0x00,0xf7,0xf9,0xf9,0x56,0xf9,0xfa,0xf7,0x00,0x2b,0xfa,0xf9,0xf9,0x56,0xf5,0x00,
+       0x00,0xf9,0xf6,0xf7,0xf7,0x00,0x00,0xf5,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,
+       0xab,0xab,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0x81,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf6,0xf8,0xf9,
+       0xf9,0xf5,0x00,0x2b,0xfc,0xfb,0xfb,0xfa,0xfa,0x2b,0x2b,0xf9,0xfa,0x00,0x00,0x56,
+       0xfb,0xac,0xac,0xfb,0x81,0xf6,0x00,0xf8,0xfa,0xfa,0x81,0x81,0x56,0x00,0x00,0x81,
+       0x81,0x81,0xfa,0xfa,0x56,0x00,0xf6,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf8,0x00,0xf7,
+       0xfa,0xfa,0x81,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0x00,0x00,0x00,0x56,0x81,0xfc,0xfc,
+       0xfb,0x81,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x00,0x00,0xf6,0xfb,
+       0xfc,0xfb,0x81,0x56,0xf5,0x00,0x00,0x00,0x00,0xf5,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf7,0x00,0x00,0x00,0xfb,0xfb,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf5,0x00,0x00,0x00,0x00,0xf5,0x56,0xfa,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x00,0xf6,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x00,
+       0x00,0xf9,0xfa,0xf9,0xf8,0x2b,0x00,0x00,0x2b,0xf8,0xfa,0xfa,0xf8,0x00,0xf8,0xfa,
+       0x81,0x2b,0x00,0xf5,0x81,0x81,0x81,0xfa,0xfa,0xfa,0x56,0xf5,0xf9,0x81,0xfa,0xfa,
+       0xf5,0xf6,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf5,0x00,0xf9,0xfa,0xfa,0x56,0x2b,
+       0x00,0x00,0x2b,0xf8,0xf9,0xfa,0xf7,0xf5,0xf8,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,
+       0xfc,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf6,0xf8,
+       0xfa,0xfa,0xf7,0x00,0xf5,0xfc,0xfc,0xfb,0x81,0xfa,0xf5,0xf8,0xf9,0xf9,0xf5,0x00,
+       0xf8,0xfb,0xfc,0xfc,0xfb,0xf8,0x00,0xf5,0xfa,0x81,0x81,0x81,0x81,0xf9,0x00,0x00,
+       0x81,0xfb,0x81,0xfa,0x81,0xf6,0x00,0xf8,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0x2b,
+       0xf9,0xfa,0x81,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x00,0x00,0x00,0xf9,0x81,0xfc,
+       0xfc,0xfc,0x81,0x81,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x00,0x00,0xf5,
+       0xfb,0xfc,0xfc,0xfb,0x81,0xf9,0xf6,0x00,0x00,0x00,0x00,0x00,0x2b,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf5,0x00,0x00,0xfc,0xfc,0xfb,0xfc,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf5,0x00,0x00,0x00,0x00,0x00,0x2b,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x2b,0x00,0xf7,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0x81,
+       0xf6,0x00,0x2b,0xfa,0xfa,0xfa,0xf9,0x00,0x00,0xf5,0xfa,0xfa,0xfa,0xfa,0x81,0x81,
+       0x81,0xfb,0x56,0x00,0x00,0x81,0xfb,0xfb,0xfb,0xfa,0x81,0xf7,0x2b,0xfa,0x81,0x81,
+       0xf7,0x00,0x56,0x81,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,0xf6,0x00,0xf7,0xfa,0xfa,0xfa,
+       0xf9,0x00,0x00,0xf5,0xfa,0xfa,0x81,0xfa,0xfa,0x81,0xfb,0xfb,0xfb,0x81,0xfa,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,
+       0xff,0xab,0xfc,0xab,0xfb,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf6,
+       0x56,0xfa,0xfa,0xf8,0x00,0x00,0xfa,0xfc,0xfb,0xfb,0xf9,0xf5,0xf9,0xfa,0xfa,0xf6,
+       0x00,0x2b,0xfb,0xfc,0xfb,0xfb,0xf5,0x00,0x2b,0x81,0x81,0x81,0x81,0xfb,0xf9,0x00,
+       0x00,0xfb,0xfb,0xfb,0x81,0xf9,0x00,0x00,0x56,0x56,0xf9,0x81,0xfa,0xfa,0x81,0x81,
+       0xfa,0x81,0x81,0xfb,0xfb,0xfa,0xfa,0xf9,0x56,0x56,0x56,0x00,0x00,0x00,0xf9,0xfb,
+       0xfc,0xfc,0xfb,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x00,0x00,
+       0x00,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,0x81,0xf8,0xf5,0x00,0x00,0x00,0x00,0xf6,0xfa,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf6,0x00,0x00,0x56,0xfc,0xfc,0xfc,0x81,0xfa,0x81,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf5,0x00,0x00,0x00,
+       0x00,0xf6,0xfa,0xf9,0xf9,0xf9,0x56,0x00,0x00,0xf9,0xfa,0xfa,0xfa,0x81,0x81,0xfa,
+       0xfa,0xf6,0x00,0xf5,0x81,0x81,0x81,0xfa,0x00,0x00,0x2b,0xfa,0x81,0x81,0x81,0x81,
+       0x81,0xfb,0xfc,0xfb,0x00,0x00,0x56,0xfc,0xfc,0xfb,0x81,0xfa,0xf5,0xf7,0xf9,0xfa,
+       0xfa,0x00,0x00,0x81,0x81,0xfa,0xfa,0x81,0x81,0x81,0xfa,0xf6,0x00,0xf5,0x81,0x81,
+       0xfa,0xfa,0x00,0x00,0x2b,0xfa,0xfb,0xfb,0x81,0x81,0xfb,0x81,0xfb,0xfb,0x81,0xfa,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfc,
+       0xff,0xff,0xab,0xab,0xab,0xab,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,
+       0xf5,0xf9,0xf9,0xf9,0xfa,0x00,0x00,0xf8,0xfb,0xfb,0xfb,0xf7,0x2b,0xfa,0xf9,0xfa,
+       0xf6,0x00,0xf6,0xfb,0xfc,0xfc,0xfb,0x00,0x00,0xf9,0x81,0x81,0xfb,0xfb,0xfb,0xf9,
+       0x00,0x00,0xfb,0xfb,0xfc,0xfb,0xf8,0x00,0xf6,0xf9,0xf9,0x81,0x81,0x81,0x81,0x81,
+       0xfa,0xf9,0xfa,0x81,0x81,0x81,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x00,0x00,0x00,0x56,
+       0xfc,0xfc,0xfc,0xfb,0x81,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x00,
+       0x00,0xf5,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,0xfa,0x81,0x81,0xf7,0x00,0x00,0x00,0x00,
+       0x2b,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf5,0x00,0x00,0xf5,0xfc,0xac,0xfc,0xfb,0x81,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfb,0x81,0xf7,0x00,
+       0x00,0x00,0x00,0x2b,0xfa,0x81,0xfa,0xf7,0x00,0xf5,0xf9,0xf9,0xfa,0x81,0x81,0x81,
+       0xf9,0xf7,0x00,0x00,0x00,0x81,0xfb,0x81,0xfa,0x00,0x00,0xf8,0x81,0xfb,0xfc,0xfb,
+       0xfb,0x81,0xfb,0xfc,0xfb,0xf6,0x00,0xf7,0xfb,0xfc,0xfb,0xfb,0xfa,0xf5,0xf9,0xfa,
+       0x81,0xf8,0x00,0xf5,0x81,0x81,0xfa,0x81,0xfb,0x81,0xf9,0xf7,0x00,0x00,0x00,0x81,
+       0x81,0x81,0xfa,0x00,0x00,0xf7,0x81,0xfc,0xfb,0xfb,0xfb,0x81,0xfb,0xfb,0xfb,0x81,
+       0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xfb,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xab,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0x56,
+       0xf9,0x00,0xf9,0xfa,0x81,0xfa,0xf6,0x00,0xf6,0xfc,0xfb,0xfb,0xf6,0x56,0xfa,0xf9,
+       0xfa,0xf6,0x00,0xf6,0xfb,0xfc,0xfc,0xfb,0xfa,0xfa,0x81,0x81,0xfb,0xfb,0xfb,0xfb,
+       0x56,0x00,0x00,0x81,0xfb,0xfc,0xfb,0xf6,0x00,0x2b,0x56,0xfa,0x81,0x81,0x81,0x81,
+       0xfa,0xf9,0xf9,0xfa,0x81,0x81,0x81,0xfa,0x81,0xf9,0x56,0x56,0xf9,0x00,0x00,0x00,
+       0xf9,0xfc,0xfc,0xfc,0xfb,0x81,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf8,
+       0x00,0x00,0xf6,0xfb,0xfc,0xfc,0xfc,0x81,0xfa,0xfa,0xfa,0xfb,0xfc,0xfa,0xf5,0x00,
+       0x00,0x00,0xf9,0xfb,0x81,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf7,0xf5,0xf6,0x00,0x00,0x56,0xac,0xfc,0xfb,0x81,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x81,0x81,0xfc,
+       0xfa,0xf5,0x00,0x00,0x00,0xf9,0x81,0xfa,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0xf5,0xfb,0xfb,0xfb,0x81,0x00,0x00,0x56,0xfb,0xfc,0xfc,
+       0xfb,0xfb,0x81,0x81,0xfb,0x81,0xf7,0x00,0xf5,0xfb,0xfc,0xfc,0x81,0xf7,0x2b,0xf9,
+       0xf9,0xfa,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf5,
+       0x81,0xfc,0xfb,0x81,0x00,0x00,0xf9,0xfb,0xfc,0xfc,0xfb,0x81,0x81,0x81,0xfb,0xfb,
+       0x81,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,
+       0x56,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0x81,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x00,0xf9,0xfa,0xfa,0xfa,0xf8,0x00,0x00,0x81,0xfc,0xfb,0x00,0x81,0xf9,
+       0xfa,0xfa,0xf6,0x00,0xf6,0xfb,0xfb,0xfc,0xfb,0xfb,0x81,0x81,0x81,0xfb,0xfc,0xfc,
+       0x81,0x56,0x00,0x00,0x81,0xfb,0xfc,0xfb,0xf5,0x00,0xf7,0xf9,0xfa,0x81,0x81,0x81,
+       0xfa,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0xfa,0xf6,0x00,
+       0x00,0xf9,0xfc,0xfc,0xfc,0xfb,0x81,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf8,0x00,0x00,0xf6,0x81,0xfc,0xfc,0xfc,0x81,0xfa,0xfa,0xfa,0x81,0xfb,0xfc,0x81,
+       0xf5,0x00,0x00,0xf8,0xfb,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf5,0xf7,0xf9,0xf5,0x00,0xf5,0xfc,0xfc,0xfb,0x81,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,
+       0x81,0xfb,0x81,0xf5,0x00,0x00,0xf8,0xfb,0x81,0xf5,0x00,0x2b,0xfa,0x81,0x81,0xfb,
+       0xfb,0x81,0xfa,0xf9,0xf9,0xfa,0x81,0xfb,0xfc,0xfb,0xfb,0x00,0x00,0x56,0xfb,0xfc,
+       0xfc,0xfb,0xfb,0x81,0x81,0xfa,0xfa,0x56,0x00,0x00,0xfa,0xfc,0xfc,0x81,0x2b,0xf8,
+       0xf9,0xfa,0xfa,0xf6,0x00,0xf7,0xfa,0x81,0x81,0xfb,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0x81,0xfc,0xfb,0xfb,0x00,0x00,0x56,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,0x81,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0x81,0x80,0xaa,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0x00,0xf9,0xfa,0xfa,0xfa,0x56,0x00,0x00,0x56,0xfb,0xf9,0x2b,0x81,
+       0xfa,0xfa,0xfa,0xf6,0x00,0xf6,0x81,0xfb,0xfb,0xfb,0x81,0x81,0x81,0x81,0xfb,0xfc,
+       0xfb,0x56,0xf5,0x00,0x00,0x81,0xfb,0xfc,0xfc,0x00,0x00,0xf7,0xfa,0x81,0xfb,0xfb,
+       0x81,0xfa,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x2b,
+       0x00,0x00,0xf8,0xfc,0xfc,0xac,0xfc,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf8,0x00,0x00,0xf8,0x81,0xfc,0xfc,0xfc,0xfb,0xfa,0xf9,0xf9,0xfa,0xfa,0x81,
+       0xfb,0x81,0x00,0x00,0xf5,0xfc,0xfb,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf7,0x00,0xf9,0xf9,0xf7,0x00,0x00,0x56,0xac,0xfb,0x81,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xfa,0xfa,0x81,0xfc,0x81,0x00,0x00,0xf5,0xac,0xfc,0x00,0x00,0xf7,0xfa,0x81,0xfb,
+       0xfb,0x81,0x81,0x81,0xfa,0xfa,0xfa,0x81,0xfb,0xfb,0xfc,0xfb,0x00,0x00,0x56,0x81,
+       0xfb,0xfc,0xfb,0x81,0xfa,0xf9,0xfa,0xf9,0xfa,0xf5,0x00,0xf8,0xfc,0xfb,0xfb,0xf5,
+       0xfa,0xfa,0xfa,0xfa,0x00,0x00,0xf8,0x81,0x81,0xfb,0xfb,0xfb,0x81,0xfa,0xfa,0xfa,
+       0xfa,0x81,0xfb,0xfc,0xfb,0xfb,0x00,0x00,0x56,0x81,0xfc,0xfc,0xfb,0x81,0x81,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xab,0xfb,0xfb,0xaa,0x81,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0x81,
+       0xf9,0xf9,0x81,0xf9,0x00,0xf9,0xfa,0x81,0xfa,0xfa,0x00,0x00,0x2b,0xfb,0xf7,0xf8,
+       0x81,0xfa,0xfa,0xfa,0xf6,0x00,0x2b,0xfb,0xfb,0xfc,0xfc,0x81,0xfa,0x81,0x81,0xfb,
+       0xf9,0xf6,0x2b,0xf7,0x00,0x00,0xfa,0xfb,0xfb,0xfb,0x00,0x00,0xf7,0x81,0x81,0xfc,
+       0xfb,0x81,0x81,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf7,0x00,0x00,0xf7,0xfc,0xac,0xfc,0xfb,0xfa,0xfa,0xfa,0x56,0x56,0xfa,0x56,0x56,
+       0x56,0xf9,0x2b,0x00,0x00,0x56,0x81,0xfc,0xfc,0xfc,0x81,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfa,0x81,0xfb,0xf7,0x00,0x00,0xac,0xfc,0xfc,0x81,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf5,0xf7,0xf9,0xf9,0xf9,0xf5,0x00,0xf5,0xfc,0xfc,
+       0xfb,0x81,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfb,0xfb,0x2b,0x00,0x00,0xac,0xfc,0x00,0x00,0xf8,0x81,0xfb,
+       0xfc,0xfc,0xfb,0x81,0x81,0xfa,0xfa,0xfa,0x81,0xfb,0xfb,0xfc,0xfb,0x00,0x00,0xf9,
+       0xfb,0xfc,0xfb,0xfb,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf6,0x00,0x2b,0xfb,0xfb,0x56,
+       0x2b,0xfa,0xf9,0xfa,0xfa,0x00,0x00,0xf7,0xfb,0xfb,0xfc,0xfc,0xfb,0x81,0x81,0x81,
+       0xfa,0xfa,0x81,0xfb,0xfc,0xfb,0xfb,0x00,0x00,0x56,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf5,0xfa,0xfa,0x81,0xfa,0xfa,0x2b,0x00,0xf5,0xfb,0xf6,
+       0x81,0xfb,0x81,0x81,0x81,0xf6,0x00,0xf6,0x81,0xfb,0xfc,0xfb,0xfb,0x81,0xfb,0xfa,
+       0x2b,0xf6,0x56,0x81,0x56,0x00,0x00,0x81,0xfb,0xfc,0xfc,0xf5,0x00,0x2b,0x81,0xfb,
+       0xfb,0xfb,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x00,0x00,0xf5,0xfb,0xfc,0xac,0xfb,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf6,0x00,0x00,0x81,0xfb,0xfc,0xfc,0xfa,0x81,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf8,0x00,0x00,0xac,0xac,0xfc,0xfb,0x81,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf7,0x00,0x56,0x56,0xf9,0xfa,0xf8,0x00,0x00,0x56,
+       0xfc,0xfb,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf8,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x00,0x00,0xfc,0xac,0x00,0x00,0xf7,0xfb,
+       0xfc,0xfc,0xfc,0xfb,0x81,0x81,0xfa,0xfa,0xfa,0x81,0xfb,0xfb,0xfb,0x81,0x00,0x00,
+       0x56,0x81,0xfb,0xfc,0xfb,0x81,0xfa,0xfa,0x56,0x56,0x56,0xf7,0x00,0xf5,0xfc,0xfc,
+       0xf7,0x56,0x81,0xfa,0xf9,0xfa,0x00,0x00,0xf7,0x81,0xfb,0xfb,0xfc,0xfb,0x81,0x81,
+       0xfa,0xfa,0x81,0x81,0x81,0xfb,0xfb,0x81,0x00,0x00,0x56,0x81,0xfb,0xfb,0xfb,0xfa,
+       0xfa,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xaa,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x81,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x81,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf8,0xf6,0xfa,0xfa,0xfa,0x81,0xfa,0xf8,0x00,0x00,0xf8,
+       0xf5,0xfc,0xfb,0x81,0x81,0xfa,0xf6,0x00,0xf6,0x81,0xfb,0xfc,0xfb,0xfb,0x81,0x56,
+       0x00,0xf8,0x81,0xfa,0x81,0x56,0x00,0x00,0x81,0xfc,0xfc,0xfb,0xf6,0x00,0xf6,0x81,
+       0xfc,0xfb,0xfb,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x2b,0x00,0x00,0x81,0xfc,0xfc,0xfb,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x00,0x00,0x2b,0xfa,0xfb,0xfc,0xfa,0x56,0x81,0xfa,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0x00,0xf5,0xfc,0xfc,0xfc,0xfb,0xfa,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf5,0x2b,0x56,0xf9,0xfa,0x81,0x81,0xf5,0x00,
+       0xf5,0xfb,0xfc,0xfb,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf8,0xf7,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x00,0xf5,0xfc,0xac,0x2b,0x00,0xf6,
+       0xfb,0xfb,0xfc,0xfb,0xfb,0x81,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0x81,0x81,0xfa,0x00,
+       0x00,0x56,0x81,0xfb,0xfb,0x81,0x81,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x00,0x00,0xf9,
+       0xfb,0xf5,0x81,0x81,0xfa,0xf9,0x81,0xf6,0x00,0xf6,0x81,0xfb,0xfc,0xfc,0xfb,0x81,
+       0xfa,0x81,0x81,0xfa,0xfa,0x81,0x81,0x81,0xfa,0x00,0x00,0x56,0x81,0xfb,0xfb,0xfb,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xfb,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf8,0xf6,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x00,0x00,
+       0x00,0xf8,0xfc,0xfb,0xfb,0x81,0xfa,0xf6,0x00,0xf6,0xfb,0xfb,0xfc,0xfb,0x81,0xf8,
+       0x00,0xf8,0xfa,0xfa,0xfa,0xfa,0xf8,0x00,0x00,0xfb,0xfc,0xfc,0xfc,0xf8,0x00,0xf5,
+       0x81,0xfb,0xfc,0xfb,0x81,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf8,0x00,0x00,0xf8,0xfc,0xfc,0xfb,0x81,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x2b,0x00,0x00,0x56,0xfa,0xfb,0xfb,0xfa,0xf6,0x81,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf8,0x00,0xf6,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf7,0x00,0xf9,0xf9,0xf9,0x81,0x81,0x81,0xf8,
+       0x00,0x00,0x56,0xfc,0x81,0x81,0xfa,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf8,0xf5,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf8,0x00,0xf6,0xfb,0xfc,0xf7,0x00,
+       0x00,0xfb,0xfc,0xfb,0xfb,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0x00,0x00,0x56,0xfb,0xfb,0xfb,0x81,0x81,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf5,0x00,
+       0xf8,0xf9,0x2b,0xfb,0xfb,0xfa,0xfa,0x81,0x2b,0x00,0x00,0xfa,0xfb,0xfc,0xfb,0x81,
+       0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0x00,0x00,0x56,0x81,0xfb,0xfb,
+       0xfb,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xab,0xfb,0xaa,
+       0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x81,0x56,0xf6,0x81,0xfa,0xfa,0x81,0xfa,0x81,0xf5,
+       0x00,0x00,0xf9,0xfc,0xfc,0xfb,0xfb,0x81,0xf6,0x00,0xf6,0xfb,0xfb,0xfc,0xfc,0xf9,
+       0x00,0xf6,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0x00,0x00,0xfb,0xfc,0xfc,0xfb,0x56,0x00,
+       0x00,0x56,0xfb,0xfb,0xfb,0x81,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x2b,0x00,0xf5,0xfb,0xfc,0xfb,0xfa,0x81,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf5,0x00,0x2b,0xfa,0xfa,0xfb,0xfc,0x56,0xf6,0x81,0xfa,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf8,0x00,0xf8,0x81,0xfb,0xac,0xfb,0x81,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf5,0x2b,0xf9,0xf9,0xf9,0x81,0x81,0x81,
+       0xfa,0xf5,0x00,0xf5,0xfb,0xfb,0xfb,0x81,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x2b,
+       0xf5,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf7,0x00,0xf7,0x81,0xfc,0xf9,
+       0x00,0x00,0x56,0xfc,0xfb,0xfb,0x81,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,
+       0xf9,0x00,0x00,0x56,0xfb,0xfb,0xfb,0xfb,0x81,0xf9,0x56,0x56,0x56,0x56,0x56,0x2b,
+       0x00,0xf6,0xf8,0xf9,0xfb,0xfb,0x81,0xfa,0x81,0xf8,0x00,0x00,0xf8,0xfb,0xfc,0xfb,
+       0x81,0x81,0xfa,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x00,0x00,0x56,0x81,0xfb,
+       0xfc,0xfb,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xaa,0xfb,
+       0x81,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0x81,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf8,0xf6,0xfa,0x81,0xfa,0xfb,0x81,0xfa,
+       0xf7,0x00,0x00,0xfb,0xfc,0xac,0xfb,0x81,0x81,0xf6,0x00,0x00,0x81,0xfb,0xfc,0xfb,
+       0x2b,0x00,0xf7,0xfa,0xfa,0xfa,0xfa,0xfb,0xf7,0x00,0x00,0xfb,0xfb,0xfc,0xfb,0x81,
+       0xf5,0x00,0x2b,0xfb,0xfb,0xfb,0x81,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf5,0x00,0xf8,0xfc,0xfc,0x81,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf7,0x00,0xf5,0xf9,0xf9,0x81,0xfc,0xfc,0x56,0x00,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x2b,0x00,0xf9,0x81,0xfb,0xfb,0xfb,0x81,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x2b,0x00,0x56,0xf9,0xf9,0xfa,0x81,0x81,
+       0x81,0xfa,0xf7,0x00,0x00,0x56,0xfc,0xfb,0x81,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,
+       0xf7,0x00,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf6,0xf5,0xf9,0x81,0xfb,
+       0xfb,0xf5,0x00,0x00,0xfb,0xfb,0xfc,0xfb,0xfa,0xf9,0x56,0xf9,0x56,0xf7,0xf9,0x56,
+       0x56,0xf9,0x00,0x00,0x56,0x81,0xfb,0xfc,0x81,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf8,0x00,0x00,0x00,0xfb,0xfb,0xfb,0x81,0xfa,0x81,0xf9,0xf5,0x00,0xf5,0xfb,0xfc,
+       0xfb,0x81,0xfa,0xf9,0x56,0xf9,0xf9,0xf8,0x56,0x56,0x56,0xf9,0x00,0x00,0x56,0x81,
+       0xfb,0xfc,0xfb,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xab,
+       0xfb,0xaa,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf7,0xf5,0xfa,0xfa,0x81,0xfb,0xfa,
+       0xf9,0x56,0x00,0x2b,0x81,0xfc,0xac,0xfc,0xfb,0x81,0xf6,0x00,0x00,0x81,0xfc,0xfc,
+       0xfb,0x00,0x00,0xf7,0x81,0x81,0xfb,0x81,0xfa,0xf5,0x00,0x00,0x81,0xfb,0xfc,0xfb,
+       0xfa,0x56,0x00,0x00,0x56,0xfb,0xfb,0x81,0xfa,0xfa,0xf9,0x56,0xf7,0xfa,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x00,0x00,0xf9,0xfb,0x81,0x81,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf8,0x00,0x00,0xf8,0xf9,0xfa,0xfb,0xfc,0xfb,0xf8,0x00,
+       0xf7,0xfa,0xf9,0xfa,0xfa,0x56,0xf9,0xf9,0x56,0x00,0x2b,0xfa,0xfa,0xfb,0xfb,0xfb,
+       0xfb,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf5,0xf5,0x56,0xfa,0xfa,0xfa,0x81,
+       0x81,0xfa,0xfa,0x56,0x00,0x00,0xf5,0xfc,0xfc,0x81,0xfa,0xfa,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf7,0x00,0x2b,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf8,0x00,0xf7,0xfa,0xfa,
+       0xfb,0xfb,0x56,0x00,0x00,0xf6,0xfb,0xfc,0x81,0xf9,0xf9,0x56,0x56,0x2b,0x2b,0xfa,
+       0x56,0xf9,0xf9,0x00,0x00,0xf8,0x81,0xfb,0xfc,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0x00,0x00,0x2b,0xfb,0xfc,0xfb,0xfb,0x81,0xfa,0xfa,0xf7,0x00,0x00,0xf6,
+       0xfb,0xfb,0xfb,0xfa,0xf9,0xf9,0xf9,0xf7,0xf6,0x56,0xf9,0xfa,0xf9,0x00,0x00,0xf8,
+       0x81,0xfb,0xfb,0x81,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xab,0xab,0xfb,
+       0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0x2b,0x00,0xfa,0xfa,0x81,0xfb,
+       0xfa,0xfa,0xf9,0xf5,0xf8,0x81,0xfc,0xac,0xfb,0xfb,0x81,0xf6,0x00,0x00,0xfb,0xfc,
+       0xfc,0xfc,0xf5,0x00,0x00,0x56,0x81,0x81,0xf8,0xf6,0x56,0x00,0x00,0xf8,0x56,0xf7,
+       0xfb,0x81,0xfa,0x2b,0x00,0xf5,0x56,0xfc,0xfb,0xfa,0xf9,0xf8,0xf5,0xf7,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf5,0x00,0x56,0xfc,
+       0x81,0xfa,0xf9,0xf9,0x56,0xf7,0x00,0x00,0x56,0xf9,0xf9,0xfa,0xfb,0xfc,0xfb,0xf9,
+       0x00,0x00,0xf7,0xfa,0xfa,0x81,0xf9,0xf9,0x56,0xf5,0xf6,0xfa,0xfa,0x81,0xfb,0xfb,
+       0xfb,0x81,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf6,0x00,0x2b,0xf9,0xfa,0xfa,0xfa,
+       0x81,0x81,0xfa,0xf9,0xf9,0x00,0x00,0x00,0xf7,0xfb,0xfb,0x81,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf8,0x00,0x00,0xf8,0x81,0xfa,0xfa,0xf9,0xf9,0x56,0xf5,0xf6,0xfa,0xfa,
+       0x81,0x81,0xfb,0xfb,0xf6,0x00,0x00,0xf5,0x56,0xfa,0xfa,0xf9,0xf8,0xf6,0xf5,0x56,
+       0xf9,0x56,0xf9,0xf9,0x00,0x00,0x56,0xfb,0xfc,0xfc,0x81,0x81,0xfa,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf6,0x00,0xf8,0xfc,0xfc,0xfc,0xfb,0xfa,0xfa,0xfa,0xf9,0xf5,0x00,
+       0x00,0xf5,0x56,0xfa,0xfa,0xf9,0xf7,0xf6,0xf5,0x56,0x56,0xf9,0xf9,0x56,0x00,0x00,
+       0xf9,0xfb,0xfb,0xfb,0xfb,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,
+       0xab,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf8,0x00,0x00,0xf7,0x56,0x81,
+       0xfb,0x81,0x81,0x81,0x2b,0xfa,0xfb,0xfb,0xac,0xfb,0xf9,0xf7,0x00,0x00,0x00,0x2b,
+       0xfa,0xfb,0xfb,0xf8,0x00,0x00,0x00,0x00,0x00,0x2b,0x81,0xfa,0xf6,0x00,0x00,0xf6,
+       0xfb,0xfb,0x81,0xfa,0xfa,0x2b,0x00,0x00,0xf6,0xf8,0xf7,0x2b,0x00,0xf7,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xfa,0x2b,0x00,
+       0xf5,0xf8,0x56,0xf8,0xf7,0xf6,0x00,0xf6,0xf8,0x56,0xf9,0xfa,0x81,0xfc,0xfb,0x81,
+       0x81,0xf7,0x00,0x00,0xf6,0x56,0x56,0xf8,0x2b,0xf5,0x2b,0xf9,0xf9,0xfa,0x81,0x81,
+       0xfb,0xfb,0xfa,0xf9,0xf9,0x56,0x56,0xf8,0xf8,0xf5,0x00,0x00,0xf5,0xf8,0xfa,0x81,
+       0x81,0x81,0xfa,0xf9,0xf8,0x2b,0x00,0x00,0x00,0x00,0xf7,0xfb,0x81,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x2b,0x00,0x00,0xf6,0xf8,0x56,0x56,0x2b,0x00,0x2b,0xf9,0x56,
+       0xf9,0x81,0x81,0xfb,0x81,0xfa,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf7,0x00,0x00,0x2b,0xfa,0xfb,0xfb,0xfb,0x81,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf7,0x00,0x81,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,0xf9,0xf9,0x56,
+       0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x56,0xf9,0xf9,0xf9,0xf9,0xf7,0x00,
+       0x00,0x2b,0xfa,0xfb,0xfc,0x81,0x81,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xfc,0xff,0xff,0xab,
+       0xfc,0xab,0xfb,0xab,0x80,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0x00,0x00,0xf5,0xf6,0x00,0x00,
+       0xf8,0x81,0x81,0xfa,0xfa,0xf9,0xfa,0x81,0xfb,0xfc,0xf9,0x00,0xf6,0xf6,0xf6,0xf6,
+       0xf6,0x00,0x56,0xfc,0x81,0xf7,0xf5,0x00,0x2b,0xfa,0xfc,0xfb,0x81,0xf9,0x2b,0xf7,
+       0xfb,0xfb,0xfc,0xfb,0xfa,0xfa,0xfa,0xf9,0x2b,0xf5,0x00,0xf5,0x2b,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x81,
+       0xf9,0xf7,0xf6,0x00,0x00,0xf5,0x2b,0xf8,0xf9,0xfa,0xf9,0xfa,0xfb,0xfb,0xfb,0xfb,
+       0x81,0xfa,0xf9,0x56,0xf7,0xf6,0x00,0x00,0xf5,0x2b,0x56,0xfa,0xf9,0xf9,0xf9,0x81,
+       0x81,0x81,0x81,0xf9,0xf9,0x56,0x56,0xfa,0xf5,0x00,0xf6,0xf6,0xf6,0xf5,0x00,0xf6,
+       0xfb,0x81,0x81,0xfa,0xf8,0x00,0xf5,0xf6,0xf6,0xf6,0xf5,0x00,0x00,0x81,0x81,0x81,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf7,0xf6,0x00,0x00,0xf5,0x2b,0xf8,0xf9,0xf9,
+       0xf9,0x81,0x81,0x81,0x81,0xfa,0xfa,0x81,0xf9,0x2b,0xf5,0x00,0xf5,0x2b,0xf8,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf5,0xf5,0xf6,0xf6,0xf6,0x00,0xf6,0xfa,0xfb,0xfa,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf6,0x81,0xfb,0xfb,0xfc,0xfb,0x81,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x2b,0xf5,0x00,0xf5,0x2b,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf5,0x00,
+       0xf6,0xf6,0xf6,0x00,0xf6,0xfa,0xfb,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,
+       0xfc,0xab,0xfb,0xaa,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x81,0xfa,0x81,0xf9,0xfa,0xfa,0x81,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0x81,0xfb,0xfb,0x81,0x81,0x81,0xf9,0xfa,0x81,0x81,0xfb,0x81,0xfa,0x81,0xf9,0xf9,
+       0x81,0xfb,0xfc,0xac,0xfc,0xfc,0xfb,0xfb,0x81,0xfc,0xfc,0xfc,0xfb,0xfb,0x81,0x81,
+       0xfb,0xfb,0xfc,0xfc,0x81,0x81,0xfa,0xfa,0x81,0x81,0xfb,0xfb,0xfb,0xfb,0x81,0xfa,
+       0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0x81,0xfb,0xfb,0xfb,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0x81,0xfb,
+       0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0x81,0x81,0xfb,0x81,0xfa,0xfa,0xf9,0xf9,0x81,0xfa,
+       0x81,0x81,0x81,0x81,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0x81,0xfb,0xfb,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0xfb,0xac,0xac,0xfc,0xfb,
+       0x81,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0x81,0xfb,0x81,0x81,0x81,0xfa,0xf9,
+       0xfa,0x81,0x81,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfc,0xfb,0xfb,0x81,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0x81,0x81,0xfc,0xfc,0xfb,0x81,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x81,0x81,0xfb,0xfb,0xfb,0xfa,0xfa,0x56,
+       0xf9,0xf9,0xf9,0x81,0x81,0xfc,0xfc,0xfc,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0x81,0xfb,0xfc,0xfb,0x81,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfb,0xff,
+       0xff,0xab,0xfc,0xab,0xfb,0xab,0xaa,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0x81,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0x81,0x81,0xfc,0xfb,0x81,0xfb,0x81,0xfa,0xfa,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0x81,0xfb,0xfc,0xfc,0xac,0xfc,0xfb,0x81,0xfb,0xfc,0xfc,0xfc,0xfc,0xfb,0x81,
+       0x81,0x81,0xfb,0xfc,0xfc,0xfb,0x81,0xfa,0xfa,0x81,0x81,0x81,0xfc,0xfb,0xfb,0x81,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0x81,0xfb,
+       0x81,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0x81,0xfb,0x81,0x81,0x81,0x81,0xfa,0xfa,0xfa,
+       0xfa,0x81,0x81,0x81,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,
+       0x81,0xfb,0xfc,0xfb,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,
+       0xfc,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0x81,0x81,0xfb,0x81,0x81,0xfa,
+       0xfa,0x81,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfb,0xfb,0xfb,0xfc,0xfc,
+       0xfb,0xfb,0xfb,0x81,0x81,0xfa,0xfa,0x81,0xf9,0xfa,0xfa,0x81,0xfc,0xfb,0xfb,0xfb,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x81,0xfb,0xfb,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xfb,0xfb,0xfc,0xfc,0xfb,0xfb,0xfb,0x81,0x81,0xfa,0x81,
+       0xfa,0xfa,0xfa,0x81,0xfa,0x81,0xfc,0xfc,0xfb,0x81,0xfa,0xf9,0xfa,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfc,
+       0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0x81,0x81,0xfb,0xfb,0xfb,0xfb,0x81,0x81,0xfa,0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0x81,0xfb,0xfc,0xfc,0xac,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfb,
+       0xfb,0x81,0x81,0xfb,0xfb,0xfb,0xfb,0x81,0xfa,0xf9,0xfa,0xf9,0x81,0xfb,0xfb,0xfb,
+       0x81,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xfa,0x81,0x81,0x81,0x81,0x81,0xfa,0xfb,0x81,0x81,0xfb,0x81,
+       0x81,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0x81,0x81,0x81,0x81,0x81,0xfb,0x81,0x81,
+       0x81,0xfa,0x81,0xfa,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfb,0xfc,0xfb,0xfb,0x81,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x81,0xfb,0xfc,0xfc,
+       0xfc,0xfb,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xfb,0xfb,0xfb,0x81,
+       0x81,0x81,0x81,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xfb,0xfc,
+       0xfc,0xfb,0xfb,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xf9,0xfa,0xfa,0x81,0xfb,0xfb,0xfb,
+       0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfb,0xfb,0x81,0xfa,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x81,0xfb,0xfb,0xfb,0xfb,0xfb,0x81,0x81,0x81,
+       0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfc,0x81,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xab,0x80,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x81,0x81,0xfb,0xfc,0xfb,0xfb,0xfb,0x81,0xf9,0x81,0xfa,0xfa,0x81,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0x81,0x81,0xfb,0xfc,0xfc,0xfb,0x81,0xfb,0xfb,0x81,0xfb,0xfb,0xfb,
+       0xfb,0x81,0xfa,0x81,0x81,0xfa,0x81,0xfa,0x81,0x81,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfb,0x81,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0x81,0x81,0x81,0xfa,0x81,0x81,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0xfa,0x81,0xfb,0x81,0x81,0x81,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0x81,0xfb,0xfb,0xfb,0x81,0xfb,0x81,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfb,
+       0xfb,0xfc,0xfb,0x81,0x81,0xfa,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,
+       0x81,0x81,0xfb,0xfa,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0x81,
+       0xfb,0x81,0xfb,0xfc,0xfb,0x81,0x81,0x81,0xfa,0xfa,0xf9,0xfa,0xfa,0x81,0xfb,0xfc,
+       0x81,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0x81,0xfb,0xfb,0xfb,0xfb,0xfb,
+       0x81,0x81,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0xfb,0x81,0x81,0x81,0x81,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfc,0xff,0xff,0xfc,0xab,0xfc,0xaa,0xfb,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xfa,0x56,0x56,0xfa,
+       0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x81,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0x81,0x81,0x81,0x81,0x81,0xfa,0xf9,0x81,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfb,0xfb,0x81,0x81,0x81,0x81,0xfa,0xfa,0x81,0x81,
+       0x81,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x81,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0x81,0x81,0x81,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0x81,0xfa,0xfa,0x81,0xfa,0xfa,
+       0x81,0xf9,0xfa,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xfa,0xfa,0xfa,0x81,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0x81,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0x81,
+       0x81,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x81,0x81,0x81,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0x81,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0xfa,0x81,
+       0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x81,0xfa,0x81,0x81,0x81,0xfa,
+       0x81,0x81,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0x81,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xfa,0x56,0x56,0xf9,
+       0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0x81,0x81,0xfa,0xfa,0xfa,0xfa,
+       0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xfb,0xff,0xff,0xfc,0xab,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0x81,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0x81,0xf9,0xf9,0xfa,
+       0xf9,0x81,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xab,0x80,0xfb,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xfb,0xff,0xff,0xfc,0xab,0xfb,0xaa,0xfb,0xfb,0xaa,0x80,
+       0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xac,0xab,0xab,0xfb,0xab,0x80,0xfb,
+       0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0x81,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,
+       0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0xf6,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xab,
+       0xfb,0x80,0xab,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x81,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfb,0xff,0xff,0xab,0xfc,0xab,0xab,
+       0x81,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0x81,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,
+       0xab,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,
+       0xab,0xfb,0xaa,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfc,0xff,0xff,
+       0xfc,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0x81,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xfc,0xff,
+       0xff,0xab,0xfc,0xab,0xfb,0xaa,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfb,
+       0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xfa,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfc,0xff,0xff,0xac,0xfb,0xab,0xab,0xfb,0xaa,0xaa,0xfb,0xaa,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x81,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xfa,0xfa,0xfa,0x81,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xab,0xfb,0xfb,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xab,0x80,0xaa,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xaa,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,0xfb,0xaa,
+       0x81,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0xfa,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,
+       0x81,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0xf6,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xaa,0xfb,
+       0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xfa,0xfa,0x81,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,
+       0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0xf6,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xfb,
+       0xab,0xfb,0xfb,0xaa,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,
+       0x56,0xfa,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xfa,0x56,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xac,0xab,
+       0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0xf6,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0x81,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,
+       0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xfa,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xfc,
+       0xab,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,
+       0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xfc,0xff,0xff,
+       0xab,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xfc,0xff,
+       0xff,0xfc,0xab,0xab,0xfb,0xfb,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfc,
+       0xff,0xff,0xab,0xfc,0xab,0xfb,0xaa,0xfb,0xaa,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0xf9,0xfa,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xab,0x80,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x81,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0x81,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,
+       0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xaa,0xfb,0xaa,0x80,0x81,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0x56,0x56,0xf9,0xfb,0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xaa,0x81,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xfa,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xfa,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xfc,0xaa,0xfb,0xfb,0xfb,0xab,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xab,0x80,0xaa,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xfb,0xff,0xff,0xac,0xfc,0xab,0xab,0xfb,0xaa,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xfa,0x56,0xf9,
+       0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0xfa,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xaa,
+       0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0xf6,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfc,0xff,0xff,0xab,0xfc,0xfb,0xab,
+       0xfb,0x81,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0xf6,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xaa,0x81,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xac,0xab,
+       0xab,0xab,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfb,0xff,0xff,0xab,
+       0xfc,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,
+       0xab,0xfc,0xab,0xab,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xfa,0xfa,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0x81,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x81,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xfa,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfc,0xff,
+       0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,
+       0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0x80,0xfb,0x80,0x81,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x81,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0xfa,
+       0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0x81,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,0x56,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xac,0xfc,0xab,0xfb,0xfb,0xaa,0x81,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x81,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xfc,0xff,0xff,0xab,0xab,0xab,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfb,0xff,0xff,0xfc,0xfb,0xab,0xfb,0xab,0x80,0xaa,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfc,0xfb,0xfb,0xfb,0xfb,
+       0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xab,0xfb,0xaa,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x81,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xfb,0xaa,0xfb,
+       0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xfa,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0x81,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,
+       0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0xf6,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xaa,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x81,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,
+       0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,
+       0xab,0xab,0xfb,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfc,0xff,0xff,0xfc,
+       0xfc,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,
+       0xab,0xab,0xab,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfc,0xff,
+       0xff,0xfc,0xab,0xfb,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfc,
+       0xff,0xff,0xac,0xab,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x81,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0x81,0x81,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x81,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xfa,0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xfb,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xaa,0x80,0xfb,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x81,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0xfa,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xab,0x80,0xaa,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0x81,
+       0x81,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0x81,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0x80,0xfb,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0x81,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xac,0xfc,0xab,0xab,0xfb,0xaa,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0xf6,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x81,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfc,0xff,0xff,0xab,0xab,0xfb,0xaa,0xfb,
+       0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,
+       0xab,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf8,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfb,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfc,0xff,0xff,0xac,0xfc,
+       0xab,0xab,0xfb,0xaa,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xab,
+       0xab,0xfb,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,
+       0xab,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,
+       0xff,0xfc,0xab,0xfb,0xfb,0xaa,0xaa,0x81,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfb,
+       0xff,0xff,0xac,0xab,0xab,0xfb,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xfa,
+       0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xfc,0xff,0xff,0xab,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x81,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0x81,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0xfb,0x80,0xaa,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0x81,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,
+       0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0x56,0x56,0xfc,0xff,0xff,0xac,0xab,0xfb,0xab,0xfb,0x80,0xaa,0x80,0x81,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xab,0xfb,0xfb,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0x81,0xfa,0x81,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xfa,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xaa,0xfb,0xfb,0x80,0xab,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xfa,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0xaa,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,
+       0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfb,0xff,0xff,0xab,0xfc,0xab,0xfb,0xaa,0xaa,0x81,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xfb,
+       0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0xf6,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,
+       0x81,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xfb,0xab,0xab,0xfb,
+       0xaa,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfc,0xff,0xff,0xac,0xab,0xab,0xfb,
+       0xab,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x81,0xfa,0xf9,
+       0x81,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xff,0xff,0xff,0xff,0xf9,0xfa,0x56,0xff,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xff,0xf9,0xf9,0x56,0xff,0xff,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xff,0xff,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0x56,0x56,0xf9,0xff,0xff,
+       0xff,0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0xff,0xff,0xff,0x56,0xf9,0xf9,0x56,0x56,
+       0xff,0xff,0xff,0xf9,0xfa,0x56,0xff,0xff,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xff,0xff,
+       0xff,0xff,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,
+       0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0xf6,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x81,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xff,0xff,0xf9,0x56,0xf9,0xf9,0x56,0xff,0xff,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0xff,0xff,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xff,0xff,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xff,0xff,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0x56,0xf9,0xff,0xff,
+       0xf9,0xf9,0xff,0xff,0x56,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0xff,0xff,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xff,0xff,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xab,
+       0xab,0xab,0xfb,0xaa,0x81,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xff,0xff,0x56,0xf9,0x56,0x56,0xff,0xff,
+       0xff,0xff,0xff,0xf9,0x56,0xff,0xff,0xff,0xff,0xf9,0x56,0xf9,0xff,0xff,0xf9,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0x56,0xff,0xff,0x56,0x56,0xff,0xff,0x56,0xff,0xff,
+       0xf9,0xf9,0x56,0x56,0xff,0xff,0xff,0xf9,0xff,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xff,
+       0xff,0xff,0xfa,0xfa,0xfa,0xf9,0xff,0xff,0xff,0xf9,0xf9,0xf9,0xff,0xff,0xff,0xff,
+       0xfa,0xf9,0xfa,0xfa,0xff,0xff,0xff,0xff,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xff,0xff,
+       0x56,0xf9,0x56,0x56,0xff,0xff,0xf9,0xf9,0xff,0xff,0xf9,0x56,0xf9,0x56,0x56,0xfa,
+       0x56,0x56,0xfa,0x56,0xff,0xff,0xf9,0xff,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xff,
+       0xff,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xff,0xff,0xff,0xff,0xf9,0xf9,0xf9,0xff,0xff,
+       0xf9,0xff,0xff,0xff,0xff,0x56,0xf9,0x56,0xff,0xff,0xf9,0xf9,0xff,0xff,0xff,0xff,
+       0x56,0x56,0x56,0xff,0xff,0x56,0xff,0xff,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,
+       0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,
+       0xfc,0xfb,0xaa,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xff,0xff,0xff,0xf9,0xfa,0xf9,0x56,
+       0xff,0xff,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xff,0xff,0xf9,0x56,0xff,0xff,0xff,
+       0xff,0xff,0xf9,0xff,0xff,0xfa,0xf9,0x56,0xff,0xff,0x56,0xf9,0xff,0xff,0xff,0xf9,
+       0xff,0xff,0x56,0x56,0xff,0xff,0xfa,0xf9,0xff,0xff,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,
+       0xff,0xff,0xff,0xf9,0xf9,0xf9,0xf9,0xff,0xff,0xff,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xff,0xff,0xf9,0xfa,0xff,0xff,0xf9,0xfa,0xff,0xfa,0x81,0xfa,0xfa,0xf9,0xfa,0xff,
+       0xff,0xf9,0xf9,0xf9,0xf9,0xff,0xff,0xf9,0x56,0xff,0xff,0xff,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xff,0xff,0xff,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0xff,0xff,0xff,0x56,0xf9,0x56,0xf9,0xff,0xff,0xf9,0x56,0xff,0xff,0x56,0x56,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xf9,0xfa,0xff,0xff,0xf9,0xff,0xff,0xf9,0x56,
+       0xff,0xff,0x56,0xfa,0xff,0xff,0xff,0xff,0xff,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,
+       0xfc,0xab,0xab,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xff,0xff,0xff,0x56,0x56,
+       0xf9,0xff,0xff,0x56,0x56,0xfa,0xf9,0xff,0xff,0xff,0xff,0xff,0xf9,0x56,0xff,0xff,
+       0xf9,0x56,0x56,0xfa,0xff,0xff,0x56,0xf9,0xfa,0xff,0xff,0xf9,0x56,0xff,0xff,0xf9,
+       0x56,0xff,0xff,0xf9,0xf9,0xff,0xff,0x56,0x56,0xff,0xff,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xff,0xfa,0xff,0xff,0xfa,0xfa,0xff,0xfa,0xff,0xff,0xfa,0xfa,0xfa,0xff,0xff,
+       0xff,0xff,0xff,0xf9,0xfa,0xff,0xff,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xff,0xff,0x56,0xfa,0xfa,0xf9,0xff,0xff,0x56,0x56,0xf9,0xff,0xff,0xff,0xfa,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0xff,0xff,0xff,0x56,0x56,0x56,0xff,0xff,0xf9,0xf9,0xff,0xff,0xf9,0x56,
+       0xff,0xff,0xfa,0xf9,0xfa,0xf9,0xff,0xff,0xf9,0xf9,0xff,0xf9,0x56,0xff,0xff,0x56,
+       0xf9,0xff,0xff,0xf9,0xf9,0xff,0xff,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfc,0xff,
+       0xff,0xab,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0x81,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xff,0xff,0xff,
+       0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xff,0xff,0xf9,0x56,0xff,
+       0xff,0xf9,0x56,0xf9,0xf9,0xff,0xff,0x56,0xf9,0xf9,0xff,0xff,0x56,0xf9,0xff,0xff,
+       0x56,0xf9,0xff,0xff,0xfa,0x56,0xff,0xff,0x56,0xfa,0xff,0xff,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xff,0xfa,0xff,0xff,0xf9,0xfa,0xff,0xf9,0xff,0xff,0xf9,0xfa,0xff,0xff,
+       0xf9,0xfa,0xff,0xff,0xf9,0xfa,0xff,0xff,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xff,0xff,0xfa,0xfa,0xf9,0xf9,0xff,0xff,0xfa,0xf9,0xf9,0xf9,0xff,0xff,0xff,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xff,0xff,0xff,0xff,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0x56,0xff,0xff,0xff,0xfa,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,
+       0x56,0xff,0xff,0x56,0x56,0x56,0x56,0xff,0xff,0xf9,0xff,0xff,0xfa,0x56,0xff,0xff,
+       0xff,0xff,0xff,0xff,0x56,0x56,0xff,0xff,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfc,
+       0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,
+       0xff,0x56,0x56,0xff,0xff,0xf9,0xf9,0x56,0xff,0xff,0xf9,0xf9,0xff,0xff,0xf9,0xfa,
+       0xff,0xff,0x56,0x56,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0x56,0xff,0xff,0x56,0x56,0xff,
+       0xff,0xf9,0xfa,0xff,0xff,0xf9,0xf9,0xff,0xff,0x56,0xf9,0xff,0xff,0xfa,0x56,0xf9,
+       0xfa,0xfa,0xf9,0xff,0xf9,0xf9,0xff,0xff,0xff,0xf9,0xf9,0xff,0xff,0xf9,0xf9,0xff,
+       0xff,0xf9,0xfa,0xff,0xff,0xf9,0xfa,0xff,0xff,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xff,0xff,0xfa,0xf9,0x56,0xf9,0xff,0xff,0xf9,0xf9,0xf9,0xf9,0xfa,0xff,
+       0xff,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xff,0x56,0xff,0xff,0x56,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xff,0xff,0xf9,0x56,0xff,0xff,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xff,0xff,0x56,0x56,0xf9,0x56,0xf9,0xff,0xff,0xff,0x56,0xfa,0xf9,0xff,
+       0xff,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xff,0xff,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfc,0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xff,0xff,0x56,0x56,0xff,0xff,0x56,0x56,0x56,0xff,0xff,0x56,0xff,0xff,0xff,0xf9,
+       0x56,0xff,0xff,0x56,0xf9,0xfa,0x56,0xff,0xff,0x56,0x56,0xf9,0xff,0xff,0xf9,0xf9,
+       0xff,0xff,0xf9,0xf9,0xff,0xff,0xfa,0x56,0xff,0xff,0xf9,0xff,0xff,0xff,0xfa,0x56,
+       0x56,0xfa,0xfa,0xf9,0xff,0xfa,0xfa,0xff,0xff,0xff,0xfa,0xfa,0xff,0xff,0xfa,0xfa,
+       0xff,0xff,0xfa,0xff,0xff,0xff,0xfa,0xfa,0xff,0xff,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xff,0xff,0xf9,0xfa,0xff,0xff,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xff,0xff,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xff,0xff,0xf9,0xf9,0xff,0xff,0xfa,0x56,
+       0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xff,0xff,0xfa,0x56,0xff,0xff,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xff,0xff,0xf9,0xf9,0xf9,0xfa,0xf9,0xff,0xff,0xff,0xf9,0xf9,0x56,
+       0xff,0xff,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xff,0xff,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xff,0xff,
+       0xff,0xff,0x56,0xf9,0xf9,0xf9,0xff,0xff,0xff,0x56,0x56,0xff,0xff,0x56,0xff,0xff,
+       0x56,0x56,0xff,0xff,0x56,0xfa,0x56,0x56,0xfa,0xff,0xff,0xff,0xf9,0xff,0xff,0x56,
+       0xf9,0xff,0xff,0xfa,0xf9,0xff,0xff,0xf9,0xf9,0xf9,0xff,0xff,0xf9,0xff,0xff,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xff,0x81,0xf9,0xf9,0xff,0xfa,0xfa,0xf9,0xff,0xff,0xfa,
+       0xf9,0xf9,0xff,0xff,0xfa,0xff,0xff,0xfa,0xfa,0xfa,0xff,0xff,0xff,0xff,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xff,0xff,0xff,0xff,0xf9,0xf9,0xfa,0xf9,0xff,0xff,
+       0xff,0xff,0x56,0xfa,0x56,0x56,0xfa,0xf9,0xff,0xff,0xf9,0xfa,0xf9,0xff,0xff,0xff,
+       0x56,0xfa,0xf9,0x56,0xf9,0xff,0xff,0xff,0xff,0xf9,0xf9,0xf9,0xf9,0xff,0xff,0xff,
+       0xff,0xff,0x56,0x56,0xff,0xff,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xff,0xf9,0x56,0xf9,
+       0x56,0xf9,0xff,0xff,0xff,0xff,0xff,0xf9,0xf9,0xff,0xff,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,
+       0x56,0xfa,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xab,0xfb,0x80,0xfb,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xff,0xff,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,
+       0x56,0x56,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0x81,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xff,0xff,0xff,0xff,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xab,0x81,0xaa,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0x81,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x81,0xfa,0x81,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0x80,
+       0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xfa,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xfa,0x56,0xfa,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xfa,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xfb,0xfb,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x81,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfb,0xff,0xff,0xac,0xfc,0xab,0xab,0xaa,0xfb,
+       0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0xf6,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xfb,
+       0x80,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,
+       0xaa,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0x81,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xfa,0xf9,0xfa,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xfa,0x56,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xfc,0xff,0xff,0xfc,0xab,
+       0xab,0xab,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xfa,0x56,0xfc,0xff,0xff,0xab,
+       0xfb,0xab,0xfb,0xab,0x81,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x81,0x81,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xfc,0xff,0xff,
+       0xfc,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfc,0xff,
+       0xff,0xab,0xfc,0xab,0xfb,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,
+       0xfa,0xf9,0x56,0xfa,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xfa,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfc,
+       0xff,0xff,0xab,0xab,0xab,0xab,0xaa,0xfb,0xaa,0x80,0x81,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xfb,0x80,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xfc,0xff,0xff,0xab,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0x80,0xaa,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0x81,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0xfa,0x56,0xfb,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x80,0xaa,0xfa,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0x81,0x81,
+       0xf9,0xf9,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xfc,0xff,0xff,0xac,0xfc,0xab,0xfb,0xfb,0xfb,0xfb,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0x56,
+       0xfa,0x56,0xf9,0x56,0x56,0x56,0xfa,0xfa,0x56,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,
+       0x56,0xfa,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xfa,0x56,0xf9,0x56,0x56,0x56,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xfa,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xfa,
+       0x56,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xfc,0xff,0xff,0xab,0xab,0xab,0xab,0xab,0x80,0xaa,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xfb,0xab,0xfb,0xfb,0xfb,0xfb,0x80,
+       0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0x81,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0x56,
+       0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xfa,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xab,0xab,0xfb,0xaa,0xaa,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0x81,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xfa,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xfc,0xab,0xfb,0xfb,0xfb,
+       0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,0xab,0xab,
+       0x80,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,
+       0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xfa,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,
+       0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,
+       0xfb,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0x2b,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xaa,0xaa,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xfa,0x56,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,
+       0xab,0xfb,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0xf6,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0x81,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0x81,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0xfa,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfb,0xff,0xff,0xfc,
+       0xab,0xfb,0xab,0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,0x56,0xfc,0xff,0xff,
+       0xab,0xfc,0xab,0xab,0xfb,0xfb,0x80,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xfa,0x56,
+       0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0xfa,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,
+       0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfc,0xff,
+       0xff,0xfc,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xfa,0xf9,0x56,0x81,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfc,
+       0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0x81,0xf9,0xfa,0x81,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0x81,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xfa,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xfa,0xf9,
+       0xfc,0xff,0xff,0xfc,0xab,0xab,0xab,0xaa,0xfb,0xfb,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0x56,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xfa,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,
+       0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xf6,0x56,0x56,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,
+       0xf9,0xf9,0xfa,0xfa,0x81,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0xaa,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x81,0xfa,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0x56,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xfa,0x81,0x81,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xfa,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xaa,0xfb,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,
+       0xfa,0xfa,0x81,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,
+       0xfa,0xfa,0xfa,0x81,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf8,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xaa,0xfb,0xaa,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,
+       0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xfa,
+       0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0x81,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xfa,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,0xfb,0xaa,0xfb,0x80,
+       0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x2b,
+       0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xfa,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x81,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,
+       0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,
+       0x56,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,
+       0xf9,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,0xfb,0xfb,
+       0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,
+       0x2b,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xf9,0x81,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,0xfa,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0x81,0xfa,0x81,
+       0xfa,0xfa,0x81,0xf9,0xfa,0xf9,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf8,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0x56,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,
+       0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,
+       0xf9,0x56,0xfa,0xf9,0x56,0xfa,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0xfa,0xf9,0xf9,0xfa,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xfc,0xff,0xff,0xfc,0xab,0xab,0xab,0xfb,
+       0xaa,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xff,0x2b,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xfa,0xf9,0x81,0xfa,0xf9,0xfa,0xf9,0xf9,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xfa,0xf9,0x56,
+       0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0x56,0x56,0xfa,0xf9,
+       0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xfa,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfa,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0x56,0xfa,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xfc,0xff,0xff,0xab,0xfc,0xab,0xfb,
+       0xaa,0xfb,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0xff,0xf6,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0x56,0x56,
+       0x56,0x56,0xf9,0xfa,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xfa,0xfa,0xf9,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xf9,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0xf9,0xfa,0xfa,0xf9,0xf9,0x81,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,
+       0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0x56,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xfc,0xab,0xab,
+       0xfb,0xfb,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xff,0x2b,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+       0xfa,0xfa,0xf9,0xf9,0x81,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0xf9,0xfa,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xfa,0x56,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,
+       0xfa,0xf9,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0x56,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0x56,0x56,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0xf9,0x56,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0x56,0x56,0x56,0x56,0x56,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfc,0xff,0xff,0xab,0xfc,
+       0xab,0xab,0xfb,0xfb,0xfb,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0xff,0x2b,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0xfa,
+       0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0xf9,0xfa,0x81,0xfa,0xf9,0xfa,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,
+       0xfa,0xfa,0xf9,0xf9,0x56,0x56,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xfa,0x56,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,
+       0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0x56,0xf9,0x56,
+       0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0xfa,0xfa,0x81,0xfa,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0x56,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0xfa,0xf9,
+       0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,
+       0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xfa,
+       0xfa,0x56,0x56,0x56,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,
+       0xf9,0x56,0x56,0xfa,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0x56,0xfa,0x56,0xf9,0x56,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,
+       0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xfa,0xf9,
+       0xf9,0xf9,0x56,0xfa,0xf9,0x56,0x56,0x56,0x56,0xf9,0xf9,0x56,0xfb,0xff,0xff,0xfc,
+       0xab,0xab,0xfb,0xaa,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xff,0x2b,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0xfa,0xf9,0xfa,0x56,0x56,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0xfa,0xf9,0xfa,0xfa,0xf9,0xf9,0xf9,
+       0xfa,0xf9,0xf9,0xfa,0xfa,0xfa,0xf9,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,
+       0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0x56,
+       0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,
+       0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,
+       0xfa,0xfa,0xfa,0xfa,0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,0x56,0x56,
+       0xf9,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0x56,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,
+       0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,
+       0xfa,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0xfa,0xf9,
+       0xf9,0x56,0xf9,0x56,0x56,0x56,0xf9,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,
+       0xf9,0x56,0x56,0x56,0xf9,0x56,0x56,0xf9,0x56,0xf9,0xfa,0x56,0x56,0xf9,0xf9,0x56,
+       0xf9,0xf9,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,0xfa,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0x56,0xf9,0xf9,0x56,0x56,0xf9,0xf9,0xf9,0xf9,0x56,0xf9,0xf9,0xf9,
+       0xf9,0x56,0x56,0xf9,0x56,0xf9,0xf9,0xfa,0xf9,0xf9,0xf9,0x56,0xf9,0x56,0x56,0xf9,
+       0xf9,0xf9,0xf9,0x56,0x56,0xfa,0xf9,0xf9,0x56,0xf9,0xfa,0xf9,0x56,0xf9,0xf9,0x56,
+       0x56,0xf9,0x56,0xf9,0xf9,0x56,0x56,0x56,0xf9,0x56,0xf9,0xf9,0x56,0xfc,0xff,0xff,
+       0xab,0xab,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xff,0xf9,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xac,0xfc,0xac,0xfc,0xac,0xfc,0xac,0xfc,0xfc,0xfc,0xfc,0xac,
+       0xac,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xac,0xac,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xac,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfb,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfb,0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,
+       0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfc,0xfb,0xfc,0xfc,0xfc,
+       0xfc,0xfc,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xff,
+       0xff,0xfc,0xfc,0xab,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xfc,0xab,0xfb,0xab,0xfb,0x80,0x81,0x80,0xaa,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+       0xff,0xff,0xff,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0xaa,
+       0x81,0xaa,0xfb,0xfb,0xfb,0xab,0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xab,
+       0xab,0xfc,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xac,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xfc,0xab,
+       0xfc,0xab,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xfc,0xab,0xfc,
+       0xab,0xfc,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xab,
+       0xfc,0xab,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xfc,0xab,0xab,0xac,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xac,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xab,0xfc,
+       0xac,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xac,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xab,0xfc,
+       0xac,0xab,0xab,0xfc,0xac,0xab,0xfc,0xac,0xab,0xab,0xfc,0xab,0xab,0xfc,0xac,0xab,
+       0xab,0xfc,0xfc,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xab,0xfc,
+       0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xac,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xac,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xab,0xfc,0xac,0xab,
+       0xab,0xfc,0xac,0xab,0xfc,0xac,0xab,0xab,0xfc,0xab,0xab,0xfc,0xac,0xab,0xab,0xfc,
+       0xfc,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xac,0xab,0xab,0xfc,0xfc,0xab,
+       0xfc,0xab,0xab,0xfc,0xab,0xfc,0xac,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xfb,0xab,0xfb,0xfb,0x80,0x80,0xaa,0x81,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,
+       0x80,0xfb,0xfb,0x80,0xaa,0xfb,0xab,0xfb,0xfb,0xab,0xab,0xfb,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xab,0xfc,0xab,
+       0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xfc,0xab,
+       0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xfc,0xab,
+       0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xab,0xab,0xfc,
+       0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,
+       0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xab,0xfc,0xab,0xfb,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xfc,0xfc,0xab,
+       0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,
+       0xab,0xab,0xfc,0xfc,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xab,0xfb,0xab,0xab,0xab,0xfc,
+       0xab,0xfc,0xfc,0xab,0xab,0xab,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfb,0xab,
+       0xfc,0xab,0xfc,0xab,0xab,0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,
+       0xab,0xab,0xfb,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfb,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xab,0xab,0xfc,0xab,0xfc,
+       0xfc,0xab,0xab,0xab,0xab,0xfc,0xab,0xfc,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xab,0xfc,0xab,0xab,0xfc,0xfc,0xab,0xfc,0xab,0xfb,0xab,0xfc,0xab,
+       0xfc,0xab,0xab,0xab,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfc,0xab,0xab,
+       0xfb,0xab,0xfc,0xab,0xfc,0xab,0xab,0xfc,0xab,0xfb,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,0xfc,0xfc,0xab,0xfc,0xab,0xfc,0xab,0xfc,
+       0xab,0xab,0xfc,0xab,0xab,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xaa,0x80,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xfb,
+       0xab,0xab,0xab,0xfb,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,
+       0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,
+       0xab,0xab,0xab,0xfc,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xfb,0xab,0xfc,0xab,0xfb,
+       0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xfb,
+       0xab,0xfb,0xab,0xab,0xfb,0xab,0xab,0xfb,0xfc,0xab,0xab,0xab,0xfb,0xab,0xab,0xfb,
+       0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xfc,0xab,0xab,0xab,0xab,
+       0xfb,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xfc,0xab,0xfb,
+       0xab,0xab,0xab,0xab,0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xfb,
+       0xab,0xab,0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xab,0xab,0xfb,0xab,0xfc,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,
+       0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xfc,0xab,0xfb,0xab,0xab,
+       0xab,0xab,0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xab,0xfb,0xab,0xab,0xfb,0xab,0xab,
+       0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xfb,0xab,0xfc,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xab,0xfb,0xab,0xab,0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xfb,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+       0xab,0xab,0xfb,0xab,0xfb,0xab,0xaa,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xfb,0x80,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xab,
+       0xfb,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,
+       0xaa,0xfb,0xfb,0xab,0xaa,0xab,0xfb,0xab,0xaa,0xfb,0xfb,0xfb,0xab,0xab,0xfb,0xab,
+       0xfb,0xfb,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xfb,0xfb,0xab,0xfb,0xaa,0xfb,0xfb,
+       0xaa,0xfb,0xfb,0xfb,0xaa,0xab,0xfb,0xab,0xaa,0xfb,0xfb,0xab,0xaa,0xfb,0xab,0xfb,
+       0xab,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xab,0xfb,0xab,0xfb,0xab,
+       0xaa,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xfb,0xab,0xaa,0xfb,0xab,0xfb,0xaa,0xfb,0xfb,
+       0xab,0xab,0xfb,0xab,0xaa,0xfb,0xfb,0xfb,0xab,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xfb,
+       0xaa,0xfb,0xab,0xfb,0xab,0xab,0xfb,0xfb,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0xab,
+       0xfb,0xab,0xfb,0xab,0xaa,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0xab,
+       0xaa,0xab,0xfb,0xab,0xfb,0xfb,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,
+       0xaa,0xfb,0xfb,0xab,0xaa,0xab,0xfb,0xfb,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xfb,0xfb,
+       0xab,0xfb,0xfb,0xab,0xaa,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xab,
+       0xfb,0xfb,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,
+       0xab,0xfb,0xfb,0xfb,0xab,0xab,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xfb,0xab,0xaa,0xab,
+       0xfb,0xab,0xfb,0xfb,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xaa,0xfb,
+       0xfb,0xab,0xaa,0xab,0xfb,0xfb,0xab,0xfb,0xab,0xfb,0xaa,0xfb,0xfb,0xfb,0xab,0xfb,
+       0xfb,0xab,0xaa,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xfb,
+       0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xab,0xfb,
+       0xfb,0xfb,0xab,0xab,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xab,0xfb,
+       0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xfb,0x80,0xab,0x80,0x80,0x81,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,
+       0xfb,0xab,0xaa,0xfb,0xfb,0xab,0xaa,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,
+       0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xab,0xfb,0xfb,
+       0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xab,0xaa,0xfb,0xfb,0xab,0xfb,0xab,
+       0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xab,0xfb,
+       0xaa,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,
+       0xfb,0xfb,0xfb,0xfb,0xfb,0xab,0xfb,0xab,0xfb,0xab,0xfb,0xfb,0xfb,0xab,0xfb,0xab,
+       0xfb,0xab,0x81,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xab,
+       0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xab,0xfb,0xaa,0xfb,0xfb,0xab,0xfb,
+       0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xab,0xfb,
+       0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,
+       0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xab,0xfb,0xfb,0xaa,
+       0xfb,0xfb,0xab,0xfb,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xab,0xfb,0xfb,
+       0xaa,0xfb,0xaa,0xfb,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xab,0xfb,0xaa,
+       0xfb,0xab,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,
+       0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,
+       0xab,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,
+       0xab,0xfb,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,
+       0xaa,0xfb,0xfb,0xab,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xab,0xfb,0xaa,0xfb,0xab,
+       0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,
+       0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0x81,0xfb,0xaa,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xaa,0x80,0xaa,0xfb,
+       0x80,0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0xfb,
+       0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xaa,0x80,0xfb,
+       0xaa,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xfb,
+       0xaa,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0x80,
+       0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0xfb,0xaa,
+       0xfb,0xaa,0x81,0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xfb,
+       0x80,0xaa,0xfb,0xaa,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xab,0x80,
+       0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0x80,0xfb,0xfb,0xaa,0xfb,0x80,
+       0xfb,0xaa,0xfb,0x81,0xaa,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xfb,0xfb,0xaa,0xfb,0x80,
+       0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xab,
+       0x80,0xaa,0xfb,0x80,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xfb,0xfb,0xfb,
+       0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0x80,0xaa,0x81,0xaa,
+       0xfb,0xfb,0x80,0xfb,0xfb,0xaa,0x81,0xaa,0xfb,0xfb,0x80,0xaa,0xfb,0xfb,0x80,0xfb,
+       0xaa,0xfb,0x80,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,
+       0xfb,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xab,0x80,0xaa,
+       0xfb,0x80,0xfb,0xaa,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xfb,0xfb,0xfb,0xaa,0xfb,
+       0xaa,0x80,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0x80,0xaa,0x81,0xaa,0xfb,0xfb,
+       0x80,0xfb,0xfb,0xaa,0x81,0xaa,0xfb,0xfb,0x80,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0xfb,
+       0x80,0xfb,0xaa,0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0xfb,0xfb,0xaa,0xfb,0xaa,0xfb,0xfb,
+       0xaa,0xfb,0xaa,0xfb,0xfb,0xfb,0xfb,0xaa,0xfb,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0xfb,0x80,0xaa,0x81,0xfb,0xfb,
+       0xfb,0xaa,0xfb,0xaa,0xfb,0x80,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,
+       0xaa,0x80,0x80,0xfb,0xfb,0xaa,0x81,0xfb,0xaa,0x80,0xfb,0x80,0xfb,0x80,0xfb,0xfb,
+       0xaa,0x80,0xfb,0xfb,0x80,0xfb,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xaa,0xfb,
+       0xfb,0x80,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0xaa,0x80,0x80,0xfb,0xfb,0xaa,0x81,0xfb,
+       0xaa,0x80,0xfb,0xfb,0x80,0xfb,0xfb,0xaa,0xfb,0x80,0xfb,0xfb,0xaa,0x81,0xaa,0x80,
+       0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xfb,0xfb,0xfb,0x80,0xfb,0xaa,0xfb,0x80,0xaa,0xfb,
+       0xaa,0xfb,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0xaa,0x81,0xfb,0x80,0x80,
+       0xfb,0xaa,0x81,0xfb,0x80,0xaa,0x80,0xaa,0xfb,0xfb,0xaa,0xfb,0xfb,0xaa,0x81,0xfb,
+       0xaa,0xfb,0x80,0xfb,0xaa,0x81,0x80,0xfb,0x80,0xfb,0xfb,0xaa,0xfb,0xaa,0x81,0xfb,
+       0xaa,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0xfb,0x80,0xaa,0xfb,
+       0x80,0xfb,0xfb,0xfb,0xaa,0xfb,0xfb,0x80,0xaa,0x81,0x80,0xfb,0xfb,0xaa,0xfb,0x80,
+       0xaa,0x81,0x80,0xfb,0xfb,0xaa,0x81,0xfb,0x80,0xaa,0x80,0xaa,0xfb,0xfb,0xfb,0xaa,
+       0xfb,0x80,0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0x80,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,
+       0xfb,0x80,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0xfb,
+       0x80,0xfb,0xaa,0x80,0xfb,0xfb,0xfb,0xaa,0x80,0xfb,0xfb,0x80,0xaa,0xfb,0x80,0xfb,
+       0xfb,0xfb,0xaa,0xfb,0xfb,0x80,0xaa,0x81,0x80,0xfb,0xfb,0xaa,0xfb,0x80,0xaa,0x81,
+       0x80,0xfb,0xfb,0xaa,0x81,0xfb,0x80,0xaa,0x80,0xaa,0xfb,0xfb,0xfb,0xaa,0xfb,0x80,
+       0xaa,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0x80,0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0xfb,0x80,
+       0xaa,0xfb,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0xaa,0xfb,0xaa,0x80,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xfb,0xaa,0x80,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0xaa,0x81,0x80,0x80,
+       0xaa,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0xfb,0xfb,0xaa,0x80,0x80,0x80,0xaa,0x80,0xfb,0x80,0xaa,0xfb,0x80,0xaa,
+       0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0xfb,0xaa,0x80,0x80,0xfb,
+       0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0xfb,0x80,0x81,
+       0xfb,0xaa,0x80,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0x80,0x80,0xab,0x80,0xaa,0x80,0xfb,0xaa,0x80,0x80,0xfb,0x80,0x80,0xfb,
+       0xaa,0x80,0x81,0xaa,0x80,0xfb,0x80,0xfb,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,
+       0xab,0x80,0x80,0xfb,0xaa,0x80,0xfb,0xaa,0x80,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,
+       0xaa,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xaa,0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,
+       0xfb,0xaa,0x80,0x80,0xaa,0x80,0x80,0x80,0xfb,0x80,0xfb,0xaa,0x81,0x80,0x80,0x80,
+       0xab,0x80,0xfb,0xaa,0xfb,0x80,0x80,0xaa,0x80,0xfb,0x80,0xfb,0xfb,0x80,0x80,0x80,
+       0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,
+       0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,
+       0xfb,0x80,0xaa,0x80,0xfb,0x80,0xaa,0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,0xfb,0xaa,
+       0x80,0x80,0xaa,0x80,0x80,0x80,0xfb,0x80,0xfb,0xaa,0x81,0x80,0x80,0x80,0xab,0x80,
+       0xfb,0xaa,0xfb,0x80,0x80,0xaa,0x80,0xfb,0x80,0xfb,0xfb,0x80,0x80,0x80,0xfb,0x80,
+       0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,
+       0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xfb,0xaa,
+       0x80,0xaa,0x81,0xaa,0x80,0xfb,0xaa,0xfb,0x80,0xfb,0xaa,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xaa,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xaa,0x81,0x80,0x80,0x80,0xfb,0x80,0xaa,0x80,
+       0xfb,0x80,0x80,0x81,0x80,0xaa,0x80,0x80,0x80,0x80,0xaa,0x80,0x80,0x80,0xfb,0x80,
+       0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x81,0x80,0x80,0xaa,0x80,0xfb,0x80,0xaa,
+       0x80,0x80,0x80,0xfb,0x80,0x80,0xaa,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,
+       0xfb,0x80,0xaa,0x81,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0xfb,0x80,0xaa,0x80,0xfb,
+       0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0xaa,0x80,0xfb,0x80,0x80,0xaa,0x81,
+       0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xaa,0x81,0x80,0x80,0xfb,
+       0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0xfb,0xaa,0x80,
+       0xfb,0x80,0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0xaa,0x81,
+       0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0xaa,0x80,0xfb,
+       0x80,0x80,0xaa,0x80,0xfb,0x80,0x80,0xaa,0x80,0x80,0x80,0xaa,0x81,0x80,0xaa,0xfa,
+       0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,
+       0xaa,0x80,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0xfb,0xaa,0x80,0xfb,0x80,
+       0x80,0xfb,0x80,0xfb,0x80,0xfb,0x80,0xaa,0x80,0x80,0x80,0x80,0xaa,0x81,0x80,0x80,
+       0xfb,0x80,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0xaa,0x80,0xfb,0x80,0x80,
+       0xaa,0x80,0xfb,0x80,0x80,0xaa,0x80,0x80,0x80,0xaa,0x81,0x80,0xaa,0xfa,0xfb,0x80,
+       0xaa,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xaa,0x80,0xfb,0x80,0x80,0x80,0xaa,0x80,
+       0x80,0x81,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,
+       0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,
+       0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,0xfb,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0xfb,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0xfb,
+       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+       0x80,0x80,0x80,0x80,0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xfb,0x80,
+       0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,0xfb,0x80,0xfb,0x80,0x80,0xfb,0x80,0x80,0x80,
+       0x80,0xfb,0x80,0x80,0x80,0x80,0x80,0x80,
+
+};
+
+  
diff --git a/bootx.tproj/sl.subproj/macho.c b/bootx.tproj/sl.subproj/macho.c
new file mode 100644 (file)
index 0000000..b2ef134
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  macho.c - Functions for decoding a Mach-o Kernel.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <mach-o/fat.h>
+#include <mach-o/loader.h>
+#include <mach/machine/thread_status.h>
+
+#include <sl.h>
+
+static long DecodeSegment(long cmdBase);
+static long DecodeUnixThread(long cmdBase);
+static long DecodeSymbolTable(long cmdBase);
+
+static long gPPCOffset;
+
+// Public Functions
+
+long DecodeMachO(void)
+{
+  struct fat_header  *fH;
+  struct fat_arch    *fA;
+  struct mach_header *mH;
+  long   ncmds, cmdBase, cmd, cmdsize, headerBase, headerAddr, headerSize;
+  long   cnt, ret;
+  
+  // Test for a fat header.
+  fH = (struct fat_header *)kLoadAddr;
+  if (fH->magic == FAT_MAGIC) {
+    fA = (struct fat_arch *)(kLoadAddr + sizeof(struct fat_header));
+    // see if the there is one for PPC.
+    for (cnt = 0; cnt < fH->nfat_arch; cnt++) {
+      if (fA[cnt].cputype == CPU_TYPE_POWERPC) {
+       gPPCOffset = fA[cnt].offset;
+      }
+    }
+  }
+  
+  // offset will be the start of the 
+  headerBase = kLoadAddr + gPPCOffset;
+  cmdBase = headerBase+ sizeof(struct mach_header);
+  
+  mH = (struct mach_header *)(headerBase);
+  if (mH->magic != MH_MAGIC) return -1;
+  
+#if 0
+  printf("magic:      %x\n", mH->magic);
+  printf("cputype:    %x\n", mH->cputype);
+  printf("cpusubtype: %x\n", mH->cpusubtype);
+  printf("filetype:   %x\n", mH->filetype);
+  printf("ncmds:      %x\n", mH->ncmds);
+  printf("sizeofcmds: %x\n", mH->sizeofcmds);
+  printf("flags:      %x\n", mH->flags);
+#endif
+  
+  ncmds = mH->ncmds;
+  
+  for (cnt = 0; cnt < ncmds; cnt++) {
+    cmd = ((long *)cmdBase)[0];
+    cmdsize = ((long *)cmdBase)[1];
+    
+    switch (cmd) {
+      
+    case LC_SEGMENT:
+      ret = DecodeSegment(cmdBase);
+      break;
+      
+    case LC_UNIXTHREAD:
+      ret = DecodeUnixThread(cmdBase);
+      break;
+      
+    case LC_SYMTAB:
+      ret = DecodeSymbolTable(cmdBase);
+      break;
+      
+    default:
+      printf("Ignoring cmd type %d.\n", cmd);
+      break;
+    }
+    
+    if (ret != 0) return -1;
+    
+    cmdBase += cmdsize;
+  }
+  
+  // Save the mach-o header.
+  headerSize = cmdBase - headerBase;
+  headerAddr = AllocateKernelMemory(headerSize);
+  bcopy((char *)headerBase, (char *)headerAddr, headerSize);
+  
+  // Add the Mach-o header to the memory-map.
+  AllocateMemoryRange("Kernel-__HEADER", headerAddr, headerSize);
+  
+  return ret;
+}
+
+// Private Functions
+
+static long DecodeSegment(long cmdBase)
+{
+  struct segment_command *segCmd;
+  char   rangeName[32];
+  char   *vmaddr, *fileaddr;
+  long   vmsize, filesize;
+  
+  segCmd = (struct segment_command *)cmdBase;
+  
+  vmaddr = (char *)segCmd->vmaddr;
+  vmsize = segCmd->vmsize;
+  
+  fileaddr = (char *)(kLoadAddr + gPPCOffset + segCmd->fileoff);
+  filesize = segCmd->filesize;
+  
+#if 0
+  printf("segname: %s, vmaddr: %x, vmsize: %x, fileoff: %x, filesize: %x, nsects: %d, flags: %x.\n",
+        segCmd->segname, vmaddr, vmsize, fileaddr, filesize,
+        segCmd->nsects, segCmd->flags);
+#endif
+  
+  // Add the Segment to the memory-map.
+  sprintf(rangeName, "Kernel-%s", segCmd->segname);
+  AllocateMemoryRange(rangeName, (long)vmaddr, vmsize);
+  
+  // Handle special segments first.
+  
+  // If it is the vectors, save them in their special place.
+  if ((strcmp(segCmd->segname, "__VECTORS") == 0) &&
+      ((long)vmaddr < (kVectorAddr + kVectorSize)) &&
+      (vmsize != 0) && (filesize != 0)) {
+    
+    // Copy the first part into the save area.
+    bcopy(fileaddr, gVectorSaveAddr,
+         (filesize <= kVectorSize) ? filesize : kVectorSize);
+    
+    // Copy the rest into memory.
+    if (filesize > kVectorSize)
+      bcopy(fileaddr + kVectorSize, (char *)kVectorSize,
+           filesize - kVectorSize);
+    
+    return 0;
+  }
+  
+  // It is nothing special, so do the usual. Only copy sections
+  // that have a filesize.  Others are handle by the original bzero.
+  if (filesize != 0) {
+    bcopy(fileaddr, vmaddr, filesize);
+  }
+  
+  // Adjust the last address used by the kernel
+  if ((long)vmaddr + vmsize > AllocateKernelMemory(0)) {
+    AllocateKernelMemory((long)vmaddr + vmsize - AllocateKernelMemory(0));
+  }
+  
+  return 0;
+}
+
+
+static long DecodeUnixThread(long cmdBase)
+{
+  struct ppc_thread_state *ppcThreadState;
+  
+  // The PPC Thread State starts after the thread command stuct plus,
+  // 2 longs for the flaver an num longs.
+  ppcThreadState = (struct ppc_thread_state *)
+    (cmdBase + sizeof(struct thread_command) + 8);
+  
+  gKernelEntryPoint = ppcThreadState->srr0;
+  
+#if 0
+  printf("gKernelEntryPoint = %x\n", gKernelEntryPoint);
+#endif
+  
+  return 0;
+}
+
+
+static long DecodeSymbolTable(long cmdBase)
+{
+  struct symtab_command *symTab, *symTableSave;
+  long   tmpAddr, symsSize, totalSize;
+  
+  symTab = (struct symtab_command *)cmdBase;
+  
+#if 0
+  printf("symoff: %x, nsyms: %x, stroff: %x, strsize: %x\n",
+        symTab->symoff, symTab->nsyms, symTab->stroff, symTab->strsize);
+#endif
+  
+  symsSize = symTab->stroff - symTab->symoff;
+  totalSize = symsSize + symTab->strsize;
+  
+  gSymbolTableSize = totalSize + sizeof(struct symtab_command);
+  gSymbolTableAddr = AllocateKernelMemory(gSymbolTableSize);
+  
+  // Add the SymTab to the memory-map.
+  AllocateMemoryRange("Kernel-__SYMTAB", gSymbolTableAddr, gSymbolTableSize);
+  
+  symTableSave = (struct symtab_command *)gSymbolTableAddr;
+  tmpAddr = gSymbolTableAddr + sizeof(struct symtab_command);
+  
+  symTableSave->symoff = tmpAddr;
+  symTableSave->nsyms = symTab->nsyms;
+  symTableSave->stroff = tmpAddr + symsSize;
+  symTableSave->strsize = symTab->strsize;
+  
+  bcopy((char *)(kLoadAddr + gPPCOffset + symTab->symoff),
+       (char *)tmpAddr, totalSize);
+  
+  return 0;
+}
diff --git a/bootx.tproj/sl.subproj/main.c b/bootx.tproj/sl.subproj/main.c
new file mode 100644 (file)
index 0000000..c0ba230
--- /dev/null
@@ -0,0 +1,991 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  main.c - Main functions for BootX.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+
+#include <sl.h>
+
+static void Start(void *unused1, void *unused2, ClientInterfacePtr ciPtr);
+static void Main(ClientInterfacePtr ciPtr);
+static long InitEverything(ClientInterfacePtr ciPtr);
+static long DecodeKernel(void);
+static long SetUpBootArgs(void);
+static long CallKernel(void);
+static void FailToBoot(long num);
+static long InitMemoryMap(void);
+static long GetOFVersion(void);
+static long TestForKey(long key);
+static long GetBootPaths(void);
+
+const unsigned long StartTVector[2] = {(unsigned long)Start, 0};
+
+char gStackBaseAddr[0x8000];
+
+char *gVectorSaveAddr;
+long gImageLastKernelAddr = 0;
+long gImageFirstBootXAddr = kLoadAddr;
+long gKernelEntryPoint;
+long gDeviceTreeAddr;
+long gDeviceTreeSize;
+long gBootArgsAddr;
+long gBootArgsSize;
+long gSymbolTableAddr;
+long gSymbolTableSize;
+
+long gBootSourceNumber = -1;
+long gBootSourceNumberMax;
+long gBootDeviceType;
+long gBootFileType;
+char gBootDevice[256];
+char gBootFile[256];
+char gRootDir[256];
+
+char gTempStr[4096];
+
+long *gDeviceTreeMMTmp = 0;
+
+long gOFVersion;
+
+char *gKeyMap;
+
+CICell gChosenPH;
+CICell gOptionsPH;
+CICell gScreenPH;
+CICell gMemoryMapPH;
+CICell gStdOutPH;
+
+CICell gMMUIH;
+CICell gMemoryIH;
+CICell gStdOutIH;
+CICell gKeyboardIH;
+
+// Private Functions
+
+static void Start(void *unused1, void *unused2, ClientInterfacePtr ciPtr)
+{
+  long newSP;
+  
+  // Move the Stack to a chunk of the BSS
+  newSP = (long)gStackBaseAddr + sizeof(gStackBaseAddr) - 0x100;
+  __asm__ volatile("mr r1, %0" : : "r" (newSP));
+  
+  Main(ciPtr);
+}
+
+
+static void Main(ClientInterfacePtr ciPtr)
+{
+  long ret;
+  
+  ret = InitEverything(ciPtr);
+  if (ret != 0) Exit();
+  
+  // Get or infer the boot paths.
+  ret = GetBootPaths();
+  if (ret != 0) FailToBoot(1);
+  
+  DrawSplashScreen();
+  
+  while (ret == 0) {
+    ret = LoadFile(gBootFile);
+    if (ret != -1) break;
+    
+    ret = GetBootPaths();
+    if (ret != 0) FailToBoot(2);
+  }
+  
+  ret = DecodeKernel();
+  if (ret != 0) FailToBoot(4);
+  
+  ret = LoadDrivers(gRootDir);
+  if (ret != 0) FailToBoot(5);
+
+#if 0    
+  ret = LoadDisplayDrivers();
+  if (ret != 0) FailToBoot(6);
+#endif
+
+  ret = SetUpBootArgs();
+  if (ret != 0) FailToBoot(7);
+  
+  ret = CallKernel();
+  
+  FailToBoot(8);
+}
+
+
+static long InitEverything(ClientInterfacePtr ciPtr)
+{
+  long ret, mem_base, mem_base2, size;
+  CICell keyboardPH;
+  char name[32];
+#if 0
+  char defaultBootDevice[256];
+#endif
+  
+  // Init the OF Client Interface.
+  ret = InitCI(ciPtr);
+  if (ret != 0) return -1;
+  
+  // Get the OF Version
+  gOFVersion = GetOFVersion();
+  if (gOFVersion == 0) return -1;
+  
+  // Init the SL Words package.
+  ret = InitSLWords(gOFVersion);
+  if (ret != 0) return -1;
+  
+  // Get the phandle for /options
+  gOptionsPH = FindDevice("/options");
+  if (gOptionsPH == -1) return -1;
+  
+  // Get the phandle for /chosen
+  gChosenPH = FindDevice("/chosen");
+  if (gChosenPH == -1) return -1;
+  
+  // Init the Memory Map.
+  ret = InitMemoryMap();
+  if (ret != 0) return -1;
+  
+  // Get IHandles for the MMU and Memory
+  size = GetProp(gChosenPH, "mmu", (char *)&gMMUIH, 4);
+  if (size != 4) {
+    printf("Failed to get the IH for the MMU.\n");
+    return -1;
+  }
+  size = GetProp(gChosenPH, "memory", (char *)&gMemoryIH, 4);
+  if (size != 4) {
+    printf("Failed to get the IH for the Memory.\n");
+    return -1;
+  }
+  
+  // Get stdout's IH, so that the boot display can be found.
+  ret = GetProp(gChosenPH, "stdout", (char *)&gStdOutIH, 4);
+  if (ret == 4) gStdOutPH = InstanceToPackage(gStdOutIH);
+  else gStdOutPH = gStdOutIH = 0;
+  
+  // Try to find the keyboard using chosen
+  ret = GetProp(gChosenPH, "stdin", (char *)&gKeyboardIH, 4);
+  if (ret != 4) gKeyboardIH = 0;
+  else {
+    keyboardPH = InstanceToPackage(gKeyboardIH);
+    ret = GetProp(keyboardPH, "name", name, 31);
+    if (ret != -1) {
+      name[ret] = '\0';
+      if (strcmp(name, "keyboard") && strcmp(name, "kbd")) gKeyboardIH = 0;
+    } else gKeyboardIH = 0;
+  }
+  
+  // Try to the find the keyboard using open if chosen did not work.
+  if (gKeyboardIH == 0) gKeyboardIH = Open("keyboard");
+  if (gKeyboardIH == 0) gKeyboardIH = Open("kbd");
+  
+  // Get the key map set up, and make it up to date.
+  gKeyMap = InitKeyMap(gKeyboardIH);
+  if (gKeyMap == NULL) return -1;
+  UpdateKeyMap();
+  
+#if 0  
+  // On OF 3.x, if the Option key was pressed,
+  // set the default boot device and reboot.
+  if (gOFVersion >= kOFVersion3x) {
+    if (TestForKey(kOptKey)) {
+      size = GetProp(gOptionsPH, "default-boot-device", defaultBootDevice,255);
+      if (size == -1) {
+       Interpret_0_0("set-default boot-device");
+      } else {
+       defaultBootDevice[size] = '\0';
+       SetProp(gOptionsPH, "boot-device", defaultBootDevice, size);
+       SetProp(gOptionsPH, "boot-file", 0, 0);
+      }
+      Interpret_0_0("reset-all");
+    }
+  }
+#endif
+  
+#if kFailToBoot
+  // 'cmd-s' or 'cmd-v' is pressed set outputLevel to kOutputLevelFull
+  if (TestForKey(kCommandKey) && (TestForKey('s') || TestForKey('v')))
+    SetOutputLevel(kOutputLevelFull);
+  else SetOutputLevel(kOutputLevelOff);
+#else
+  SetOutputLevel(kOutputLevelFull);
+#endif
+  
+  // printf now works.
+  printf("\n\nMac OS X Loader\n");
+  
+  mem_base = Claim(kMallocAddr, kMallocSize, 0);
+  if (mem_base == 0) {
+    printf("Claim for malloc failed.\n");
+    return -1;
+  }
+  malloc_init((char *)mem_base, kMallocSize);
+  
+  // malloc now works.
+  
+  // Claim the memory for the Load Addr
+  mem_base = Claim(kLoadAddr, kLoadSize, 0);
+  if (mem_base == 0) {
+    printf("Claim for Load Area failed.\n");
+    return -1;
+  }
+  
+  // Claim the memory for the Image Addr
+  if (gOFVersion >= kOFVersion3x) {
+    mem_base = Claim(kImageAddr, kImageSize, 0);
+    if (mem_base == 0) {
+      printf("Claim for Image Area failed.\n");
+      return -1;
+    }
+  } else {
+    // Claim the 1:1 mapped chunks first.
+    mem_base  = Claim(kImageAddr0, kImageSize0, 0);
+    mem_base2 = Claim(kImageAddr2, kImageSize2, 0);
+    if ((mem_base == 0) || (mem_base2 == 0)) {
+      printf("Claim for Image Area failed.\n");
+      return -1;
+    }
+    
+    // Unmap the old xcoff stack.
+    CallMethod_2_0(gMMUIH, "unmap", 0x00380000, 0x00080000);
+    
+    // Grap the physical memory then the logical.
+    CallMethod_3_1(gMemoryIH, "claim",
+                  kImageAddr1Phys, kImageSize1, 0, &mem_base);
+    CallMethod_3_1(gMMUIH, "claim",
+                  kImageAddr1, kImageSize1, 0, &mem_base2);
+    if ((mem_base == 0) || (mem_base2 == 0)) {
+      printf("Claim for Image Area failed.\n");
+      return -1;
+    }
+    
+    // Map them together.
+    CallMethod_4_0(gMMUIH, "map",
+                  kImageAddr1Phys, kImageAddr1, kImageSize1, 0);
+  }
+  
+  bzero((char *)kImageAddr, kImageSize);
+  
+  // Malloc some space for the Vector Save area.
+  gVectorSaveAddr = malloc(kVectorSize);
+  if (gVectorSaveAddr == 0) {
+    printf("Malloc for Vector Save Area failed.\n");
+    return -1;
+  }
+  
+  // Find all the displays and set them up.
+  ret = InitDisplays();
+  if (ret != 0) {
+    printf("InitDisplays failed.\n");
+    return -1;
+  }
+  
+  return 0;
+}
+
+
+static long DecodeKernel(void)
+{
+  long ret;
+  
+  ret = DecodeMachO();
+  if (ret == -1) ret = DecodeElf();
+  
+  return ret;
+}
+
+
+static long SetUpBootArgs(void)
+{
+  boot_args_ptr args;
+  CICell        memoryPH;
+  long          secure = 0, sym = 0, graphicsBoot = 1;
+  long          ret, cnt, mem_size, size, dash;
+  long          aKey, sKey, vKey, yKey, shiftKey, keyPos;
+  char          ofBootArgs[128], *ofArgs, tc, keyStr[8], securityMode[33];
+  
+  // Save file system cache statistics.
+  SetProp(gChosenPH, "BootXCacheHits", (char *)&gCacheHits, 4);
+  SetProp(gChosenPH, "BootXCacheMisses", (char *)&gCacheMisses, 4);
+  SetProp(gChosenPH, "BootXCacheEvicts", (char *)&gCacheEvicts, 4);
+  
+  // Allocate some memory for the BootArgs.
+  gBootArgsSize = sizeof(boot_args);
+  gBootArgsAddr = AllocateKernelMemory(gBootArgsSize);
+  
+  // Add the BootArgs to the memory-map.
+  AllocateMemoryRange("BootArgs", gBootArgsAddr, gBootArgsSize);
+  
+  args = (boot_args_ptr)gBootArgsAddr;
+  
+  args->Revision = kBootArgsRevision;
+  args->Version = kBootArgsVersion;
+  args->machineType = 0;
+  
+  // Get the security-mode.
+  size = GetProp(gOptionsPH, "security-mode", securityMode, 32);
+  if (size != -1) {
+    securityMode[size] = '\0';
+    if (strcmp(securityMode, "none")) secure = 1;
+  }
+  
+  // Check the Keyboard for 'a', 'cmd-s', 'cmd-v', 'y' and shift
+  UpdateKeyMap();
+  if (!secure) {
+    aKey = TestForKey('a');
+    sKey = TestForKey(kCommandKey) && TestForKey('s');
+    vKey = TestForKey(kCommandKey) && TestForKey('v');
+    yKey = TestForKey('y');
+  } else {
+    aKey = 0;
+    sKey = 0;
+    vKey = 0;
+    yKey = 0;
+  }
+  shiftKey = TestForKey(kShiftKey);
+  
+  // if 'cmd-s' or 'cmd-v' was pressed do a text boot.
+  if (sKey || vKey) graphicsBoot = 0;
+  
+  // if 'y' key was pressed send the symbols;
+  if (yKey) sym = 1;
+  
+  // Create the command line.
+  if (gOFVersion < kOFVersion3x) {
+    ofBootArgs[0] = ' ';
+    size = GetProp(gChosenPH, "machargs", ofBootArgs + 1, 126);
+    if (size == -1) {
+      size = GetProp(gOptionsPH, "boot-command", ofBootArgs, 127);
+      if (size == -1) ofBootArgs[0] = '\0';
+      else ofBootArgs[size] = '\0';
+      // Look for " bootr" but skip the number.
+      if (!strncmp(ofBootArgs + 1, " bootr", 6)) {
+       strcpy(ofBootArgs, ofBootArgs + 7);
+      } else ofBootArgs[0] = '\0';
+      SetProp(gChosenPH, "machargs", ofBootArgs, strlen(ofBootArgs) + 1);
+    } else ofBootArgs[size] = '\0';
+    // Force boot-command to start with 0 bootr.
+    sprintf(gTempStr, "0 bootr%s", ofBootArgs);
+    SetProp(gOptionsPH, "boot-command", gTempStr, strlen(gTempStr));
+  } else {
+    size = GetProp(gOptionsPH, "boot-args", ofBootArgs, 127);
+    if (size == -1) ofBootArgs[0] = '\0';
+    else ofBootArgs[size] = '\0';
+  }
+  
+  if (ofBootArgs[0] != '\0') {
+    // Look for special options and copy the rest.
+    dash = 0;
+    ofArgs = ofBootArgs;
+    while ((tc = *ofArgs) != '\0') { 
+      tc = tolower(tc);
+      
+      // Check for entering a dash arg.
+      if (tc == '-') {
+       dash = 1;
+       ofArgs++;
+       continue;
+      }
+      
+      // Do special stuff if in a dash arg.
+      if (dash) {
+       if (tc == 'a') {
+         ofArgs++;
+         aKey = 0;
+       }
+       else if (tc == 's') {
+         graphicsBoot = 0;
+         ofArgs++;
+         sKey = 0;
+       }
+       else if (tc == 'v') {
+         graphicsBoot = 0;
+         ofArgs++;
+         vKey = 0;
+       }
+       else if (tc == 'x') {
+         ofArgs++;
+         shiftKey = 0;
+       }
+       else if (tc == 'y') {
+         sym = 1;
+         ofArgs++;
+         yKey = 0;
+       }
+       else {
+         // Check for exiting dash arg
+         if (isspace(tc)) dash = 0;
+         
+         // Copy any non 'a', 's', 'v', 'x' or 'y'
+         ofArgs++;
+       }
+      } else {
+       // Not a dash arg so just copy it.
+       ofArgs++;
+      }    
+    }
+  }
+  
+  // Add any pressed keys (a, s, v, y, shift) to the command line
+  keyPos = 0;
+  if (aKey || sKey || vKey || yKey || shiftKey) {
+    keyStr[keyPos++] = '-';
+    
+    if (aKey) keyStr[keyPos++] = 'a';
+    if (sKey) keyStr[keyPos++] = 's';
+    if (vKey) keyStr[keyPos++] = 'v';
+    if (yKey) keyStr[keyPos++] = 'y';
+    if (shiftKey) keyStr[keyPos++] = 'x';
+    
+    keyStr[keyPos++] = ' ';
+  }
+  keyStr[keyPos++] = '\0';
+  
+  // Send symbols?
+  if (!sym && !yKey) gSymbolTableAddr = 0;
+  
+  sprintf(args->CommandLine, "%s%s symtab=%d",
+         keyStr, ofBootArgs, gSymbolTableAddr);
+  
+  // Get the memory info
+  memoryPH = FindDevice("/memory");
+  if (memoryPH == -1) return -1;
+  size = GetProp(memoryPH, "reg", (char *)(args->PhysicalDRAM),
+                kMaxDRAMBanks * sizeof(DRAMBank));
+  if (size == 0) return -1;
+  
+  // This is a hack to make the memory look like its all
+  // in one big bank.
+  mem_size = 0;
+  for (cnt = 0; cnt < kMaxDRAMBanks; cnt++) {
+    mem_size += args->PhysicalDRAM[cnt].size;
+    args->PhysicalDRAM[cnt].base = 0;
+    args->PhysicalDRAM[cnt].size = 0;
+  }
+  args->PhysicalDRAM[0].size = mem_size;      
+  
+  // Get the video info
+  GetMainScreenPH(&args->Video);
+  args->Video.v_display  = graphicsBoot;
+  
+  // Add the DeviceTree to the memory-map.
+  // The actuall address and size must be filled in later.
+  AllocateMemoryRange("DeviceTree", 0, 0);
+  
+  ret = FlattenDeviceTree();
+  if (ret != 0) return -1;
+  
+  // Fill in the address and size of the device tree.
+  if (gDeviceTreeAddr) {
+    gDeviceTreeMMTmp[0] = gDeviceTreeAddr;
+    gDeviceTreeMMTmp[1] = gDeviceTreeSize;
+  }
+  
+  args->deviceTreeP = (void *)gDeviceTreeAddr;
+  args->deviceTreeLength = gDeviceTreeSize;
+  args->topOfKernelData = AllocateKernelMemory(0);
+  
+  return 0;
+}
+
+
+static long CallKernel(void)
+{
+  long msr, cnt;
+  
+  Quiesce();
+  
+  printf("\nCall Kernel!\n");
+  
+  msr = 0x00001000;
+  __asm__ volatile("mtmsr %0" : : "r" (msr));
+  __asm__ volatile("isync");
+  
+  // Move the Execption Vectors
+  bcopy(gVectorSaveAddr, 0x0, kVectorSize);
+  for (cnt = 0; cnt < kVectorSize; cnt += 0x20) {
+    __asm__ volatile("dcbf 0, %0" : : "r" (cnt));
+    __asm__ volatile("icbi 0, %0" : : "r" (cnt));
+  }
+  
+  // Move the Image1 save area for OF 1.x / 2.x
+  if (gOFVersion < kOFVersion3x) {
+    bcopy((char *)kImageAddr1Phys, (char *)kImageAddr1, kImageSize1);
+    for (cnt = kImageAddr1; cnt < kImageSize1; cnt += 0x20) {
+      __asm__ volatile("dcbf 0, %0" : : "r" (cnt));
+      __asm__ volatile("icbi 0, %0" : : "r" (cnt));
+    }
+  }
+  
+  // Make sure everything get sync'd up.
+  __asm__ volatile("isync");
+  __asm__ volatile("sync");
+  __asm__ volatile("eieio");
+  
+  (*(void (*)())gKernelEntryPoint)(gBootArgsAddr, kMacOSXSignature);
+  
+  return -1;
+}
+
+
+static void FailToBoot(long num)
+{
+#if kFailToBoot
+  DrawBrokenSystemFolder();
+  while (1);
+  num = 0;
+#else
+  printf("FailToBoot: %d\n", num);
+  Enter(); // For debugging
+#endif
+}
+
+
+static long InitMemoryMap(void)
+{
+  long result;
+  
+  result = Interpret_0_1(
+                        " dev /chosen"
+                        " new-device"
+                        " \" memory-map\" device-name"
+                        " active-package"
+                        " device-end"
+                        , &gMemoryMapPH);
+  
+  return result;
+}
+
+
+static long GetOFVersion(void)
+{
+  CICell ph;
+  char   versStr[256], *tmpStr;
+  long   vers, size;
+  
+  // Get the openprom package
+  ph = FindDevice("/openprom");
+  if (ph == -1) return 0;
+  
+  // Get it's model property
+  size = GetProp(ph, "model", versStr, 255);
+  if (size == -1) return -1;
+  versStr[size] = '\0';
+  
+  // Find the start of the number.
+  tmpStr = NULL;
+  if (!strncmp(versStr, "Open Firmware, ", 15)) {
+    tmpStr = versStr + 15;
+  } else if (!strncmp(versStr, "OpenFirmware ", 13)) {
+    tmpStr = versStr + 13;
+  } else return -1;  
+  
+  // Clasify by each instance as needed...
+  switch (*tmpStr) {
+  case '1' :
+    vers = kOFVersion1x;
+    break;
+    
+  case '2' :
+    vers = kOFVersion2x;
+    break;
+    
+  case '3' :
+    vers = kOFVersion3x;
+    break;
+    
+  default :
+    vers = 0;
+    break;
+  }
+
+  return vers;
+}
+
+
+static long TestForKey(long key)
+{
+  long keyNum;
+  long bp;
+  char tc;
+  
+  if (gOFVersion < kOFVersion3x) {
+    switch(key) {
+    case 'a' :         keyNum =   7; break;
+    case 's' :         keyNum =   6; break;
+    case 'v' :         keyNum =  14; break;
+    case 'y' :         keyNum =  23; break;
+    case kCommandKey : keyNum =  48; break;
+    case kOptKey     : keyNum =  61; break;
+    case kShiftKey   : keyNum =  63; break;
+    case kControlKey : keyNum =  49; break;
+    default : keyNum = -1; break;
+    }
+  } else {
+    switch(key) {
+    case 'a' :         keyNum =   3; break;
+    case 's' :         keyNum =  17; break;
+    case 'v' :         keyNum =  30; break;
+    case 'y' :         keyNum =  27; break;
+    case kCommandKey : keyNum = 228; break;
+    case kOptKey     : keyNum = 229; break;
+    case kShiftKey   : keyNum = 230; break;
+    case kControlKey : keyNum = 231; break;
+    default : keyNum = -1; break;
+    }
+    
+    // Map the right modifier keys on to the left.
+    gKeyMap[28] |= gKeyMap[28] << 4;
+  }
+  
+  if (keyNum == -1) return 0;
+  
+  bp = keyNum & 7;
+  tc = gKeyMap[keyNum >> 3];
+  
+  return (tc & (1 << bp)) != 0;
+}
+
+
+#define kBootpBootFileOffset (108)
+
+static long GetBootPaths(void)
+{
+  long ret, cnt, cnt2, cnt3, cnt4, size, partNum, bootplen, bsdplen;
+  char *filePath, *buffer;
+  
+  if (gBootSourceNumber == -1) {
+    // Get the boot-device
+    size = GetProp(gChosenPH, "bootpath", gBootDevice, 255);
+    gBootDevice[size] = '\0';
+    if (gBootDevice[0] == '\0') {
+      size = GetProp(gOptionsPH, "boot-device", gBootDevice, 255);
+      gBootDevice[size] = '\0';
+    }
+    gBootDeviceType = GetDeviceType(gBootDevice);
+    
+    // Get the boot-file
+    size = GetProp(gChosenPH, "bootargs", gBootFile, 256);
+    gBootFile[size] = '\0';
+    
+    if (gBootFile[0] != '\0') {
+      gBootFileType = GetDeviceType(gBootFile);
+      gBootSourceNumberMax = 0;
+    } else {
+      gBootSourceNumber = 0;
+      gBootFileType = gBootDeviceType;
+      if (gBootFileType == kNetworkDeviceType) gBootSourceNumberMax = 1;
+      else gBootSourceNumberMax = 4;
+    }
+    
+    if (gBootFileType == kNetworkDeviceType) {
+      SetProp(Peer(0), "net-boot", NULL, 0);
+    }
+  }
+  
+  if (gBootSourceNumber >= gBootSourceNumberMax) return -1;
+  
+  if (gBootSourceNumberMax != 0) {
+    switch (gBootFileType) {
+    case kNetworkDeviceType :
+      // Find the end of the device spec.
+      cnt = 0;
+      while (gBootDevice[cnt] != ':') cnt++;
+      
+      // Copy the device spec with the ':'.
+      strncpy(gBootFile, gBootDevice, cnt + 1);
+      
+      // Check for bootp-responce or bsdp-responce.
+      bootplen = GetPropLen(gChosenPH, "bootp-response");
+      bsdplen  = GetPropLen(gChosenPH, "bsdp-response");
+      if ((bootplen > 0) || (bsdplen > 0)) {
+       if (bootplen > 0) {
+         buffer = malloc(bootplen);
+         GetProp(gChosenPH, "bootp-response", buffer, bootplen);
+       } else {
+         buffer = malloc(bsdplen);
+         GetProp(gChosenPH, "bsdp-response", buffer, bsdplen);
+       }
+       
+       // Flip the slash's to back slash's while looking for the last one.
+       cnt = cnt2 = kBootpBootFileOffset;
+       while (buffer[cnt] != '\0') {
+         if (buffer[cnt] == '/') {
+           buffer[cnt] = '\\';
+           cnt2 = cnt + 1;
+         }
+         cnt++;
+       }
+       
+       // Add a comma at the front.
+       buffer[kBootpBootFileOffset - 1] = ',';
+       
+       // Append the the root dir to the device spec.
+       strncat(gBootFile, buffer + kBootpBootFileOffset - 1,
+               cnt2 - kBootpBootFileOffset + 1);
+       
+       free(buffer);
+      } else {
+       // Look for the start of the root dir path.
+       cnt3 = cnt;
+       while (gBootDevice[cnt3] != ',') cnt3++;
+       
+       // Find the end of the path.  Look for a comma or null.
+       cnt2 = cnt3 + 1;
+       while ((gBootDevice[cnt2] != '\0') && (gBootDevice[cnt2] != ',')) cnt2++;
+       
+       // Find the last back slash or comma in the path
+       cnt4 = cnt2 - 1;
+       while ((gBootDevice[cnt4] != ',') && (gBootDevice[cnt4] != '\\')) cnt4--;
+       
+       // Copy the IP addresses if needed.
+       if (gOFVersion < kOFVersion3x) {
+         strncat(gBootFile, gBootDevice + cnt + 1, cnt3 - cnt - 1);
+       }
+       
+       // Add on the directory path
+       strncat(gBootFile, gBootDevice + cnt3, cnt4 - cnt3 + 1);
+      }
+      
+      // Add on the kernel name
+      strcat(gBootFile, "mach.macosx");
+      
+      // Add on postfix
+      strcat(gBootFile, gBootDevice + cnt2);
+      break;
+      
+    case kBlockDeviceType :
+      // Find the first ':'.
+      cnt = 0;
+      while ((gBootDevice[cnt] != '\0') && (gBootDevice[cnt] != ':')) cnt++;
+      if (gBootDevice[cnt] == '\0') return -1;
+      
+      // Find the comma after the ':'.
+      cnt2 = cnt + 1;
+      while ((gBootDevice[cnt2]  != '\0') && (gBootDevice[cnt] != ',')) cnt2++;
+      
+      // Get just the partition number
+      strncpy(gBootFile, gBootDevice + cnt + 1, cnt2 - cnt - 1);
+      partNum = atoi(gBootFile);
+      
+      if (gBootSourceNumber > 1) {
+       // Adjust the partition number to the root partition
+       if (gOFVersion < kOFVersion3x) {
+         partNum += 1;
+       } else {
+         partNum += 2;
+       }
+      }
+      
+      // Construct the boot-file
+      strncpy(gBootFile, gBootDevice, cnt + 1);
+      sprintf(gBootFile + cnt + 1, "%d,%s\\mach_kernel",
+             partNum, ((gBootSourceNumber & 1) ? "" : "\\"));
+      break;
+      
+    default:
+      printf("Failed to infer Boot Device Type.\n");
+      return -1;
+      break;
+    }
+  }
+  
+  // Figure out the root dir.
+  ret = ConvertFileSpec(gBootFile, gRootDir, &filePath);
+  if (ret == -1) return -1;
+  
+  strcat(gRootDir, ",");
+  
+  // Add in any extra path to gRootDir.
+  cnt = 0;
+  while (filePath[cnt] != '\0') cnt++;
+  
+  if (cnt != 0) {
+    for (cnt2 = cnt - 1; cnt2 >= 0; cnt2--) {
+      if (filePath[cnt2] == '\\') {
+       strncat(gRootDir, filePath, cnt2 + 1);
+       break;
+      }
+    }
+  }
+  
+  SetProp(gChosenPH, "rootpath", gBootFile, strlen(gBootFile) + 1);
+  
+  gBootSourceNumber++;
+  
+  return 0;
+}
+
+// Public Functions
+
+long GetDeviceType(char *devSpec)
+{
+  CICell ph;
+  long   size;
+  char   deviceType[32];
+  
+  ph = FindDevice(devSpec);
+  if (ph == -1) return -1;
+  
+  size = GetProp(ph, "device_type", deviceType, 31);
+  if (size != -1) deviceType[size] = '\0';
+  else deviceType[0] = '\0';
+  
+  if (strcmp(deviceType, "network") == 0) return kNetworkDeviceType;
+  if (strcmp(deviceType, "block") == 0) return kBlockDeviceType;
+  
+  return kUnknownDeviceType;
+}
+
+
+long ConvertFileSpec(char *fileSpec, char *devSpec, char **filePath)
+{
+  long cnt;
+  
+  // Find the first ':' in the fileSpec.
+  cnt = 0;
+  while ((fileSpec[cnt] != '\0') && (fileSpec[cnt] != ':')) cnt++;
+  if (fileSpec[cnt] == '\0') return -1;
+  
+  // Find the next ',' in the fileSpec.
+  while ((fileSpec[cnt] != '\0') && (fileSpec[cnt] != ',')) cnt++;
+  
+  // Copy the string to devSpec.
+  strncpy(devSpec, fileSpec, cnt);
+  devSpec[cnt] = '\0';
+  
+  // If there is a filePath start it after the ',', otherwise NULL.
+  if (filePath != NULL) {
+    if (fileSpec[cnt] != '\0') {
+      *filePath = fileSpec + cnt + 1;
+    } else {
+      *filePath = NULL;
+    }
+  }
+  
+  return 0;
+}
+
+
+long MatchThis(CICell phandle, char *string)
+{
+  long ret, length;
+  char *name, *model, *compatible;
+  
+  ret = GetPackageProperty(phandle, "name", &name, &length);
+  if ((ret == -1) || (length == 0)) name = NULL;
+  
+  ret = GetPackageProperty(phandle, "model", &model, &length);
+  if ((ret == -1) || (length == 0)) model = NULL;
+  
+  ret = GetPackageProperty(phandle, "compatible", &compatible, &length);
+  if ((ret == -1) || (length == 0)) model = NULL;
+  
+  if ((name != NULL) && strcmp(name, string) == 0) return 0;
+  if ((model != NULL) && strcmp(model, string) == 0) return 0;
+  
+  if (compatible != NULL) {
+    while (*compatible != '\0') { 
+      if (strcmp(compatible, string) == 0) return 0;
+      
+      compatible += strlen(compatible) + 1;
+    }
+  }
+  
+  return -1;
+}
+
+
+void *AllocateBootXMemory(long size)
+{
+  long addr = gImageFirstBootXAddr - size;
+  
+  if (addr < gImageLastKernelAddr) return 0;
+  
+  gImageFirstBootXAddr = addr;
+  
+  return (void *)addr;
+}
+
+
+long AllocateKernelMemory(long size)
+{
+  long addr = gImageLastKernelAddr;
+  
+  gImageLastKernelAddr += (size + 0xFFF) & ~0xFFF;
+  
+  if (gImageLastKernelAddr > gImageFirstBootXAddr)
+    FailToBoot(-1);
+  
+  return addr;
+}
+
+
+long AllocateMemoryRange(char *rangeName, long start, long length)
+{
+  long result, *buffer;
+  
+  buffer = AllocateBootXMemory(2 * sizeof(long));
+  if (buffer == 0) return -1;
+  
+  buffer[0] = start;
+  buffer[1] = length;
+  
+  result = SetProp(gMemoryMapPH, rangeName, (char *)buffer, 2 * sizeof(long));
+  if (result == -1) return -1;
+  
+  return 0;
+}
+
+
+unsigned long Alder32(unsigned char *buffer, long length)
+{
+  long          cnt;
+  unsigned long result, lowHalf, highHalf;
+  
+  lowHalf = 1;
+  highHalf = 0;
+  
+  for (cnt = 0; cnt < length; cnt++) {
+    if ((cnt % 5000) == 0) {
+      lowHalf  %= 65521L;
+      highHalf %= 65521L;
+    }
+    
+    lowHalf += buffer[cnt];
+    highHalf += lowHalf;
+  }
+
+  lowHalf  %= 65521L;
+  highHalf %= 65521L;
+  
+  result = (highHalf << 16) | lowHalf;
+  
+  return result;
+}
diff --git a/fcode-to-c.tproj/Makefile b/fcode-to-c.tproj/Makefile
new file mode 100644 (file)
index 0000000..1aa9d63
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Generated by the NeXT Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = fcode-to-c
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Tool
+
+CFILES = fcode-to-c.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = tool.make
+NEXTSTEP_INSTALLDIR = /bin
+WINDOWS_INSTALLDIR = /Library/Executables
+PDO_UNIX_INSTALLDIR = /bin
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(JDKBINDIR)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/fcode-to-c.tproj/Makefile.postamble b/fcode-to-c.tproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/fcode-to-c.tproj/Makefile.preamble b/fcode-to-c.tproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..c1624b4
--- /dev/null
@@ -0,0 +1,137 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/fcode-to-c.tproj/PB.project b/fcode-to-c.tproj/PB.project
new file mode 100644 (file)
index 0000000..1bbfef5
--- /dev/null
@@ -0,0 +1,26 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        FRAMEWORKS = (); 
+        H_FILES = (); 
+        OTHER_LINKED = ("fcode-to-c.c"); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_INSTALLDIR = /bin; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_INSTALLDIR = /bin; 
+    PDO_UNIX_JAVA_COMPILER = "$(JDKBINDIR)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = "fcode-to-c"; 
+    PROJECTTYPE = Tool; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_INSTALLDIR = /Library/Executables; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/fcode-to-c.tproj/fcode-to-c.c b/fcode-to-c.tproj/fcode-to-c.c
new file mode 100644 (file)
index 0000000..c566c38
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  fcode-to-c.c - Takes an OF FCODE image and generates a .c file.
+ *
+ *  Copyright (c) 1999-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+char *gToolName;
+
+
+int main(int argc, char **argv)
+{
+  char varName[256], inFileName[256], outFileName[256], *tmpStr;
+  FILE *inFile, *outFile;
+  long tc, cnt;
+  
+  gToolName = *argv;
+  
+  if (argc != 3) {
+    fprintf(stderr, "Usage: %s var-name file.fcode\n", gToolName);
+    return -1;
+  }
+  
+  strncpy(varName, argv[1], 255);
+  
+  strncpy(inFileName, argv[2], 255);
+  strncpy(outFileName, argv[2], 255);
+  
+  tmpStr = outFileName;
+  while ((*tmpStr != '.') && (*tmpStr != '\0')) tmpStr++;
+  if ((*tmpStr == '\0') || strncmp(tmpStr, ".fcode", 6)) {
+    fprintf(stderr, "Usage: %s var-name file.fcode\n", gToolName);
+    return -1;
+  }
+  
+  tmpStr[1] = 'c';
+  tmpStr[2] = '\0';
+  
+  inFile = fopen(inFileName, "rb");
+  if (inFile == NULL) {
+    fprintf(stderr, "%s: failed to open %s\n", gToolName, inFileName);
+    return -1;
+  }
+
+  outFile = fopen(outFileName, "w");
+  if (outFile == NULL) {
+    fprintf(stderr, "%s: failed to open %s\n", gToolName, outFileName);
+    return -1;
+  }
+  
+  fprintf(outFile, "const char %s[] = {", varName);
+  
+  cnt = 0;
+  while ((tc = fgetc(inFile)) != EOF) {
+    if (cnt == 0) fputc('\n', outFile);
+    fprintf(outFile, "0x%02x,", (unsigned char)tc);
+    if (cnt++ == 0x20) cnt = 0;
+  }
+  
+  fprintf(outFile, "\n};");
+
+  fclose(inFile);
+  fclose(outFile);
+
+  return 0;
+}
diff --git a/macho-to-xcoff.tproj/Makefile b/macho-to-xcoff.tproj/Makefile
new file mode 100644 (file)
index 0000000..71b5d69
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Generated by the NeXT Project Builder.
+#
+# NOTE: Do NOT change this file -- Project Builder maintains it.
+#
+# Put all of your customizations in files called Makefile.preamble
+# and Makefile.postamble (both optional), and Makefile will include them.
+#
+
+NAME = macho-to-xcoff
+
+PROJECTVERSION = 2.8
+PROJECT_TYPE = Tool
+
+CFILES = macho-to-xcoff.c
+
+OTHERSRCS = Makefile.preamble Makefile Makefile.postamble
+
+
+MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
+CODE_GEN_STYLE = DYNAMIC
+MAKEFILE = tool.make
+NEXTSTEP_INSTALLDIR = /bin
+WINDOWS_INSTALLDIR = /Library/Executables
+PDO_UNIX_INSTALLDIR = /bin
+LIBS = 
+DEBUG_LIBS = $(LIBS)
+PROF_LIBS = $(LIBS)
+
+
+
+
+NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc
+WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc
+PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc
+NEXTSTEP_JAVA_COMPILER = /usr/bin/javac
+WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe
+PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac
+
+include $(MAKEFILEDIR)/platform.make
+
+-include Makefile.preamble
+
+include $(MAKEFILEDIR)/$(MAKEFILE)
+
+-include Makefile.postamble
+
+-include Makefile.dependencies
diff --git a/macho-to-xcoff.tproj/Makefile.postamble b/macho-to-xcoff.tproj/Makefile.postamble
new file mode 100644 (file)
index 0000000..411cde6
--- /dev/null
@@ -0,0 +1,100 @@
+###############################################################################
+#  Makefile.postamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile, which is imported after all other makefiles, to
+#  override attributes for a project's Makefile environment. This allows you  
+#  to take advantage of the environment set up by the other Makefiles. 
+#  You can also define custom rules at the end of this file.
+#
+###############################################################################
+# 
+# These variables are exported by the standard makefiles and can be 
+# used in any customizations you make.  They are *outputs* of
+# the Makefiles and should be used, not set.
+# 
+#  PRODUCTS: products to install.  All of these products will be placed in
+#       the directory $(DSTROOT)$(INSTALLDIR)
+#  GLOBAL_RESOURCE_DIR: The directory to which resources are copied.
+#  LOCAL_RESOURCE_DIR: The directory to which localized resources are copied.
+#  OFILE_DIR: Directory into which .o object files are generated.
+#  DERIVED_SRC_DIR: Directory used for all other derived files
+#
+#  ALL_CFLAGS:  flags to pass when compiling .c files
+#  ALL_MFLAGS:  flags to pass when compiling .m files
+#  ALL_CCFLAGS:  flags to pass when compiling .cc, .cxx, and .C files
+#  ALL_MMFLAGS:  flags to pass when compiling .mm, .mxx, and .M files
+#  ALL_PRECOMPFLAGS:  flags to pass when precompiling .h files
+#  ALL_LDFLAGS:  flags to pass when linking object files
+#  ALL_LIBTOOL_FLAGS:  flags to pass when libtooling object files
+#  ALL_PSWFLAGS:  flags to pass when processing .psw and .pswm (pswrap) files
+#  ALL_RPCFLAGS:  flags to pass when processing .rpc (rpcgen) files
+#  ALL_YFLAGS:  flags to pass when processing .y (yacc) files
+#  ALL_LFLAGS:  flags to pass when processing .l (lex) files
+#
+#  NAME: name of application, bundle, subproject, palette, etc.
+#  LANGUAGES: langages in which the project is written (default "English")
+#  English_RESOURCES: localized resources (e.g. nib's, images) of project
+#  GLOBAL_RESOURCES: non-localized resources of project
+#
+#  SRCROOT:  base directory in which to place the new source files
+#  SRCPATH:  relative path from SRCROOT to present subdirectory
+#
+#  INSTALLDIR: Directory the product will be installed into by 'install' target
+#  PUBLIC_HDR_INSTALLDIR: where to install public headers.  Don't forget
+#        to prefix this with DSTROOT when you use it.
+#  PRIVATE_HDR_INSTALLDIR: where to install private headers.  Don't forget
+#       to prefix this with DSTROOT when you use it.
+#
+#  EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows)
+#
+###############################################################################
+
+# Some compiler flags can be overridden here for certain build situations.
+#
+#    WARNING_CFLAGS:  flag used to set warning level (defaults to -Wmost)
+#    DEBUG_SYMBOLS_CFLAGS:  debug-symbol flag passed to all builds (defaults
+#      to -g)
+#    DEBUG_BUILD_CFLAGS:  flags passed during debug builds (defaults to -DDEBUG)
+#    OPTIMIZE_BUILD_CFLAGS:  flags passed during optimized builds (defaults
+#      to -O)
+#    PROFILE_BUILD_CFLAGS:  flags passed during profile builds (defaults
+#      to -pg -DPROFILE)
+#    LOCAL_DIR_INCLUDE_DIRECTIVE:  flag used to add current directory to
+#      the include path (defaults to -I.)
+#    DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags
+#      passed to ld/libtool (defaults to nothing)
+
+
+# Library and Framework projects only:
+#    INSTALL_NAME_DIRECTIVE:  This directive ensures that executables linked
+#      against the framework will run against the correct version even if
+#      the current version of the framework changes.  You may override this
+#      to "" as an alternative to using the DYLD_LIBRARY_PATH during your
+#      development cycle, but be sure to restore it before installing.
+
+
+# Ownership and permissions of files installed by 'install' target
+
+#INSTALL_AS_USER = root
+        # User/group ownership 
+#INSTALL_AS_GROUP = wheel
+        # (probably want to set both of these) 
+#INSTALL_PERMISSIONS =
+        # If set, 'install' chmod's executable to this
+
+
+# Options to strip.  Note: -S strips debugging symbols (executables can be stripped
+# down further with -x or, if they load no bundles, with no options at all).
+
+#STRIPFLAGS = -S
+
+
+#########################################################################
+# Put rules to extend the behavior of the standard Makefiles here.  Include them in
+# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble.
+#
+# You should avoid redefining things like "install" or "app", as they are
+# owned by the top-level Makefile API and no context has been set up for where 
+# derived files should go.
+#
diff --git a/macho-to-xcoff.tproj/Makefile.preamble b/macho-to-xcoff.tproj/Makefile.preamble
new file mode 100644 (file)
index 0000000..c1624b4
--- /dev/null
@@ -0,0 +1,137 @@
+###############################################################################
+#  Makefile.preamble
+#  Copyright 1997, Apple Computer, Inc.
+#
+#  Use this makefile for configuring the standard application makefiles 
+#  associated with ProjectBuilder. It is included before the main makefile.
+#  In Makefile.preamble you set attributes for a project, so they are available
+#  to the project's makefiles.  In contrast, you typically write additional rules or 
+#  override built-in behavior in the Makefile.postamble.
+#  
+#  Each directory in a project tree (main project plus subprojects) should 
+#  have its own Makefile.preamble and Makefile.postamble.
+###############################################################################
+#
+# Before the main makefile is included for this project, you may set:
+#
+#    MAKEFILEDIR: Directory in which to find $(MAKEFILE)
+#    MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make)
+
+# Compiler/linker flags added to the defaults:  The OTHER_* variables will be 
+# inherited by all nested sub-projects, but the LOCAL_ versions of the same
+# variables will not.  Put your -I, -D, -U, and -L flags in ProjectBuilder's
+# Build Attributes inspector if at all possible.  To override the default flags
+# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble.  The
+# variables below are *inputs* to the build process and distinct from the override
+# settings done (less often) in the Makefile.postamble.
+#
+#    OTHER_CFLAGS, LOCAL_CFLAGS:  additional flags to pass to the compiler
+#      Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m,
+#      .cc, .cxx, .C, and .M files.  There is no need to respecify the
+#      flags in OTHER_MFLAGS, etc.
+#    OTHER_MFLAGS, LOCAL_MFLAGS:  additional flags for .m files
+#    OTHER_CCFLAGS, LOCAL_CCFLAGS:  additional flags for .cc, .cxx, and ...C files
+#    OTHER_MMFLAGS, LOCAL_MMFLAGS:  additional flags for .mm and .M files
+#    OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS:  additional flags used when
+#      precompiling header files
+#    OTHER_LDFLAGS, LOCAL_LDFLAGS:  additional flags passed to ld and libtool
+#    OTHER_PSWFLAGS, LOCAL_PSWFLAGS:  additional flags passed to pswrap
+#    OTHER_RPCFLAGS, LOCAL_RPCFLAGS:  additional flags passed to rpcgen
+#    OTHER_YFLAGS, LOCAL_YFLAGS:  additional flags passed to yacc
+#    OTHER_LFLAGS, LOCAL_LFLAGS:  additional flags passed to lex
+
+# These variables provide hooks enabling you to add behavior at almost every 
+# stage of the make:
+#
+#    BEFORE_PREBUILD: targets to build before installing headers for a subproject
+#    AFTER_PREBUILD: targets to build after installing headers for a subproject
+#    BEFORE_BUILD_RECURSION: targets to make before building subprojects
+#    BEFORE_BUILD: targets to make before a build, but after subprojects
+#    AFTER_BUILD: targets to make after a build
+#
+#    BEFORE_INSTALL: targets to build before installing the product
+#    AFTER_INSTALL: targets to build after installing the product
+#    BEFORE_POSTINSTALL: targets to build before postinstalling every subproject
+#    AFTER_POSTINSTALL: targts to build after postinstalling every subproject
+#
+#    BEFORE_INSTALLHDRS: targets to build before installing headers for a 
+#         subproject
+#    AFTER_INSTALLHDRS: targets to build after installing headers for a subproject
+#    BEFORE_INSTALLSRC: targets to build before installing source for a subproject
+#    AFTER_INSTALLSRC: targets to build after installing source for a subproject
+#
+#    BEFORE_DEPEND: targets to build before building dependencies for a
+#        subproject
+#    AFTER_DEPEND: targets to build after building dependencies for a
+#        subproject
+#
+#    AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is
+#        updated every time the project is built.  If NO, the dependency
+#        file is only built when the depend target is invoked.
+
+# Framework-related variables:
+#    FRAMEWORK_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the framework's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+
+# Library-related variables:
+#    PUBLIC_HEADER_DIR:  Determines where public exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.  For library projects you should
+#       set this to something like /Developer/Headers/$(NAME).  Do not set
+#       this variable for framework projects unless you do not want the
+#       header files included in the framework.
+#    PRIVATE_HEADER_DIR:  Determines where private exported header files
+#      should be installed.  Do not include $(DSTROOT) in this value --
+#      it is prefixed automatically.
+#    LIBRARY_STYLE:  This may be either STATIC or DYNAMIC, and determines
+#      whether the libraries produced are statically linked when they
+#      are used or if they are dynamically loadable. This defaults to
+#       DYNAMIC.
+#    LIBRARY_DLL_INSTALLDIR:  On Windows platforms, this variable indicates
+#      where to put the library's DLL.  This variable defaults to 
+#      $(INSTALLDIR)/../Executables
+#
+#    INSTALL_AS_USER: owner of the intalled products (default root)
+#    INSTALL_AS_GROUP: group of the installed products (default wheel)
+#    INSTALL_PERMISSIONS: permissions of the installed product (default o+rX)
+#
+#    OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be
+#      passed on the command line to recursive invocations of make.  Note that
+#      the values in OTHER_*FLAGS are inherited by subprojects automatically --
+#      you do not have to (and shouldn't) add OTHER_*FLAGS to 
+#      OTHER_RECURSIVE_VARIABLES. 
+
+# Additional headers to export beyond those in the PB.project:
+#    OTHER_PUBLIC_HEADERS
+#    OTHER_PROJECT_HEADERS
+#    OTHER_PRIVATE_HEADERS
+
+# Additional files for the project's product: <<path relative to proj?>>
+#    OTHER_RESOURCES: (non-localized) resources for this project
+#    OTHER_OFILES: relocatables to be linked into this project
+#    OTHER_LIBS: more libraries to link against
+#    OTHER_PRODUCT_DEPENDS: other dependencies of this project
+#    OTHER_SOURCEFILES: other source files maintained by .pre/postamble
+#    OTHER_GARBAGE: additional files to be removed by `make clean'
+
+# Set this to YES if you don't want a final libtool call for a library/framework.
+#    BUILD_OFILES_LIST_ONLY
+
+# To include a version string, project source must exist in a directory named 
+# $(NAME).%d[.%d][.%d] and the following line must be uncommented.
+# OTHER_GENERATED_OFILES = $(VERS_OFILE)
+
+# This definition will suppress stripping of debug symbols when an executable
+# is installed.  By default it is YES.
+# STRIP_ON_INSTALL = NO
+
+# Uncomment to suppress generation of a KeyValueCoding index when installing 
+# frameworks (This index is used by WOB and IB to determine keys available
+# for an object).  Set to YES by default.
+# PREINDEX_FRAMEWORK = NO
+
+# Change this definition to install projects somewhere other than the
+# standard locations.  NEXT_ROOT defaults to "C:/Apple" on Windows systems
+# and "" on other systems.
+DSTROOT = $(HOME)
diff --git a/macho-to-xcoff.tproj/PB.project b/macho-to-xcoff.tproj/PB.project
new file mode 100644 (file)
index 0000000..f399a0c
--- /dev/null
@@ -0,0 +1,34 @@
+{
+    DYNAMIC_CODE_GEN = YES; 
+    FILESTABLE = {
+        BUNDLES = (); 
+        CLASSES = (); 
+        C_FILES = (); 
+        FRAMEWORKS = (); 
+        FRAMEWORKSEARCH = (); 
+        HEADERSEARCH = (); 
+        H_FILES = (); 
+        M_FILES = (); 
+        OTHER_LINKED = ("macho-to-xcoff.c"); 
+        OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); 
+        SUBPROJECTS = (); 
+        TOOLS = (); 
+    }; 
+    LANGUAGE = English; 
+    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
+    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
+    NEXTSTEP_INSTALLDIR = /bin; 
+    NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; 
+    NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; 
+    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
+    PDO_UNIX_INSTALLDIR = /bin; 
+    PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; 
+    PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; 
+    PROJECTNAME = "macho-to-xcoff"; 
+    PROJECTTYPE = Tool; 
+    PROJECTVERSION = 2.8; 
+    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
+    WINDOWS_INSTALLDIR = /Library/Executables; 
+    WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; 
+    WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; 
+}
diff --git a/macho-to-xcoff.tproj/macho-to-xcoff.c b/macho-to-xcoff.tproj/macho-to-xcoff.c
new file mode 100644 (file)
index 0000000..009aad0
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+/*
+ *  macho-to-xcoff.c - Converts a Mach-O file an XCOFF.
+ *
+ *  Copyright (c) 1998-2000 Apple Computer, Inc.
+ *
+ *  DRI: Josh de Cesare
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mach-o/loader.h>
+#include <mach/thread_status.h>
+#include <mach/ppc/thread_status.h>
+
+
+char *progname;
+static FILE *machoF;
+static FILE *xcoffF;
+
+static struct mach_header mhead;
+
+typedef unsigned char UInt8;
+typedef unsigned short UInt16;
+typedef unsigned long UInt32;
+
+#ifdef __i386__
+#define SWAPL(value) (   (((value) >> 24) & 0xff) | \
+                        (((value) >> 8) & 0xff00) | \
+                        (((value) << 8) & 0xff0000) | \
+                        (((value) << 24) & 0xff000000) )
+
+#define SWAPS(value) (   (((value) >> 8) & 0xff) | \
+                        (((value) << 8) & 0xff00) )
+#else
+#define SWAPS(W)       (W)
+#define SWAPL(L)       (L)
+#endif
+
+     typedef struct {
+       /* File header */
+       UInt16 magic;
+#define kFileMagic                     0x1DF
+       UInt16 nSections;
+       UInt32 timeAndDate;
+       UInt32 symPtr;
+       UInt32 nSyms;
+       UInt16 optHeaderSize;
+       UInt16 flags;
+     } XFileHeader;
+
+typedef struct {
+  /* Optional header */
+  UInt16 magic;
+#define kOptHeaderMagic                0x10B
+  UInt16 version;
+  UInt32 textSize;
+  UInt32 dataSize;
+  UInt32 BSSSize;
+  UInt32 entryPoint;
+  UInt32 textStart;
+  UInt32 dataStart;
+  UInt32 toc;
+  UInt16 snEntry;
+  UInt16 snText;
+  UInt16 snData;
+  UInt16 snTOC;
+  UInt16 snLoader;
+  UInt16 snBSS;
+  UInt8 filler[28];
+} XOptHeader;
+
+typedef struct {
+  char name[8];
+  UInt32 pAddr;
+  UInt32 vAddr;
+  UInt32 size;
+  UInt32 sectionFileOffset;
+  UInt32 relocationsFileOffset;
+  UInt32 lineNumbersFileOffset;
+  UInt16 nRelocations;
+  UInt16 nLineNumbers;
+  UInt32 flags;
+} XSection;
+
+enum SectionNumbers {
+  kTextSN = 1,
+  kDataSN,
+  kBSSSN
+};
+
+#define kTextName      ".text"
+#define kDataName      ".data"
+#define kBSSName       ".bss"
+
+static struct {
+  XFileHeader file;
+  XOptHeader opt;
+  XSection text;
+  XSection data;
+  XSection BSS;
+} xHead = {
+  {    /* file */
+    SWAPS(kFileMagic),                 /* magic */
+    SWAPS(3),                                  /* nSections */
+    0,                                                 /* timeAndDate */
+    0,                                                 /* symPtr */
+    0,                                                 /* nSyms */
+    SWAPS(sizeof (XOptHeader)),        /* optHeaderSize */
+    0
+  },
+  {    /* opt */
+    SWAPS(kOptHeaderMagic),            /* magic */
+    0,                                                 /* version */
+    0,                                                 /* textSize */
+    0,                                                 /* dataSize */
+    0,                                                 /* BSSSize */
+    0,                                                 /* entryPoint */
+    0,                                                 /* textStart */
+    0,                                                 /* dataStart */
+    0,                                                 /* toc */
+    SWAPS(kTextSN),                            /* snEntry */
+    SWAPS(kTextSN),                            /* snText */
+    SWAPS(kDataSN),                            /* snData */
+    SWAPS(0),                                  /* snTOC */
+    SWAPS(0),                                  /* snLoader */
+    SWAPS(kBSSSN),                             /* snBSS */
+  },
+  {    /* text section */
+    kTextName
+  },
+  {    /* data section */
+    kDataName
+  },
+  {    /* BSS section */
+    kBSSName
+  }
+};
+
+
+static UInt32 textFileOffset;
+static UInt32 textSize;
+static UInt32 dataFileOffset;
+static UInt32 dataSize;
+static UInt32 bssSize;
+
+
+static void usage (char *msg)
+{
+  printf ("Usage: %s mach-o-file-name xcoff-file-name\n\n%s\n",
+         progname, msg);
+  exit (1);
+}
+
+
+static void copyMachOSectionToXCOFF (UInt32 machoOffset, UInt32 sectionSize)
+{
+  static char buf[65536];
+
+  fseek (machoF, machoOffset, SEEK_SET);
+
+  while (sectionSize) {
+    long readSize = sectionSize > sizeof (buf) ? sizeof (buf) : sectionSize;
+    long writeSize;
+    long actualSize;
+
+    actualSize = fread (buf, 1, readSize, machoF);
+    if (actualSize < 0) perror ("read error for section");
+
+    writeSize = actualSize;
+    actualSize = fwrite (buf, 1, writeSize, xcoffF);
+    if (actualSize < 0) perror ("write error for section");
+
+    sectionSize -= actualSize;
+  }
+}
+
+
+void main (int argc, char **argv)
+{
+  int n;
+  char *cmdsP, *cp;
+  
+#define LCP            ((struct load_command *) cp)
+#define SCP            ((struct segment_command *) cp)
+  
+  progname = argv[0];
+  
+  if (argc < 3) usage ("wrong number of parameters");
+  
+  machoF = fopen (argv[1], "rb");
+  if (machoF == 0) perror ("Can't open mach-o file");
+  xcoffF = fopen (argv[2], "wb");
+  if (xcoffF == 0) perror ("Can't create and/or open XCOFF file");
+
+  n = fread (&mhead, sizeof (mhead), 1, machoF);
+  if (n != 1) perror ("error reading mach-o file header");
+
+  if (SWAPL(mhead.magic) != MH_MAGIC
+      || SWAPL(mhead.filetype) != MH_EXECUTE)
+    usage ("bad mach-o file header");
+
+  cmdsP = malloc (SWAPL(mhead.sizeofcmds));
+  if (cmdsP == 0) usage ("cmdsP allocation failed");
+
+  n = fread (cmdsP, SWAPL(mhead.sizeofcmds), 1, machoF);
+  if (n != 1) perror ("error reading mach-o commands");
+
+  printf ("Mach-o file has magic=0x%08X, %d commands\n", SWAPL(mhead.magic), SWAPL(mhead.ncmds));
+
+  for (n = 0, cp = cmdsP; n < SWAPL(mhead.ncmds); ++n, cp += SWAPL(LCP->cmdsize)) {
+    
+    switch (SWAPL(LCP->cmd)) {
+    case LC_SEGMENT:
+      printf ("segment: %s: 0x%08X of 0x%08X bytes\n",
+             SCP->segname, SWAPL(SCP->vmaddr), SWAPL(SCP->vmsize));
+      
+      if (strncmp (SCP->segname, SEG_TEXT, sizeof (SCP->segname)) == 0) {
+       textFileOffset = SWAPL(SCP->fileoff);
+       textSize = SWAPL(SCP->filesize);
+       printf ("__TEXT size = 0x%08X\n", textSize);
+       xHead.text.pAddr = xHead.text.vAddr = SCP->vmaddr;
+       xHead.text.size = SCP->vmsize;
+      } else
+       if (strncmp (SCP->segname, SEG_DATA, sizeof (SCP->segname)) == 0) {
+         dataFileOffset = SWAPL(SCP->fileoff);
+         dataSize = SWAPL(SCP->filesize);
+         printf ("__DATA size = 0x%08X\n", dataSize);
+         bssSize = SWAPL(SCP->vmsize) - SWAPL(SCP->filesize);
+         printf ("__BSS  size = 0x%08X\n", bssSize);
+         xHead.data.pAddr = xHead.data.vAddr = SCP->vmaddr;
+         
+         /* Use just FILE part -- rest is BSS */
+         xHead.data.size = SCP->filesize;
+       } else {
+         printf ("ignoring mach-o section \"%.*s\"\n",
+                 sizeof (SCP->segname), SCP->segname);
+       }
+      break;
+      
+    case LC_THREAD:
+    case LC_UNIXTHREAD:
+      xHead.opt.entryPoint = ((ppc_saved_state_t *) 
+                             (cp + sizeof(struct thread_command)
+                              + 2 * sizeof(unsigned long)) )->srr0;
+      printf("Entry point %x\n\n", SWAPL(xHead.opt.entryPoint));
+      break;
+    }
+  }
+  
+  /* Construct BSS out of thin air: the part of the data section
+     that is NOT file mapped */
+  xHead.BSS.pAddr = xHead.BSS.vAddr = SWAPL(SWAPL(xHead.data.pAddr) + SWAPL(xHead.data.size));
+  xHead.BSS.size = SWAPL(bssSize);
+  
+  /* Calculate the section file offsets in the resulting XCOFF file */
+  xHead.text.sectionFileOffset = SWAPL(sizeof (xHead.file) + sizeof (xHead.opt)
+                                      + sizeof (xHead.text) + sizeof (xHead.data) + sizeof (xHead.BSS));
+  xHead.data.sectionFileOffset = SWAPL(SWAPL(xHead.text.sectionFileOffset) + SWAPL(xHead.text.size));
+
+  /* MT - write opt header */
+  xHead.opt.textSize = xHead.text.size;
+  xHead.opt.dataSize = xHead.data.size;
+  xHead.opt.BSSSize = xHead.BSS.size;
+  if (argc == 4) sscanf(argv[3],"%x",&xHead.opt.entryPoint);
+
+  /* Write out the XCOFF file, copying the relevant mach-o file sections */
+  fwrite (&xHead, sizeof (xHead), 1, xcoffF);
+
+  copyMachOSectionToXCOFF (textFileOffset, textSize);
+  copyMachOSectionToXCOFF (dataFileOffset, dataSize);
+
+  fclose (machoF);
+  fclose (xcoffF);
+}