From 04fee52ee8aaaa7cd8b91379e26320dc877075f7 Mon Sep 17 00:00:00 2001 From: Apple Date: Tue, 10 Apr 2001 00:01:51 +0000 Subject: [PATCH] BootX-34.tar.gz --- Makefile | 45 + Makefile.postamble | 100 + Makefile.preamble | 142 + PB.project | 30 + bootx.tproj/Makefile | 52 + bootx.tproj/Makefile.postamble | 122 + bootx.tproj/Makefile.preamble | 150 + bootx.tproj/PB.project | 37 + bootx.tproj/bootinfo.hdr | 81 + bootx.tproj/ci.subproj/Control2.c | 527 ++ bootx.tproj/ci.subproj/MAC-PARTS.c | 74 + bootx.tproj/ci.subproj/Makefile | 46 + bootx.tproj/ci.subproj/Makefile.postamble | 100 + bootx.tproj/ci.subproj/Makefile.preamble | 139 + bootx.tproj/ci.subproj/PB.project | 31 + bootx.tproj/ci.subproj/ci.c | 1104 +++ bootx.tproj/ci.subproj/ci_io.c | 38 + bootx.tproj/ci.subproj/sl_words.c | 281 + bootx.tproj/fs.subproj/CaseTables.h | 275 + bootx.tproj/fs.subproj/HFSCompare.c | 321 + bootx.tproj/fs.subproj/Makefile | 49 + bootx.tproj/fs.subproj/Makefile.postamble | 100 + bootx.tproj/fs.subproj/Makefile.preamble | 139 + bootx.tproj/fs.subproj/PB.project | 32 + bootx.tproj/fs.subproj/cache.c | 140 + bootx.tproj/fs.subproj/ext2fs.c | 376 ++ bootx.tproj/fs.subproj/ext2fs.h | 343 + bootx.tproj/fs.subproj/ext2fs_bswap.c | 146 + bootx.tproj/fs.subproj/ext2fs_dinode.h | 170 + bootx.tproj/fs.subproj/ext2fs_dir.h | 187 + bootx.tproj/fs.subproj/fs.c | 237 + bootx.tproj/fs.subproj/hfs.c | 832 +++ bootx.tproj/fs.subproj/net.c | 92 + bootx.tproj/fs.subproj/ufs.c | 389 ++ bootx.tproj/fs.subproj/ufs_byteorder.c | 234 + bootx.tproj/fs.subproj/ufs_byteorder.h | 58 + bootx.tproj/include.subproj/Makefile | 45 + .../include.subproj/Makefile.postamble | 100 + bootx.tproj/include.subproj/Makefile.preamble | 139 + bootx.tproj/include.subproj/PB.project | 21 + bootx.tproj/include.subproj/boot_args.h | 76 + bootx.tproj/include.subproj/ci.h | 460 ++ bootx.tproj/include.subproj/device_tree.h | 52 + bootx.tproj/include.subproj/fs.h | 78 + bootx.tproj/include.subproj/libclite.h | 94 + bootx.tproj/include.subproj/sl.h | 206 + bootx.tproj/include.subproj/sl_words.h | 97 + bootx.tproj/libclite.subproj/Makefile | 46 + .../libclite.subproj/Makefile.postamble | 100 + .../libclite.subproj/Makefile.preamble | 139 + bootx.tproj/libclite.subproj/PB.project | 40 + bootx.tproj/libclite.subproj/bsearch.c | 55 + bootx.tproj/libclite.subproj/bswap.c | 48 + bootx.tproj/libclite.subproj/mem.c | 87 + bootx.tproj/libclite.subproj/prf.c | 166 + bootx.tproj/libclite.subproj/printf.c | 40 + bootx.tproj/libclite.subproj/sprintf.c | 79 + bootx.tproj/libclite.subproj/string.c | 139 + bootx.tproj/libclite.subproj/strtol.c | 271 + bootx.tproj/libclite.subproj/zalloc.c | 274 + bootx.tproj/sl.subproj/GetSymbolFromPEF.h | 216 + bootx.tproj/sl.subproj/Makefile | 49 + bootx.tproj/sl.subproj/Makefile.postamble | 100 + bootx.tproj/sl.subproj/Makefile.preamble | 139 + bootx.tproj/sl.subproj/PB.project | 38 + bootx.tproj/sl.subproj/PEFSupport.c | 453 ++ bootx.tproj/sl.subproj/bad_system.h | 95 + bootx.tproj/sl.subproj/clut.h | 95 + bootx.tproj/sl.subproj/device_tree.c | 239 + bootx.tproj/sl.subproj/display.c | 701 ++ bootx.tproj/sl.subproj/drivers.c | 1128 ++++ bootx.tproj/sl.subproj/elf.c | 86 + bootx.tproj/sl.subproj/elf.h | 85 + bootx.tproj/sl.subproj/happy_foot.h | 46 + bootx.tproj/sl.subproj/happy_mac.h | 69 + bootx.tproj/sl.subproj/images.h | 5920 +++++++++++++++++ bootx.tproj/sl.subproj/macho.c | 235 + bootx.tproj/sl.subproj/main.c | 991 +++ fcode-to-c.tproj/Makefile | 48 + fcode-to-c.tproj/Makefile.postamble | 100 + fcode-to-c.tproj/Makefile.preamble | 137 + fcode-to-c.tproj/PB.project | 26 + fcode-to-c.tproj/fcode-to-c.c | 92 + macho-to-xcoff.tproj/Makefile | 48 + macho-to-xcoff.tproj/Makefile.postamble | 100 + macho-to-xcoff.tproj/Makefile.preamble | 137 + macho-to-xcoff.tproj/PB.project | 34 + macho-to-xcoff.tproj/macho-to-xcoff.c | 295 + 88 files changed, 21773 insertions(+) create mode 100644 Makefile create mode 100644 Makefile.postamble create mode 100644 Makefile.preamble create mode 100644 PB.project create mode 100644 bootx.tproj/Makefile create mode 100644 bootx.tproj/Makefile.postamble create mode 100644 bootx.tproj/Makefile.preamble create mode 100644 bootx.tproj/PB.project create mode 100644 bootx.tproj/bootinfo.hdr create mode 100644 bootx.tproj/ci.subproj/Control2.c create mode 100644 bootx.tproj/ci.subproj/MAC-PARTS.c create mode 100644 bootx.tproj/ci.subproj/Makefile create mode 100644 bootx.tproj/ci.subproj/Makefile.postamble create mode 100644 bootx.tproj/ci.subproj/Makefile.preamble create mode 100644 bootx.tproj/ci.subproj/PB.project create mode 100644 bootx.tproj/ci.subproj/ci.c create mode 100644 bootx.tproj/ci.subproj/ci_io.c create mode 100644 bootx.tproj/ci.subproj/sl_words.c create mode 100644 bootx.tproj/fs.subproj/CaseTables.h create mode 100644 bootx.tproj/fs.subproj/HFSCompare.c create mode 100644 bootx.tproj/fs.subproj/Makefile create mode 100644 bootx.tproj/fs.subproj/Makefile.postamble create mode 100644 bootx.tproj/fs.subproj/Makefile.preamble create mode 100644 bootx.tproj/fs.subproj/PB.project create mode 100644 bootx.tproj/fs.subproj/cache.c create mode 100644 bootx.tproj/fs.subproj/ext2fs.c create mode 100644 bootx.tproj/fs.subproj/ext2fs.h create mode 100644 bootx.tproj/fs.subproj/ext2fs_bswap.c create mode 100644 bootx.tproj/fs.subproj/ext2fs_dinode.h create mode 100644 bootx.tproj/fs.subproj/ext2fs_dir.h create mode 100644 bootx.tproj/fs.subproj/fs.c create mode 100644 bootx.tproj/fs.subproj/hfs.c create mode 100644 bootx.tproj/fs.subproj/net.c create mode 100644 bootx.tproj/fs.subproj/ufs.c create mode 100644 bootx.tproj/fs.subproj/ufs_byteorder.c create mode 100644 bootx.tproj/fs.subproj/ufs_byteorder.h create mode 100644 bootx.tproj/include.subproj/Makefile create mode 100644 bootx.tproj/include.subproj/Makefile.postamble create mode 100644 bootx.tproj/include.subproj/Makefile.preamble create mode 100644 bootx.tproj/include.subproj/PB.project create mode 100644 bootx.tproj/include.subproj/boot_args.h create mode 100644 bootx.tproj/include.subproj/ci.h create mode 100644 bootx.tproj/include.subproj/device_tree.h create mode 100644 bootx.tproj/include.subproj/fs.h create mode 100644 bootx.tproj/include.subproj/libclite.h create mode 100644 bootx.tproj/include.subproj/sl.h create mode 100644 bootx.tproj/include.subproj/sl_words.h create mode 100644 bootx.tproj/libclite.subproj/Makefile create mode 100644 bootx.tproj/libclite.subproj/Makefile.postamble create mode 100644 bootx.tproj/libclite.subproj/Makefile.preamble create mode 100644 bootx.tproj/libclite.subproj/PB.project create mode 100644 bootx.tproj/libclite.subproj/bsearch.c create mode 100644 bootx.tproj/libclite.subproj/bswap.c create mode 100644 bootx.tproj/libclite.subproj/mem.c create mode 100644 bootx.tproj/libclite.subproj/prf.c create mode 100644 bootx.tproj/libclite.subproj/printf.c create mode 100644 bootx.tproj/libclite.subproj/sprintf.c create mode 100644 bootx.tproj/libclite.subproj/string.c create mode 100644 bootx.tproj/libclite.subproj/strtol.c create mode 100644 bootx.tproj/libclite.subproj/zalloc.c create mode 100644 bootx.tproj/sl.subproj/GetSymbolFromPEF.h create mode 100644 bootx.tproj/sl.subproj/Makefile create mode 100644 bootx.tproj/sl.subproj/Makefile.postamble create mode 100644 bootx.tproj/sl.subproj/Makefile.preamble create mode 100644 bootx.tproj/sl.subproj/PB.project create mode 100644 bootx.tproj/sl.subproj/PEFSupport.c create mode 100644 bootx.tproj/sl.subproj/bad_system.h create mode 100644 bootx.tproj/sl.subproj/clut.h create mode 100644 bootx.tproj/sl.subproj/device_tree.c create mode 100644 bootx.tproj/sl.subproj/display.c create mode 100644 bootx.tproj/sl.subproj/drivers.c create mode 100644 bootx.tproj/sl.subproj/elf.c create mode 100644 bootx.tproj/sl.subproj/elf.h create mode 100644 bootx.tproj/sl.subproj/happy_foot.h create mode 100644 bootx.tproj/sl.subproj/happy_mac.h create mode 100644 bootx.tproj/sl.subproj/images.h create mode 100644 bootx.tproj/sl.subproj/macho.c create mode 100644 bootx.tproj/sl.subproj/main.c create mode 100644 fcode-to-c.tproj/Makefile create mode 100644 fcode-to-c.tproj/Makefile.postamble create mode 100644 fcode-to-c.tproj/Makefile.preamble create mode 100644 fcode-to-c.tproj/PB.project create mode 100644 fcode-to-c.tproj/fcode-to-c.c create mode 100644 macho-to-xcoff.tproj/Makefile create mode 100644 macho-to-xcoff.tproj/Makefile.postamble create mode 100644 macho-to-xcoff.tproj/Makefile.preamble create mode 100644 macho-to-xcoff.tproj/PB.project create mode 100644 macho-to-xcoff.tproj/macho-to-xcoff.c diff --git a/Makefile b/Makefile new file mode 100644 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 index 0000000..411cde6 --- /dev/null +++ b/Makefile.postamble @@ -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 index 0000000..11f5837 --- /dev/null +++ b/Makefile.preamble @@ -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: <> +# 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 index 0000000..8d52710 --- /dev/null +++ b/PB.project @@ -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 index 0000000..597db30 --- /dev/null +++ b/bootx.tproj/Makefile @@ -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 index 0000000..2c133fe --- /dev/null +++ b/bootx.tproj/Makefile.postamble @@ -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 index 0000000..ca750ab --- /dev/null +++ b/bootx.tproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..d1eeb5f --- /dev/null +++ b/bootx.tproj/PB.project @@ -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 index 0000000..ce94a7a --- /dev/null +++ b/bootx.tproj/bootinfo.hdr @@ -0,0 +1,81 @@ + + +MacRISC + + +Boot Loader for Mac OS X. + + +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 + + +load-base +begin + dup 6 " </CHRP" $= if + 6 + dup 6 " -BOOT>" $= 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 + + + \ 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 index 0000000..2a684e2 --- /dev/null +++ b/bootx.tproj/ci.subproj/Control2.c @@ -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 index 0000000..4eca06a --- /dev/null +++ b/bootx.tproj/ci.subproj/MAC-PARTS.c @@ -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 index 0000000..411d072 --- /dev/null +++ b/bootx.tproj/ci.subproj/Makefile @@ -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 index 0000000..411cde6 --- /dev/null +++ b/bootx.tproj/ci.subproj/Makefile.postamble @@ -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 index 0000000..cfe786a --- /dev/null +++ b/bootx.tproj/ci.subproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..e4302ac --- /dev/null +++ b/bootx.tproj/ci.subproj/PB.project @@ -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 index 0000000..564260d --- /dev/null +++ b/bootx.tproj/ci.subproj/ci.c @@ -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 + +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 index 0000000..8e39804 --- /dev/null +++ b/bootx.tproj/ci.subproj/ci_io.c @@ -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 +#include +#include + +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 index 0000000..b259a8d --- /dev/null +++ b/bootx.tproj/ci.subproj/sl_words.c @@ -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 + +#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 index 0000000..d4691b6 --- /dev/null +++ b/bootx.tproj/fs.subproj/CaseTables.h @@ -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 index 0000000..24efaef --- /dev/null +++ b/bootx.tproj/fs.subproj/HFSCompare.c @@ -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 +#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 index 0000000..bcc0e14 --- /dev/null +++ b/bootx.tproj/fs.subproj/Makefile @@ -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 index 0000000..411cde6 --- /dev/null +++ b/bootx.tproj/fs.subproj/Makefile.postamble @@ -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 index 0000000..cfe786a --- /dev/null +++ b/bootx.tproj/fs.subproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..8c13e09 --- /dev/null +++ b/bootx.tproj/fs.subproj/PB.project @@ -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 index 0000000..35af072 --- /dev/null +++ b/bootx.tproj/fs.subproj/cache.c @@ -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 +#include + +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 index 0000000..ca3172e --- /dev/null +++ b/bootx.tproj/fs.subproj/ext2fs.c @@ -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 +#include + +#include + +#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 index 0000000..0cb9acb --- /dev/null +++ b/bootx.tproj/fs.subproj/ext2fs.h @@ -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 index 0000000..8699b65 --- /dev/null +++ b/bootx.tproj/fs.subproj/ext2fs_bswap.c @@ -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 + +#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 index 0000000..276254d --- /dev/null +++ b/bootx.tproj/fs.subproj/ext2fs_dinode.h @@ -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 index 0000000..30bf40f --- /dev/null +++ b/bootx.tproj/fs.subproj/ext2fs_dir.h @@ -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 index 0000000..9a236fc --- /dev/null +++ b/bootx.tproj/fs.subproj/fs.c @@ -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 + +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 index 0000000..e85e499 --- /dev/null +++ b/bootx.tproj/fs.subproj/hfs.c @@ -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 + +#if kMacOSXServer +#define _LONG_LONG +#include +#include +#include +#include +#define kBTIndexNode kIndexNode +#define BTHeaderRec HeaderRec +#define GetNodeType(node) (node->type) +#else +#define GetNodeType(node) (node->kind) +#include +#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) { + 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 index 0000000..161a057 --- /dev/null +++ b/bootx.tproj/fs.subproj/net.c @@ -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 +#include + +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 index 0000000..76d1741 --- /dev/null +++ b/bootx.tproj/fs.subproj/ufs.c @@ -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 +#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 index 0000000..426d0ab --- /dev/null +++ b/bootx.tproj/fs.subproj/ufs_byteorder.c @@ -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 + +#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 index 0000000..3bb6134 --- /dev/null +++ b/bootx.tproj/fs.subproj/ufs_byteorder.h @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include + +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 index 0000000..5f0a9e4 --- /dev/null +++ b/bootx.tproj/include.subproj/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 = 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 index 0000000..411cde6 --- /dev/null +++ b/bootx.tproj/include.subproj/Makefile.postamble @@ -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 index 0000000..cfe786a --- /dev/null +++ b/bootx.tproj/include.subproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..d564e6c --- /dev/null +++ b/bootx.tproj/include.subproj/PB.project @@ -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 index 0000000..36080aa --- /dev/null +++ b/bootx.tproj/include.subproj/boot_args.h @@ -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 index 0000000..8922e68 --- /dev/null +++ b/bootx.tproj/include.subproj/ci.h @@ -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 index 0000000..b842c1d --- /dev/null +++ b/bootx.tproj/include.subproj/device_tree.h @@ -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 index 0000000..01dbb70 --- /dev/null +++ b/bootx.tproj/include.subproj/fs.h @@ -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 index 0000000..bd1daeb --- /dev/null +++ b/bootx.tproj/include.subproj/libclite.h @@ -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 + +#include +#include + +// 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 index 0000000..ecaba85 --- /dev/null +++ b/bootx.tproj/include.subproj/sl.h @@ -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 + +#include +#include +#include +#include +#include + +// 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 index 0000000..ee2766b --- /dev/null +++ b/bootx.tproj/include.subproj/sl_words.h @@ -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 + +// 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 index 0000000..abd9a0d --- /dev/null +++ b/bootx.tproj/libclite.subproj/Makefile @@ -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 index 0000000..411cde6 --- /dev/null +++ b/bootx.tproj/libclite.subproj/Makefile.postamble @@ -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 index 0000000..cfe786a --- /dev/null +++ b/bootx.tproj/libclite.subproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..046c7a1 --- /dev/null +++ b/bootx.tproj/libclite.subproj/PB.project @@ -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 index 0000000..a9168a7 --- /dev/null +++ b/bootx.tproj/libclite.subproj/bsearch.c @@ -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 + +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 index 0000000..7aec0d7 --- /dev/null +++ b/bootx.tproj/libclite.subproj/bswap.c @@ -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 + +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 index 0000000..8f06ab2 --- /dev/null +++ b/bootx.tproj/libclite.subproj/mem.c @@ -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 +#import + + +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 index 0000000..b61effc --- /dev/null +++ b/bootx.tproj/libclite.subproj/prf.c @@ -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 + +#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 index 0000000..926cc27 --- /dev/null +++ b/bootx.tproj/libclite.subproj/printf.c @@ -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 + +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 index 0000000..f995f5f --- /dev/null +++ b/bootx.tproj/libclite.subproj/sprintf.c @@ -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 + +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 index 0000000..d2fb44c --- /dev/null +++ b/bootx.tproj/libclite.subproj/string.c @@ -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 index 0000000..2e19b42 --- /dev/null +++ b/bootx.tproj/libclite.subproj/strtol.c @@ -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 +#include + +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 index 0000000..96a9645 --- /dev/null +++ b/bootx.tproj/libclite.subproj/zalloc.c @@ -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 + +#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 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; i0 && (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; istart = z2->start; + z1->size = z2->size; + } +} + +static void +zcoalesce(void) +{ + int i; + for (i=0; i 9/20/94 TS Dump the globals! + <1> 9/6/94 TS first checked in + +*/ + +#ifndef __GETSYMBOLFROMPEF__ +#define __GETSYMBOLFROMPEF__ + +//#include + +#pragma options align=mac68k + +#include + +#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; /* */ +}; +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)<> +# 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 index 0000000..8c3674e --- /dev/null +++ b/bootx.tproj/sl.subproj/PB.project @@ -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 index 0000000..38066ca --- /dev/null +++ b/bootx.tproj/sl.subproj/PEFSupport.c @@ -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 +//#include +//#include + + +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<hashSlotTblSz)) + + (sizeof(LoaderExportChainEntry) * numExportSymbols)); + + exportChainEntryPtr = (LoaderExportChainEntryPtr)( (unsigned long)loaderHeaderPtr + + loaderHeaderPtr->slotTblOffset + + (sizeof(LoaderHashSlotEntry) * (1<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 index 0000000..5a1b500 --- /dev/null +++ b/bootx.tproj/sl.subproj/bad_system.h @@ -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 index 0000000..805d08e --- /dev/null +++ b/bootx.tproj/sl.subproj/clut.h @@ -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 index 0000000..8cbd4dc --- /dev/null +++ b/bootx.tproj/sl.subproj/device_tree.c @@ -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 +#include + + +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 index 0000000..ba03f92 --- /dev/null +++ b/bootx.tproj/sl.subproj/display.c @@ -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 + +#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", + ¤tPef, ¤tPefLen); + + 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 index 0000000..d98d696 --- /dev/null +++ b/bootx.tproj/sl.subproj/drivers.c @@ -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 + +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("\n", kXMLTagDict); + } +} + + +static void DumpTagKey(TagPtr tag, long depth) +{ + DumpSpaces(depth); + printf("<%s>%s\n", kXMLTagKey, tag->string, kXMLTagKey); + + DumpTag(tag->tag, depth); +} + + +static void DumpTagString(TagPtr tag, long depth) +{ + DumpSpaces(depth); + printf("<%s>%s\n", kXMLTagString, tag->string, kXMLTagString); +} + + +static void DumpTagInteger(TagPtr tag, long depth) +{ + DumpSpaces(depth); + printf("<%s>%x\n", kXMLTagInteger, tag->string, kXMLTagInteger); +} + + +static void DumpTagData(TagPtr tag, long depth) +{ + DumpSpaces(depth); + printf("<%s>%x\n", kXMLTagData, tag->string, kXMLTagData); +} + + +static void DumpTagDate(TagPtr tag, long depth) +{ + DumpSpaces(depth); + printf("<%s>%x\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("\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 index 0000000..9bdc1cf --- /dev/null +++ b/bootx.tproj/sl.subproj/elf.c @@ -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 + +#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 index 0000000..80c1e0e --- /dev/null +++ b/bootx.tproj/sl.subproj/elf.h @@ -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 index 0000000..cdb710f --- /dev/null +++ b/bootx.tproj/sl.subproj/happy_foot.h @@ -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 index 0000000..f7f9982 --- /dev/null +++ b/bootx.tproj/sl.subproj/happy_mac.h @@ -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 index 0000000..af3963e --- /dev/null +++ b/bootx.tproj/sl.subproj/images.h @@ -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 index 0000000..b2ef134 --- /dev/null +++ b/bootx.tproj/sl.subproj/macho.c @@ -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 +#include +#include + +#include + +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 index 0000000..c0ba230 --- /dev/null +++ b/bootx.tproj/sl.subproj/main.c @@ -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 + +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 index 0000000..1aa9d63 --- /dev/null +++ b/fcode-to-c.tproj/Makefile @@ -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 index 0000000..411cde6 --- /dev/null +++ b/fcode-to-c.tproj/Makefile.postamble @@ -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 index 0000000..c1624b4 --- /dev/null +++ b/fcode-to-c.tproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..1bbfef5 --- /dev/null +++ b/fcode-to-c.tproj/PB.project @@ -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 index 0000000..c566c38 --- /dev/null +++ b/fcode-to-c.tproj/fcode-to-c.c @@ -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 +#include +#include + +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 index 0000000..71b5d69 --- /dev/null +++ b/macho-to-xcoff.tproj/Makefile @@ -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 index 0000000..411cde6 --- /dev/null +++ b/macho-to-xcoff.tproj/Makefile.postamble @@ -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 index 0000000..c1624b4 --- /dev/null +++ b/macho-to-xcoff.tproj/Makefile.preamble @@ -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: <> +# 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 index 0000000..f399a0c --- /dev/null +++ b/macho-to-xcoff.tproj/PB.project @@ -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 index 0000000..009aad0 --- /dev/null +++ b/macho-to-xcoff.tproj/macho-to-xcoff.c @@ -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 +#include +#include +#include +#include + + +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); +} -- 2.45.2